n[j]=n[i]+1;
printf("%d\n",n[1]);
}
A.不确定的值B.3C.2D.1
7-2.以下程序的输出结果是_B___。
main()
{
inti,k,a[10],p[3];
k=5;
for(i=0;i<10;i++)a[i]=i;
for(i=0;i<3;i++)p[i]=a[i*(i+1)];
for(i=0;i<3;i++)k+=p[i]*2;
printf("%d\n",k);
}
A.20B.21C.22D.23
7-3.以下正确的数组定义语句是_A___。
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};
7-4.若有说明:
inta[][4];则a[i][j]前有__B__个元素。
A.j*4+iB.i*4+jC.i*4+j-1D.i*4+j+1
7-5.以下程序的输出结果是_C___。
main()
{
intm[3][3]={{1},{2},{3}};
intn[3][3]={1,2,3}
printf("%d\n",m[1][0]+n[0][0]);
printf("%d\n",m[0][1]+n[1][0]);
}
A.0B.2C.3D.1
0302
7-6.以下程序的输出结果是_C___。
main()
{
inti,x[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)printf("%d,",x[i][2-i]);
}
A.1,5,9,B.1,4,7,C.3,5,7,D.3,6,9,
7-7.下列程序__B__(每行前的数字表示行号)。
1main()
2{floata[10]={0.0};inti;
3for(i=0;i<3;i++)scanf("%d",&a[i]);
4for(i=1;i<10;i++)a[0]=a[0]+a[i];
5printf("%f\n",a[0]);
}
A.没有错误B.第2行有错C.第3行有错D.第5行有错
7-8.以下程序段的功能是__A__。
main()
{
intj,k,e,t,a[]={4,0,6,2,64,1};
for(j=0;j<5;j++)
{t=j;
for(k=j;k<6;k++)if(a[k]>a[t])t=k;
e=a[t];a[t]=a[j];a[j]=e;}
for(k=0;k<6;k++)
printf("%5d",a[k]);
}
A.对数组进行气泡法排序(升序)B.对数组进行气泡法排序(降序)
C.对数组进行选择法排序(升序)B.对数组进行选择法排序(降序)
二、填空题01123
7-9.以下程序的输出结果是。
58132134
main()5589144233377
{610987159725844181
main()
{
intarr[20],i;
arr[0]=0;arr[1]=1;
for(i=2;i<20;i++)
arr[i]=arr[i-2]+arr[i-1];
for(i=0;i<20;i++)
{if(i%5==0)printf("\n");
printf("%10d",arr[i]);}
}
7-10.以下程序的功能:
把a数组的行和列元素互换后存入b数组。
请填空使程序正确。
main()
{
inti,j,a[2][3]={1,2,3,4,5,6},b[3][2];
___printf(“arraya:
\n”)__;
for(i=0;i<2;i++){
for(j=0;__j<3___;j++){
printf("%5d",a[i][j]);
____b[j][i]=a[i][j]_____;
}
printf("\n");}
for(i=0;_i<=2___;i++){
for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("\n");}
}
7-11.以下程序的功能:
输入30个人的年龄,统计18岁、19岁、……、25岁各有多少人。
填空,使程序正确。
main()
{
inti,n,age,a[8]={0};
for(i=0;i<30;i++){
scanf("%d",&age);
_a[age-18]++__________;
___________;
}
printf("age---number\n");
for(_i=0__;__i<=25____;i++)
printf("%5d%6d\n",i+8,a[i]);
}
7-12.以下程序的功能:
在给定数组中查找某个数,若找到,则输出该数在数组中的位置,否则输出"cannotfound!
"。
填空,使程序正确。
main()
{
inti,n,a[8]={25,21,57,34,12,9,4,44};
scanf("%d",&n);
for(i=0;i<8;i++)
if(n==a[i]){
printf("Theindexis%d\n",i);
_break___;
}
if(_i>=8___)printf("cannotfound!
\n");
}
7-13.以下程序的功能:
把两个按升序排列的数组合并成一个按升序排列的数组。
填空,使程序正确。
main()
{
inti=0,j=0,k=0,a[3]={5,9,19},b[5]={12,24,26,37,48},c[10];
while(i<3&&j<5)
if(_a[i]>b[j])__){c[k]=b[j];k++;j++;}
else{c[k]=a[i];k++;i++;}
while(_i<3___){c[k]=a[i];k++;i++;}
while(_j<5___){c[k]=b[j];k++;j++;}
for(i=0;i}
7-14.求出如下所示矩阵中各行元素之和,并以矩阵形式输出原矩阵及相应行元素之和。
填空,使程序正确。
356
214
871
main()
{
inti,j;
staticinta[3][4]={{3,5,6,0},{2,1,4,0},{8,7,1,0}};
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][3]+=__a[i][j]___;
for(i=0;i<3;i++)
for(_(j=1_;_j<=4___;_j++____){
printf("%3d",a[i][j]);
if(__j%4==0___)printf(_”\n”____);
}
}
三、编程题
7-15.若题7-14要求二维数组两条对角线元素值的和,应如何修改该程序?
#include
#defineN5
main()
{inta[N][N],i,j,s=0;
for(i=0;i{for(j=0;j{a[i][j]=random(90)+10;
printf("%4d",a[i][j]);
printf("\n");
}
for(i=0;is=s+a[i][i]+a[i][N-i-1];
printf("s=%d\n",s);
printf("s=%d\n",s);
}
7-16.编写程序,定义一个数组,分别赋予从2开始的30个偶数,然后按顺序每5个元素求出一个平均值,并放在该数组的末尾。
#include
#defineN30voidmain()
{
intscore[N];
floataver[N],temp=0;
inti,j,n;for(i=1,j=0;i<=30;i++)
{
if(i%2==0)
{
score[j]=i;
printf("%d",score[j]);j++;
}
}
n=j;
for(i=1,j=0;i<=n;i++)
{
temp+=(float)score[i-1];
if(i%5==0)
{
aver[j]=temp/5;
temp=(float)score[i-1];j++;
}
}
printf("\n平均分为:
\n");
for(i=0;i{
printf("%.2f",aver[i]);
}
}
7-18.编写程序,产生30个随机数到数组中,任意指定位置k,从第k个数开始依次后移3个位置。
输出移动前后的数组。
#include
#include
#defineN30
intmain()
{
inti,j,k,a[30],s;
for(i=0;i<=30;i++)
{
a[i]=rand()%90+10;
printf("%d",a[i]);
}
printf("\n");
scanf("%d",&k);
for(i=30-1;i>=k;i--)
a[i]=a[i-3];
for(i=0;i<=30;i++)
printf("%d",a[i]);
printf("\n");
}
7-19.编写程序,产生30个随机数到数组中,删除其中的最大值,输出删除前后的数组。
#include
#include
#include
constintM=30;//控制数组大小
constintN=100;//控制随机数大小范围在0-100之内
intmain()
{
srand(time(0));//产生随机数种子
intrandArray[M]={0};
inti=0;
for(i=0;i{
randArray[i]=rand()%N+1;
}
for(i=0;i{
printf("%d",randArray[i]);
}
intmax=randArray[0];
intnum=0;
for(i=1;i{
if(randArray[i]>max)
{
max=randArray[i];
num=i;
}
}
inttemp=0;
for(i=num;i{
randArray[i]=randArray[i+1];
}
printf("\nThemaxnumberis%d!
\n",max);//输出最大的数
for(i=0;i{
printf("%d",randArray[i]);
}
printf("\n");
return0;
}
7-20.编写程序,输入任意10进制4位正整数,将其化成二进制数。
#include
main()
{intj,k=0,a[16]={0},s;
scanf(“%d”,&s);/*输入待转化的10进制4位正整数s*/
while(s>0)/*按”除二取余”得到各位二进制数a[k]*/
{a[k]=s%2;k++;
s=s/2;}
for(j=15;j>=0;j--)/*
按倒排方式输出二进制数的各位数字
printf(“%2d”,a[j]);
}
7-21.编写程序,产生30个50以内的随机整数到5行6列数组中,输出那些在行和列上均为最小的元素。
#include
#includemain()
{
inta[5][6]={0};
inti,j,min[5][2];
srand((unsigned)time(NULL));
for(i=0;i<5;i++)
{
for(j=0;j<6;j++)
{
a[i][j]=rand()%50;
printf("%-4d",a[i][j]);
}
printf("\n");
}
for(i=0;i<5;i++)
{
min[i][0]=a[i][j];
min[i][1]=0;
for(j=1;j<6;j++)
if(min[i][0]>a[i][j])
{
min[i][0]=a[i][j];
min[i][1]=j;
}
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
if(a[j][min[i][1]]{
min[i][1]=-1;
break;
}
if(min[i][1]!
=-1)
printf("第%d行第%d列:
%d\n",i+1,min[i][1]+1,min[i][0]);
}
return0;
}
7-22.编写程序,产生30个[10,100]中的随机整数到5行7列数组a的前6列中,求每行元素值的和,并把和值记录在各行的最后一个元素,如:
a[2][6]存放的是2行的和。
然后将和值最大的行与首行对调。
#include
main()
{inti,j,p,q,a[5][7],f;
for(i=0;i<5;i++)/*产生a数组*/
for(j=0;j<6;j++)
a[i][j]=rand()%91+10;
for(i=0;i<5;i++)/*产生i行的和并存放在a[i][6]*/
{a[i][6]=0;
for(j=0;j<6;j++)
a[i][6]+=a[i][j];}
for(i=0;i<5;i++)/*输出a数组*/
{for(j=0;j<7;j++)
printf(“%5d”,a[i][j]);
printf(“n”);}
p=0;
for(i=1;i<5;i++)/*找行和最大的行p*/
if(a[i][6]>a[p][6])p=i;
for(j=0;j<7;j++)/*0行与p行交换位置*/
{q=a[0][j];a[0][j]=a[p][j];a[p][j]=q;}
for(i=0;i<5;i++)/*输出交换后的a数组*/
{for(j=0;j<7;j++)
printf(“%5d”,a[i][j]);
printf(“n”);}
}
7-23.编写程序,产生30个[1,100]中的随机整数到5行6列数组中,任意输入一个正整数k,输出数组中与k大小相差5以内的所有元素。
#include
#include
Intmain()
{inti,j,k,a[5][6];
for(i=0;i<5;i++)/*产生a数组*/
for(j=0;j<6;j++)
a[i][j]=rand()%100+1;
for(i=0;i<5;i++)/*输出a数组*/
{for(j=0;j<6;j++)
printf(“%5d”,a[i][j]);
printf(“\n”);}
scanf(“%d”,&k);for(i=0;i<5;i++)/*输出与k的差小于5的数组元素*/
for(j=0;j<6;j++)if(abs(k-
a[i][j])<5)printf(“%5d”,a[i][j]);
printf(“n”);
}
7-24.编写程序,产生30个[1,100]中的随机整数到5行6列数组中,按升序重新排序,并按列的顺序存放到另一个数组中。
输出排序前后的情况。
#include
#include
intmain()
{
inti,j,t,k=0,a[5][6],b[5][6],c[30];
for(i=0;i<5;i++)
for(j=0;j<6;j++)
c[k++]=a[i][j]=rand()%100+1;
for(i=0;i<29;i++)
{
k=i;
for(j=i+1;j<30;j++)
if(c[k]>c[j])k=j;
if(k!
=i){t=c[k];c[k]=c[i];c[i]=t;}
}
k=0;
for(j=0;j<6;j++)
for(i=0;i<5;i++)
b[i][j]=c[k++];
for(i=0;i<5;i++)
{
for(j=0;j<6;j++)
printf("%5d",a[i][j]);
printf("\n");
}
for(i=0;i<5;i++)
{
for(j=0;j<6;j++)
printf("%5d",b[i][j]);
printf("\n");
}
}
7-25.编写程序,产生30个[1,100]中的随机整数到5行6列数组中,求其中最大值和最小值,并把最大值元素与右上角元素对调,把最小值元素与左下角元素对调。
输出重排前后的情况。
习题八
一、单选题
8-1.对以下程序从第一列开始输入数据:
2473↙,程序的输出结果是A____。
#include"stdio.h"
main()
{
intc;
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.6688766
8-2.能正确进行字符串赋值的是_D___。
A.chars[5]={'a','e','i','o','u'};B.chars[5];s="good";
C.chars[5]="abcd";D.chars[5];s[]="good";
8-3.不能正确为字符数组输入数据的是__A__。
A.chars[5];scanf("%s",&s);B.chars[5];scanf("%s",s);
C.chars[5];scanf("%s",&s[0]);D.chars[5];gets(s);
8-4.若有chara[80],b[80];则正确的是_D___。
A.puts(a,b);B.printf("%s,%s",a[],b[]);
C.putchar(a,b);D.puts(a);puts(b);
8-5.以下程序的输出是_A___。
main()
{
chara[2][5]={"6937"',"8254"};
inti,j,s=0;
for(i=0;i<2;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
二、填空题
8-6.以下程序的输出是__fi___。
main()
{
chara[3][4]={"abc","efg","hij"};
intk;
for(k=1;k<3;k++)putchar(a[k][1]);
}
8-7.以下程序的输出是GDABC。
#include"string.h"
main()
{
charb[30];
strcpy(b,"GH");
strcpy(&b[1],"DEF");
strcpy(&b[2],"ABC");
puts(b);
}
8-8.以下程序的输出是__ahAMa____。
(□表示空格,↙表示回车)
#include"stdio.h"
main()
{
chara[80],c='a';intj=0;
scanf("%s",a);
while(a[j]!
='\0'){
if(a[j]==c)a[j]=a[j]-32;
elseif(a[j]==c-32)a[j]=a[j]+32;
j++;
}
puts(a);
}
输入:
AhaMA□Aha↙
8-9.以下程序的输出是_LBLMNP__。
#include"string.h"
main()
{
chara[80]="AB",b[80]="LMNP";
intj=0;
strcat(a,b);
while(a[j++]!
='\0')b[j]=a[j];
puts(b);
}
8-10.以下程序的功能:
从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串。
请填空。
#include"ctype.h"
#include"stdio.h"
main()
{
charstr[81];
inti;
for(i=0;i<80;i++){
str[i]=getchar();
if(str[i]=='\n')break;
}
str[i]=___’\0’___;
i=0;
while(str[i])putchar(str[__i++__]);
}
8-11.以下程序的功能:
输入10个字符串,找出每个字符串的最大字符,并依次存入一维数组中,然后输出该一维数组。
填空