您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 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个两位整数存储到一个一维数组中,找出其中的最大数。解:#includestdio.h#includestdlib.h#definerandom(x)(rand()%x)intmain()..{inta[10],max;intx;for(x=0;x10;x++)a[x]=random(100);max=a[0];for(x=0;x10;x++){if(a[x]max)max=a[x];printf(%4d,a[x]);}printf(\nmax=%d\n,max);return0;}程序运行结果如下:4167340692478586264max=786.输入10个整数,要求按照从小到大的顺序输出。解:#includestdio.hvoidmain(){inti,j,min,t,a[10];printf(请输入10个数:\n);for(i=0;i10;i++){scanf(%d,&a[i]);}for(i=0;i10-1;i++)..{min=i;for(j=i;j10;j++)if(a[min]a[j])min=j;t=a[i];a[i]=a[min];a[min]=t;}printf(\n排序结果如下:\n);for(i=0;i10;i++)printf(%5d,a[i]);}程序运行情况如下:请输入10个数:6904556115447858101排序结果如下:16154445565878901017.输入10个字符,并将它们的顺序颠倒后输出。解:#includestdio.h#defineN10voidmain(){chara[N],t;inti;/*输入10个字符并输出*/printf(请输入10个字符:\n);for(i=0;i10;i++){..scanf(%c,&a[i]);}/*顺序颠倒*/for(i=0;iN/2;i++){t=a[i];a[i]=a[N-i-1];a[N-i-1]=t;}printf(顺序颠倒后的字符:\n);for(i=0;iN;i++)printf(%c,a[i]);}程序运行情况如下:请输入10个字符:0123456789↙顺序颠倒后的字符:98765432108.写出下列程序的运行结果。(1)#includestdio.hvoidfun(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;i7;i++)printf(%5d,a[i]);return0;}解:15911111315(2)#includestdio.hintmain(){inta[3][3],i,j;for(i=0;i3;i++)for(j=0;j3;j++)a[i][j]=i;for(i=0;i3;i++)printf(%5d,a[1][i]);return0;}解:111(3)#includestdio.hintmain(){intk;inta[3][3]={1,2,3,4,5,6,7,8,9};for(k=0;k3;k++)printf(%d,a[k][2-k]);return0;..}解:357(4)#includestdio.h#includestring.hintmain(){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;}解:2011(5)#includestdio.h#includestring.hvoidf(charp[][10],intn)/*字符串从小到大排序*/{chart[10];inti,j;for(i=0;in-1;i++)for(j=i+1;jn;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;}解:39.求一个3×3矩阵对角线元素之和。解:#includestdio.hmain(){floata[3][3],sum=0;inti,j;printf(请输入矩阵元素:\n);for(i=0;i3;i++)for(j=0;j3;j++)scanf(%f,&a[i][j]);for(i=0;i3;i++)sum=sum+a[i][i];printf(对角线元素之和=%.2f\n,sum);}程序运行情况如下:请输入矩阵元素:123456789↙对角线元素之和=15.0010.找出一个二维数组中的鞍点,所谓鞍点是指该位置上的数在该行最大,在该列最小。需要注意的是,并不是所有的二维数组都有鞍点。解:#defineN10#defineM10#includestdio.h..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;in;i++){printf(第%d行?\n,i);for(j=0;jm;j++)scanf(%d,&a[i][j]);}for(i=0;in;i++){for(j=0;jm;j++)printf(%5d,a[i][j]);printf(\n);}flag2=0;for(i=0;in;i++){max=a[i][0];maxj=0;for(j=0;jm;j++)if(a[i][j]max){max=a[i][j];maxj=j;}..for(k=0,flag1=1;kn&&flag1;k++)if(maxa[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↙4546第0行,第1列的5是鞍点矩阵中无鞍点,运行情况如下:输入行数n:2↙输入列数m:2↙..第0行?90↙7↙第1行?5↙8↙90758矩阵中无鞍点!11.某班有30个学生,每个学生参加了5门课程的考试,请编程显示该班的期末成绩单,并求出每个学生的所有课程的总分。解:#includestdio.hvoidmain(){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总分178899896984592899598979647537879747875384程序将在此处依次打印出另外27个学生的成绩。12.打印出如下方阵:..13141516910111256781234解:#includestdio.hvoidmain(){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行):解:#includestdio.h#defineN1111112113311464115101051…..voidmain(){inti,j,a[N][N];for(i=1;iN;i++){a[i][i]=1;a[i][1]=1;}for(i=3;iN;i++)for(j=2;j=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=1;iN;i++){for(j=1;j=i;j++)printf(%6d,a[i][j]);printf(\n);}printf(\n);}程序运行结果如下:11112113311464115101051161520156117213535217118285670562881..19368412612684369114.输入5个字符串,按照ASCII码值由小到大顺序输出。解:#includestdio.h#includestring.hvoidmain(){inti,j,min;chart[20],str[5][20];printf(请输入5个字符串:\n);for(i=0;i5;i++){gets(str[i]);}for(i=0;i5-1;i++){min=i;for(j=i;j5;j++)if(st
本文标题:C语言程序设计习题5
链接地址:https://www.777doc.com/doc-7227070 .html