冒泡排序
/**
* 冒泡排序
*/
void bubbleSort(int * arr,int len) {
int temp = 0;
for (int i = 0; i < len; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
选择排序
/**
* 选择排序
*/
void SelectSort(int * arr,int len) {
for (int i = 0; i < len; ++i) {
int minIndex = i;
// 假定最小的第一个数
int min = arr[i];
for (int j = i + 1; j < len; ++j) {
// 假定的不是最小
if (min > arr[j]) {
// 更新最小值
min = arr[j];
minIndex = j;
}
}
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = min;
}
}
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
}
插入排序
/**
* 插入排序
*/
void insertSort(int * arr,int len) {
for (int i = 0; i < len; ++i) {
int insertValue = arr[i];
int insertIndex = i - 1;
while (insertIndex >= 0 && insertValue < arr[insertIndex]) {
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
if (insertIndex + 1 != i) {
arr[insertIndex + 1] = insertValue;
}
}
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main(void) {
int arr[5] = {3, 9, -1, 10, 2};
int len = sizeof(arr) / sizeof(arr[0]);
insertSort(arr,len);
bubbleSort(arr,len);
SelectSort(arr,len);
return 0;
}
二维数组计算成绩
void main() {
int l;
int i, j;
int v[3];
int s;
float sum;
int score[5][3] = {80, 75, 92, 61, 65, 71, 59, 63, 70, 85, 87, 90, 76, 77, 85};
for (i = 0; i < 3; i++) {
for (j = 0; j < 5; j++) {
s = s + score[j][i];
}
v[i] = s / 5;
s = 0;
}
l = (v[0] + v[1] + v[2]) / 3;
printf("Math:%d\nC:%d\nENG:%d\n", v[0], v[1], v[2]);
printf("total:%d\n", l);
int a = score[0][0] + score[0][1] + score[0][2];
printf("%d\n", a);
for (i = 0; i < 5; i++) {
for (j = 0; j < 3; j++) {
sum += score[i][j];
}
printf("第%d学生平均成绩是%f\n", i + 1, sum / 3);
sum = 0;
}
}
求二维数组(三行三列的对角线元素的和)
/**
* 求二维数组(三行三列的对角线元素的和) 00 11 22 02 11 20
*/
void test01() {
int arr[3][3] = {{80, 75, 92},
{71, 59, 63},
{87, 90, 76}};
int row = sizeof(arr) / sizeof(arr[0]);
int col = sizeof(arr[0]) / sizeof(arr[0][0]);
int sum = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if ((i == j) || (i + j == row - 1)) {
if (i == 1 && j == 1) {
sum += arr[i][j] * 2;
} else {
sum += arr[i][j];
}
}
}
}
printf("对角线的和为:%d\n", sum);
}
求二位数组(五行五列)中最大的元素及其行列号
/**
* 求二位数组(五行五列)中最大的元素及其行列号
*/
void test02() {
int arr[5][5] = {{80, 75, 92, 61, 65},
{71, 59, 63, 70, 85},
{87, 90, 76, 77, 85},
{66, 44, 58, 35, 69},
{182, 414, 158, 135, 69}};
// 定义max
int max = 0;
int hang, lie;
int row = sizeof(arr) / sizeof(arr[0]);
int col = sizeof(arr[0]) / sizeof(arr[0][0]);
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; ++j) {
if (max < arr[i][j]) {
max = arr[i][j];
hang = i;
lie = j;
}
}
}
printf("最大的元素是%d\n", max);
printf("位置是arr[%d][%d]\n", hang, lie);
}
打印杨辉三角
/**
* 打印杨辉三角
*/
void test03() {
int arr[10][10];
for (int i = 0; i < 10; i++) {
for (int j = 0; j < i + 1; j++) {
if (j == 0 || j == i) {
arr[i][j] = 1;
} else {
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
}
for (int i = 0; i < 10; i++) {
for (int j = 0; j < i + 1; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
找出一个矩阵中的鞍点,即该位置元素的该行上最大,该列上最小,一个矩阵可能没有鞍点,如果没有输出对应的信息,如果有,则输出鞍点位置和值
/**
* 找出一个矩阵中的鞍点,即该位置元素的该行上最大,该列上最小,一个矩阵可能没有鞍点,如果没有输出对应的信息,如果有,则输出鞍点位置和值
*/
void test04() {
int arr[3][3] = {{15, 30, 92},
{71, 59, 100},
{87, 90, 120}};
int row = sizeof(arr) / sizeof(arr[0]);
int col = sizeof(arr[0]) / sizeof(arr[0][0]);
// 记录坐标
int a = 0;
int b = 0;
int num;
// 行最大
int max = 0;
// 列最小
int min = 0;
for (int i = 0; i < row; i++) {
max = arr[i][0];
for (int j = 0; j < col; j++) {
if (arr[i][j] > max) { // 行内最大
max = arr[i][j];
b = j; //i 行最大的数在j列,那么现在去第j列找最小的数,如果找到的数的行数为i,便是;
}
}
min = arr[i][b]; // 设目前最小为i行b列
a = i; // 假设
for (int k = 0; k < row; k++) {
if (arr[k][b] < min) { // 列内最小
min = arr[k][b];
a = k; // 如果有更小的,那么a就变化
}
}
if (a == i) {
num = 0;
printf("本数组的鞍点为:arr[%d][%d] = %d\n", a, b, min);
}
}
if (num) {
printf("本数组不存在鞍点");
}
}
字符练习
void test() {
char str[30];
scanf("%s", str);
printf("%s", str);
}
void test02() {
char c = 'a';
char t[] = "you and me";
int n, k, j;
n = strlen(t);
for (k = 0; k < n; k++)
if (t[k] == c) {
j = k;
break;
} else j = -1;
printf("%d", j);
}
void test03() {
char a[4][10] = {"11", "22", "33", "44"};
puts(strcat(a[1], a[3]));
puts(strcpy(a[0], a[2]));
char str[2][10] = {"abc", "ABC"};
printf("%c\n", str[1]);
printf("%c\n", str[0]);
printf("%d\n", strcmp(str[1], str[0]));
printf("%d\n", strcmp(strlwr(str[1]), str[0]));
}
void test04() {
char s[3][20] = {"2345", "123456", "2347"};
int i, k;
for (k = 0, i = 1; i < 3; i++) {
printf("%s\n", s[k]);
printf("%s\n", s[i]);
if ((strcmp(s[k], s[i])) < 0) {
k = i;
}
}
puts(s[k]);
}
编写一个程序,将字符数组a中的全部字符复制到字符数组b中。不要使用strcpy函数。
/**
* 1.编写一个程序,将字符数组a中的全部字符复制到字符数组b中。不要使用strcpy函数。
*/
void test06() {
char a[50] = {'1', '3', '5', '6', '8'};
char b[50] = {};
for (int i = 0; i < strlen(a); ++i) {
b[i] = a[i];
}
puts(b);
}
有5个国家名,要求按字母先后顺序排列,并按序输出。
/**
* 交换字符串
* @param c1 字符串1
* @param c2 字符串2
*/
void swap(char *c1, char *c2) {
char temp[20];
strcpy(temp, c1);
strcpy(c1, c2);
strcpy(c2, temp);
}
/**
* 2. 有5个国家名,要求按字母先后顺序排列,并按序输出。
*/
void test07() {
char arr[5][10];
for (int i = 0; i < 5; ++i) {
gets(arr[i]);
}
printf("排序前数组\n");
for (int m = 0; m < 5; ++m) {
puts(arr[m]);
}
// 排序 冒泡排序
for (int i = 0; i < 4; ++i) {
for (int j = 1; j < 4 - i; ++j) {
// 比较字符串
if (strcmp(arr[j], arr[j - 1]) < 0) {
swap(arr[j], arr[j - 1]);
}
}
}
printf("排序后数组\n");
for (int k = 0; k < 5; ++k) {
puts(arr[k]);
}
}
有一行文字,要求删去某个字符,此行文字和要删的字符均由键盘输入
/**
*3. 有一行文字,要求删去某个字符,此行文字和要删的字符均由键盘输入
*/
void test08() {
int i, j, flag = 1;
char str[80], c;
printf("请输入一行字符:\n");
gets(str);
printf("请输入要删出的字符:\n");
scanf("%c", &c);
printf("删除之前: \n");
puts(str);
while (flag) {
flag = 0;
for (i = 0; str[i] != '\0'; i++)
if (str[i] == c) {
flag = 1;
break;
}
for (j = i + 1; str[j] != '\0'; j++) str[j - 1] = str[j];
str[j - 1] = str[j];
}
printf("删除之后: \n");
puts(str);
}
给定三个数字从小到大输出(指针法)
#include "stdio.h"
void compare(int *a, int *b, int *c);
int main(void) {
int a, b, c;
printf("输入三个整数(空格分割):");
scanf("%d %d %d", &a, &b, &c);
compare(&a, &b, &c);
printf("%d %d %d", a,b,c);
return 0;
}
void compare(int *a, int *b, int *c) {
int temp = 0;
if (*a > *b) {
temp = *b;
*b = *a;
*a = temp;
} else if (*a > *c) {
temp = *c;
*c = *a;
*a = temp;
} else if (*b > *c) {
temp = *c;
*c = *b;
*b = temp;
}
}
判断是否为素数
#include "stdio.h"
int isPrime(int *n);
int main(void) {
int a;
printf("输入一个数:\n");
scanf("%d", &a);
if (isPrime(&a)) {
printf("是素数");
} else {
printf("不是素数");
}
return 0;
}
int isPrime(int *n) {
int count = 0;
for (int i = 1; i <= *n; i++) {
if (*n % i == 0) {
count++;
}
}
if (count == 2) {
return 1;
} else {
return 0;
}
}
求最大公约数
#include "stdio.h"
int GYS(int *m, int *n);
int main(void) {
int a, b, c;
printf("输入两个数:\n");
scanf("%d %d", &b,&c);
printf("最大公约数为%d",GYS(&b,&c));
return 0;
}
int GYS(int *m, int *n) {
while (*n != 0) {
int temp = *m % *n;
*m = *n;
*n = temp;
}
return *m;
}
求n的阶乘
#include "stdio.h"
int factorial(int a);
int main(void) {
int a;
printf("输入一个数:\n");
scanf("%d", &a);
printf("%d", factorial(a));
return 0;
}
/**
* 阶乘
* @param a 数
* @return 结果
*/
int factorial(int a) {
if (a == 1) {
return 1;
}
return a * factorial(a - 1);
}
求幂指数
#include "stdio.h"
#include "math.h"
int CountX(int x, int n);
int main(void) {
printf("%d", CountX(1, 2));
return 0;
}
/**
* 求幂指数
* @param x 底数
* @param n 次方
* @return 结果
*/
int CountX(int x, int n) {
if (n == 0) {
return 1;
} else if (n == 1) {
return x;
} else {
return x * pow(x, n - 1);
}
}
将数组a中的n个整数按相反顺序存放(用指针实现)
#include "stdio.h"
#include "string.h"
void reserve(int *arr,int n);
int main(void) {
int arr[5] = {0, 1, 2, 3, 4};
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
int n=sizeof (arr)/sizeof (arr[0]);
reserve(arr,n);
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
return 0;
}
void reserve(int *arr,int n) {
int *start;
int *end;
start = &arr[0];
end = &arr[n-1];
while (start < end) {
int temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
对若干个字符串排序(用指针实现)
#include "stdio.h"
#include "string.h"
void sort(char *arr[], int n);
void reserve(int *arr,int n);
print(char *arr[], int n);
int main(void) {
char *arr[] = {"Bat", "ZFD", "EXP"};
sort(arr, 3);
print(arr, 3);
return 0;
}
void sort(char *arr[], int n) {
char *temp;
for (int i = 0; i < n - 1; ++i) {
for (int j = i + 1; j < n; ++j) {
if (strcmp(arr[i], arr[j]) > 0) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
print(char *arr[], int n) {
for (int i = 0; i < n; ++i) {
printf("%s", arr[i]);
}
}
// 第二种写法
print2(char *arr[], int n) {
int *p;
p = arr[0];
for (int i = 0; i < n; i++) {
p = *(arr + i);
printf("%s ", p);
}
}
结构体5名学生,找出最高分和最低分学生信息
#include<stdio.h>
#include<stdlib.h>
struct student {
//定义结构体成员
int num; //学号
char name[20]; //姓名
int score; //成绩
};
void bubbleSort(struct student stu[5], int len) {
int temp = 0;
for (int i = 0; i < len; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (stu[j].score > stu[j + 1].score) {
temp = stu[j].score;
stu[j].score = stu[j + 1].score;
stu[j + 1].score = temp;
}
}
}
for (int i = 0; i < len; i++) {
printf("%d ", stu[i].score);
}
printf("\n");
}
int main() {
int a, b;
struct student stu[5] =
{
{1, "张三", 110},
{2, "李四", 120},
{3, "王五", 140},
{4, "赵六", 105},
{5, "田七", 90}
}; //声明结构体类型数组
int maxScore = stu[0].score;
int minScore = stu[0].score;
for (int i = 1; i < 5; i++) {
if (stu[i].score > maxScore) {
maxScore = stu[i].score; //记录最高成绩
a = i; //记录最高成绩下标
}
if (stu[i].score < minScore) {
minScore = stu[i].score;//记录最低成绩
b = i; //记录最低成绩下标
}
}
for (int i = 0; i < 5; i++) {
printf("学号:%d 姓名:%s 成绩:%5.1d \n", stu[i].num, stu[i].name, stu[i].score);
}
bubbleSort(stu,5);
printf("最高分是:%5.1d\n", stu[4].score); //输出最高成绩
printf("最高分学生的学号:%d\n", stu[4].num); //输出最高成绩的学号
printf("最高分学生的姓名:%s\n", stu[4].name); //输出最高成绩的下标
printf("最低分是:%5.1d\n", stu[0].score); //输出最高成绩
printf("最低分学生的学号:%d\n", stu[0].num); //输出最高成绩的学号
printf("最低分学生的姓名:%s\n", stu[0].name); //输出最高成绩的下标
/* printf("最高分是:%5.1d\n", maxScore); //输出最高成绩
printf("最高分学生的学号:%d\n", stu[a].num); //输出最高成绩的学号
printf("最高分学生的姓名:%s\n", stu[a].name); //输出最高成绩的下标
printf("最低分是:%5.1d\n", minScore); //输出最高成绩
printf("最低分学生的学号:%d\n", stu[b].num); //输出最高成绩的学号
printf("最低分学生的姓名:%s\n", stu[b].name); //输出最高成绩的下标*/
return 0;
}