西北大学C语言复习题库.pdf

上传人:s****u 文档编号:12811098 上传时间:2020-05-25 格式:PDF 页数:28 大小:1.22MB
返回 下载 相关 举报
西北大学C语言复习题库.pdf_第1页
第1页 / 共28页
西北大学C语言复习题库.pdf_第2页
第2页 / 共28页
西北大学C语言复习题库.pdf_第3页
第3页 / 共28页
点击查看更多>>
资源描述
C 语言程序经典习题 马阳(ma yang) 最后更新 2014 年12 月22 日 使用说明 为 了 能 让 在 校 学 生 更 好 的 学 习C 语 言 , 作 者 以 西 北 大 学2001 年3 月19 日 匿 名 作 者 的C 语 言 复 习 题 为 基 础 进 行 了 大 幅 度 的 修 订 , 优 化 了 大 量 代 码 , 提 供 更 优 的 算 法 , 调 整 了 习 题 的 顺 序 , 参 考代码确保扣题 。 收 录 大 量 经 典C 语 言 习 题 , 所 有 代 码 经 过 精 心 编 写 , 编 码 规 范 良 好 , 适 合 读 者 反 复 揣 摩 、 模 仿 。 全 书 的 代 码 , 使 用C99 的 编 写 , 并 在GCC 4.8.1 上 测 试 通 过 。 本 书 中 , 为 了 缩 短 代 码 , 与 课 本 中 的 工 程 规 范 略 有 不 同 , 大 量 使 用 逗 号 表 达 式 , 不 需 要 检 查 内 部 函 数 入 口 参 数 的 有 效 性 。 所 有 主函数返回类型为int , 正常返回值为0 。 由 于 作 者 编 写 时 间 仓 促 , 能 力 有 限 , 不 当 和 疏 忽 之 处 在 所 难 免 , 望 广 大 读 者 批 评 指 正 。 若 需 要 向题库添加更好的习题 , 请与作者联系 。 本书非商业使用 。 如需商用 , 请联系作者 。目录 1 目录 1 从键盘输入两个整数 , 输出其和 、 差 、 积和商 1 2 用scanf() 函数输入三个整数 , 输出其中不大不小的数 1 3 输入三个字符 , 对这三个字符各加整数1 后输出 1 4 利用海伦公式计算三角形面积 2 5 输入若干学生一门功课的成绩 , 统计各分段的人数 2 6 输入一个整数 , 判断它能否被3 、5 、7 整除 , 并输出按要求输出信息 2 7 输出英文星期名 3 8 将整数的每位数字转换为英文 3 9 输出5 分制成绩 4 10 给出年 、 月 、 日 , 计算出该日是该年的第几天 4 11 求分数序列: 1 2 ; 2 3 ; 3 5 ; 5 8 ; 8 13 ;: 前20 项的和 5 12 用近似公式求自然对数的底e 的值 5 13 计算1!+2!+3!+ :+10! 的值并输出 6 14 计算1!+3!+5!+7!+9!+11! 的值并输出 6 15 统计输入数字个数 6 16 输入正整数 , 判断是否既是5 又是7 的整数倍数 7 17 求S(a) = a+ aa+ aaa+ aaaa+ aaaaa 的值 7 18 abc+ cba = 1333 7 19 输出1 100 之间能被9 整除余2 的数 8 20 输出0 999 之间的所有“水仙花数” 8 21 输出1000 以内完数 8 22 寻找1 99 之间的同构数 9 23 求3 50 之间所有素数之和 , 用子函数判断是否为素数 9 24 从键盘输入两个正整数 , 输出其最大公约数和最小公倍数 10 25 编写函数 , 求一个不超过五位数的十进制整数各位数值的和 102 目录 26 换零钱问题 11 27 编程输出如下图形(不能使用printf 语句) 11 28 输出杨辉三角形的前十行 12 29 输出乘法口诀表 12 30 输入任意5 个数在数组中 , 请按格式打印如下方阵 13 31 输入5 对整数 , 请输出每对数中较大者 13 32 将一个3 3 矩阵转置(行列互换)后输出 13 33 求一个3 3 矩阵的最大和最小元素及下标 14 34 求一个3 3 矩阵的对角线元素之和 14 35 求一个一维数组的最大值 、 最小值和平均值(主函数调用并输出) 15 36 将n 个整数按升序排序重新放到原数组中 , 操作时不得另开辟数组 15 37 编写函数 , 在一维数组中查找元素 16 38 在有序数组中寻找元素 16 39 在有序数组中插入元素 17 40 编写函数 , 给定一个数 , 删除数组中与之相等的元素 , 返回值为删除后数组元素个数 17 41 数列元素奇数降序排列 , 偶数升序排列 18 42 A 数组有8 个元素 , 从第6 个元素开始将数组后三个元素移到数组开头 18 43 字符串逆序输出 19 44 编写函数 , 实现字符串逆序 19 45 不用strcpy() 函数 , 实现两个字符串的复制 19 46 编写函数 , 从指定位置复制字符串 20 47 不使用库函数实现字符串特定条件的连接 20 48 编写函数将一个字符串中每一个单词的每一个字母转换为大写 20 49 从键盘输入10 个数 , 用指针实现将最小的数与第一个数对换 , 最大的数与最后一个数对换 21 50 在主函数中输入三个数 , 在子函数中用指针将三个数排序 21 51 输入三个字符串 , 按由小到大的顺序输出(用字符指针实现) 22目录 3 52 输入6 名学生的5 们成绩 , 分别统计每个学生的平均成绩 22 53 有10 名 学 生 , 每 位 学 生 有 四 门 功 课 。 输 出 平 均 成 绩 、 总 分 最 高 和 最 低 的 两 位 学 生 所 有 课 程 的 成绩 23 54 从指定位置开始的n 个数按逆序重新排列并输出新的完整序列 24C 语言程序经典习题 Page 1 of 24 1 从键盘输入两个整数 , 输出其和 、 差 、 积和商 1 #include 2 int main()f 3 int a, b; 4 scanf(%d%d, 5 printf(%d + %d = %dnn, a, b, a+b); 6 printf(%d %d = %dnn, a, b, a b); 7 printf(%d %d = %ldnn, a, b, (long)a b); / 确保不同环境数据尽可能不会溢出 8 if (b!=0) printf(%d / %d = %.2fnn, a, b, (float)a/b); / 实型数除法 9 else printf(%f / %f = infinitynn, a, b); 10 return 0; 11 g 2 用scanf() 函数输入三个整数 , 输出其中不大不小的数 要求输出宽度为五位 。 1 #include 2 int findMid(int i , int j , int k)f /mid = sum - max - min 3 return i+j+k (ij?(ik?i :k):( jk?j :k) (ij?(ik?i :k):( j %dnn, a10); 15 return 0; 16 g 6 输入一个整数 , 判断它能否被3 、5 、7 整除 , 并输出按要求输出信 息 1. 能同时被3 、5 、7 整除 2. 能被其中两个数(说明哪两个数)整除 3. 只能被其中一个整除(说明哪个数) 4. 不能被3 、5 、7 任何一个整除C 语言程序经典习题 Page 3 of 24 1 #include 2 int main()f 3 int n, a, b, c; 4 a=b=c=0; 5 scanf(%d, 6 if (n%3 = 0) a+; 7 if (n%5 = 0) b+; 8 if (n%7 = 0) c+; 9 switch(a+b+c)f 10 case 3: printf(1)nn);break; 11 case 2: printf(2) ); 12 if (a) printf(3 ); 13 if (b) printf(5 ); 14 if (c) printf(7 ); 15 printf(nn);break; 16 case 1: printf(1) ); 17 if (a) printf(3 ); 18 if (b) printf(5 ); 19 if (c) printf(7 ); 20 printf(nn);break; 21 case 0: printf(4)nn);break; 22 g 23 return 0; 24 g 7 输出英文星期名 编写程序实现如下功能: 输入1 、2 、3 、4 、5 、6 、7 (分别对应星期一至星期日) 中的任何一个 数 , 便能输出与之对应的英文名称 。 如输入1 , 则输出Monday 。 1 #include 2 int main()f 3 char day; / 节约空间 4 day=getchar (); 5 switch(day)f 6 case 1: printf(Mondaynn);break; 7 case 2: printf(Tuesdaynn);break; 8 case 3: printf(Wedenesdaynn);break; 9 case 4: printf(Thursdaynn);break; 10 case 5: printf(Fridaynn);break; 11 case 6: printf(Saturdaynn);break; 12 case 7: printf(Sundaynn);break; 13 default : printf(Error!nn); 14 g 15 return 0; 16 g 8 将整数的每位数字转换为英文 例如:输入1024 , 输出One Zero Two Four 。Page 4 of 24 西北大学科技与创业协会 1 #include 2 #include 3 int main()f 4 char s 11; / 录入数字 5 int i , l ; 6 gets(s ); 7 l=strlen(s ); 8 for(i=0;i %d day(s)nn, yyyy, mm, dd, day(yyyy, mm, dd); 25 return 0; 26 g 11 求分数序列: 1 2 ; 2 3 ; 3 5 ; 5 8 ; 8 13 ;: 前20 项的和 1 #include 2 int main()f 3 float t , sum=0; 4 int i=1, j=2, count=1; 5 dof 6 sum+=(float)i/j ; / 实型数除法 ! 7 j=i+j , i=j i ; / 更新分子和分母值 8 gwhile(count+=1e 7)f /oat 类型7 位有效数字 6 t /= i+; /t=1/i!Page 6 of 24 西北大学科技与创业协会 7 e += t; 8 g 9 printf(e = %fnn, e); 10 return 0; 11 g 13 计算1!+2!+3!+ :+10! 的值并输出 1 #include 2 int main()f 3 int i , t; 4 long sum=0; / 确保任何环境数据不会溢出 5 for(i=t=1;i=10;i+)f 6 t = i ; /t 表示i! 7 sum += t; 8 g 9 printf(sum = %ldnn, sum); 10 return 0; 11 g 14 计算1!+3!+5!+7!+9!+11! 的值并输出 1 #include 2 #define N 11 3 #define M 2 4 int main()f 5 int i , j , t=1,sum=1; 6 for(i=3;i=N; i+=M)f 7 for(j=i (M 1);j=0 / 统计个数 8 g 9 for(i=0;i %dnn, i , a i ); 11 return 0; 12 g 16 输入正整数 , 判断是否既是5 又是7 的整数倍数 若是则输出yes , 否则输出no 。 1 #include 2 void mod 5and7(int n)f 3 if (n%5 jj n%7) printf(Nonn); 4 else printf(Yesnn); 5 g 6 int main()f 7 int n; 8 scanf(%d, 9 mod 5and7(n); 10 return 0; 11 g 17 求S(a) = a+ aa+ aaa+ aaaa+ aaaaa 的值 其中a 是一个数字 , 例如:2+22+222+2222+22222 1 #include 2 int main()f 3 int i , a, t; 4 long sum=0; / 确保在不同环境数据不溢出 5 scanf(%d, 6 for(i=1,t=a;i=5;i+)f 7 sum += t; 8 t = 10 t + a; 9 g 10 printf(S = %ldnn, sum); 11 return 0; 12 g 18 abc+ cba = 1333 其中a 、b 、c 均为一位数 , 例如:617+716=1333 。 输出符合这一规律a 、b 、c 的结果 。 1 #include 2 int main()f 3 int i , j , k; 4 for(i=1;i=9;i+)Page 8 of 24 西北大学科技与创业协会 5 for(j=0;j=i ;k ) / 去重 7 if (101 i+20 j+101 k=1333) 8 printf(%d + %d = 1333nn, 100 i+10 j+k, 100 k+10 j+k); 9 return 0; 10 g 19 输出1 100 之间能被9 整除余2 的数 1 #include 2 int main()f 3 int i ; 4 for(i=1;i=100;i+) 5 if (i%9=2) 6 printf(%dnn, i ); 7 return 0; 8 g 20 输出0 999 之间的所有“水仙花数” “水仙花数” 是值一个三位数 , 其各位数字的立方和恰好等于该数本身 , 如:153 = 1 3 +5 3 +3 3 。 1 #include 2 int main()f 3 int i , j , k; 4 for(i=1;i=9;i+) 5 for(j=0;j=9;j+) 6 for(k=0;k=9;k+) 7 if (i i i + j j j + k k k = 100 i+10 j+k) 8 printf(%d%d%dnn, i , j , k); 9 return 0; 10 g 21 输出1000 以内完数 一 个 数 如 果 恰 好 等 于 它 的 因 子 之 和 , 这 个 数 就 称 为 “完 数” 。 例 如:6 的 因 子 为1 、2 、3 , 而6 = 1+2+3 , 因此6 是“完数” 。 编写程序找出1000 以内的所有完数 , 并按下列个数输出其因子: 6 its factors are 1,2,3 1 #include 2 int main() 3 f 4 int i ,j ,k,sum,count; 5 for(i=1;i=1000;i+) 6 fC 语言程序经典习题 Page 9 of 24 7 for(j=1,sum=count=0;j=i /2;j+) 8 if (i%j=0) sum+=j ,count+; 9 if (sum = i) 10 f 11 printf(%d its factors are ,sum); 12 for(j=1,k=1;j=i /2;j+) 13 if (i%j=0) / 控制最后一个逗号 14 f 15 if (k+!=count) printf(%d,j ); 16 else printf(%dnn, j ); 17 g 18 g 19 g 20 return 0; 21 g 22 寻找1 99 之间的同构数 同构数:它出现在平方数的右边 。 如5 是25 右边的数 ,25 是625 右边的数 。 1 #include 2 int find(int n)f 3 int base=1, m=n; 4 while(n) 5 n/=10, base =10; / 计算被除数 6 if (m m%base=m) return 1; 7 return 0; 8 g 9 int main()f 10 int i ; 11 for(i=1;i %dnn, i , i i ); 14 return 0; 15 g 23 求3 50 之间所有素数之和 , 用子函数判断是否为素数 1 #include 2 int isPrime(int n)f 3 int i ; 4 for(i=2;i i=n; i+) / 表达式2 进行优化 5 if (n%i=0) 6 return 0; / 能被整除 , 不是质数 7 return 1; 8 g 9 int main()f 10 int i , sum=0; 11 for(i=3;i=50;i+) 12 if (isPrime(i ) 13 sum+=i ;Page 10 of 24 西北大学科技与创业协会 14 printf(sum = %dnn, sum); 15 return 0; 16 g 24 从键盘输入两个正整数 , 输出其最大公约数和最小公倍数 1 / 方法1 辗转相除法 2 #include 3 int main()f 4 int a, b, t , r , p; 5 scanf(%d%d, 6 if (ab) t=a,a=b,b=t; 7 p=a b; / 存储成绩 8 while(b)f 9 r=a%b; 10 a=b; 11 b=r; 12 g 13 printf(GCD = %d, LCM = %d, a, p/a); /a*b=GCD*LCM 14 return 0; 15 g 1 / 方法2 根据定义 , 效率低 2 #include 3 int main()f 4 int a, b, t , i , gcd; 5 scanf(%d%d, 6 if (ab) t=a,a=b,b=t; 7 for(i=1;i %d, n, f(n); 14 return 0; 15 g 26 换零钱问题 有 人 想 将 一 张 面 值100 院 的 人 民 币 换 成5 元 、1 元 和0.5 院 面 值 的 零 钱100 张 , 以 上 三 种 面 值 的 零 钱 至少有一张 , 问共有几种换法 。 1 / 本题为三元方程 , 共有两个方程 2 因此确定一个变量后 , 此题即为解二元方程组 3 10*j+5*k=1000-50*i 放大10 倍避免浮点数运算误差 4 j+k=100-i 5 约束条件:i, j, k 为1,98 之间的整数 6 / 7 #include 8 int main()f 9 int i , j , k; 10 for(i=1;i19;i+) 11 for(j=1;j1 15 break; / 二元方程只有唯一解 16 g 17 g 18 return 0; 19 g 27 编程输出如下图形(不能使用printf 语句) * * * * * 1 #include 2 #define N 5 3 int main()f 4 int i , j ; 5 for(i=1;i0;j ) / 注意寻找行列关系 7 printf( ); 8 for(j=1;j=2 i 1;j+) / 注意寻找行列关系 9 printf( ); 10 printf(nn);Page 12 of 24 西北大学科技与创业协会 11 g 12 return 0; 13 g 28 输出杨辉三角形的前十行 如图: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 . . . 1 #include 2 #define N 10 3 int main()f 4 int i , j , aNN; 5 for(i=0;iN; i+)f 6 a i 0=a i i=1; / 设置边界 7 for(j=1;j=i 1;j+) 8 a i j=ai 1j 1+ai 1j ; 9 for(j=0;j=i ; j+) 10 printf(%dnt, a i j ); 11 printf(nn); 12 g 13 return 0; 14 g 29 输出乘法口诀表 1 1 = 1 1 2 = 2 2 2 = 4 1 3 = 3 2 3 = 6 3 3 = 9 . . . 1 #include 2 int main()f 3 int i , j ; 4 for(i=1;i=9;i+)f 5 for(j=1;j=i ; j+) 6 printf(%dx%d=% 2dnt, i , j , i j ); /% 2d 左对齐 7 printf(nn); 8 g 9 return 0; 10 gC 语言程序经典习题 Page 13 of 24 30 输入任意5 个数在数组中 , 请按格式打印如下方阵 如5 个数为1 、2 、8 、2 、10 : 1 2 8 2 10 2 8 2 10 1 8 2 10 1 2 2 10 1 2 8 10 1 2 8 2 1 #include 2 #define N 5 3 int main()f 4 int i , j , aN; 5 for(i=0;iN; i+) 6 scanf(%d, 7 for(i=0;iN; i+)f 8 for(j=0;jN; j+) 9 printf(%dnt, a( i+j )%5); / 巧妙运用取余数运算符 10 printf(nn); 11 g 12 return 0; 13 g 31 输入5 对整数 , 请输出每对数中较大者 1 #include 2 #define N 5 3 int main()f 4 int i , aN2; 5 for(i=0;ia i 1?a i 0: a i 1); 8 g 9 return 0; 10 g 32 将一个3 3 矩阵转置(行列互换)后输出 1 #include 2 #define N 3 3 int main()f 4 int i , j , t , aNN; 5 for(i=0;iN; i+) 6 for(j=0;jN; j+) 7 scanf(%d, 8 for(i=0;iN; i+) 9 for(j=i+1;jN; j+) / 注意j 的范围Page 14 of 24 西北大学科技与创业协会 10 t=a i j ,a i j=a j i ,a j i=t; 11 for(i=0;iN; i+)f 12 for(j=0;jN; j+) 13 printf(%dnt, a i j ); / 控制水平制表符 14 printf(nn); 15 g 16 return 0; 17 g 33 求一个3 3 矩阵的最大和最小元素及下标 1 #include 2 #include / 包含int 变量类型的最值 3 #define N 3 4 int main()f 5 int i , j , aNN , max=INT MIN, min=INTMAX; 6 for(i=0;iN; i+) 7 for(j=0;ja i j ?max:a i j ; 10 min=mina i j ?min:a i j ; 11 g 12 for(i=0;iN; i+) 13 for(j=0;jN; j+)f 14 if (a i j=max) / 注意= 号 15 printf(max = a%d%d = %dnn, i , j , max); 16 if (a i j=min) / 注意= 号 17 printf(min = a%d%d = %dnn, i , j , min); 18 g 19 return 0; 20 g 34 求一个3 3 矩阵的对角线元素之和 1 #include 2 #define N 3 3 int main()f 4 int i , j , sum1, sum2, aNN; 5 for(i=0;iN; i+) 6 for(j=0;jN; j+) 7 scanf(%d, 8 for(i=sum1=sum2=0;iN; i+)f 9 sum1 += a i i ; / 主对角线 10 sum2 += a i N i 1; / 次对角线 11 g 12 printf(sum1 = %dnnsum2 = %dnn, sum1, sum2); 13 return 0; 14 gC 语言程序经典习题 Page 15 of 24 35 求一个一维数组的最大值 、 最小值和平均值(主函数调用并输 出) 1 #include 2 #define N 50 3 int findMax(int a , int n)f 4 int i , max=a0; 5 for(i=1;ia i ?max:a i ; 7 return max; 8 g 9 int findMin(int a , int n)f 10 int i , min=a0; 11 for(i=1;in; i+) 12 min=min=0 i ) / 注意表达式2 的书写顺序 6 a i+1=a i ; / 后移 7 a i+1=value; / 插入新值 8 g 9 int main()f 10 int i , b, aN=f1,5,7,11,15,19,23,28,31g; 11 scanf(%d, 12 printf(Before insert :nn); 13 for(i=0;iN 1;i+) 14 printf(%dnt, a i ); 15 insert(a, b); 16 printf(nnAfter insert :nn); 17 for(i=0;i=0;i )f 5 if (a i=value)f 6 for(j=i ;jn; j+) 7 a j=a j+1; 8 n ; / 更新新数组长度 9 g 10 g 11 return n; 12 g 13 int main()f 14 int i , n=10, a10=f1,4,5,5,3,5,7,5,9,4g; 15 printf(Before delete :nn); 16 for(i=0;i=0;i ) / 注意表达式1, 最后元素下标是( 总数-1) 15 if (a i%2) 16 printf(%dnt, a i ); 17 printf(nn); 18 for(i=0;a i!= 1;i+) 19 if (a i%2=0) 20 printf(%dnt, a i ); 21 return 0; 22 g 42 A 数组有8 个元素 , 从第6 个元素开始将数组后三个元素移到数组 开头 例如:A 数组元素为:2 6 9 8 3 7 4 , 移动后变为:3 7 4 2 6 9 8 5 1 #include 2 #define N 8 3 #define M 6 4 int main()f 5 int i , j , t , aN=f2,6,9,8,5,3,7,4g; 6 printf(Before move:nn); 7 for(i=0;i0;i )f / 注意表达式1 10 t=ai 1; 11 for(j=0;j=N M; j+) 12 a i+j 1=a i+j ; 13 a i+j 1=t; / 将覆盖数后移,j 故使用=3,j 1 14 g 15 printf(nnAfter move:nn); 16 for(i=0;i=0;i ) /( 长度-1) 才是最后一个字符 8 putchar(s i ); 9 return 0; 10 g 44 编写函数 , 实现字符串逆序 1 #include 2 #include 3 void reverse(char s)f 4 int i , l=strlen(s ); 5 char t; 6 for(i=0;il /2; i+) 7 t=s i ,s i=sl 1 i ,sl 1 i=t; 8 g 9 int main()f 10 char str 50; 11 gets(str ); 12 reverse(str ); 13 puts(str ); 14 return 0; 15 g 45 不用strcpy() 函数 , 实现两个字符串的复制 1 #include 2 #include 3 void strCopy(char s1 , char s2)f 4 int i , l=strlen(s1); 5 for(i=0;i=l ; i+) / 注意表达式2 的取值 6 s2 i=s1 i ; 7 g 8 int main()f 9 char a50 , b50; 10 gets(a); 11 strCopy(a, b); 12 puts(b); 13 return 0; 14 gPage 20 of 24 西北大学科技与创业协会 46 编写函数 , 从指定位置复制字符串 编写一个函数 , 将字符串中从第m 个字符开始的全部字符复制到另一个字符串 。 1 #include 2 #include 3 void copyStr n(char s1 , char s2 , int m)f 4 int i=m 1, j=0, l=strlen(s1 ); 5 while(i=5)f 6 for(i=l1 , j=0;il1+5;) 7 s1 i+=s2 j+; 8 s1 i=n0; / 字符串结束符 9 g 10 else 11 for(i=l1 , j=0;j=97 7 for(i=1;i=97 / 单词首字母小写字母大写 11 g 12 int main()f 13 char s50=hello , world!; 14 toUpper(s ); 15 puts(s ); 16 return 0; 17 g 49 从键盘输入10 个数 , 用指针实现将最小的数与第一个数对换 , 最 大的数与最后一个数对换 1 #include 2 #include 3 #define N 10 4 int main()f 5 int min=INT MAX, max=INT MIN, aN , p, t; 6 for(p=a;p p?max: p; 9 min=min p?min: p; 10 g 11 for(p=a;pa+10;p+)f 12 if ( p = max) 13 t= p, p= (a+N 1), (a+N 1)=t; 14 if ( p = min) 15 t= p, p= a, a=t; 16 g 17 for(p=a;pa+10;p+) 18 printf(%dnt, p); 19 return 0; 20 g 50 在主函数中输入三个数 , 在子函数中用指针将三个数排序 要求:主函数输入a 、b 、c 三个数 , 排序后最大数放在a 变量中 , 最小数放在c 变量中 。 1 #include 2 void sort(int a, int b, int c)f 3 int t; 4 if ( a b) t= a, a= b, b=t;Page 22 of 24 西北大学科技与创业协会 5 if ( a c) t= a, a= c, c=t; 6 if ( b c) t= b, b= c, c=t; / 注意后两行顺序不能颠倒 7 g 8 int main()f 9 int a, b, c; 10 scanf(%d%d%d, 11 sort( / 传地址调用 12 printf(Before sort :nn); 13 printf(a = %d, b = %d, c = %dnn, a, b, c); 14 return 0; 15 g 51 输入三个字符串 , 按由小到大的顺序输出(用字符指针实现) 1 #include 2 int compare(char s1 , char s2)f 3 char p1=s1 , p2=s2; 4 while( p1!=n0 7 if ( p1 p2) 8 return 1; 9 p1+, p2+; / 字符相等 , 比较下一个字符 10 g 11 if ( p2=n0) 12 if ( p1=n0) return 0; / 字符串相等 13 else return 1; /s1 未结束 14 else return 1; / 注意层次关系 15 g 16 int main()f 17 char a50=Hello , world!, b50= hello , world!, c50=Hello , World!; 18 char p1=a, p2=b, p3=c, t; 19 if (compare(p1, p2)= 1) t=p1,p1=p2,p2=t; / 调整字符串位置 20 if (compare(p1, p3)= 1) t=p1,p1=p3,p3=t; 21 if (compare(p2, p3)= 1) t=p2,p2=p3,p3=t; / 注意顺序 22 puts(p1); / 最大字符串 23 puts(p2); 24 puts(p3); / 最小字符串 25 return 0; 26 g 52 输入6 名学生的5 们成绩 , 分别统计每个学生的平均成绩 要求:在主函数中输入输出 , 子函数求平均数 。 1 #include 2 #define N 6 3 #define M 5 4 typedef struct f 5 int score M; 6 gStudent; / 定义学生成绩结构体C 语言程序经典习题 Page 23 of 24 7 float mean(Student s)f 8 int i , sum; 9 for(i=sum=0;iM; i+) 10 sum+=s. score i ; 11 return (float)sum/i ; / 实型数除法 ! 12 g 13 int main()f 14 Student sN; 15 int i , j ; 16 for(i=0;iN; i+)f 17 for(j=0;j %.2fnn, i+1, mean(s i ); 20 g 21 return 0; 22 g 53 有10 名学生 , 每位学生有四门功课 。 输出平均成绩 、 总分最高和 最低的两位学生所有课程的成绩 1 #include 2 #define N 10 3 #define M 4 4 typedef structf 5 int score M; / 学生四门功课成绩 6 float meanscore; 7 int number; / 学生编号 8 gStudent; / 定义学生成绩结构体 9 float mean(Student s)f 10 int i , sum; 11 for(i=sum=0;i=0;i ) 19 for(j=0;ja j+1) / 升序排列 21 t=a j ,a j=a j+1,a j+1=t; 22 g 23 int main()f 24 Student sN; 25 int i , j ; 26 float aN; 27 for(i=0;iN; i+)f 28 s i .number=i ; / 设置学生编号 29 for(j=0;j %.2fnn, i+1, a i ); 33 g 34 bubbleSort(a, N);Page 24 of 24 西北大学科技与创业协会 35 for(i=0;iN; i+) 36 printf(%.2fnt, a i ); 37 printf(nnHigher:nn); 38 for(i=0;i, i+1); 41 for(j=0;jM; j+) 42 printf( %3d, s i . score j ); 43 printf(nn); 44 g 45 printf(nnLower:nn); 46 for(i=0;i, i+1); 49 for(j=0;jM; j+) 50 printf( %3d, s i . score j ); 51 printf(nn); 52 g 53 return 0; 54 g 54 从指定位置开始的n 个数按逆序重新排列并输出新的完整序列 设 有 一 数 列 , 包 含10 个 数 , 已 按 升 序 排 好 。 编 写 程 序 , 能 够 从 指 定 位 置 开 始 的n 个 数 按 逆 序 重 新 排 列 并 输 出 新 的 完 整 序 列 。 要 求 使 用 指 针 处 理 逆 序 部 分 。 如: 原 数 列 为2, 4, 6, 8, 10, 12, 14, 16, 18, 20 , 从第4 个数开始的5 个数按逆序重新排列 , 则得2, 4, 6, 16, 14, 12, 10, 8, 18, 20 。 1 #include 2 #define N 10 3 void reverse(int a , int n, int m, int k)f 4 int p, q, t , mid=a+m 1+k/2; 5 for(p=a+m 1;pmid;p+)f / 注意范围 6 q=(mid p+mid (k+1)%2); / 与尾端对称元素交换 7 t= p, p= q, q=t; 8 9 g 10 g 11 int main()f 12 int m, k, i , aN=f2,4,6,8,10,12,14,16,18,20g; 13 m=4, k=6; / 也可获取输入 14 printf(Before Reverse:nn); 15 for(i=0;iN; i+) 16 printf(%dnt, a i ); 17 printf(nn); 18 reverse(a, N, m, k); 19 printf(nnAfter Reverse:nn); 20 for(i=0;iN; i+) 21 printf(%dnt, a i ); 22 return 0; 23 g
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!