《C语言程序设计习题(共19页).doc》由会员分享,可在线阅读,更多相关《C语言程序设计习题(共19页).doc(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 习题5参考解答 1数组是相同数据类型的集合,分为一维数组、二维数组及多维数组。在什么情况下使用数组?在什么情况下使用一维数组?解:当需要处理的数据为相同类型的数据的集合时,可以使用数组。如果这些数据的描述用一个量就可以,这时就用一维数组。例如,一组学生的学号,就可以使用一维数组。2数组元素又称为下标变量,数组元素的下标有何意义?解:下标的意义是对数组的各个数组元素进行标识和区分。由数组名和下标结合起来形成数组元素的名字。 3使用字符数组来存储字符串应注意什么问题? 解:需要注意的问题是字符数组在存储字符串时是以0作为结束标记的。这个0是系统自动加上的。所以字符数组的
2、长度需要比它要存储的字符串的长度至少多1。例如,要存储字符串abcd,因为它的长度为4,所以存储它的字符数组的长度至少为5。 4常用的字符处理函数有哪些?解:常用的字符处理函数有以下8个。(1)puts(字符串):作用为将一个字符串输出到终端。 (2)gets(字符数组):作用为从终端输入一个字符串到字符数组,并且得一个函数值。 (3)strcat(字符串1,字符串2):作用为进行字符串的连接。 (4)strcpy(字符串1,字符串2):作用为进行字符串的复制。 (5)strcmp(字符串1,字符串2):作用为进行字符串的比较。 (6)strlen(字符串):作用为求字符串的长度。 (7)st
3、rlwr(字符串):作用为将字符串中的大写字母转换成小写字母。 (8)strupr(字符串):作用为将字符串中的小写字母转换成大写字母。5随机产生10个两位整数存储到一个一维数组中,找出其中的最大数。解:#include#include#define random(x) (rand()%x)int main() int a10,max; int x; for(x=0;x10;x+) ax=random(100); max=a0; for(x=0;xmax) max=ax; printf(%4d,ax); printf(nmax=%dn,max); return 0;程序运行结果如下:41 67
4、 34 0 69 24 78 58 62 64max=786输入10个整数,要求按照从小到大的顺序输出。解:#includevoid main()int i,j,min,t,a10;printf(请输入10个数:n);for(i=0;i10;i+)scanf(%d,&ai);for(i=0;i10-1;i+)min=i;for(j=i;jaj) min=j;t=ai;ai=amin;amin=t;printf(n排序结果如下:n);for(i=0;i10;i+)printf(%5d,ai);程序运行情况如下:请输入10个数:6 90 45 56 1 15 44 78 58 101排序结果如下:
5、 1 6 15 44 45 56 58 78 90 1017输入10个字符,并将它们的顺序颠倒后输出。解:#include#define N 10void main()char aN,t;int i;/* 输入10个字符并输出*/printf(请输入10个字符:n);for(i=0;i10;i+) scanf(%c,&ai); /*顺序颠倒*/ for(i=0;iN/2;i+)t=ai;ai=aN-i-1;aN-i-1=t;printf(顺序颠倒后的字符:n); for(i=0;iN;i+)printf(%c,ai);程序运行情况如下:请输入10个字符:顺序颠倒后的字符: 8写出下列程序的运行
6、结果。 (1)#include void fun(int b) int i=0; while(bi=10) bi+=2; i+;int main() int i,a=1,5,7,9,11,13,15; fun(a+2); for(i=0;i7;i+) printf(%5d,ai); return 0; 解: 1 5 9 11 11 13 15(2)#includeint main() int a33,i,j; for(i=0;i3;i+)for(j=0;j3;j+)aij=i; for(i=0;i3;i+)printf(%5d,a1i); return 0;解: 1 1 1(3)#includ
7、e int main() int k; int a33=1,2,3,4,5,6,7,8,9; for(k=0;k3;k+) printf(%d ,ak2-k); return 0; 解: 3 5 7(4)#include #include int main() char p20=a,b,c,d,q=abc,r=abcde; strcpy(p+strlen(q),r); strcat(p,q); printf(%dn%dn,sizeof(p),strlen(p); return 0; 解: 2011 (5)#include #include void f(char p10,int n ) /*
8、字符串从小到大排序 */ char t10; int i,j; for(i=0;in-1;i+) for(j=i+1;j0) strcpy(t,pi); strcpy(pi,pj); strcpy(pi,t); int main() char p510=abc,aabdfg,abbd,dcdbe,cd;f(p,5); printf(%dn,strlen(p0); return 0; 解:39求一个33矩阵对角线元素之和。解:#includemain()float a33,sum=0;int i,j;printf(请输入矩阵元素:n);for (i=0;i3;i+)for (j=0;j3;j+)
9、scanf(%f,&aij);for (i=0;i3;i+ )sum=sum+aii;printf(对角线元素之和=%.2fn,sum);程序运行情况如下: 请输入矩阵元素: 1 2 3 4 5 6 7 8 9 对角线元素之和=15.0010找出一个二维数组中的鞍点,所谓鞍点是指该位置上的数在该行最大,在该列最小。需要注意的是,并不是所有的二维数组都有鞍点。解:#define N 10#define M 10#include void main()int i,j,k,m,n,flag1,flag2,aNM,max,maxj;printf(n输入行数n:);scanf(%d,&n);printf
10、(n输入列数m:);scanf(%d,&m);for (i=0;in ;i+ ) printf(第%d行?n,i); for (j=0;jm ;j+ ) scanf(%d,&aij);for (i=0;in ;i+ ) for (j=0;jm ;j+ ) printf(%5d,aij); printf(n);flag2=0;for (i=0;in ;i+ ) max=ai0; maxj=0; for (j=0; jmax)max=aij;maxj=j;for (k=0,flag1=1;kakmaxj)flag1=0;if (flag1)printf(n第%d行,第%d列的%d是鞍点n,i,ma
11、xj,max);flag2=1;if(!flag2)printf(n矩阵中无鞍点!n); 矩阵中有鞍点,运行情况如下:输入行数n:2输入列数m:2第0行?45第1行?464546第0行,第1列的5是鞍点 矩阵中无鞍点,运行情况如下:输入行数n:2输入列数m:2第0行?907第1行?58907 58矩阵中无鞍点!11某班有30个学生,每个学生参加了5门课程的考试,请编程显示该班的期末成绩单,并求出每个学生的所有课程的总分。解:#includevoid main()int score317;int i,j;for(i=1;i=30;i+) scorei0=i;printf(请依次输入30个学生的五
12、门课的成绩n);for(i=1;i=30;i+) printf(请依次输入第%d个学生的五门课的成绩n,i); for(j=1;j=5;j+) scanf(%d,&scoreij);for(i=1;i=30;i+)scorei6=0; for(j=1;j=5;j+) scorei6+=scoreij;printf(期末成绩单n);printf(%10s%10s%10s%10s%10s%10s%10sn,学号,课程1,课程2,课程3,课程4,课程5,总分);for(i=1;i=30;i+)for(j=0;j=6;j+)printf(%10d,scoreij);printf(n);程序运行情况如下
13、:请依次输入30个学生的五门课的成绩请依次输入第1个学生的五门课的成绩78 89 98 96 98请依次输入第2个学生的五门课的成绩89 95 98 97 96请依次输入第3个学生的五门课的成绩78 79 74 78 75 按照上面示例自行输入27个学生的五门课的成绩。期末成绩单学号 课程1 课程2 课程3 课程4 课程5 总分1 78 89 98 96 98 4592 89 95 98 97 96 4753 78 79 74 78 75 384程序将在此处依次打印出另外27个学生的成绩。 12打印出如下方阵: 13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4解:#
14、include void main()int array44;int i,j;for(i=0;i=3;i+)for(j=0;j=3;j+)arrayij=(3-i)*4+(j+1);for(i=0;i=3;i+)for(j=0;j=3;j+)printf(%10d,arrayij);printf(n); 13打印出以下的杨辉三角形(要求打印出10行): 11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1 解:#include#define N 11void main()int i,j,aNN;for(i=1;iN;i+)aii=1;ai1=1;for (i=3;iN;
15、i+)for(j=2;j=i-1;j+)aij=ai-1j-1+ai-1j;for(i=1;iN;i+)for(j=1;j=i;j+)printf(%6d,aij);printf(n);printf(n);程序运行结果如下:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 114输入5个字符串,按照ASCII码值由小到大顺序输出。解:#include#includevoid main()int i
16、,j,min;char t20,str520;printf(请输入5个字符串:n);for(i=0;i5;i+)gets(stri);for(i=0;i5-1;i+)min=i;for(j=i;j0) min=j;strcpy(t,stri);strcpy(stri,strmin);strcpy(strmin,t);printf(n排序结果如下:n);for(i=0;i5;i+)puts(stri);程序运行情况如下:请输入5个字符串:flashactionphotodreamweaver排序结果如下:actiondreamflashphotoweaver15有一篇文章,共有5行文字,每行有8
17、0个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。解:#includevoid main()int i,j,uppn,lown,dign,span,othn;char text580;uppn=lown=dign=span=othn=0;for (i=0;i5;i+)printf(n请输入第%d行:n,i);gets(texti);for (j=0;j=A&textij=a & textij=0&textij=9)dign+=1;else if(textij= )span+=1;elseothn+=1;for (i=0;i5 ;i+ )printf(%sn,te
18、xti);printf(大写字母的个数:%dn,uppn);printf(小写字母的个数:%dn,lown);printf(数字的个数:%dn,dign);printf(空格的个数:%dn,span);printf(其他字符的个数:%dn,othn);程序运行情况如下:请输入第0行:abc请输入第1行:+请输入第2行:ABC请输入第3行:123请输入第4行:*大写字母的个数:3小写字母的个数:3数字的个数:3空格的个数:0其他字符的个数:6 16有一行电文,已按下面规律译成密码: A Z a z B Y b y C X c x 即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字
19、母。非字母字符不变。要求编写程序将密码译回原文,并打印出密码和原文。解:#include main()int i,n;char ch80,tran80;printf(请输入字符:);gets(ch);printf(n密码是:%s,ch);i=0;while (chi!=0) if ( (chi=A)&(chi=a)&(chi=z)trani=26+96-chi+1+96;else trani=chi;i+;n=i;printf (n原文是:);for (i=0;in;i+)putchar (trani);程序运行情况如下:请输入字符:ZYXzyx密码是:ZYXzyx原文是:ABCabc17编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中。要求不使用 strcpy函数。复制时,0也要复制过去。0后面的字符不复制。解:#include #include int main()char from80,to80;int i; printf(请输入字符串:); scanf(%s,from);for (i=0; i=strlen(from);i+ )toi=fromi;printf(复制字符串为:%sn,to);return 0; 程序运行情况如下: 请输入字符串:hello 复制字符串为:hello专心-专注-专业
限制150内