第4章作业答案-C语言程序设计(第4版)-马靖善-清华大学出版社_第1页
第4章作业答案-C语言程序设计(第4版)-马靖善-清华大学出版社_第2页
第4章作业答案-C语言程序设计(第4版)-马靖善-清华大学出版社_第3页
第4章作业答案-C语言程序设计(第4版)-马靖善-清华大学出版社_第4页
第4章作业答案-C语言程序设计(第4版)-马靖善-清华大学出版社_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章作业题一、单选题1.若有定义:intaa[8];,则不能代表数组元素aa[1]地址的是(A)。A.&aa[0]++B.&aa[1]C.&aa[0]+1D.aa+12.运行下列程序的输出结果是(C)。main(){inta[]={1,2,3,4,5},i,*p=a+2;printf("%d",p[1]-p[-1]);}A.出错,因下标不能为负值B.1C.23.下列程序运行后的输出结果是(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.youme4.以下语句或语句组中,能正确进行字符串赋值的是(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.1597.有下面的程序片段,则对数组元素的错误引用是(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+29.若二维数组y有m列,则排在y[i][j]前的元素个数为(A)。A.i*m+jB.j*m+iC.i*m+j-1D.i*m+j+110.有定义语句: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.312.以下对二维数组的定义中正确的是(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.814.下面程序段的运行结果是(C)。chara[]="lanuage",*p;p=a;while(*p!=’u’){printf("%c",*p-32);p++;}A.LANGUAGEB.languageC.LAND.langUAGE15.若有语句: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.517.将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.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.4623.设有定义: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.2525.下面对指针变量的叙述,正确的是(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>q28.用数组名作为函数调用时的实参,实际上传递给形参的是(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.633.设有定义:chars[12]="string";,则printf("%d",strlen(s));的输出结果是(D)。A.7B.12C.11D.634.设有程序段:#defineN3#defineMN+2floata[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<stdio.h>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])。请填空。#defineN4main(){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;i<N;i++)for(j=0;j<i;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<stdio.h>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){}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;j<n;j++)sum+=x[j];ave=sum/n;printf("ave=%f\n",ave);for(j=0;j<n;j++)if(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==’’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<stdio.h>main(){inta[N][N]={{1,2,3},{4,5,6},inti,j;for(i=0;i<N;i++)for(j=0;j<N;j++)b[i][j]=a[i][j]+a[j][i];for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%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<i;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,03.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,64.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,195.#include<string.h>main(){charstr1[20]="China\0USA",str2[20]="Beijing";inti,k;i=strlen(str1);k=strlen(str2);printf("%d,%d\n",i,k);}运行结果:5,76.main(){inta[]={2,4,6,8,10};inty=0,x,*p;p=&a[1];printf("%d,%d\n",a[1],*(p+1));}运行结果:4,67.main(){intc;charnum[][4]={"CDEF","ACBD"};c=num[0][1]-'A';printf("%d,%c\n",c,num[1][2]);}运行结果:3,B8.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,29.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,693710.#include<string.h>main(){charc='a',t[]="youandme";intn,k,j;n=strlen(t);for(k=0;k<n;k++)if(t[k]==c){j=k;break;}elsej=-1;printf("%d,%d\n",j,n);}运行结果:4,1011.main(){inta[]={2,3,4},*p;p=a+1;printf("%d,%d\n",a[1],p[1]);}运行结果:3,412.main(){inta[]={1,3,5,7};int*p=a+1;printf("%d,%d\n",a[1],p[1]);}运行结果:3,5五、编程题1.计算5×5矩阵的主、次对角线元素之和。方法一:#defineN5main(){inta[N][N],i,j,sum=0;for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%d",&a[i][j]);for(i=0;i<N;i++)for(j=0;j<N;j++)if(i==j||i+j==N-1) sum+=a[i][j];printf("sum=%d\n",sum);}方法二:#defineN5main(){inta[N][N],i,j,sum=0;for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%d",&a[i][j]);for(i=0;i<N;i++)sum+=a[i][i]+a[i][N-i-1];sum-=a[N/2][N/2];/*该元素多加一次*/printf("sum=%d\n",sum);}2.从键盘上输入任意10个数并存放到数组a中,计算它们的平均值,找出其中的最大数和最小数,并显示结果。#include"stdio.h"voidmain(){floata[10],ave,max,min;inti;printf("Enterarraya:\n");for(i=0;i<10;i++)scanf("%f",&a[i]);max=a[0];min=a[0];ave=a[0];for(i=1;i<10;i++){ave+=a[i];if(max<a[i])max=a[i];if(min>a[i])min=a[i];}ave/=10;printf("ave=%.2fmax=%.2fmin=%.2f\n",ave,max,min);}3.将5×5矩阵转置并输出。#include"stdio.h"#defineN5voidmain(){inti,j,a[N][N],t;for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%d",&a[i][j]);for(i=1;i<N;i++)for(j=0;j<i;j++){t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",a[i][j]);printf("\n");}}4.将数组a中的10个数升序排列输出。#include"stdio.h"#defineN10voidmain(){inti,j,k,a[N],t;for(i=0;i<N;i++)/*输入N个要排序的数*/scanf("%d",&a[i]);for(i=0;i<N-1;i++)/*排序总共进行N-1步*/{k=i;/*初始化最小数的下标*/for(j=i+1;j<N;j++)/*寻找最小数下标*/if(a[j]<a[k])k=j;/*记录新的最小数下标*/if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}/*第i个数和最小数交换*/}for(i=0;i<N;i++)/*输出排好序的N个数*/printf("%4d",a[i]);printf("\n");}5.把从键盘输入的字符串逆置存放并输出。#include"stdio.h"voidmain(){charstr[81],*p,*q,ch;printf("Inputastring:\n");gets(str);p=str;q=p;while(*q)q++;q--;while(p<q){ch=*p;*p++=*q;*q--=ch;}printf("turnstring:%s\n",str);}6.将字符数组a中的字符串复制到字符数组b。#in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论