第4章作业答案C语言程序设计第4版马靖善清华大学出版社.docx
《第4章作业答案C语言程序设计第4版马靖善清华大学出版社.docx》由会员分享,可在线阅读,更多相关《第4章作业答案C语言程序设计第4版马靖善清华大学出版社.docx(24页珍藏版)》请在冰豆网上搜索。
第4章作业答案C语言程序设计第4版马靖善清华大学出版社
第4章作业题
一、单选题
1.若有定义:
intaa[8];,则不能代表数组元素aa[1]地址的是(A)。
A.&aa[0]++B.&aa[1]C.&aa[0]+1D.aa+1
2.运行下列程序的输出结果是(C)。
main()
{inta[]={1,2,3,4,5},i,*p=a+2;
printf("%d",p[1]-p[-1]);
}
A.出错,因下标不能为负值B.1C.2D.3
3.下列程序运行后的输出结果是(C)。
main()
{chararr[2][4];
strcpy(arr,”you”);
strcpy(arr[1],”me”);
arr[0][3]=’&’;
printf(“%s\n”,arr);
}
A.youB.you&C.you&meD.youme
4.以下语句或语句组中,能正确进行字符串赋值的是(A)。
A.char*sp="right!
"; B.chars[10]; s="right!
";
C.chars[10]; *s="right!
"; D.char*sp; *sp="right!
";
5.若有如下定义,则不能表示数组a元素的表达式是(C)。
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
A.*pB.*aC.a[10]D.a[p-a]
6.以下程序的输出结果是(A)。
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.357B.147C.159D.369
7.有下面的程序片段,则对数组元素的错误引用是(C)。
inta[12]={0},*p[3],**pp,i;
for(i=0;i<3;i++)
p[i]=&a[i*4];
pp=p;
A.pp[0][1]B.a[10]C.p[3][1]D.*(*(p+2)+2)
8.设有定义:
inta[10],*p=a;,对数组元素的正确引用是(B)。
A.a[p]B.*(p+2)C.p[a]D.p+2
9.若二维数组y有m列,则排在y[i][j]前的元素个数为(A)。
A.i*m+jB.j*m+iC.i*m+j-1D.i*m+j+1
10.有定义语句:
int(*prt)[3],则标识符prt(C)。
A.是一个指向整型变量的指针
B.是一个指针数组名,每个元素都是一个指向整数变量的指针
C.是一个指针,它指向一个具有三个元素的一维数组
D.定义不含法
11.以下程序执行后的输出结果是(D)。
#include"string.h"
main()
{char*p[10]={"abc","aabdfg","dcdbe","abbd","cd"};
printf("%d\n",strlen(p[4]));
}
A.5B.4C.3D.2
12.以下对二维数组的定义中正确的是(A)。
A.inta[][3]={1,2,3,4,5,6};B.inta[][3];
C.inta[4][]={1,2,3,4,5,6};D.inta[][]={{1,2,3},{4,5,6}};
13.若有如下定义,则b的值是(A)。
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b=p[5];
A.9B.6C.8D.5
14.下面程序段的运行结果是(C)。
chara[]="lanuage",*p;
p=a;
while(*p!
=’u’){printf("%c",*p-32);p++;}
A.LANGUAGEB.languageC.LAND.langUAGE
15.若有语句:
chars1[10],s2[10]="books";,则能将字符串books赋给数组s1的语句是(D)。
A.s1="books";B.strcpy(s2,s1);C.s1=s2;D.strcpy(s1,s2);
16.下列程序的输出结果是(D)。
main()
{chara[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
printf("%d",*--p);
}
A.运行出错B.a[4]的地址C.3D.5
17.将p定义为指向含4个元素的一维数组的指针变量,正确语句为(C)。
A.intp[4];B.int*p[4];C.int(*p)[4];D.int**p[4];
18.以下程序的输出结果是(D)。
main()
{intm[][3]={1,4,7,2,5,8,3,6,9};
inti,j,k=2;
for(i=0;i<3;i++)
{printf("%d",m[k][i]);}
}
A.456B.258C.789D.369
19.有以下语句,则对a数组元素的引用不正确的是(0≤i≤9)(D)。
inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;
A.a[p-a]B.*(&a[i])C.p[i]D.*(*(a+i))
20.下列程序执行后的输出结果是(A)。
main()
{inta[3][3],*p,i;
p=&a[0][0];
for(i=0;i<9;i++)p[i]=i+1;
printf("%d\n",a[1][2]);
}
A.6B.9C.3D.随机数
21.若有定义:
chara[20],*b=a;,则不能给数组a输入字符串”Thisisabook”的语句是(B)。
A.gets(a);B.scanf("%s",a);C.gets(&a[0]);D.gets(b);
22.下列程序的输出结果是(A)。
main()
{inta[5]={2,4,6,8,10},*p,**k;
p=a;
k=&p;
printf("%d",*(p++));
printf("%d\n",**k);
}
A.24B.22C.4D.46
23.设有定义:
chara[10]="ABCD",*p=a;,则*(p+4)的值是(C)。
A."ABCD"B.’D’C.’\0’D.不确定
24.下列程序运行后的输出结果是(B)。
main()
{inti,s=0,t[]={1,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+=2)s+=*(t+i);
printf(“%d\n”,s);
}
A.45B.25C.20D.36
25.下面对指针变量的叙述,正确的是(C)。
A.指针变量可以加上一个指针变量
B.可以把一个整形数赋给指针变量
C.指针变量的值可以赋给指针变量
D.指针变量不可以有空值,即该指针变量必须指向某一变量
26.以下定义语句中,错误的是(D)。
A.inta[]={1,2};B.char*a[3];
C.chars[10]="test";D.intn=5,a[n];
27.设有定义:
inta[10],*p=a+6,*q=a;,则下列运算哪种是错误的(A)。
A.p+qB.p-qC.p+3D.p>q
28.用数组名作为函数调用时的实参,实际上传递给形参的是(A)。
A.数组首地址B.数组第一个元素的值
C.数组全部元素的值D.数组元素的个数
29.设有定义:
inta[]={1,5,7,9,11,13},*p=a+3;,则*(p-2)与*(a+4)的值分别是(C)。
A.59B.19C.511D.有错误
30.下列描述中不正确的是(A)。
A.可以对整型数组进行整体输入、输出
B.字符型数组中可以存放字符串
C.可以对字符型串进行整体输入、输出
D.不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值
32.有以下程序,执行后输出结果是(B)。
main()
{intx[8]={8,7,6,5,0},*s;
s=x+3;
printf("%d",s[2]);
}
A.随机值B.0C.5D.6
33.设有定义:
chars[12]="string";,则printf("%d",strlen(s));的输出结果是(D)。
A.7B.12C.11D.6
34.设有程序段:
#defineN3
#defineMN+2
floata[M][N];
则数组a的元素个数和最后一个元素分别为(A)。
A.15,a[4][2]B.15,a[3][5]C.8,a[4][2]D.15,a[5][3]
二、程序填空题
1.以下程序的功能是:
求出数组x中各相邻两个元素的和依次存放到a数组中,然后输出。
请填空。
main()
{
intx[10],a[9],i;
printf(“往数组x中读入10个整数:
”);
for(i=0;i<10;i++)
scanf("%d",&x[i]);
for(i=1;i<10;i++)
a[i-1]=x[i]+x[i-1];
for(i=0;i<9;i++)
printf("%d",a[i]);
printf("\n");
}
2.以下程序统计从终端输入的字符中大写字母的个数,num[0]中统计字母A的个数,num[1]中统计字母B的个数,其它依次类推.用#号结束输入,请填空。
#include
main()
{intnum[26]={0},i;charc;
while((c=getchar())!
='#')
if(c>=’A’&&c<=’Z’)num[c-‘A’]+=1;
for(i=0;i<26;i++)
printf("%c:
%d\n",i+'A',num);
}
3.下面程序的功能是检查一个N×N矩阵是否对称(即判断是否所有的a[i][j]等于a[j][i])。
请填空。
#defineN4
main()
{inta[N][N]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4};
inti,j,found=0;
for(i=0;ifor(j=0;j
if(a[i][j]!
=a[j][i])
{found=1;
break;
}
if(found)printf("No");
elseprintf("Yes");
}
4.以下程序用以删除字符串中所有的空格,请填空。
main()
{chars[100]={"OurteacherteachClanguage!
"};
inti,j;
for(i=j=0;s[i]!
='\0';i++)
if(s[i]!
=''){s[j]=s[i];j++;}
s[j]=‘\0’;
printf("%s\n",s);
}
5.下面程序的功能是输出两个字符串中对应相等的字符。
#include
main()
{
inti=0;
charx[]="programming";
chary[]="Fortran";
while(x[i]&&y[i])
{
if(x[i]==y[i])
putchar(x[i]);
i++;
}
}
6.以下程序用来输出字符串"china"的长度,请填空。
#include"string.h"
#include"stdio.h"
main()
{chara[]="china";
printf("%d\n",strlen(a));
}
7.下列程序的功能是把输入的十进制长整型数以十六进制数的形式输出。
main()
{charb[]="0123456789ABCDEF";
intc[64],d,i=0,base=16;
longn;
scanf("%ld",&n);
do
{c[i]=n%base;
i++;
n=n/base;
}while(n!
=0);
for(--i;i>=0;--i)
{d=c[i];printf("%c",b[d]);}
}
8.下列程序的功能是将数组a的元素按行求和并存储到数组s中。
main()
{inta[3][4],s[3]={0};
inti,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
{for(j=0;j<4;j++)
s[i]+=a[i][j];
printf("%d\n",s[i]);
}
}
三、程序改错题
1.下列程序的功能是计算字符串的字符个数。
#include"stdio.h"
main()
{charstr[80];
ints,i=0;/*ints=0,i=0;*/
gets(str);
for(;str[i]!
=‘\0’;i++)
s++;
printf("%4d\n",s);
}
2.给定n个实数,输出平均值,并统计在平均值以下(含平均值)的实数个数.
main()
{
floatx[]={23.5,45.67,12.1,6.4,58.9,98.4},sum=0,ave;
intn=6,j,c=0;
for(j=0;jsum+=x[j];
ave=sum/n;
printf("ave=%f\n",ave);
for(j=0;jif(x[j]>=ave)c++;/*if(x[j]<=ave)c++;*/
printf("%d\n",c);
}
3.下列程序的功能是计算3×3矩阵的主对角线元素之和。
main()
{inti,a[3][3]={1,2,3,4,5,6,7,8,9},sum=0;
for(i=0;i<=3;i++)/*for(i=0;i<3;i++)*/
sum=a[i][i];
printf("sum=%d\n",sum);
}
4.下列程序的功能是复制字符串a到b中。
main()
{chara[20]="abcde",b[20];
char*str1=a,*str2;
str2=b;
while(*str2++==*str1++);/*while(*str2++=*str1++);*/
printf("%s",b);
}
5.从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线上的元素之和sum。
#include"stdio.h"
main()
{inta[3][3],sum=0;
inti,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
sum=sum+a[i][j];/*sum=sum+a[i][i];*/
printf("sum=%d\n",sum);
}
6.下列程序的功能是统计字符串中空格数。
#include"stdio.h"
main()
{intnum;/*intnum=0;*/
chara[81],*str=a,ch;
gets(a);
while((ch=*str++)!
=’\0’)
if(ch==’’)num++;
printf("num=%d\n",num);
}
7.下列程序的功能是输入一个字符串,然后再输出。
main()
{chara[20];
inti=0;
scanf("%s",&a);/*scanf("%s",a);*/
while(a[i])printf("%c",a[i++]);
}
8.将数组逆序输出。
#defineN11
main()
{inti,j,t,number;
inta[N]={1,2,4,6,8,9,12,15,149,156};
for(i=N-1;i>=0;i++)/*for(i=N-2;i>=0;i++)*/
printf("%5d",a[i]);
printf("\n");
}
9.有N×N矩阵A,进行a[i][j]+a[j][i]的操作后,存放在矩阵B中,并输出B矩阵。
#defineN3
#include
main()
{inta[N][N]={{1,2,3},{4,5,6},{7,8,9}},b[N][N];
inti,j;
for(i=0;ifor(j=0;jb[i][j]=a[i][j]+a[j][i];
for(i=0;i{for(j=0;jprintf("%4d",b[j][i]);/*printf("%4d",b[i][j]);*/
printf("\n");
}
}
四、读程序写结果题
1.main()
{chara[]="*****";
inti,j,k;
for(i=0;i<4;i++)
{printf("\n");
for(j=0;j
printf("%c",'');
for(k=0;k<4;k++)
printf("%c",a[k]);
}
}
运行结果:
****
****
****
****
2.main()
{inti,n[6]={0};
for(i=1;i<=4;i++)
{n[i]=n[i-1]*2+1;
}
printf("%d,%d\n",n[3],n[5]);
}
运行结果:
7,0
3.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)];
printf("%d,%d\n",p[1],p[2]);
}
运行结果:
2,6
4.main()
{inta[3][3]={{1,2},{3,4},{5,6}};
inti,j,s=0;
for(i=0;i<3;i++)
for(j=0;j<=i;j++)
s+=a[i][j];
printf("%d,%d",a[1][2],s);
}
运行结果:
0,19
5.#include
main()
{charstr1[20]="China\0USA",str2[20]="Beijing";
inti,k;
i=strlen(str1);k=strlen(str2);
printf("%d,%d\n",i,k);
}
运行结果:
5,7
6.main()
{inta[]={2,4,6,8,10};
inty=0,x,*p;
p=&a[1];
printf("%d,%d\n",a[1],*(p+1));
}
运行结果:
4,6
7.main()
{intc;
charnum[][4]={"CDEF","ACBD"};
c=num[0][1]-'A';
printf("%d,%c\n",c,num[1][2]);
}
运行结果:
3,B
8.main()
{inti,n[3];
for(i=0;i<3;i++)
n[i]=i;
for(i=0;i<=1;i++)
n[i]=n[i+1]+1;
printf("%d,%d\n",n[1],n[2]);
}
运行结果:
3,2
9.main()
{charch[5]={"6937"};
inti,j,s;
s=0;
for(i=0;ch[i]!
='\0';i++)
s=s*10+ch[i]-'0';
printf("%d,%d\n",i,s);
}
运行结果:
4,6937
10.#include
main()
{charc='a',t[]="youandme";
intn,k,j;
n=strlen(t);
for(k=0;kif(t[k]==c)
{j=k;break;}
elsej=-1;
printf("%d,%d\n",j,n);
}
运行结果:
4,10
11.main()
{inta[]={2,3,4},*p;
p=a+1;
printf("%d,%d\n",a[1],p[1]);
}
运行结果:
3,4
12.main()
{inta[]={1,3,5,7};
int*p=a+1;
printf("%d,%d\n",a[1],p[1]);
}
运行结果:
3,5
五、编程题
1.计算5×5矩阵的主、次对角线元素之和。
方法一:
#defineN5
main()
{inta[N][N],i,j,sum=0;
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
for(i=0;ifor(j=0;jif(i==j||i+j==N-1)
sum+=a[i][j];
printf("sum=%d\n",sum);
}
方法二:
#defineN5
main()
{inta[N][N],i,j,sum=0;
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
for(i=0;isum+=a[i][i]+a[i][N-i-1];
sum-=a[N/2][N/2];/*该元素多加一次*/
printf("sum=%d\n",sum);
}
2.从键盘上输入任意10个数