2022年c语言书后习题_编程题 .pdf
第 9 章数 组三、编程题9.27 输入一行数字字符, 请用数组元素作为计数器来统计每个数字字符的个数。用下标为 0 的元素统计字符 0 的个数,用下标为 1 的元素统计字符 1 的个数#include void main() int a10=0,i; char c; while(c=getchar()!=n) if(c=0 & c=9) ac-0+; for(i=0;i=9;i+) printf(%d 字符的个数 :%dn,i,ai); 9.28 编写函数, 对具有 10 个整数的数组进行如下操作: 从下标为 n 的元素开始直到最后一个元素,依次向前移动一个位置。输出移动后的结果。#include #include void fun(int a, int n, int m)/m 代表数组的大小 int i; for(i=n;im;i+) ai-1=ai; for(i=0;im;i+) printf(%d ,ai); printf(n); void main() int a10,n,i; for(i=0;i=9;i+)/产生 10 个 039的随机数,并输出 ai=rand()%40; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - printf(%d ,ai); printf(n); scanf(%d,&n);/ 指定 n 的值fun(a,n,10); 9.29 编写函数,把数组中所有奇数放在另一个数组中返回。#include #include void fun(int a, int b,int * n)/n代表 b 数组有效数的多少 int i,j=0; for(i=0;i10;i+) if(ai%2) bj+=ai; *n=j; void main() int a10,b10=0,i,n; for(i=0;i=9;i+)/产生 10 个 039的随机数,并输出 ai=rand()%40; printf(%d ,ai); printf(n); fun(a,b,&n); for(i=0;in;i+) printf(%d ,bi); printf(n); 9.30 编写函数,对字符数组中的字母按由大到小的字母顺序进行排序。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - #include #include void fun(char a, int n)/n 代表 a 数组的大小 int i,j; char c; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(aiaj) c=ai; ai=aj; aj=c; void main() char a10,i=0,n; while(ai+=getchar()!=n & i=9); / 排序前输出数组中字符for(i=0;i=9;i+) putchar(ai); printf(n); fun(a,10);/ 排序/ 排序后输出数组中字符for(i=0;i10;i+) printf(%c ,ai); printf(n); 9.31 输入若干个有序数放在数组中。然后输入一个数,插入到此有序数列中,插入后,数组中的数仍然有序。请对插在最前,插在最后,插在中间三种情况运行程序,以便验证程序是否正确。#include void main() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - char a10,i,n,m,j; printf( 请输入有序数有多少个 n); scanf(%d,&n);/n 代表具体有多少个有序数,它应在19之间printf( 请输入 %d个有序数 :n,n); for(i=0;in;i+)/输入若干个有序的数 scanf(%d,&ai); printf( 请输入要插入的数 :); scanf(%d,&m);/ 输入要插入的数/ 找位置for(i=0;im) break; / 空出位置for(j=n-1;j=i;j-) aj+1=aj; / 插入数 m ai=m; n+; / 输入后的数组元素for(i=0;in;i+) printf(%d ,ai); printf(n); 9.32 编写函数,把任意十进制正整数转换成二进制数。提示:把十进制数不断被 2 除的余数放在一个一维数组中,直到商为零。在主函数中进行输出,要求不得逆序输出。#include void dtob(int n,int a,int *m) int i=0,r,j; a0=n%2; n=n/2; while(n0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - r=n%2;/求余for(j=i;j=0;j-) aj+1=aj;/ 所有数后移,空出最前面的位置a0=r;/ 放入新的余数i+; n=n/2; *m=i+1; void main() int a20,i,n,m; printf( 请输入一个任意整数 :); scanf(%d,&n);/n 代表要转换的整数dtob(n,a,&m);/m 存放转换后的二进制位数/ 输出结果printf(%d,n); for(i=0;im;i+) printf(%d,ai); printf(n); 9.33 编写函数,调用随机函数产生019 之间的随机数,在数组中存入15 个不重复的整数。要求在主函数中进行输出结果。#include #include void fun(int a, int n) int i=0,x,j; for(i=0;in;i+) x=rand()%20;/产生随机数/ 看是否有与前 a0到 ai-1相同for(j=0;j=i) ai=x; else i-; void main() int a15,i,n=15; fun(a,n); / 输出结果for(i=0;i15;i+) printf(%d ,ai); printf(n); 9.34 求任意方阵每行、每列、两对角线上元素之和。#include #include #define N 6 void main() int aNN,i,j,sum; / 产生随机数放入方阵中 ,并显示for(i=0;iN;i+) for(j=0;jN;j+) aij=rand()%10; printf(%3d,aij); printf(n); / 计算行和for(i=0;iN;i+) sum=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 11 页 - - - - - - - - - for(j=0;jN;j+) sum+=aij; printf( 第%d行的元素和 :%dn,i,sum); / 计算列和for(j=0;jN;j+) sum=0; for(i=0;iN;i+) sum+=aij; printf( 第%d列的元素和 :%dn,j,sum); / 计算两条对角线上元素之和sum=0; for(i=0;iN;i+) sum+=aii+aiN-1-i; if(N%2) sum-=aN/2N/2;/ 奇数方阵时,有个元素同时在两条线上printf( 对角线元素和 :%dn,sum); 9.35 求两个矩阵的和。#include #include void main() int a23,b23,c23,i,j; / 产生随机数放入矩阵a 中,并显示for(i=0;i2;i+) for(j=0;j3;j+) aij=rand()%10; printf(%3d,aij); printf(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 11 页 - - - - - - - - - printf(=n); / 产生随机数放入矩阵b 中,并显示for(i=0;i2;i+) for(j=0;j3;j+) bij=rand()%10; printf(%3d,bij); printf(n); printf(=n); / 计算矩阵和放入 c 数组中for(i=0;i2;i+) for(j=0;j3;j+) cij=aij+bij; printf(%3d,cij); printf(n); 9.36 九九乘法表#include #include void main() int i,j; printf( * * A MULTIPLICATION TABLE * * n); printf( ); for(i=1;i=9;i+) printf(%d) ,i); printf(n-n); for(i=1;i=9;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 11 页 - - - - - - - - - printf(%d),i); for(j=1;j=9;j+) printf(%5d,i*j); printf(n); printf(-n); 9.37 调用随机函数为5*4 的矩阵置 100 以内的整数,输出该矩阵,求出每行元素的之和,并把和值最大的那一行与第一行上的元素对调。#include #include void main() int i,j,max,temp; int a54,b5=0; for(i=0;i5;i+) for(j=0;j4;j+) aij=rand()%100; bi+=aij;/ 计算行和printf(%3d,aij); printf(n); max=0;/找行和最大值for(i=0;ibmax) max=i; / 交换两行if(max!=0) for(j=0;j4;j+) temp=amaxj; amaxj=a0j; a0j=temp; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 11 页 - - - - - - - - - / 输出交换后的矩阵for(i=0;i5;i+) for(j=0;j4;j+) printf(%3d,aij); printf(n); 9.38 调用随机函数为5*5 的矩阵置 100 以内的整数,输出该矩阵,然后逆置该矩阵。#include #include void main() int i,j,temp; int a55; for(i=0;i5;i+)/产生方阵并输出 for(j=0;j5;j+) aij=rand()%100; printf(%3d,aij); printf(n); / 逆置: 下三角与上三角的数据交换,对角线不放在内for(i=1;i5;i+) for(j=0;ji;j+) temp=aij; aij=aji; aji=temp; / 输出逆置的方阵printf(=n); for(i=0;i5;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 11 页 - - - - - - - - - for(j=0;j5;j+) printf(%3d,aij); printf(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 11 页 - - - - - - - - -