《C 语言程序设计习题参考答案.docx》由会员分享,可在线阅读,更多相关《C 语言程序设计习题参考答案.docx(82页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言程序设计习题参考答案习题1、判断题3 .二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位的关系。4 .在整数的二进制表示方法中,的原码、反码都有两种形式。原码表示法在数值前面増加了一位符号位(即最髙位为符号位):正数该位为,负数 该位为1 (0有两种表示:+0和一0),其余位表示数值的大小.反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符 号位除外。补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。 5.有符号数有三种表示法:原码、反码和补码。6 .常用字符的ASCH码值从小到大的排列规律是:空格、阿拉伯数字、大写英文字母、 小写英
2、文字母。解:1. F 2. T 3. T 4. T 5. T 6. T 二、单选题1.在计算机中,最适合进行数值加减运算的数值编码是。A.原码B.反码C.补码D,移码4.设在机器字长4位,X=0111B,丫= 1011B,则下列逻辑运算中,正确的是。A. XAY=1000B. XVY = 1111C. XY=0011 D. Y =10006.用C语言编写的源程序经过编译后,若没有产生编译错误,则系统将()A,生成可执行文件B,生成目标文件656 7.下列叙述中不正确的是() A. main函数在C程序中必须有且只有一个 B. C程序的执行从main函数开始,所以main函数必须放在程序最前面
3、C.函数可以带参数,也可以不带参数。D,每个函数执行时,按函数体中语句的先后次序,依次执行每条语句 解:1. C 2. C 3. D 4. B 5. B 6. B 7. B 三、填空题1. (87.625) io= () 2=()8=()162. (1001010111001.10111) 2= () 8= () ,6=() io 3.输入三个数,计算并输出三个数的和与三个数的乘积。程序如下: #include void main() ( int a, b, c, s, z;printf (MPlease input a b c:nn);s=a+b+c;printf(M%dnnz s);*4.
4、输入三角形三条边的边长,计算并输出三角形的面积。 根据三条边的边长,计算三角形面积的公式如下:其中面依=y s(s - x)(s - y)(s - z)程序如下: #include #include void main() ( double x,y,z,s,dime; scanf (n%lf%lf%lfH,&xz &yz &z);dime=sqrt(s*(s-x)*(s-y)*(s-z);解:1. 1010111.101127.557.A2. 11271.5612B9.B84793.718753. scanf(%f%f%F,&a,&b,&c); z=a*b*c;4. s=(x+y+2)/2;p
5、rintf (無,dim);四、编程题1 .仿照例1.1,编程序在屏幕上显示:Merry Christmas!Happy New Year! 解:include void main() printf(*n); printf( Merry Christmas!n);printf(Happy New Year!n);printf(*n);2 .仿照例1.2编程,输入个整数,计算这个数的平方。 解:#includevoid main() int a, z;printf (请输入个整数:n);scanf(%d, &a);z=a*a;printf (%d*%d=%dn”, a, a, z);*3.仿照例
6、1.3编程,输入两个数后,输出其中较小值。解:#includefloat min(float x, float y) float m;if (xy) m=x;elsem=y;return m;)void main() float a, b, c, mindata;printf (请输入二个数:n);scanf (%f %f”, &a, &b);mindata=min(a, b);printf (较小数:%fn, mindata);*4.仿照例1.2编程,输入。、b后,输出元一次方程ox+6二的解。解:#includevoid main() float a, b, x;printf (请输入 a
7、、b:n);scanf C%f %f, &a, &b);x=-a/b;printf(x二%fn,x);)*5.仿照例1.2编程,输入圆柱体的半径和高,计算并输出圆柱体的体积。 解:include void main() float r, h, s, v;printf (/zPlease input r and h:n);scanf(%f %f, &r, &h);v=3. 14*r*r*h;printf(V=%fn,v);、判断题1 .任何变量都必须要定义其类型。2 . C语言的double类型数据在其数值范围内可以表示任何实数。3 . C语言的任何类型数据在计算机内都是以二进制形式存储的。4
8、. isdigit(5)的结果为 。5 . printf函数中格式符“c”对应的参数只能是字符类型。6 .按格式符“d”输出float类型变量时,截断小数位取整后输出。7 .在C语言程序中,ABC与abc是两个相同的变量。8 . scanf函数中的格式符“d”不能用于输入实型数据。9 .格式符“f”不能用于输入double类型数据。10 .当格式符中指定宽度时,输出的信息完全取决于所指定的宽度。 解:T (2)F (3)T (4)F (5)F (6)F (7)F (8)T (9)T(10)F二、指出下列各项中哪些是C语言中的常量,并指出其类型10,150007-0x3dnleOelo7o8xx
9、o1.52e0.5sin(3)Oxfl 60091.414E+22.54a+2OxlOOh012810L解.三、合法的C常量有:整型常量:007-0x3dOxfl 610L实型常量:leO1.414E+2字符型常量:X,aW指出下列各项中哪些是C语言中的用户标识符x_lX_2HighprintfP3DSi/je2 e2countIntnumber$23next_sizeofIFsum_12 23#NO1:doublefor解.c 的用户标识符有:x_lX_2 High e2 count Intnumber四、next_IFsum_12单项选择题1. C语言中,char型数据在内存中的存储形式是
10、()。A.原码B.反码C,补码D.ASCI! 码2 .若有定义语句“charc=72; ”则变量c ()。A.包含1个字符B.包含2个字符C.包含3个字符D.定义不合法3 . C语言中的基本数据类型包括()A,整型、实型、逻辑型B,整型、实型、字符型C.整型、逻辑型、字符型D.整型、实型、逻辑型、字符型4 .设cl、c2为字符型变量,执行语句“cl=getchar( ); c2=getchar( ); n时,从键盘输 入A/, cl和c2的值分别为()。A.都是AB. cl是A, c2未输入C. cl 未输入,c2 是AD. cl 是A, c2 是n5. a、b是整型变量,执行语句“ scan
11、f(a=%d, b=%d, &a, &b); ”,使a和b的值分 别为1和2,正确的输入是()A. 1 2 B. 1, 2C. a=l, b=2 D. a=l b=26 .设c为字符型变量值为A, a为整型变量值为97,执行语句“putchar(c); putchar(a); ” 后,输出结果为()。A. Aa B. A97C. A9D. aA7 .已知字母A的ASCII码值为65,以下语句段的输出结果是()。char cl= * A * r c2= * Y *; printf(n%d,clr c2);A.输出格式非法,输出错误信息 B. 65, 90C. A, YD. 65, 898 .若要
12、使用输入语句“scanf(%4d%4d%10,&i, &j, &x): ”,为i输入10,为j 输入12,为x输入345.67,则正确的输入形式是()。A. -1012345.67/B. -10 12 345.67/C. -10001200345.67/D. -10,12,345.67/9 .能正确地定义符号常量的是()A. #define n=10 B. #define n 10 C. #define n 10; D. #DEFINE N 1010 .在C语言中,int、char、short三种类型数据在内存中所占的字节数().A.由用户自己定义B,均为2个字节C,是任意的D.由机器字长决定
13、 解: D (2) A (3) B (4) D (5) C (6) A (7) D (8) B (9) B (10) D五、填空题1. char ch=$,; float x=153.4523;语句 uprintf(,%c%-8.2fn,ch,x); w 的输出结果是 解:$153.45 n2. int i=123; float x=- 1234.56789;语句 “printf(i=5d x=%.3fn”,i,x);” 的输出结果是 解:i= 123 x=-1234.5683. char c=a; int a=65;语句 “putchar(c+l);putchar(a); ” 的输出结果是
14、解:bA4. int a=98;语句 “printf(d,%c,%o,%x”,a,a+l,a+2,a+3);” 的输出结果是 解:98, c, 144, 655. int k; float f;语句 “scanf(3d%*4d%6,&k,&f);” 执行时输入 12345678765.43 /则 k= , f= 解:k=123f=8765. 46. 使用pow()函数时,程序的开头必须写一条预处理命令:解:#include 5 .填空题。(1)int i=123, j=45;函数printf (%d, %dn”, i, j);的输出结果是 解:123, 45(2)int i=123; floa
15、t x=-45. 678;语句 printf (i=%5d x=%7. 4fn”, i, x):的输出结果是 解:i= !23 x=-45.6780(3)float alfa=60, pi=3习题3一、根据下列数学式,写出c的算术表达式。c + dcd-(a2 +b,)x y4工j Jjsin(x)tan x 十 万解:-(a2+b2) Xy4 的 C 表达式:-(a*a+b*b)*pow(y, 4)5/2 + 10 的主、4,_|X(sqrt (2)+10*10)/ (pow(tan(x), -1)+3. 141593) 的C表达式:I sin(x) I tan- x + 4的 C 表达式:
16、sqrt (pow (fabs (sin(x), 3. 5)x6 e5 的 C 表达式:pow(x, 6)-exp (5)二的 C 表达式:(1. 0/2*a*b+c+d) / (a+2*b- (c+d) /c/d)一,c + da + 2bcd二、按照要求,写出下列C的表达式。1 .写出int类型变量x为“奇数”的表达式。解:x%2=l2 . Int类型变量x、y、z,写出描述“x或y中有且仅有一个小于z”的表达式。解:x=z|x=z&y=0? 1:-1)*(y=0?y:-y)5 .条件“-5WxW3”所对应的C逻辑表达式。解:-5=x&x=36 . a、b是字符变量,已知a的值为大写字母、
17、b的值为小写字母,写出判断a、b是否为 同一字母(不区分大小写)的逻辑表达式解:a+32=b 或 b-a=32?l;7 . int类型变量a、b均为两位正整数,写出判断a的个位数等于b的十位数、且b的个 位数等于a的十位数的逻辑表达式。解:a%10=b/10&a/10=b%108 .写出判断某个人是否是成年人(年龄大于21),且不是老年人(年龄大于65)的逻辑表达 式。解:y21&yb?a:b)c?(ab?a:b):c10 .若字符变量ch为小写字母,则将其转换为对应的大写字母。解:ch=ch=aMch=z?ch-32:ch三、单项选择题1 .设intx=3, y=4, z=5;,下列表达式中
18、值为0的是()。A.B. x=y C. x|y+z&y-z D. !(x=y&ch B&!y的值是(),A. 0B. 1C. “假D. “真”3 .判断char型变量c为数字字符的正确表达式为().A. 0=c=9 B. 0=c&c=0|c=0&c=94 .下列运算符中,优先级最低的是()A. ? : B. &C. =D. *=5 .若有条件表达式“ x?a+:b”,则以下表达式中()等价于表达式X。A. x=0B. x!=0C. x=lD. x!=l6 .有定义 int k=4, a=3, b=2, c=l;,表达式 “kc);后,为 0解:m为, n为29 .设inta=2;,表达式“a%
19、2!=”的值为 解:10 .设 charc=y;,表达式“ c=a&c=A,&c=Z” 的值为 解:111 .写出与代数式(x+2)e2对应的C表达式 . 解:(x+2)*exp(x+2)12 .设int a=2;执行语句a=3*5, a*4;后a的值为 。 解:15五、写出下列程序的输出结果。1. #include void main() unsigned k,n;scanf (n%uMz &n);输入数据为:69k=n%10*10+n/10;printf(Mn=%d k=%dnMz n,k);)解:n=69k=962. include void main() (int x=2z y=3;x
20、*=y+4;printf(n%dz %dnnz xz y); x/=y=5;printf(M%dz %dn,xz y);x-=y%2;printf(n%dz %dnnz xz y); 解:14,32,51,53. include void main() ( int az b;a=8;b=7;a=(a- =b+)? a%3 : a/3;printf(na=%d b=%dn,a,b);解:a=2 b=8六、程序填空题。1 .以下程序输入三个整数值给a, b,c,程序把b中的值给a,把c中的值给b,把a中 的值给c,交换后输出a、b、c的值。例如输入1 2 3(输出a=2 b=3 c=Ettincl
21、ude void main() int a, b, c, (D ;printf( wEnter a, b, c:w );scanf( “%d%d%d” ,);;a=b; b=c; ;printf (a=%d b=%d c=%dn”, a, b, c);)解: t &a, &b, &c t=a c=t2 .以下程序不借助任何变量把a、b中的值进行交换。#include void main() int a, b;printf( Input a, b:);scanf( %d%d” ,);a十二;b=a- ;a-=;printf ( wa=%d b=dn” , a, b);)解:&a,&bb b b七
22、、编程题。1 .输入3个字符后,按各字符ASCII码从小到大的顺序输出这些字符。解:include void main() char cl, c2, c3, t, min, mid, max;cl=getchar (); c2=getchar (); c3=getchar ();min=(t=clc2?c1:c2)c2?c1:c2)c3?t:c3;mid=c1+c2+c3-mi nimax;putchar(min);putchar(mid);putchar(max);)2 .输入两点坐标(xl, y 1 ) (x2, y2)计算并输出两点间的距离。解:include include void
23、main()(double xl, yl, x2, y2, d;printf (“请输入两点坐标(xl, yl), (x2, y2)n);scanf( a(%lf,%lf), (%lf,%lf) w ,&xl,&yl,&x2,&y2);d=sqrt(xl-x2)*(xl-x2) + (yl-y2)*(yl-y2); printf(“两点间距离二%fn,d);)3 .编写程序,计算球体积并输出它的值。要求输入半径值,计算结果保留三位小数。 解:include ttinclude #define PI 3. 1415926 void main() double r, gv;printf(“请输入半
24、径值:n); scanf( %lf,&r);gv=4.0/3*PI*pow(r, 3);printf (“半径为%的球的体积为:.3fn,r, gv); )4 .输入三角形的底和高,求三角形面积。 解:#include #define PI 3.14159 void main() ( double a,hz s;printf (、请输入三角形的底,髙、n); scanf (%lf z %lf”, &a, &h);s=a*h/2;printf (、三角形面积s);)5 .编写程序,输入一个实数后输出该数的绝对值。 解:#include void main() ( double x,y;print
25、f (、请输入个实数、n);scanf (、%If”, &x); y=x=0?x:-x;printf (I %g|=%gn,x,y); )6 .输入梯形的上底、下底和高,求梯形面积。 解:#include void main()double a,b,h,s; printf (、请输入梯形的上底,下底,髙“); scanf z %lf z %lf”, &a, &b, &h);s=(a+b)*h/2;printf ( 梯形面积=%n,s); 7 .输入矩形的边长,求矩形面积。解:#include void main() (double a,b,s;printf (、请输入矩形的长,宽n);scan
26、f (%lf/ 吿If, &a, &b);s=a*b;printf (n, s);8 .已知等差数列的第一项为a,公差为d,求前n项之和,a、d、n由键盘输入。 解:#include void main() int a,d,n,sum;printf (、请输入等差数列的首项公差项数、n);scanf (%d%d%d, &a, &d, &n);sum=a*n+n*(n-1)*d/2; printf ( sum=%dn, sum);9,编写程序,将d天h小时m分钟换算成分钟,输入d、h、m,输出换算结果。 解:#include void main() (int d,h,m,t;printf (、请
27、输入夭 小时 分钟n); scanf (%d%d%d, &d, &h, &m);t=d*24*60+h*60+m;printf (%d 天d 小时吿d 分钟=d 分钟n,d, h, m, t); )10.编写程序,求出给定半径r的圆以及内接正n边形的面积,输出计算结果。r和n的值 由键盘输入。解:#include #include #define PI 3.14159 void main()double r,si,s2;int n;printf (Input r nn);scanf (v%lf%dz &rz &n);sl=PI*r*r;s2=n/2.0*r*r*sin(2*PI/n);prin
28、tf (、圆面积=%f,正内接%d边形面积=省fn,slz s2);习题4V单项选择题1 .下列语句将小写字母转换为大写字母,其中正确的是()。A,if(ch=a,&ch=a,&ch=a&chv=z)?ch32: ;D.ch=(cha&chs)t=u; t=s;B.t=s; if(us)t=u;C.if(us)t=s; else t=uD.t=u; if(us)t=s;3 .假设变量x、k都已定义,下列语句片段中,无语法错误的是(A. switch(x)case x=90: putchar(1A*);case x60: putchar(1E1); B. switch(x) case 1+2 :
29、 k= * A*;defualt:k= * E *;case 2*4 : k= *B *; C. switch(x)case 2+x:k=x-2;case 3*x:k=x+3;default:k=0;)D. switch(x)case 3.5:k=0.5*x;case 7.8:k=8*x;default:k=0;*4.与语句while(!s)中的条件等价的是()。A. s=0B. s!=0C. s=lD. s=05.下列语句中,哪个可以输出26个大写英文字母()A. for(a=,A,; a=Z*; printf(“c,+a);B. for(a=A; aZ,; a+)printf(1,%cn,
30、 a);C. for(a=A*; a=Z; printf(M%cn, a+);D. for(a=A; aZ; printf(%c, +a);6,判断下面的while循环体的执行次数()i=0;k=10;while ( i=8 ) i=k-;A. 8次B. 10次 C. 2次D.无数次解: B (2) B (3) B (4) A (5) C (6) D二、 写出下列程序的输出结果1. #include void main() ( char x; int n=0,k=0; while ( (x=getchar () ) ! = *#*) /运行时输入:a the ftheth e there#sw
31、itch(x)case * t1: k+; break;case *h1: if(k=l) k+; break;case *e*: if(k=2) k+; break; default: k=0;)if(k=3)n+;printf(吿dn,n); ) 解:3*2.#include void main() (int k=0;char c= * A ,;switch (c+) case * A1 case 1B1 case * C1 case * D1 case * E1 default:do k+; break;k;k+=2; break;k=k%2; break;k=k*10; break k
32、=k/3;k+;while(c*G,);printf(k=3dn, k);解:k=8*3.#include#include void main()char a,b,x; int i;dox=getchar () ;/运行时输入:2abcDwhile (isupper(x)=0);for(a=1A *; a=x; a+)for(b= *A *; b * A * +x-a; b+) putchar(1;for(i=l;i=2*(a-*A*)+1; i+) putchar(a);putchar(*n1);)注:isupper (x)是判断x是否大写字母的函数,如果x是大写字母函数值为1 否则为解:A
33、BBB CCCCC DDDDDDD4.#include void main() (int i,n;scanf (%d, &n);输入 2520i=2;while(nl)if(n%i=0)printf(”吿dt,i); n/=i;)else i+; printf(n);解:2223357三、填空题1 .求110的乘积,写作: for ( , i=l; i=10; +i) s*=i;解:S=12 .下面程序段执行后,x、y的值分别为. y=i;x=5;while (x) x; y+ + ;)解:x、y分别为0和6*3.输入若干个以问号结束的字符,同时输出这串字符(不包括问号); while ( !
34、 =1 ? 1 ) putchar (ch);解:(ch=getchar )/注意外面的这对括号不能少*4.有以下程序片段: s=1.0; for(k=l;k=n; k+) s+=1.0/(k* (k+1);printf (M%fnH,s);填空,使下程序段与上程序段功能完全相同。 s=0.0;k=0; do s+=d;d=1.0/(k*(k+1); while();printf (M%fnHz s); 解:d=lk+k=n5 .下列程序输出610000之间的亲密数对,填空将程序补充完整。若a、b是亲密数对, 则a的因子和等于b, b的因子和等于a,且a不等于b。#include void m
35、ain() int a,b,c,i;for(a=6;a=10000;a+) b=l;for(i=2;i=a/2;i+) if () b+=i;for(i=2;i=b/2;i+) if(b%i=0) c+=i;i f(& & a!=b)printf(M%d %dn,a,b);解:a%i=0c=l;c=a6 .计算 2+22+222+2222+22+2 的和。#includestdio . void main() int s=l,t=l,a,n;scanf (M%d,&n);for (int i=2;i=n;i + + ) t=t*10+l;printf(HSUM=%dnM,s); 解:a=2;s
36、+=t;s*=a;四、编程题1 .输入一个实数,输出它的平方根值,如果输入数小于,则输出The number is error!” 的提示。解:#include #include void main() double a,x;printf (Input data: n); scanf (、%If”, &a); if (a=0) x=sqrt(a);printf (%g 的平方根值为%gn”, a, x); ) elseprintf (The number is error ! n); )2 .用if语句编程序,输入x后按下式计算y值,并输出结果。 .x+2*x2 +10 0WxW8y=1x-3
37、*x3-9x8解:#include void main() ( double x, y;printf (Input x: n); scanf (%lf, &x); if(x=0&x=8) y=x4-2*x*x4-10 ; elsey=x-3*x*x*x-10; printf (x=%f, y=%f n, x, y);)3 .输入一个百分制的成绩t后,按下式输出它的等级,要求分别写成if结构和switch结构。等 级为:9100 为A, 889 为 B,779 为 “C”, 669 为 D,59为 “E。 if结构解:#include void main() (double t;printf (Input score: nz/);scanf (%lfz &t);if (t=90&t=80&t=70&t=60&t=0&t60) putchar( Ez);else printf (error ! nzz);