【习题5-1】一、选择题1.有定义语句“inta[][3]={1,2,3,4,5,6};”,则a[1][0]的值是A。A.4B.1C.2D.52.执行下面的程序段后,变量k中的值为A。intk=3,s[2];s[0]=k;k=s[1]*10;A.不定值B.33C.30D.103.在定义“inta[10];”之后,对a元素的引用正确的是D。A.a[10]B.a[6,3]C.a(6)D.a[10-10]4.以下程序的输出结果是C。voidmain(){inta[10],i;for(i=9;i=0;i--)a[i]=10-i;printf(%d%d%d,a[2],a[5],a[8]);}A.258B.741C.852D.3695.以下程序的输出结果是D。voidmain(){intp[7]={11,13,14,15,16,17,18},i=0,k=0;while(i7&&p[i]%2){k=k+p[i];i++;}printf(”%d\n”,k);}A.58B.56C.45D.246.以下数组定义中不正确的是B。A.inta[2][3];B.intd[3][]={{1,2},{1,2,3},{1,2,3,4}};C.intc[100][100]={0};D.intb[][2]={0,1,2,3};7.以下能正确定义数组并正确赋初值的语句是D。A.intN=5,b[N][N];B.inta[1][2]={{1},{3}};C.intc[2][]={{1,2},{3,4}};D.intd[3][2]={{1,2},{34}};8.以下程序的输出结果是D。voidmain(){inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i3;i++)for(j=0;j=i;j++)s+=a[i][j];printf(”%d\n”,s);}A.21B.19C.20D.189.以下程序的输出结果是C。voidmain(){intx[3][3]={1,2,3,4,5,6,7,8,9},i;for(i=0;i3;i++)printf(”%d”,x[i][2-i]);}A.159B.147C.357D.36910.若有以下定义语句,则表达式“x[1][1]*x[2][2]”的值是A。floatx[3][3]={{1.0,2.0,3.0},{4.0,5.0,6.0}};A.0.0B.4.0C.5.0D.6.0二、填空题1.在定义“inta[5][6];”后,第10个元素是a[1][3]。2.有以下程序voidmain(){intm[][3]={1,4,7,2,5,8,3,6,9};inti,k=2;for(i=0;i3;i++)printf(”%d”,m[k][i]);}执行后的输出结果是369。3.若有以下程序,执行后的输出结果是58。voidmain(){inta[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}};inti,j,s=0;for(i=0;i4;i++){for(j=0;j4;j++){if(a[i][j]0)continue;if(a[i][j]==0)break;s+=a[i][j];}}printf(”%d\n”,s);}4.以下程序的输出结果是4。voidmain(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;for(i=0;i3;i++)for(j=i;j=i;j++)t=t+b[i][b[j][i]];printf(%d\n,t);}三、编程题1.编写程序实现下述功能:有10位学生的成绩:17、34、90、88、55、74、95、82、43、90、编写程序找出其中的最高分,并将最高分与第一个成绩交换位置。#includestdio.hvoidmain(){intscore[11]={0,17,34,90,88,55,74,95,82,43,90};intmax,max_index;inti,temp;max=score[1];max_index=1;for(i=2;i=10;i++){if(score[i]max){max=score[i];max_index=i;}}printf(交换前的10个成绩\n);for(i=1;i=10;i++){printf(%3d,score[i]);}printf(\n);temp=score[1];score[1]=score[max_index];score[max_index]=temp;printf(交换后的10个成绩\n);for(i=1;i=10;i++){printf(%3d,score[i]);}printf(\n);}2.编写程序实现下述功能:将数组a的内容逆置重放。要求不得另外开辟数组,只能借助于一个临时存储单元。#defineN5#includestdio.hvoidmain(){inta[N]={0,17,34,90,88};inti,temp;printf(正序:\n);for(i=0;iN;i++){printf(%3d,a[i]);}printf(\n);for(i=0;iN/2;i++){temp=a[i];a[i]=a[N-i-1];a[N-i-1]=temp;}printf(逆序:\n);for(i=0;iN;i++){printf(%3d,a[i]);}printf(\n);}3.编写程序实现下述功能:有一个已经排好序的数组。要求输入一个数,在数组中查找是否有这个数,如果有,将该数从数组中删除,要求删除后的数组仍然保持有序;如果没有,则输出“数组中没有这个数!”voidmain(){inta[10]={1,4,6,9,13,16,19,28,40,100};intnumber,i,j;printf(\n原始数组为:\n);for(i=0;i10;i++)printf(%5d,a[i]);printf(\n);printf(输入要删除的数:);scanf(%d,&number);for(i=0;i10;i++){if(a[i]==number){break;}}if(i10){for(j=i;j10;j++)a[j]=a[j+1];printf(\n删除%d后的数组为:\n,number);for(i=0;i9;i++)printf(%5d,a[i]);printf(\n);}elseprintf(\n数组中没有这个数!\n);}4.编写程序实现下述功能:从键盘输入3行3列矩阵的元素,然后找出全部元素中的最大值与最小值并输出。#includestdio.hvoidmain(){inta[3][3];inti,j,max,min;//输入矩阵for(i=0;i3;i++)for(j=0;j3;j++){printf(请输入矩阵第%d行第%d列元素:,i+1,j+1);scanf(%d,&a[i][j]);}//输出矩阵printf(矩阵为:\n);for(i=0;i3;i++){for(j=0;j3;j++)printf(%d,a[i][j]);printf(\n);}min=a[0][0];max=a[0][0];for(i=0;i3;i++){for(j=1;j3;j++){if(a[j][i]min)min=a[j][i];if(a[j][i]max)max=a[j][i];}}printf(最小值是%d:\n,min);printf(最大值是%d:\n,max);}5.编写程序实现下述功能:从键盘输入3行3列矩阵的元素,然后分别计算两条对角线上数值的之和,并输出结果。#includestdio.hvoidmain(){inta[3][3];inti,j,sum1=0,sum2=0;//输入矩阵for(i=0;i3;i++)for(j=0;j3;j++){printf(请输入矩阵第%d行第%d列元素:,i+1,j+1);scanf(%d,&a[i][j]);}//输出矩阵printf(矩阵为:\n);for(i=0;i3;i++){for(j=0;j3;j++)printf(%d,a[i][j]);printf(\n);}for(i=0;i3;i++){sum1=sum1+a[i][i];sum2=sum2+a[i][2-i];}printf(左上到右下为%d:\n,sum1);printf(右上到左下为%d:\n,sum2);}【习题5-2】一、选择题1.下述对C语言字符数组的描述中错误的是C。A.字符数组可以存放字符串B.字符数组中的字符串可以整体输入、输出C.可以在赋值语句中通过赋值运算符=对字符数组整体赋值D.不可以用关系运算符对字符数组中的字符串进行比较2.合法的数组定义是A。A.inta[]=string;B.inta[5]={0,1,2,3,4,5};C.ints=string;D.chara[]={0,1,2,3,4,5};3.若给出以下定义:charx[]=abcdefg;chary[]={'a','b','c','d','e','f','g'};则正确的叙述为C。A.数组x和数组y等价B.数组x和数组y的长度相同C.数组x的长度大于数组y的长度D.数组x的长度小于数组y的长度4.运行下面的程序,如果从键盘上输入:ABC时,输出的结果是A。#includestring.hvoidmain(){charss[10]=12345;strcat(ss,6789);gets(ss);printf(%s\n,ss);}A.ABCB.ABC9C.123456ABCD.ABC4567895.判断两个字符串是否相等,正确的表达方式是C。A.while(s1==s2)B.while(s1=s2)C.while(strcmp(s1,s2)==0)D.while(strcmp(s1,s2)=0)6.以下程序的输出结果是A。voidmain(){charstr[12]={'s','t','r','i','n','g'};printf(%d\n,strlen(str));}A.6B.7C.11D.127.以下程序运行后,输出结果是B。voidmain(){charcf[3][5]={AAAA,BBB,CC};printf(\%s\\n,cf[1]);}A.AAAAB.BBBC.BBBCCD.CC8.以下程序段的输出结果是A。chars[]=\\141\141abc\t;printf(%d\n,strlen(s));A.9B.12C.13D.149.以下程序的输出结果是D。voidmain(){charw[][10]={ABCD,EFGH,IJKL,MNOP},k;for(k=1;k3;k++)printf(%s\n,w[k]);}A.ABCDB.ABCDC.EFGD.EFGHFGHEFGJKIJKLKLIJOM10.下列程序执行后的输出结果是A。#includestring.hvoidmain(){chararr[2][4];strcpy(arr,you);strcpy(arr[1],me);arr[0][3]='&';printf(%s\n,arr);}A.you&meB.youC.meD.err二、填空题1.当接收用户输入的含空格的字符串时,应使用的函数是gets。2.以下程序的输出结果是abc。voidmain(){chars[]=abcdef;s[3]='\0';printf(%s\n,s);}3.下列程序段的运行结果是600。charch[]=600;inta,s=0;for(a=0;ch[a]='0'&&ch[a]='9';a++)s=10*s+ch[a]-’0’;printf(%d,s);4.下面程序的功能是:将字符数组a中下标值为偶数的元素从小到大排列,其他元素不变。请填空将