1程序设计基础复习题答案一、填空题1、C语言所提供的实型变量分为两种类型,它们是float和double。2、一个C源程序中至少应包含一个主函数或main函数。3.已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=’a’+’8’-’3’的值为102。4.在标准C语言中,输入操作是由库函数scanf()完成的,输出操作是由库函数printf()完成的。5.对以下说明:intc[10]={116,125,218,312,100,40,13,67,186};c[4]的值为100。6.在C语言中,引用数组元素时,引用数组元素时,其数组下标的数组类型允许是整型常量或整型表达式。7.设y为int型变量,请写出描述“y是偶数”的表达式(y%2)==0。8.设inti=0,j=1,k=2,a=3,b=4;执行表达式(a=ij)&&(b=jk)的值为0。9.与表达式a+=b等价的另一书写形式是a=a+b。10.有以下定义和语句inta[3][2]={1,2,3,4,5,6,},*p[3];p[0]=a[1];则*(p[0]+1)所代表的数组元素是a[1][1]。11.代表一个反斜杠字符“\”的转义字符是'\\'。12.变量的指针就是变量的地址,存放变量地址的变量就是指针变量,它用来指向另一个变量。13.++i和i++的不同之处在于i++是先使用i的值后,再执行i=i+1;而++i是先执行i=i+1后,再使用i的值。14.设x、y和z是int型变量,且x=3,y=4,z=5,则表达式!((xy)&&!z||1)值为0。15.已知函数intf(intk){return((k0)?1:f(k-2)+2);}则f(3)的值是5。16.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。17.计算表达式:x=(i=4,j=10,k=24)后,x的值为24。18.若a和b均是int型变量,且a和b的初值均为5,则计算表达式a+=b++后,a的值为10,b的值为6。19.设inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则表达式*(p+8)的值是9。20.若有以下定义:chara;intb;floatc;doubled;则表达式a*b+d-c值的类型为double。21.*(p++)和*(++p)作用不同,它们的意义分别是*(p++)先取*p的值,后使p加1,*(++p)先使p加1,再取*p2二、程序理解题请给出运行以下程序的输出结果:1.#includestdio.hvoidmain(){intu=24,v=16,w;while(v){w=u%v;u=v;v=w;}printf(%d\n,u);}输出结果为:82.voidmain(){chars[]Yes\n/No,*ps=s;puts(ps+4);*(ps+4)=0;puts(s);}输出结果:/NoYes3.main(){intp[7]={11,13,14,15,16,17,18};inti=0,j=0;while(i7&&p[i]%2==1)j+=p[i++];printf(%d\n,j);}输出结果:24。4、下列程序的运行结果是total=144。voidmain(){intarr_sum(intarr[],intn);inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};3int*p,total;p=a[0];total=arr_sum(p,12);printf(“total=%d\n”,total);}intarr_sum(intarr[],intn){inti,sum=0;for(i=0;in;i++)sum=sum+arr[i];return(sum);}5.给出以下程序的运行结果:voidmain(){inta,b,c;a=25b=025;c=0x25;printf(%d,%d,%d\n,a,b,c);}运行结果:25,21,376.给出有下面一段程序的运行结果。voidmain(){intp[7]={11,13,14,15,16,17,18};inti=0,,j=0;while(i7&&p[i]%2==1)j+=p[i++];printf(%d\n,j);}运行结果:247.给出有下面一段程序的运行结果。#includestdio.hintfac(intn){staticintf=1;4f=f*n;return(f);}voidmain(){inti;for(i=1;i=5;i++)printf(%d!=%d\n,i,fac(i));}答案:1!=12!=23!=64!=245!=1208.给出有下面一段程序的运行结果。main(){inta[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}};inti=0,j=0,s=0;while(i++4){if(i==2||i==4)continue;j=0;do{s+=a[j];j++;}while(j4);}printf(%d\n,s);}运行结果:92三、程序填空题1.以下程序可判断输入的一个整数是否能被5或13整除,若能整除,输出“yes”并换行,否5则输出“no”并换行。请填空。#includestdio.hvoidmain(){intk;printf(“Enteraintnumber:”);scanf(“%d”,&k);if____(k%5==0||k%13==0)__________printf(“yes\n”);elseprintf(__“no\n”______);}2.下面程序是将键盘输入的英文字符全改为小写英文字符输出,用换行符结束循环。请填空。#includestdio.hvoidmain(){charc;while((c=getchar())!='\n'){if(c='A'||c='Z')c=c+32;printf(%c,c);}printf(\n);}3.有一个一维数组score,内放10个学生成绩,求平均成绩,请填空。#includestdio.hfloataverage(floatarray[10]);voidmain(){floatscore[10],aver;inti;printf(input10scores:\n);for(i=0;i10;i++)scanf(%f,&score[i]);6printf(\n);aver=average(score);printf(averagescoreis%5.2f,aver);}floataverage(floatarray[10]){inti;floataver,sum=array[0];for(i=1;i10;i++)sum=sum+array[i];aver=sum/10;returnaver;}4.以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。请填空。Voidmain(){inti,a[20],sum,count;sum=count=0;for(i=0;i20;i++)scanf(%d,&a[i]);for(i=0;i20;i++){if(a0){count++;sum+=a[i];}}printf(sum=%d,count=%d\n,sum,count);}5.下面程序可以逐行输出由language数组元素所指向的5个字符串。请填空。#includestdio.hvoidmain(){char*language[]={“BASIC”,“FORTRAN”,“PROLOG”,“JAVA”,“C++”};char**q;intk;for(k=0;k5;k++){q=language+k;printf(“%s\n”,*q);}}6.以下程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串,请填空。7#includestdio.hvoidmain(){charstr[81],*sptr;inti;for(i=0;i80;i++){str[i]=getchar();if(str[i]=='\n')break;}str[i]='\0';sptr=str;while(*sptr)putchar(*sptr++);}7、程序的功能是用递归方法计算第五位学生的年龄,请填空。递归公式如下:10(n=1)age(n)=age(n-1)+2(n1)程序:intage(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;return(c);}voidmain(){printf(“age:%d\n”,age(5));}8)下面程序的功能是在三个字符串中找出最小的,请填空:#includestdio.h#includestring.hvoidmain(){chars[20],str[3][30];inti;for(i=0;i3;i++)gets(str[i]);strcpy(s,(strcmp(str[0],str[1])0?str[0]:str[1]));if(strcmp(str[2],s)0)strcpy(s,str[2]);print(“%s\n”,s);}89)以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。请填空。#includestdio.hvoidmain(){int*a,*b,*c,num,x,y,z;a=&x;b=&y;c=&z;printf(“输入3个整数:”);scanf(“%d%d%d”,a,b,c);printf(“%d,%d,%d\n”,*a,*b,*c);num=*a;if(*a*b)num=*b;if(num*c)num=*c;printf(“输出最小整数:%d\n”,num);}10.C语言源程序文件的后缀是__.cpp_________,经编译后生成的文件的后缀是__.obj_______,连接后生成的文件的后缀是.exe。11.从键盘输入一个大写字母,要求改用小写字母输出。请填空:#includestdio.hvoidmain(){charc1,c2;c1=getchar();printf(“%c,%d\n”,c1,c1);c2=c1+32;printf(“%c,%d\n”,c2,c2);}12.以下程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串。请填空:#includestdio.hvoidmain(){charstr[81],*sptr;inti;for(i=0;i80;i++){str[i]=getchar();if(str[i]=='\n')break;}str[i]='\0';sptr=str;while(*sptr)putchar(*sptr++;}13.输入三角形的三边长,求三角形面积。请填空:9voidmain(){floata,b,c,s,area;scanf(“%f,%f,%f”,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n”,a,b,c,s);printf(“area=%7.2f\n”,area);}14.判断m是否素数。请填空:#includestdio.h#includemath.hvoidmain(){intm,i,k;scanf(%d,&m);k=sqrt(m);for(i=2;i=k;i++)if(m%i==0)break;if(ik)printf(%disaprimenumber\n,m);elseprintf(%disnotaprimenumber\n,m);}15.以下程序对输入的一个小写字母,将字母循环后移5个位置后输出。如’a’变成‘f’,’w’变成