C语言练习题(持续更新)
Posted 康小庄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言练习题(持续更新)相关的知识,希望对你有一定的参考价值。
冒泡排序
/**
* 冒泡排序
*/
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]);
### 插入排序
```c
/**
* 插入排序
*/
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中的全部字符复制到字符数
以上是关于C语言练习题(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章
C语言试题七十九之请编写函数实现自然底数 e=2.718281828