0. 题目:
字符串翻转
1. 分析:
学习递归思想和方法。
2. 程序:
方法一:
#include <stdio.h> void reverseSentence(); int main() { printf("输入一个字符串(非中文): "); reverseSentence(); return 0; } void reverseSentence() { char c; scanf("%c", &c); if( c != '\n') { reverseSentence(); printf("%c",c); } }
【 解析】 这个程序非常简单巧妙:通过递归方法,不断读入当前的字符,直到字符串结束(读到回车符),然后逐次输出最近读入的字符,实现输出翻转的字符串。
方法二 :
#include <stdio.h> #include <string.h> int main() { char cInput[40]; printf("请输入字符串:"); scanf("%[^\n]s",cInput); int j=strlen(cInput); printf("strlen = %d\n",j); do{ printf("%c",cInput[j-1]); j--; } while(j); return 0; }
【 解析】 这个程序更容易理解。注意 scanf()会在遇到的第一个空白字符空格(blank)、制表符(tab)或者换行符(newline)处停止读取,使用 scanf("%[^\n]s",cInput) 可以设置只有在读入回车符时才终止读取。
3. 输入输出:
输入一个字符串(非中文): Hello world!
!dlrow olleH
0. 题目:
计算数组元素平均值
1. 分析:
使用 for 循环。
2. 程序:
#include <stdio.h> int main() { int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; int sum, loop; float avg; sum = avg = 0; for(loop = 0; loop < 10; loop++) { sum += array[loop]; } avg = (float)sum / loop; printf("平均值为 %.2f", avg); return 0; }
3. 输入输出:
平均值为 4.50
0. 题目:
输出数组
1. 分析:
使用 for 循环输出数组。
2. 程序:
#include <stdio.h> int main() { int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; int loop; for(loop = 0; loop < 10; loop++) { printf("%d ", array[loop]); } return 0; }
3. 输入输出:
1 2 3 4 5 6 7 8 9 0
0. 题目:
计算数组元素之和
1. 分析:
使用 for 循环。
2. 程序:
#include <stdio.h> int main() { int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; int sum=0, loop; for(loop = 9; loop >= 0; loop--) { sum = sum + array[loop]; } printf("数组元素的和为:%d", sum); return 0; }
3. 输入输出:
数组元素的和为:45
0. 题目:
查找数组元素中的最大值
1. 分析:
使用 for 循环。
2. 程序:
方法一:
#include <stdio.h> int main() { int array[10] = {3,2,1,4,7,6,5,8,0,9}; int loop, largest; largest = array[0]; for(loop=1; loop<10; loop++) { if( largest < array[loop] ) largest = array[loop]; } printf("数组的最大值为 %d", largest); return 0; }
方法二:
#include <stdio.h> int main() { int array[] = {3,2,1,4,7,6,5,8,0,9}; int loop, largest; for(loop=0; loop<10; loop++) largest=(array[loop] > largest)? array[loop] : largest; printf("数组的最大值为 %d", largest); return 0; }
3. 输入输出:
数组的最大值为 9
4. 解析:
条件运算符?: 是三元运算符,语法为:条件表达式?表达式1:表达式2。该操作首先求出条件表达式的值(bool类型),true 执行表达式1,flase 执行表达式2。
0. 题目:
查找数组元素中的最小值
1. 分析:
使用 for 循环。
2. 程序:
#include <stdio.h> int main() { int loop, nLen, nSmallest; int array[] = {3,2,1,4,7,6,5,8,0,9}; nLen = sizeof(array)/sizeof(array[0]); nSmallest = array[0]; for(loop = 1; loop < nLen; loop++) { if(nSmallest > array[loop]) nSmallest = array[loop]; } printf("数组的最小值为 %d", nSmallest); return 0; }
3. 输入输出:
数组的最小值为 0
4. 解析:
使用关键字 sizeof 获取数组长度:用 sizeof 可以获得数据类型或变量在内存中所占的字节数,也可以获得整个数组在内存中所占的字节数。因为数组中元素的类型相同,在内存中所占的字节数也相同,所以数组总的字节数除以一个元素所占的字节数就是数组的长度。数组 array 是 int 型,每个元素占 4 字节,长度为 10 的数组在内存中所占的字节数就是 40。
0. 题目:
将一个数组拆分为两个数组,一个为奇数数组,一个为偶数数组。
1. 分析:
使用 if...else...条件分支结构。
2. 程序:
#include <stdio.h> int main() { int array[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int even[10], odd[10]; int loop, e, d; e = d = 0; for(loop = 0; loop < 10; loop++) { if(array[loop]%2 == 0) { even[e] = array[loop]; e++; } else { odd[d] = array[loop]; d++; } } printf(" 原始数组 --> "); for(loop = 0; loop < 10; loop++) printf(" %d", array[loop]); printf("\n 偶数 --> "); for(loop = 0; loop < e; loop++) printf(" %d", even[loop]); printf("\n 奇数 --> "); for(loop = 0; loop < d; loop++) printf(" %d", odd[loop]); return 0; }
3. 输入输出:
原始数组 --> 0 1 2 3 4 5 6 7 8 9
偶数 --> 0 2 4 6 8
奇数 --> 1 3 5 7 9
0. 题目:
将一个数组复制给另外一个数组
1. 分析:
数组复制属于值传递,复制的数组具有新的地址,复制后原数组与新数组的变化互不影响。
2. 程序:
#include <stdio.h> int main() { int original[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; int copied[10]; int loop; for(loop = 0; loop < 10; loop++) { copied[loop] = original[loop]; } printf("原数组 -> 拷贝数组 \n"); for(loop = 0; loop < 10; loop++) { printf("%2d\t%2d\n", original[loop], copied[loop]); } return 0; }
3. 输入输出:
原数组 -> 拷贝数组
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
0 0
0. 题目:
计算数组元素之和
1. 分析:
标准差(Standard Deviation)也称为标准偏差,反映一个数据集的离散程度。
2. 程序:
#include <stdio.h> #include <math.h> float calSD(float data[],int nLen); int main() { int i,nLen; float data[100]; printf("请输入数组长度: "); scanf("%d", &nLen); for(i=0; i < nLen; ++i) { printf("输入第 %d 个元素: ", i+1); scanf("%f", &data[i]); } printf("\n标准偏差 = %.6f", calSD(data,nLen)); return 0; } float calSD(float data[],int nLen) { int i; float sum, mean, standardDeviation; sum = 0.0; for(i=0; i<nLen; ++i) sum += data[i]; mean = sum/nLen; standardDeviation = 0.0; for(i=0; i<nLen; ++i) standardDeviation += pow(data[i] - mean, 2); standardDeviation /= nLen; return sqrt(standardDeviation); }
3. 输入输出:
请输入数组长度: 10
输入第 1 个元素: 1
输入第 2 个元素: 2
输入第 3 个元素: 3
输入第 4 个元素: 4
输入第 5 个元素: 5
输入第 6 个元素: 6
输入第 7 个元素: 7
输入第 8 个元素: 8
输入第 9 个元素: 9
输入第 10 个元素: 10
标准偏差 = 2.872281
0. 题目:
使用多维数组将两个矩阵相加。
1. 分析:
练习使用 for 循环嵌套,多维数组的表达。
2. 程序:
#include <stdio.h> int main() { int rows, cols, a[100][100], b[100][100], sum[100][100], i, j; printf("输入行数 ( 1 ~ 100): "); scanf("%d", &rows); printf("输入列数 ( 1 ~ 100): "); scanf("%d", &cols); printf("\n输入第一个数组的元素:\n"); for(i=0; i<rows; ++i) for(j=0; j<cols; ++j) { printf("输入元素 a%d%d: ",i+1,j+1); scanf("%d",&a[i][j]); } printf("输入第二个数组的元素:\n"); for(i=0; i<rows; ++i) for(j=0; j<cols; ++j) { printf("输入元素 b%d%d: ",i+1, j+1); scanf("%d", &b[i][j]); } // 相加 for(i=0;i<rows;++i) for(j=0;j<cols;++j) sum[i][j] = a[i][j] + b[i][j]; // 显示结果 printf("\n二个数组相加结果: \n\n"); for(i=0;i<rows;++i) { for(j=0;j<cols;++j) printf("%d\t",sum[i][j]); printf("\n\n"); } return 0; }
3. 输入输出:
输入行数 ( 1 ~ 100): 2
输入列数 ( 1 ~ 100): 3输入第一个数组的元素:
输入元素 a11: 2
输入元素 a12: 3
输入元素 a13: 4
输入元素 a21: 5
输入元素 a22: 2
输入元素 a23: 3
输入第二个数组的元素:
输入元素 b11: -4
输入元素 b12: 5
输入元素 b13: 3
输入元素 b21: 5
输入元素 b22: 6
输入元素 b23: 3二个数组相加结果:
-2 8 7
10 8 6
版权说明:
题目和例程 源于 菜鸟教程,作者重新编写了程序、注释和算例,并增加了难点分析。