C参考答案与复习题.docx
- 文档编号:11311074
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:134
- 大小:150.82KB
C参考答案与复习题.docx
《C参考答案与复习题.docx》由会员分享,可在线阅读,更多相关《C参考答案与复习题.docx(134页珍藏版)》请在冰豆网上搜索。
C参考答案与复习题
C程序设计复习题集
目录
一、C语言程序设计习题参考答案…………………………………1
二、C语言程序设计复习题
⒈单项选择题…………………………………………………41
⒉填空题…………………………………………………45
⒊写输出结果题…………………………………………………46
⒋程序填空题…………………………………………………53
⒌编程题……………………………………………………61
三、C语言程序设计复习题答案
⒈单项选择题……………………………………………………62
⒉填空题……………………………………………………63
⒊写输出结果题……………………………………………………63
⒋程序填空题……………………………………………………64
⒌编程题(参考)……………………………………………………65
四、C语言程序设计模拟试卷、参考答案
⒈试卷一……………………………………………………………74
⒉试卷二……………………………………………………………77
浙江工业大学计算中心编印
C程序设计习题参考答案
习题一
1.填空题
⑴计算机程序设计语言按其发展可分为三类,即机器语言、汇编语言和高级语言。
⑵C程序是由函数构成的,一个C程序中至少包含1个main函数。
因此,函数是C程序的基本单位。
⑶C程序注释是由/*和*/所界定的文字信息组成的。
⑷函数体一般包括函数首行和函数体。
⑸在任何C程序中都必须且只能有一个主函数,主函数名必须为main。
2.判断下列各个叙述的正确与否
⑴C程序的执行总是从该程序的main函数开始,在main函数最后结束【√】
⑵C程序的注释部分可以出现在程序中任何位置,它对程序的编译和运行不起任何作用,但可以增加程序的可读性【√】
⑶由“/*”与“*/”界定的注释必须在同一行【╳】
⑷通过了编译、连接的程序就是正确的程序【╳】
⑸有计算结果输出的程序一定是正确的程序【╳】
⑹编译错误是语法错误,运行结果错误是逻辑错误【√】
⑺编译时在信息窗口出现包含“error”的信息,说明程序存在警告性错误【╳】
⑻源程序每次修改后,都必须重新编译、连接【√】
3.简答题
⑴算法的含义、特点是什么?
解答:
算法是解题方法的精确描述。
有穷性、确定性、有多或零个输入、有1或多个输出、有效性。
⑵写出一个C程序的基本结构。
由编译预处理命令、注释、1个main和若干个自定义函数构成,函数格式如下:
函数类型函数名(类型标识符形参,类型标识符形参,...)
{类型声明语句;执行语句部分;}
⑶写出在你使用的计算机系统上,进入C环境以及运行、调试程序的简要步骤。
⑷输入x后计算其正弦值的源程序如下。
编译信息是否表示有致命性错误?
应如何修改?
解答:
致命性错误为第6行函数sin未声明,应加入编译预处理命令#include
4.编程题
⑴请上机调试、运行本章课本上C语言程序例题4~6(注释部分可以不必输)
⑵仿照例6编程,输入两个变量后,输出其中较大的值。
#include
voidmain()
{inta,b;
printf("请输入A,B的值:
\n");
scanf("%d%d",&a,&b);
if(a>b)printf("%d\n",a);elseprintf("%d\n",b);
}
⑶仿照例题编程,输入圆柱体的半径和高,计算并输出圆柱体的体积。
#include
voidmain()
{floatr,h,v;
printf("请输入半径、高的值:
\n");
scanf("%f%f",&r,&h);
v=r*r*3.141593*h;
printf("%f\n",v);
}
习题二
1.将下列程序上机运行,写出你所使用的C语言处理系统中short、int以及long类型数据的字长和数值范围。
#include
voidmain()
{printf("short类型数据的字长为:
%d\n",sizeof(short));
printf("int类型数据的字长为:
%d\n",sizeof(int));
printf("long类型数据的字长为:
%d\n",sizeof(long));
}
解答:
VC++环境下,分别为2、4、4
2.仿照题1编程,测试float、double类型数据的字长。
#include
voidmain()
{printf("float类型数据的字长为:
%d\n",sizeof(float));
printf("double类型数据的字长为:
%d\n",sizeof(double));
}
3.判断下列各个叙述的正确与否。
⑴C的long类型数据可以表示任何整数【╳】
⑵任何变量都必须要声明其类型【√】
⑶C的任何类型数据在计算机内都是以二进制形式存储的【√】
⑷scanf函数中的格式符“%d”不能用于输入实型数据【√】
⑸格式符中指定宽度时,从缓冲区中读入的字符数完全取决于所指定的宽度【√】
⑹按格式符“%d”输出float类型变量时,截断小数位取整后输出【╳】
⑺按格式符“%6.3f”输出i(i=123.45)时,输出结果为23.450【╳】
⑻scanf函数中的格式符“%f”能用于输入double类型数据【╳】
4.指出下列各项中那些是C的常量,对合法的C常量请同时指出其类型。
10,150007-0x3dπ1e0e1o7o8
'x''xo'1.52e0.5sin(3)0xf16"X"'\007'
1.414E+22.54'\\''a'
解:
007整型,-0x3d整型,1e0实型,'x'字符型,0xf16整型,"X"字符串
'\007'字符型,1.414E+2实型,2.54实型,'\\'字符型,'a'字符型
5.指出下列各项中那些是C的标识符(可作变量名)。
x_1X_2Highprintfβ3DSi/j
e2-e2countIntnumber$23next_
解:
x_1、X_2、High、e2、count、Int、number、next_
6.根据条件,写出下列各题的输出结果。
⑴inti=234,j=567;函数printf("%d%d\n",i,j)的输出结果是234567。
⑵inti=234;floatx=-513.624;
函数printf("i=%5dx=%7.4f\n",i,x)的输出结果是i=234x=-513.6240。
⑶floatalfa=60,pi=3.1415926535626;函数printf("sin(%3.0f*%f/180)\n",alfa,pi)
的输出结果是sin(60*3.141592/180)。
⑷charch='$',floatx=153.45;
函数printf("%c%-8.2f\\n",ch,x)的输出结果是$153.45\n。
⑸intd=27;函数printf("%-5d,%-5o,%-5x\n",d,d,d)的输出结果是27,34,1b。
⑹floatx1=13.24,x2=-78.32;函数printf("x(%d)=%.2fx(%d)=%.2f\n",1,x1,2,x2)
的输出结果是x
(1)=13.24x
(2)=-78.32
7.根据下列条件写出变量i1(int类型)、c1(char类型)、f1(float类型)、d1(double类型)的当前值。
⑴执行scanf("%d%c%f%lf",&i1,&c1,&f1,&d1)时输入52$9.173.1415926535后。
i1为52,c1为'$',f1为9.17,d1为3.1415926535
⑵执行scanf("%d$%c%f%lf",&i1,&c1,&f1,&d1)时输入52$9.173.1415926535后。
i1为52,c1为'9',f1为0.17,d1为3.1415926535
8.下列源程序输入x、y后,输出x的y次方。
运行时无编译、连接错误,但输入不同格式的两组数据输出结果却不同,哪一组是对的?
请说明原因。
解答:
第1组输入数据错误,因为格式串中有“,”所以键盘输入数据x、y之间也一定以逗号为间隔符。
9.写出下列程序运行时输入345的输出结果。
#include
#include
边长为3.00,4.00,5.00的三角形面积为6.00
voidmain()
{floata1,a2,a3,s,d;
scanf("%f%f%f",&a1,&a2,&a3);
s=(a1+a2+a3)/2;
s=sqrt(s*(s-a1)*(s-a2)*(s-a3));
printf("边长为%.2f,%.2f,%.2f的三角形面积为:
%-10.3f\n",a1,a2,a3,s);
}
10.编程题
⑴编程,用getchar函数接收2个字符,用putchar函数输出这2个字符。
解答:
#include
voidmain()
{charx;
x=getchar();putchar(x);
x=getchar();putchar(x);
}
⑵编程,用scanf函数输入1个10进制整数、1个单精度浮点数、1个双精度浮点数,并通过printf函数把输入的3个数分别输出。
解答:
#include
voidmain()
{intk;floatx;doubled;
scanf("%d%f%lf",&k,&x,&d);
printf("%d,%f,%f\n",k,x,d);
}
⑶编程,输入1个整数,然后分别以8进制、10进制、16进制形式输出该数。
解答:
#include
voidmain()
{intx;scanf("%d",&x);
printf("%d,%o,%x\n",x,x,x);
}
习题三
1.根据下列数学式,写出C的算术表达式。
解答:
-(a*a+pow(b,3))*pow(y,4)(sqrt
(2)+100)/(atan(x)+3.141593)
(5+b)/((a+6)/(b+5)-c*d)
2.按照要求写出下列C的表达式。
⑴数学式(x+1)e2X所对应的C算术表达式。
⑵将double类型变量x的整数部分与y的小数部分相加的算术表达式。
⑶将非零实型变量x四舍五入到小数点后2位的算术表达式。
⑷为变量s赋值:
取变量x的符号,取变量y的绝对值。
⑸条件“-5≤x≤3”所对应的C逻辑表达式。
⑹a、b是字符变量,已知a的值为大写字母、b的值为小写字母,写出判断a、b是否为同一字母的逻辑表达式
⑺int类型变量a、b均为两位正整数,写出判断a的个位数等于b的十位数、且b的个位数等于a的十位数的逻辑表达式。
⑻计算变量a、b中较小值的条件表达式。
⑼判断变量ch是英文字母的表达式;
⑽若字符变量ch的值为大写字母,则重新赋值为对应的小写字母。
解答:
⑴(x+1)*exp(2*x)⑵(int)x+y-(int)y⑶(int)(x*100+fabs(x)/x*0.5)/100.0
⑷s=fabs(y)*x/fabs(x)⑸-5<=x&&x<=3⑹b-a=='a'-'A'
⑺a%10==b/10&&b%10==a/10⑻a
a:
b⑼isalpha(ch)
⑽ch=isupper(ch)?
ch:
ch+'a'-'A'
3.声明“intk=12;floatx=9.5;doubled=2.7;charzf='B';”,写出下列表达式值。
⑴(int)x%k*d⑵k+5.6 ⑷! k&&x>d⑸zf='B'⑹zf=='B' 解答: ⑴24.3,⑵1,⑶1,⑷0,⑸'B',⑹1 4.填空题 ⑴声明“floatx=2.5,y=4.7;inta=7;”,表达式x+a%3*(int)(x+y)%2/4值为2.5。 ⑵设整型变量a、b值分别为10与20,计算c=(a%2==0)? a: b后,c的值为10。 ⑶设整型变量d的值为7,表达式“3 ⑷已知ch是字符变量。 如果ch是小写英文字母,则把它改成大写英文字母,写作: if(islower或ch>='A'&&ch<='z')ch=ch-32; ⑸下列程序的输出结果是(0.00,0.5)。 #include voidmain() {inty; doubled=3.4,x; x=(y=d/2.0)/2; printf("(%0.2f,%d)",x,y); } ⑹判断a、b是否绝对值相等而符号相反的逻辑表达式为a==-b。 ⑺判断变量a、b中必有且只有一个为0的逻辑表达式为a*b==0&&a+b! =0。 ⑻c初值为3,计算赋值表达式“a=5+(c+=6)”后表达式值、a、c的值依次为14、14、9。 ⑼求解赋值表达式“a=(b=10)%(c=6)”后,表达式值、a、b、c的值依次为4、4、10、6。 ⑽求解逗号表达式“x=a=3,6*a”后,表达式值、x、a的值依次为18、18、3。 ⑾若a=13、b=25、c=-17,表达式“((y=(a a: b) y: c的值为-17。 ⑿若s='d',执行语句“s=(s>='a'&&s<='z')? s-32: s;”后字符变量s的值为'D'。 5.写出下列程序的输出结果。 程序⑴#include voidmain() {unsignedk,n;scanf("%u",&n); k=n%10*10+n/10; printf("n=%dk=%d\n",n,k); } 运行时输入数据为: 6972输出结果为: n=69k=96 程序⑵#include voidmain() {intx=40,y=4,z=4; x=y==z;printf("%d%d%d\n",x,y,z); x=x==(y=z);printf("%d%d%d\n",x,y,z); } 输出结果为: 144 044 程序⑶#include voidmain() {intx,y,z; x=y=2;z=3; y=x++-1;printf("%d\t%d\t%d\t",x,y,z); y=--z+1;printf("%d\t%d\t%d\n",x,y,z); x=y=z=0;++x&&++y||++z; printf("%d\t%d\t%d\t",x,y,z); --x&&++y&&++z;printf("%d\t%d\t%d\n",x,y,z); } 输出结果为: 313332 110010 6.编程,输入长方形的长和宽,求长方形的面积和周长并输出。 解答: #include voidmain() {floata,b,x,y; scanf("%f%f",&a,&b);x=a*b;y=2*(a+b); printf("面积=%.4f周长=%.4f\n",x,y); } 7.编程,输入3个字符后,按各字符ASCII码从小到大的顺序输出这些字符。 解答: #include voidmain() {chara,b,c,x,y,z;scanf("%c%c%c",&a,&b,&c); x=(x=a a: b) x: c;z=(z=a>b? a: b)>c? z: c;y=a+b+c-x-z; printf("%c%c%c\n",x,y,z); } 8.编程,输入3个整数,要求按绝对值从小到大输出它们的值。 解答: #include #include voidmain() {intx,y,z,a;scanf("%d%d%d",&x,&y,&z); if(fabs(x)>fabs(y)){a=x;x=y;y=a;} if(fabs(x)>fabs(z)){a=x;x=z;z=a;} if(fabs(y)>fabs(z)){a=y;y=z;z=a;} printf("%d\t%d\t%d\n",x,y,z); } 9.编程,输入3个数,计算这三个数的平均值,并求出与平均值最接近的值。 解答: #include #include voidmain() {floata,b,c,v,x;scanf("%f%f%f",&a,&b,&c); v=(a+b+c)/3;x=a; if(fabs(b-v) if(fabs(c-v) printf("%f\n",x); } 10.编程,输入1个3位正整数,输出其个位、十位、百位反序的数(如123反序数为321)。 解答: #include voidmain() {intn,m;scanf("%d",&n); m=n%10*100+n%100/10*10+n/100; printf("%d\t%d\n",n,m); } 习题四 1.填空题 ⑴求1至100的和,写作for(s=0,i=1;i<=100;++i)s+=i; ⑵执行程序段“y=1;x=5;while(x--);y++;”后,y的值为2。 ⑶顺序输出26个大写英文字母的循环结构,写作 for(ch='A';ch<='Z';ch++)putchar(ch); ⑷输入若干个以问号结束的字符,同时输出这串字符(不包括问号),写作 while((ch=getchar())! ='? ')putchar(ch); ⑸循环程序段“k=5;for(;k<0;k--);”执行后,k的值为5。 2.改写下列程序段,去掉continue语句,使结构更为合理。 ⑴while(A){解答: while(A)if(! B)C; if(B)continue; C; } ⑵do{解答: while(A){B;C;} if(! A)continue;elseB; C; }while(A); 3.写出下列程序的输出结果 程序⑴#include voidmain() {charx;intn=0,k=0; while((x=getchar())! ='.'){ switch(x){ case't': k++;break; case'h': if(k==1)k++;break; case'e': if(k==2)k++;break; default: k=0; } if(k==3)n++; } printf("%d\n",n); } 运行时输入: atheasdfthethethere.输出结果: 3 程序⑵#include A #include voidmain()CCCCC {chara,b,x;inti;DDDDDDD while(! isupper(x=getchar()));EEEEEEEEE for(a='A';a<=x;a++){ for(b='A';b<'A'+x-a;b++)putchar(''); for(i=1;i<=2*(a-'A')+1;i++)putchar(a); putchar('\n') } } 运行时输入: 35dffE 4.程序填空题,根据下列各题题意,将程序补充完整。 ⑴下列程序在输入m后求n使n! ≤m≤(n+1)! (例如输入726,应输出n=6) #include voidmain() {intm,n,jc=1; scanf("%d",&m); for(n=2;jc<=m;n++)jc=jc*n; printf("n=%d\n",n-2); } ⑵下列程序输出6至10000之间的亲密数对。 【说明】若a、b是亲密数对,则a的因子和等于b、b的因子和等于a且a不等于b。 #include voidmain() {inta,b,c,i; for(a=6;a<=10000;a++){ b=1;for(i=2;i<=a/2;i++)if(a%i==0)b+=i; c=1;for(i=2;i<=b/2;i++)if(b%i==0)c+=i; if(c==a&&a! =b)printf("%d%d\n",a,b); } } 5.根据下列各小题题意编程。 ⑴编程,输入x后按下式计算y值并输出。 解答: #include #include voidmain() {floatx,y;scanf("%f",&x); if(x>=0&&x<=1)y=x+sin(x);elsey=x+sin(x); printf("%f\n",y); } ⑵输入一个百分制的成绩t后,按下式输出它的等级,要求分别写作if结构和switch结构。 等级为: 90~100为A,80~89为B,70~79为C,60~69为D,0~59为E。 解答: #include voidmain() {intt;charx; scanf("%d",&t)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 参考答案 复习题