习题七一、单项选择题1、以下程序的输出结果是()。main(){inti,k,a[10],p[3];k=5;for(i=0;i10;i++)a[i]=i;/*a:0123456789*/for(i=0;i3;i++)p[i]=a[i*(i+1)];/*p:026*/for(i=0;i3;i++)k+=p[i]*2;/*k=5+4+12=21*/printf(“%d\n”,k);}A)20B)21C)22D)232、以下正确的数组定义语句是()。A)inty[1][4]={1,2,3,4,5};B)floatx[3][]={{1},{2},{3}};C)longs[2][3]={{1},{1,2},{1,2,3}};D)doublet[][3]={0};3、以下程序段的输出结果是()。main(){intm[3][3]={{1},{2},{3}};m100n123intn[3][3]={1,2,3};200000printf(“%d\n”,m[1][0]+n[0][0]);300000printf(“%d\n”,m[0][1]+n[1][0]);}A)0B)2C)3D)103024、以下程序的输出结果是()。main(){inti,x[3][3]={1,2,3,4,5,6,7,8,9};123for(i=0;i3;i++)printf(“%d,”x[i][2-i]);456}799A)1,5,9B)1,4,7C)3,5,7D)3,6,95、对以下程序从第一列开始输入数据:2473↙,程序的输出结果是()。#include“stdio.h”main(){charc;while((c=getchar())!=’\n’){switch(c-‘2’){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);}}}A)668977B}668966C}66778777D)66887666、不能正确为字符数组输入数据的是()。A)chars[5];scanf(“%s”,&s);B)chars[5];scanf(“%s”,s);C)chars[5];scanf(“%s”,&s[0]);D)chars[5];gets(s);7、若有chara[80],b[80];则正确的是()。A)puts(a,b);B)printf(“%s,%s”a[],b[]);C)putchar(a,b);D)puts(a);puts(b);8、以下程序的输出是()。main(){chara[2][5]={“6937”,”8254”};6937inti,j,s=0;8254for(i=0;i2;i++)for(j=0;a[i][j]'0'&&a[i][j]='9';j+=2)s=10*s+a[i][j]-‘0’;printf(“s=%d\n”,s);}A)6385B)69825C)63825D)693825二、填空题1、以下程序的输出结果是________。结果:main(){intarr[10],i,k;for(i=0;i10;i++)arr[i]=1;for(i=0;i10;i++)for(k=0;ki;k++)arr[i]==arr[i]+arr[k];for(i=0;i10;i++)printf(“%d\n”,arr[i]);}2、以下程序的功能:输入30个人的年龄,统计18岁、19岁、……、25岁各有多少人。填空,使程序正确。main(){inti,n,age,a[30]={0};for(i=0;i30;i++){scanf(“%d”,&age);____________;}(a[age-18]++或a[age]++)printf(“agenumber\n”);for(________;i++)printf(“%5d%6d\n”,i,a[i]);(i=0;i8或i=0;i25)}3、下程序的功能:在给定数组中查找某个数,若找到,则输出该数在数组中的位置,否则输出“cannotfound!”。填空,使程序正确。main(){inti,n,a[8]={25,21,57,34,12,9,4,44};scabf(“%d”,&n);for(i=0;i8;i++)if(n==a[i]){printf(“Theindexis%d\n”,i);__________;}(break)if(________)printf(“cannotfound!\n”);}(i=8)4、以下程序的功能:把两个按升序排列的数组合并成一个按升序排列的数组。填空,使程序正确。main(){inti=0,j=0,k=0,a[3]={5,9,19},b[5]={12,24,26,37,48},c[10];while(i3&&j5)if(____________){c[k]=b[j];k++;j++;}(a[i]b[j])else{c[k]=a[i];k++;i++;}while(__________){c[k]=a[i];k++;i++;}(i3)while(__________){c[k]=b[j];k++;j++;}(j5)for(i=0;ik;i++)printf(”%3d”,c[i]);}1248…5125、以下程序的功能:输入10个字符串,找出每个字符串中的最大字符,并依次存入一个一维数组中,然后输出该一维数组。填空,使程序正确。#include”stdio.h”main(){intj,k;chara[10][80],b[10];for(j=0;j10;j++)gets(a[j]);for(j=0;j10;j++){__________;(b[j]=a[j][0])for(k=1;a[j][k]!=’\0’;k++)if(b[j]a[j][k])_____________;(b[j]=a[j][k])}for(j=0;j10;j++)printf(”%d%c\n”,j,b[j]);}6、以下程序的功能:删除字符串中所有的’C’字符。填空使程序正确。main(){intj,k;chara[80],m;gets(a);for(j=k=0;a[j]!=’\0’;j++)if(a[j]!=’c’&&a[j]!=’C’)____________;(a[k++]=a[j]);a[k]=’\0’;printf(”%s\n”,a);}三、编程题1、编写程序,求4x4矩阵的两条对角线元素值的和。解1#defineN4main(){inti,j,s=0,a[N][N];for(i=0;iN;i++)/*产生a数组*/for(j=0;jN;j++)scanf(“%d”,&a[i][j]);for(i=0;iN;i++)/*两条对角线上的元素求和*/for(j=0;jN;j++)if(i==j||i+j==N-1)s+=a[i][j];printf(“s=%d\n”,s);}解2:解3:#includestdlib.h#includestdlib.h#defineN4#defineN4main()main(){inta[N][N],i,j,s=0;{inta[N][N],i,j,s=0;for(i=0;iN;i++)for(i=0;iN;i++){for(j=0;jN;j++){for(j=0;jN;j++){a[i][j]=random(90)+10;{a[i][j]=random(90)+10;printf(%4d,a[i][j]);printf(%4d,a[i][j]);}if(i==j||j==N-i-1)s=s+a[i][j];printf(\n);}}printf(\n);for(i=0;iN;i++)}s=s+a[i][i]+a[i][N-i-1];printf(s=%d\n,s);printf(s=%d\n,s);}}2、定义一个数组,分别赋予从2开始的30个偶数,然后按顺序每5个元素求一个平均值,并放在数组的末尾。main(){inti,j,k=2;floata[40],s;for(i=0;i30;i++){a[i]=k;k+=2;}/*产生a数组*/j=30;s=0;for(i=0;i30;i++)/*每5个数产生一个平均值依次放入a[j],j=30,31,...,35*/{s+=a[i];/*for(i=30;i35;i++)a[(i-30)*5+2];*/if((i+1)%5==0){a[j++]=s/5;s=0;}}k=30;for(i=0;i30;i++)/*输出a数组,每5个数及其平均值占一行*/{printf(“%6.1f”,a[i]);if((i+1)%5==0)printf(“average=%6.1f\n”,a[k++]);}}解2#includestdlib.h#defineN36main(){inta[N]={0},i,j=30;for(i=0;iN-6;i++){a[i]=(i+1)*2;a[j]=a[j]+a[i];/*每5个数求和*/printf(%4d,a[i]);/*输出前a[0]—a[29]元素值*/if((i+1)%5==0){a[j]=a[j]/5;j++;}/*每5个数求平均,*/}for(;iN;i++)printf(%3d,a[i]);/*输出a[30]—a[35]元素*/printf(\n);}3、产生30个随机数到数组中,删除其中最大值,输出删除前后的数组。#includestdlib.h#defineN30main(){inta[N],i,k,max;for(i=0;iN;i++)/*产生随机数存入数组中并输出数组*/{a[i]=random(100);printf(%4d,a[i]);}max=a[0];k=0;/*查找最大值所在的位置*/for(i=1;iN;i++)if(a[i]max){k=i;max=a[i];}printf(\n);for(i=k;iN-1;i++)/*从最大值位置开始,将右边元素值左移一个元素位置,覆盖最大值元素*/a[i]=a[i+1];for(i=0;iN-1;i++)printf(%3d,a[i]);}4、编写程序,输入任意10进制4位正整数,将其化成二进制数。程序1:main(){intj,k=0,a[16]={0},s;scanf(“%d”,&s);/*输入待转化的10进制4位正整数s*/while(s0)/*按”除二取余”得到各位二进制数a[k]*/{a[k]=s%2;k++;s=s/2;}for(j=15;j=0;j--)/*按倒排方式输出二进制数的各位数字*/printf(“%2d”,a[j]);}程序2:/*P196_4.c*/main(){intn,i;chara[16];longk=1;printf(Inputn=\n);scanf(%d,&n);while(nk)/*求大于n且最接近n的二进制权值*/k=k*2;k=k/2;for(i=0;k0;i++)/*用除权法将n转换未二进制*/{a[i]=n/k+'0';n=n%k;k=k/2;}a[i]='\0';printf(%s\n,a);}5、编写程序,产生30个50以内的随机整数到5行6列数组中,输出那些在行和列上均为最小的元素。main()/*解1*/{inti,j,p,q,a[5][6],f;for(i=0;i5;i++)/*产生a数组并输出*/{for(j=0;j6;j++){a[i][j]=rand()%50;printf(“%5d”,a[i][j]);}printf(“\n”);}f=0;/*标志量,f=0:未找到目标,f=1:找到目标*/for(i=0;i5;i++){p=0;/*p记录i行最小值列下标*/for(j=1;j6;j++)/*找i行最小值a[i][p]*/if(a[i][j