C语言程序设计习题5.docx
- 文档编号:28865126
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:21
- 大小:22.96KB
C语言程序设计习题5.docx
《C语言程序设计习题5.docx》由会员分享,可在线阅读,更多相关《C语言程序设计习题5.docx(21页珍藏版)》请在冰豆网上搜索。
C语言程序设计习题5
习题5参考解答
1.数组是相同数据类型的集合,分为一维数组、二维数组及多维数组。
在什么情况下使用数组?
在什么情况下使用一维数组?
解:
当需要处理的数据为相同类型的数据的集合时,可以使用数组。
如果这些数据的描述用一个量就可以,这时就用一维数组。
例如,一组学生的学号,就可以使用一维数组。
2.数组元素又称为下标变量,数组元素的下标有何意义?
解:
下标的意义是对数组的各个数组元素进行标识和区分。
由数组名和下标结合起来形成数组元素的名字。
3.使用字符数组来存储字符串应注意什么问题?
解:
需要注意的问题是字符数组在存储字符串时是以'\0'作为结束标记的。
这个'\0'是系统自动加上的。
所以字符数组的长度需要比它要存储的字符串的长度至少多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)strlwr(字符串):
作用为将字符串中的大写字母转换成小写字母。
(8)strupr(字符串):
作用为将字符串中的小写字母转换成大写字母。
5.随机产生10个两位整数存储到一个一维数组中,找出其中的最大数。
解:
#include
#include
#definerandom(x)(rand()%x)
intmain()
{
inta[10],max;
intx;
for(x=0;x<10;x++)
a[x]=random(100);
max=a[0];
for(x=0;x<10;x++)
{
if(a[x]>max)
max=a[x];
printf("%4d",a[x]);
}
printf("\nmax=%d\n",max);
return0;
}
程序运行结果如下:
4167340692478586264
max=78
6.输入10个整数,要求按照从小到大的顺序输出。
解:
#include
voidmain()
{
inti,j,min,t,a[10];
printf("请输入10个数:
\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<10-1;i++)
{
min=i;
for(j=i;j<10;j++)
if(a[min]>a[j])min=j;
t=a[i];
a[i]=a[min];
a[min]=t;
}
printf("\n排序结果如下:
\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
}
程序运行情况如下:
请输入10个数:
6904556115447858101
排序结果如下:
1615444556587890101
7.输入10个字符,并将它们的顺序颠倒后输出。
解:
#include
#defineN10
voidmain()
{
chara[N],t;
inti;
/*输入10个字符并输出*/
printf("请输入10个字符:
\n");
for(i=0;i<10;i++)
{
scanf("%c",&a[i]);
}
/*顺序颠倒*/
for(i=0;i { t=a[i]; a[i]=a[N-i-1]; a[N-i-1]=t; } printf("顺序颠倒后的字符: \n"); for(i=0;i printf("%c",a[i]); } 程序运行情况如下: 请输入10个字符: 0123456789↙ 顺序颠倒后的字符: 9876543210 8.写出下列程序的运行结果。 (1)#include voidfun(intb[]) { inti=0; while(b[i]<=10) { b[i]+=2; i++; } } intmain() { inti,a[]={1,5,7,9,11,13,15}; fun(a+2); for(i=0;i<7;i++) printf("%5d",a[i]); return0; } 解: 15911111315 (2)#include intmain() { inta[3][3],i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]=i; for(i=0;i<3;i++) printf("%5d",a[1][i]); return0; } 解: 111 (3)#include intmain() { intk; inta[3][3]={1,2,3,4,5,6,7,8,9}; for(k=0;k<3;k++) printf("%d",a[k][2-k]); return0; } 解: 357 (4)#include #include intmain() { charp[20]={'a','b','c','d'},q[]="abc",r[]="abcde"; strcpy(p+strlen(q),r);strcat(p,q); printf("%d\n%d\n",sizeof(p),strlen(p)); return0; } 解: 20 11 (5)#include #include voidf(charp[][10],intn)/*字符串从小到大排序*/ { chart[10]; inti,j; for(i=0;i for(j=i+1;j if(strcmp(p[i],p[j])>0) {strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[i],t);} } intmain() { charp[5][10]={"abc","aabdfg","abbd","dcdbe","cd"}; f(p,5); printf("%d\n",strlen(p[0])); return0; } 解: 3 9.求一个3×3矩阵对角线元素之和。 解: #include main() { floata[3][3],sum=0; inti,j; printf("请输入矩阵元素: \n"); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%f",&a[i][j]); for(i=0;i<3;i++) sum=sum+a[i][i]; printf("对角线元素之和=%.2f\n",sum); } 程序运行情况如下: 请输入矩阵元素: 123456789↙ 对角线元素之和=15.00 10.找出一个二维数组中的鞍点,所谓鞍点是指该位置上的数在该行最大,在该列最小。 需要注意的是,并不是所有的二维数组都有鞍点。 解: #defineN10 #defineM10 #include voidmain() { inti,j,k,m,n,flag1,flag2,a[N][M],max,maxj; printf("\n输入行数n: "); scanf("%d",&n); printf("\n输入列数m: "); scanf("%d",&m); for(i=0;i { printf("第%d行? \n",i); for(j=0;j scanf("%d",&a[i][j]); } for(i=0;i { for(j=0;j printf("%5d",a[i][j]); printf("\n"); } flag2=0; for(i=0;i { max=a[i][0]; maxj=0; for(j=0;j if(a[i][j]>max) { max=a[i][j]; maxj=j; } for(k=0,flag1=1;k if(max>a[k][maxj]) flag1=0; if(flag1) { printf("\n第%d行,第%d列的%d是鞍点\n",i,maxj,max); flag2=1; } } if(! flag2) printf("\n矩阵中无鞍点! \n"); } 矩阵中有鞍点,运行情况如下: 输入行数n: 2↙ 输入列数m: 2↙ 第0行? 4↙ 5↙ 第1行? 4↙ 6↙ 45 46 第0行,第1列的5是鞍点 矩阵中无鞍点,运行情况如下: 输入行数n: 2↙ 输入列数m: 2↙ 第0行? 90↙ 7↙ 第1行? 5↙ 8↙ 907 58 矩阵中无鞍点! 11.某班有30个学生,每个学生参加了5门课程的考试,请编程显示该班的期末成绩单,并求出每个学生的所有课程的总分。 解: #include voidmain() { intscore[31][7]; inti,j; for(i=1;i<=30;i++) score[i][0]=i; printf("请依次输入30个学生的五门课的成绩\n"); for(i=1;i<=30;i++) { printf("请依次输入第%d个学生的五门课的成绩\n",i); for(j=1;j<=5;j++) scanf("%d",&score[i][j]); } for(i=1;i<=30;i++) { score[i][6]=0; for(j=1;j<=5;j++) score[i][6]+=score[i][j]; } printf("期末成绩单\n"); printf("%10s%10s%10s%10s%10s%10s%10s\n","学号","课程1","课程2","课程3","课程4","课程5","总分"); for(i=1;i<=30;i++) { for(j=0;j<=6;j++) printf("%10d",score[i][j]); printf("\n"); } } 程序运行情况如下: 请依次输入30个学生的五门课的成绩 请依次输入第1个学生的五门课的成绩 7889989698↙ 请依次输入第2个学生的五门课的成绩 8995989796↙ 请依次输入第3个学生的五门课的成绩 7879747875↙ 按照上面示例自行输入27个学生的五门课的成绩。 期末成绩单 学号课程1课程2课程3课程4课程5总分 17889989698459 28995989796475 37879747875384 程序将在此处依次打印出另外27个学生的成绩。 12.打印出如下方阵: 13141516 9101112 5678 1234 解: #include voidmain() { intarray[4][4]; inti,j; for(i=0;i<=3;i++) for(j=0;j<=3;j++) array[i][j]=(3-i)*4+(j+1); for(i=0;i<=3;i++) { for(j=0;j<=3;j++) printf("%10d",array[i][j]); printf("\n"); } } 13.打印出以下的杨辉三角形(要求打印出10行): 解: #include #defineN11 voidmain() { inti,j,a[N][N]; for(i=1;i { a[i][i]=1; a[i][1]=1; } for(i=3;i for(j=2;j<=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=1;i { for(j=1;j<=i;j++) printf("%6d",a[i][j]); printf("\n"); } printf("\n"); } 程序运行结果如下: 1 11 121 1331 14641 15101051 1615201561 172135352171 18285670562881 193684126126843691 14.输入5个字符串,按照ASCII码值由小到大顺序输出。 解: #include #include voidmain() { inti,j,min; chart[20],str[5][20]; printf("请输入5个字符串: \n"); for(i=0;i<5;i++) { gets(str[i]); } for(i=0;i<5-1;i++) { min=i; for(j=i;j<5;j++) if(strcmp(str[min],str[j])>0)min=j; strcpy(t,str[i]); strcpy(str[i],str[min]); strcpy(str[min],t); } printf("\n排序结果如下: \n"); for(i=0;i<5;i++) puts(str[i]); } 程序运行情况如下: 请输入5个字符串: flash↙ action↙ photo↙ dream↙ weaver↙ 排序结果如下: action dream flash photo weaver 15.有一篇文章,共有5行文字,每行有80个字符。 要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。 解: #include voidmain() { inti,j,uppn,lown,dign,span,othn; chartext[5][80]; uppn=lown=dign=span=othn=0; for(i=0;i<5;i++) { printf("\n请输入第%d行: \n",i); gets(text[i]); for(j=0;j<80&&text[i][j]! ='\0';j++) { if(text[i][j]>='A'&&text[i][j]<='Z') uppn+=1; elseif(text[i][j]>='a'&&text[i][j]<='z') lown+=1; elseif(text[i][j]>='0'&&text[i][j]<='9') dign+=1; elseif(text[i][j]=='') span+=1; else othn+=1; } } for(i=0;i<5;i++) printf("%s\n",text[i]); printf("大写字母的个数: %d\n",uppn); printf("小写字母的个数: %d\n",lown); printf("数字的个数: %d\n",dign); printf("空格的个数: %d\n",span); printf("其他字符的个数: %d\n",othn); } 程序运行情况如下: 请输入第0行: abc 请输入第1行: +++ 请输入第2行: ABC 请输入第3行: 123 请输入第4行: *** 大写字母的个数: 3 小写字母的个数: 3 数字的个数: 3 空格的个数: 0 其他字符的个数: 6 16.有一行电文,已按下面规律译成密码: A→Za→z B→Yb→y C→Xc→x …… 即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。 非字母字符不变。 要求编写程序将密码译回原文,并打印出密码和原文。 解: #include main() { inti,n; charch[80],tran[80]; printf("请输入字符: "); gets(ch); printf("\n密码是: %s",ch); i=0; while(ch[i]! ='\0') { if((ch[i]>='A')&&(ch[i]<='Z')) tran[i]=26+64-ch[i]+1+64; elseif((ch[i]>='a')&&(ch[i]<='z')) tran[i]=26+96-ch[i]+1+96; else tran[i]=ch[i]; i++; } n=i; printf("\n原文是: "); for(i=0;i putchar(tran[i]); } 程序运行情况如下: 请输入字符: ZYXzyx↙ 密码是: ZYXzyx 原文是: ABCabc 17.编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中。 要求不使用strcpy函数。 复制时,'\0'也要复制过去。 '\0'后面的字符不复制。 解: #include #include intmain() { charfrom[80],to[80]; inti; printf("请输入字符串: "); scanf("%s",from); for(i=0;i<=strlen(from);i++) to[i]=from[i]; printf("复制字符串为: %s\n",to); return0; } 程序运行情况如下: 请输入字符串: hello↙ 复制字符串为: hello
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 习题
![提示](https://static.bdocx.com/images/bang_tan.gif)