程序设计习题及答案.doc 18页

  • 128.00 KB
  • 2022-04-22 11:40:33 发布

程序设计习题及答案.doc

  • 18页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'2011-2012年度第一学期“C语言程序设计”期末考试复习提纲一、考试题型序号题型每题得分题量总分一选择题21530二填空2510三程序阅读4520四编程题1011015230二、题例:(一)项目二数据类型、运算符和表达式选择题:1.不合法的C语言整型常量是A。A.–012B.0x35C.123LD.8E22.不合法的C语言实型常量是A。A.E3B..123C.–6.2E4D.5.03.不合法的C字符常量是C。A.’2’B.’101’C.’AB’D.’n’4.下列四组选项中,均是不合法的用户标识符的选项是B。A.WP_0doB.b-agotointC.floatla0_AD.-123abcTEMP5.下列四组选项中,均是合法转义字符的选项是A。A.’”’’\’’n’B.’’’17’’”’C.’18’’f’’xab’D.’\0’’101’’xlf’6.定义三个变量a、b、c,并分别赋初值为5。能实现该功能的语句是C。A.inta=b=c=5;B.inta,b,c=5;C.inta=5,b=5,c=5;D.inta=5;b=5;c=5;7.若x,y,t均为int类型,则执行语句x=y=3;t=++x||++y;后,y的值是D。A.不定值B.4C.1D.38.若x、i、j、k都是int型变量,则计算下面表达式后,x的值为C。x=(i=4,j=16,k=32)A.4B.16C.32D.529.设有说明:charw;intx;floaty;doublez;则表达式w*x+z-y值的数据类型为D。A.floatB.charC.intD.double 10.设以下变量均为int类型,则值不等于7的表达式是C。A.(x=y=6,x+y,x+1)B.(x=y=6,x+y,y+1)C.(x=6,x+1,y=6,x+y)D.(y=6,y+1,x=y,x+1)填空题:1.若有定义intm=5,y=2;,则计算表达式y+=y-=m*=y后的y值是-16。2.若s是int型变量,且s=6,则表达式s%2+(s+1)%2的值为1。3.若a是int型变量,则表达式(a=4*5,a*2),a+6的值为26。4.若x和a均是int型变量,则计算表达式x=(a=4,6*2)后的x值为12,计算表达式x=a=4,6*2后的x值为4。5.若a是int型变量,则计算表达式a=25/3%3后a的值为2。6.若x和n均是int型变量,且x和n的初值均为5,则计算表达式x+=n++后x的值为10,n的值为6。7.若有定义:charc=‘10’;则变量c中包含的字符个数为1。8.若有定义:intx=3,y=2;floata=2.5,b=3.5;则下面表达式的值为1。(x+y)%2+(int)a/(int)b9.已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=’a’+’8’-’3’的值为102。阅读题:(写出程序运行结果)1.#includemain(){intx=97;chary=’b’;printf(“%c,%d ”,x,y) ;}答:a,982.#includemain(){intx=6;x+=x-=x*x ;printf(“x=%dn”,x) ;}答:x=﹣603.#includemain(){intx;(x=4*5,x*5),x+25;printf(“x=%dn”,x) ;}答:x=204.#include main(){inti=1,j;j=-i++;printf(“%dn”,j) ;}答:﹣1hr编程题:(顺序结构编程)1.输入华氏温度,输出摄氏温度。C=5/9*(F-32)#includemain(){floatC,F;printf("请输入华氏温度F:");scanf("%f",&F);C=5.0/9*(F-32);printf("%.2f℉=%.2f℃n",F,C);}2.输入底面半径r和高度h,计算并输出圆柱体的体积v。v=πr2h(π取3.14,v计算结果保留到小数点后两位)#include#definePI3.14main(){floatr,h,V;printf("请输入底面半径r和高度h:");scanf("%f%f",&r,&h);V=PI*r*r*h;printf("圆柱体的体积V=%.2fn",V);}3.从键盘输入一扇形的半径和角度,求扇形的面积和周长。#include#definePI3.14main(){floatr,n,S,C;printf("请输入扇形的半径r和角度n:");scanf("%f%f",&r,&n);S=(n*PI*r*r)/360;C=(n*PI*r)/180+2*r; printf("扇形的面积S=%.2f,周长C=%.2fn",S,C);}4.从键盘输入学生的三门考试成绩,计算并输出平均成绩。#includemain(){floata,b,c,avg;printf("请输入学生三门考试的成绩:");scanf("%f%f%f",&a,&b,&c);avg=(a+b+c)/3;/*求平均成绩*/printf("平均成绩为:%.2fn",avg);}(二)项目三C语言程序控制结构选择题:1.下列for循环的循环次数是 D。    inti=0,j;    for(j=10;i=j=10;i++,j--)printf(”ok”);A.0次B.1次C.10次D.无限次2.下列for循环的循环次数是 B 。    inti=0,j=0;for(;!j&&i<=5;i++)j++;A.5次B.1次C.无限D.6次3.语句for(i=0,j=0;i<=100;i++)j=j+i;运行后j的值为D 。A.500B.100   C.5000D.50504、 有以下程序: #include  main() {char c; while((c=getchar())!="?") putchar(--c); } 程序运行时,如果从键盘输入:Y?N?<回车>,则输出结果为D。A.YB.XYC.YXD.X5.下面的程序段执行时,若从键盘输入5,则输出为 D 。  inta;  scanf(”%d”,&a);  if(a-->5)printf(”%dn”,a++);elseprintf(”%dn”,a);A.7B.6C.5D.46.若inta=5;则执行下列语句后打印的结果为 A 。do{printf(“%2dn”,a--); }while(!a);A.5  B.不打印任何结果  C.4 D.陷入死循环7.语句for(i=0,j=0;i<=100;i++)j=j+i;运行后j的值为 D 。A.500   B.100   C.5000   D.50508.下面程序段的运行结果是C。intn=0;while(n++<=2);printf(“%d”,n);A.2B.3C.4D.有语法错误9.若i为整型变量,则以下循环执行次数是B。for(i=2;i==0;)printf(“%d”,i--);A.无限次B.0次C.1次D.2次10.执行语句for(i=1;i++<4;);后变量i的值是C。和第八题相似A.3B.4C.5D.不定填空题:1、若输入字符串:abcdef<回车>,则以下while循环体将执行____0____次。While((ch=getchar())==’d’)printf(“**”);2、下面程序段的运行结果是___a=-5______。i=1;a=0;s=1;do{a=a+s*i;s=-s;i++;}while(i<=10);printf(“a=%d”,a);3.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请填空。intn=0,c;c=getchar();while(c!=’n’){if(c>=’0’&&c<=’9’)n++;c=getchar();}4.以下程序中,while语句的循环次数是无限次。#includemain(){inti=0;while(i<10){if(i<1)continue;if(i==5)break;i++;}printf(“%d”,i); }5.下面程序的功能是用“辗转相除法”求两个正整数的最大公约数。请填空。#includemain(){intr,m,n;scanf(“%d%d”,&m,&n);if(mmain(){inti,j;for(i=1;i<5;i++)for(j=2;j<=i;j++)putchar(‘#’);}阅读题:(写出程序运行结果)1.#includemain(){inty=10;do{y--;}while(--y);printf(“%dn”,y--);}答:02. #includemain() {int x=15; while(x>10&&x<50) {x++; if(x/3){x++;break;} else continue; } printf(“%dn”,x); } 答:17 3.#includemain(){inta=1,b=0;for(;a<3;a++)switch(a++){case1:b--;break;case2:b++;case3:b+=3;}printf(“%dn”,b);}答:﹣14.#includemain(){ints,i;for(s=0,i=1 ;i<3 ;i++,s+=i) ;printf(“%dn”,s);}答:5编程题:1.计算s=1+1/2+1/3+……+1/n#includemain(){inti,n;floats;scanf("%d",&n);for(s=0.0,i=1;i<=n;i++)s=s+1.0/(i);printf("s=%fn",s);}2.求和:从1加到100#includemain(){intn,s;for(s=0,n=1;n<=100;n++)s=s+n;printf("s=%dn",s); }1.如果0main(){intn,i;longs;printf("请输入整数n:");scanf("%d",&n);if(n>0&&n<17){for(i=2,s=1;i<=n;i++)s=s*i;printf("%d!=%dn",n,s);}elseprintf("输入错误!请输入1-16中的整数!n");}2.如果0〈n<8,请计算s=1!+2!+3!+……+n!,并打印输出计算结果s。(注:n!=1*2*3*……*n)#includemain(){intn,i,s,fact;printf("请输入整数n:");scanf("%d",&n);if(n>0&&n<8){for(i=1,s=0,fact=1;i<=n;i++){fact=fact*i;/*求n!*/s=s+fact;/*求s=1!+2!+3!+……+n!*/}printf("s=%dn",s);}elseprintf("输入错误,请输入1-7中的整数!n");}3.从键盘输入一个大于1的整数,输入是否为素数,是,则输出“YES”,否则输出“NO”#includemain(){ intn,i;printf("请输入整数n:");scanf("%d",&n);if(n>1){for(i=2;i #includemain(){charss[10]=“1,2,3,4,5”;gets(ss);strcat(ss,”6789”);printf(”%sn”,ss);}A.ABC6789B.BC67C.12345ABC6D.ABC4567898.判断字符串s1是否大于字符串s2,应当使用___D____.A.if(s1>s2)B.if(strcmp(s1,s2))C.if(strcmp(s2,s1)>0)D.if(strcmp(s1,s2)>0)填空题:1.下面程序以每行4个数据的形式输出a数组,请填空。#defineN20main(){inta[N],i;for(i=0;i0)x++;elsey++;printf(“%d,%dn”,x,y);}4.下面程序的功能是:输入50个数,按逆序输出,请填空。main(){inta[50],i;for(i=0;i<50;i++)scanf(“%d”,&a[i]);for(__i=49__;i>=0;_i--__)printf(“%4d”,a[i]); }5.下面程序可求出矩阵a的主对角线上的元素之和,请填空。main(){inta[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;for(i=0;i<3;i++)for(j=0;j<3;j++)if(_i==j_)sum=sum+__a[i][j]__;printf(“sum=%dn”,sum);}6.下面程序的功能是在三个字符串中找出最小的,请填空。#include#includemain(){chars[20],str[3][20];inti;for(i=0;i<3;i++)gets(str[i]);strcpy(s,__str[0]__);if(strcmp(str[1],s)<0)strcpy(s,str[1]);if(strcmp(str[2],s)<0)strcpy(s,str[2]);printf(“%sn”,__s__);}阅读题:1.#includemain(){inta[10],i;for(i=9;i>=0;i--)a[i]=10-i;printf(“%d%d%dn”,a[2],a[5],a[8]);}答:8522.#includemain(){inta[3][3]={1,2,3,4,5,6,7,8,9},i,s=0;for(i=0;i<=2;i++)s=s+a[i][i];printf(“s=%dn”,s);}答:s=153.#includemain() {inta[4][4]={{1,3,5},{2,4,6},{3,5,7}};printf(“%d%d%d%dn”,a[0][3],a[1][2],a[2][1],a[3][0]);}答:06504.#include#includemain(){chars[][10]={“a”,”good”,”world”};strcat(s[0],s[1]);printf(“%s”,s[0]);}答:agood5.#includemain(){chars[]=“abcdef”;s[3]=’’;printf(“%sn”,s);}答:abc编程题:1.从键盘输入10个整数,存入数组a,从数组a的第二个元素起,分别将后项减前项之差存入数组b,按每行3个元素输出数组b。#includemain(){inta[10],b[10],i,j;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0,j=0;i<9;i++,j++){b[j]=a[i+1]-a[i];printf("%5d",b[j]);if(i%3==2)printf("n");}}2.输入一个字符串,将其中的大写字符转换成小写,其它的不做转换,然后输出得到的字符串。#includemain(){ inti;chars[100];scanf("%s",s);for(i=0;s[i]!="";i++){if(s[i]>="A"&&s[i]<="Z")s[i]=s[i]+32;}for(i=0;s[i]!="";i++)printf("%c",s[i]);printf("n");}1.读入20个整数,统计非负数个数,并计算非负数之和#includemain(){inta[20],i,n,s=0;for(i=0;i<20;i++)scanf("%d",&a[i]);for(i=0;i<20;i++)if(a[i]>=0){n++;s=s+a[i];}printf("非负数个数:n=%dn",n);printf("非负数之和:s=%dn",s);}2.某班有30名学生,考试共5门课程,输入各门成绩,计算每人的总分,输出全班学生的各科成绩及总分。#includemain(){inti,j;floatscore[30][5],sumr[30]={0.0,0.0},sum=0;printf("请输入30个同学各5门课程的成绩:n");for(i=0;i<30;i++){for(j=0;j<5;j++) {scanf("%f",&score[i][j]);}}for(i=0;i<30;i++){for(j=0;j<5;j++){sumr[i]=sumr[i]+score[i][j];}sum=sum+sumr[i];}printf("t课程一课程二课程三课程四课程五n");for(i=0;i<30;i++){printf("第%2d个同学:",i);for(j=0;j<5;j++){printf("%8.2f",score[i][j]);}printf("n");}printf("%.2fn",sum);}1.从键盘输入10个数,从小到大排列(或从大到小排列),将其输出(冒泡法或选择法任选)。冒泡法排序:#includemain(){inta[10],i,j,t;for(i=0;i<10;i++){scanf("%d",&a[i]);}for(i=0;i<9;i++){for(j=0;j<10-i-1;j++){if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;}}}printf("从小到大排列:n");for(i=0;i<10;i++){printf("%d",a[i]);}printf("n");}选择法排序:#includemain(){inta[10],i,j,k,t;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<9;i++){k=i;for(j=i+1;j<10;j++){if(a[j]>a[k])k=j;if(i!=k){t=a[i];a[i]=a[k];a[k]=t;}}}for(i=0;i<10;i++)printf("%5d",a[i]);printf("n"); }(四)项目五和项目六函数、指针选择题1.以下正确的函数定义形式是___A_____.A.doublefun(intx,inty)B.doublefun(intx;inty)C.doublefun(intx,inty);D.doublefun(intx,y);2.以下函数调用语句中实参的个数是____A___。fun((v1,v2),(v3,v4,v5),v6) ;A.3B.4C.5D.62.若有说明;int*p,m=5,n;以下正确的程序段的是___D___.A.p=&n;B.p=&n;scanf(“%d”,&p);scanf(“%d”,*p);C.scanf(“%d”,&n);D.p=&n;*p=n;*p=m;2.以下程序的运行结果是___A+B=9_____.inta=5;intb=7;main(){inta=4,b=5,c;c=plus(a,b);printf(“A+B=%dn”,c);}plus(intx,inty){intz;z=x+y;return(x);}3.以下正确的程序段是____B_____.A.charstr[20];B.char*p;scanf(“%s”,&str);scanf(“%s”,p);C.charstr[20];D.charstr[20],*p=str;scanf(“%s”,&str[2]);scanf(“%s”,p[2]);填空题:1.若有定义:inta[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是__4____.*(a+5)的值是____2____.2.下面程序段的运行结果是___hELLO!___.chars[80],*sp=“HELLO!”;sp=strcpy(s,sp);s[0]="h";puts(sp);3.理解下面的程序,填空使程序完整。 #includeintmax(__intx,inty__){intz;if(x>y)z=x;elsez=y;_return(z)____;}main(){inta,b,c;scanf(“%d%d”,__&a&b___);c=_max___(a,b);printf(“a=%d,b=%d,max=%dn”,a,b,c);}阅读题:1.#includevoidfunc(intx){x=20;}main(){intx=10;func(x);printf(“%d”,x);}答:102.#includevoidfun(float*a,float*b){floatw;*a=*a+*a;w=*a;*a=*b;*b=w;}main(){floatx=2.0,y=3.0;float*px=&x,*py=&y;fun(px,py) ;printf(“%f,%f”,x,y);}答:3.000000,4.000000(五)项目七和项目八结构体、共用体、文件选择题: 1.根据以下定义,能输出字符‘M’的语句是__D____。structperson{charname[9];intage;}class[10]={“John”,17,”Paul”,19,”Mary”,18,”Adam”,16};A.printf(“%c”,class[3].name);B.printf(“%c”,class[3].name[1]);C.printf(“%c”,class[2].name[1]);D.printf(“%c”,class[2].name[0]);2.下面程序的运行结果是______C_____.main(){structcmplx{intx;inty;}cnum[2]={2,3,4,5};printf(“%dn”,cnum[0].y/cnum[0].x*cnum[1].x);}A.2B.3C.4D.53.以下对结构体变量stu1中成员age的非法引用是____B____.structstudent{intage;intnum;}stu1,*p;p=&stu1;A.stu1.ageB.student.ageC.p->ageD.(*p).age4.以下scanf函数调用语句中对结构体变量成员的不正确引用是___D_____.structpupil{charname[20];intage;intsex;}pup[5],*p;p=pup;A.scanf(“%s”,pup[0].name);B.scanf(“%d”,&pup[0].age);C.scanf(“%d”,&(p->sex));D.scanf(“%d”,p->age);5.fopen()函数的mode取值”r”和”w”时,它们之间的差别是____B____。A.“r”可向文件输入,“w”不可向文件输入B.“r”不可向文件输入,“w”可向文件输入C.“r”不可由文件输出,“w”可由文件输出D.文件不存在,”r”建立新文件,“w”出错6.若要将“text.txt”文件打开用于追加信息,则以下格式正确的是____C____。A.fp=fopen(“text.txt”,“r”);B.fp=fopen(“text.txt”,“r+”);C.fp=fopen(“text.txt”,“a+”);D.fp=fopen(“text.txt”,“w”);7.要使用fopen函数打开一个新的可读可写的二进制文件,文件的打开方式应是____D___。A.“ab+”B.“rb+”C.“ab-”D.“wb+”'