C语言程序设计(第二版)习题参考答案
更新时间:2024-07-03 23:19:01 阅读量: 综合文库 文档下载
C语言程序设计习题参考答案
习 题 1
一、判断题
1.在计算机中,小数点和正负号都有专用部件来保存和表示。 2.二进制是由0和1两个数字组成的进制方式。
3.二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位的关系。 4.在整数的二进制表示方法中,0的原码、反码都有两种形式。 5.有符号数有三种表示法:原码、反码和补码。
6.常用字符的ASCII码值从小到大的排列规律是:空格、阿拉伯数字、大写英文字母、小写英文字母。
解:1.F 2.T 3.T 4.T 5.T 6.T 二、单选题
1.在计算机中,最适合进行数值加减运算的数值编码是 。
A. 原码 B. 反码 C. 补码 D. 移码
2.已知英文小写字母m的ASCII码为十进制数109,则英文小写字母y的ASCII码为十进制数 。
A. 112 B. 120 C. 121 D. 122 3.关于ASCII码,在计算机中的表示方法准确地描述是 。
A. 使用8位二进制数,最右边一位为1 B. 使用8位二进制数,最左边一位为1 C. 使用8位二进制数,最右边一位为0
D. 使用8位二进制数,最左边一位为0 4.设在机器字长4位,X=0111B,Y=1011B,则下列逻辑运算中,正确的是___________。 A. X∧Y=1000 B. X∨Y=1111 C. X⊕Y=0011 D. ˉ =1000 Y5.下列叙述中正确的是( )。
A.高级语言就是机器语言
B.汇编语言程序、高级语言程序都是计算机程序,但只有机器语言程序才是计算机可以直接识别并执行的程序
C.C语言因为具有汇编语言的一些特性,所以是汇编语言的一种
D.C源程序经过编译、连接,若正确,执行后就能得到正确的运行结果 6.用C语言编写的源程序经过编译后,若没有产生编译错误,则系统将( )。
A.生成可执行文件 B.生成目标文件 C.输出运行结果 D.自动保存源文件 7.下列叙述中不正确的是( )。
A.main函数在C程序中必须有且只有一个
B. C程序的执行从main函数开始,所以main函数必须放在程序最前面 C. 函数可以带参数,也可以不带参数。
D. 每个函数执行时,按函数体中语句的先后次序,依次执行每条语句
解:1.C 2.C 3.D 4.B 5.B 6.B 7.B 三、填空题
1.(87.625)10=( )2=( )8=( )16
2.(1001010111001.10111)2=( )8=( )16=( )10 3.输入三个数,计算并输出三个数的和与三个数的乘积。 程序如下:
#include
int a,b,c,s,z;
printf(\
s=a+b+c; printf(\ } *4. 输入三角形三条边的边长,计算并输出三角形的面积。 根据三条边的边长,计算三角形面积的公式如下:
面积?x?y?z??s(s?x)(s?y)(s?z) ?其中s?? 2??程序如下:
#include
double x,y,z,s,dime; scanf(\
dime=sqrt(s*(s-x)*(s-y)*(s-z)); } 解:1.1010111.101 127.5 57.A
2.11271.56 12B9.B8 4793.71875
3.scanf(\ z=a*b*c; printf(\4.s=(x+y+2)/2; printf(\ 四、编程题
1.仿照例1.1,编程序在屏幕上显示:
***************************** Merry Christmas! Happy New Year!
***************************** 解:#include
{ printf(\ printf(\
1
printf(\
printf(\ }
2.仿照例1.2编程,输入一个整数,计算这个数的平方。 解:#include
printf(\请输入一个整数:\\n\ scanf(\ z=a*a;
}
*3.仿照例1.3编程,输入两个数后,输出其中较小值。 解:#include
float min(float x, float y) { float m; if (x void main() { float a,b,c,mindata; printf(\请输入二个数:\\n\ scanf(\ mindata=min(a,b); printf(\ printf(\较小数:%f\\n\ } *4.仿照例1.2编程,输入a、b后,输出一元一次方程ax+b=0的解。 解:#include { float a,b,x; printf(\请输入a、b:\\n\ scanf(\ x=-a/b; printf(\ } *5.仿照例1.2编程,输入圆柱体的半径和高,计算并输出圆柱体的体积。 解:#include { float r,h,s,v; printf(\ scanf(\ v=3.14*r*r*h; printf(\ 2 } 习 题2 一、判断题 1.任何变量都必须要定义其类型。 2.C语言的double类型数据在其数值范围内可以表示任何实数。 3.C语言的任何类型数据在计算机内都是以二进制形式存储的。 4.isdigit(?5?)的结果为0。 5.printf函数中格式符“%c”对应的参数只能是字符类型。 6.按格式符“%d”输出float类型变量时,截断小数位取整后输出。 7.在C语言程序中,ABC与abc是两个相同的变量。 8.scanf函数中的格式符“%d”不能用于输入实型数据。 9.格式符“%f”不能用于输入double类型数据。 10.当格式符中指定宽度时,输出的信息完全取决于所指定的宽度。 解:(1)T (2)F (3)T (4)F (5)F (6)F (7)F (8)T (9)T (10)F 二、指出下列各项中哪些是C语言中的常量,并指出其类型 10,150 007 –0x3d π 1e0 e1 o7o8 ?x? ?xo? 1.52e0.5 sin(3) 0xf16 ?\\a? ?\\009? 1.414E+2 2.54 ?\\\\? ?a?+2 0x100h 0128 10L 解:合法的C常量有: 整型常量: 007 –0x3d 0xf16 10L 实型常量: 1e0 1.414E+2 字符型常量:?x? ?\\a? ?\\\\? 三、指出下列各项中哪些是C语言中的用户标识符 x_1 X_2 High printf β 3DS i/j e2 -e2 count Int number $23 next_ sizeof IF sum_12 _123# NO1: double for 解:C的用户标识符有:x_1 X_2 High e2 count Int number next_ IF sum_12 四、单项选择题 1.C语言中,char型数据在内存中的存储形式是( )。 A.原码 B.反码 C.补码 2.若有定义语句“char c='\\72';”则变量c( )。 A.包含1个字符 B.包含2个字符 C.包含3个字符 D.定义不合法 3.C语言中的基本数据类型包括( )。 A.整型、实型、逻辑型 B.整型、实型、字符型 C.整型、逻辑型、字符型 D.整型、实型、逻辑型、字符型 4.设c1、c2为字符型变量,执行语句“c1=getchar( );c2=getchar( );”时,从键盘输 入A↙,c1和c2的值分别为( )。 A.都是‘A’ B.c1是‘A’,c2未输入 3 D.ASCII码 C.c1未输入,c2是‘A’ D.c1是‘A’,c2是‘\\n’ 5.a、b是整型变量,执行语句“scanf(\,b=%d\,&a,&b);”,使a和b的值分 别为1和2,正确的输入是( )。 A.1 2 B.1,2 C.a=1,b=2 D.a=1 b=2 6.设c为字符型变量值为‘A’,a为整型变量值为97,执行语句“putchar(c);putchar(a);”后,输出结果为( )。 A.Aa B.A97 C.A9 D.aA 7.已知字母A的ASCII码值为65,以下语句段的输出结果是( )。 char c1='A',c2='Y'; printf(\ A.输出格式非法,输出错误信息 B.65,90 C.A,Y D.65,89 8.若要使用输入语句“scanf(\,&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 10 10.在C语言中,int、char、short三种类型数据在内存中所占的字节数( )。 A.由用户自己定义 B.均为2个字节 C.是任意的 D.由机器字长决定 解:(1) 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; 语句“printf(\–8.2f\\\\n\;”的输出结果是 。 解:$153.45 \\n 2.int i=123;float x= – 1234.56789; 语句“printf(\ x=%7.3f\\n\;”的输出结果是 。 解:i= 123 x=-1234.568 3.char c='a';int a=65; 语句“putchar(c+1);putchar(a);”的输出结果是 。 解:bA 4.int a=98; 语句“printf(“%d,%c,%o,%x”,a,a+1,a+2,a+3);”的输出结果是 。 解:98,c,144,65 5.int k; float f; 语句“scanf(“=%*4do”,&k,&f);”执行时输入 12345678765.43↙ 则 k= ,f= 。 解:k=123 f=8765.4 6.使用pow()函数时,程序的开头必须写一条预处理命令: 。 解:#include (1)int i=123,j=45; 函数printf(\的输出结果是 。 解:123,45 4 (2)int i=123; float x=-45.678; 语句printf(\的输出结果是 。 解:i= 123 x=-45.6780 (3)float alfa=60,pi=3 习 题 3 一、根据下列数学式,写出C的算术表达式。 1?(a2?b)?y342?10tan?12x??|sin(x)|3.5x6?e52ab?c?dc?dcd a?2b?解:-(a+b)×y 的C表达式:-(a*a+b*b)*pow(y,4) 2?10tan?12224 x?? 的C表达式:(sqrt(2)+10*10)/(pow(tan(x),-1)+3.141593) |sin(x)|3.5 的C表达式:sqrt(pow (fabs (sin(x)),3.5)) x6?e5 的C表达式:pow(x,6)-exp(5) 12ab?c?dc?dcd 的C表达式:(1.0/2*a*b+c+d)/(a+2*b-(c+d)/c/d) a?2b?二、按照要求,写出下列C的表达式。 1.写出int类型变量x为“奇数”的表达式。 解:x%2==1 2.Int类型变量x、y、z,写出描述“x或y中有且仅有一个小于z”的表达式。 解:x 3.将double类型变量y保留四位小数的表达式。 解:(int)(y*10000+0.5)/10000.0 4.为变量s赋值:取变量x 的符号,取变量y的绝对值。 解:s=(x>=0?1:-1)*(y>=0?y:-y) 5.条件“-5≤x≤3”所对应的C逻辑表达式。 解:-5<=x&&x<=3 6.a、b是字符变量,已知a的值为大写字母、b的值为小写字母,写出判断a、b是否为同一字母(不区分大小写)的逻辑表达式 解:a+32==b 或 b-a==32?1:0 7.int类型变量a、b均为两位正整数,写出判断a的个位数等于b的十位数、且b的个位数等于a的十位数的逻辑表达式。 解:a==b/10&&a/10==b 8.写出判断某个人是否是成年人(年龄大于21),且不是老年人(年龄大于65)的逻辑表达式。 5 解:y>21&&y<=65 9.写出取变量a、b、c中最大值的条件表达式。 解:(a>b?a:b)>c?(a>b?a:b):c 10.若字符变量ch为小写字母,则将其转换为对应的大写字母。 解:ch=ch>='a'&&ch<='z'?ch-32:ch 三、单项选择题 1.设int x=3,y=4,z=5;,下列表达式中值为0的是( )。 A.'x'&&'y' B. x<=y C.x||y+z&&y–z D. !((x 2.已知x=10,ch='A',y=0;,则表达式“x>=y&&ch<'B'&&!y”的值是( )。 A.0 B. 1 C.“假” D.“真” 3.判断char型变量c为数字字符的正确表达式为( )。 A.'0'<=c<='9' B.'0'<=c&&c<='9' C.c>='0'||c<='9' D.c>=0&&c<=9 4.下列运算符中,优先级最低的是( )。 A.?: B.&& C.= = D.*= 5.若有条件表达式“x?a++:b--”,则以下表达式中( )等价于表达式x。 A.x==0 B.x!=0 C.x==1 D.x!=1 6.有定义int k=4,a=3,b=2,c=1;,表达式“k B.3 C.2 D.1 7.执行下列程序段后,变量a,b,c的值分别是( )。 int x=10,y=9,a,b,c; a=(--x= =y++)?--x:++y;b=x++;c=y; A.a=9,b=9,c=9 B.a=8,b=8,c=10 C.a=9,b=10,c=9 D.a=1,b=11,c=10 8.有定义int a=9;,语句“a+=a– =a+a;”执行后,变量的值是( )。 A.18 B.9 C.–18 D.–9 9.设x和y均为int型变量,则语句“x+=y;y=x–y;x– =y;”的功能是( )。 A.把x和y按从小到大排列 C.无确定结果 B.把x和y按从大到小排列 D.交换x和y中的值 10.有定义double x=1,y;,表达式“y=x+3/2”的值是( )。 A.1 B.2 C.2.0 D.2.5 11.设有定义int x;double y;,则下列表达式中结果为整型的是( )。 A. (int)y+x B.(int)x+y C.int(y+x) D.(double)x+y 12.设有整型变量x,下列说法中,错误的是( )。 A.“5.0”不是表达式 B.“x”是表达式 C.“!x”是表达式 D.“sqrt(x)”是表达式 解:(1)D (2)B (3)B (4)D (5)B (6)D (7)B (8)C (9)D (10)C (11)A (12)A 四、填空题。 1.设float x=2.5,y=4.7; int a=7;,表达式 x+a%3*(int)(x+y)%2/4 值为 。 解:2.5 2.设int x=2,y=3;,执行语句“x*=x+y”后x的值为 。 解:10 3.设int x=17,y=5;,执行语句“x%=x–y”后x的值为 。 解:5 6 4.设 int a=6,b=4,c=2;,表达式 !(a-b)+c-1&&b-c/2 的值为 。 解:1 5.设 int a=2,b=4,x,y;,表达式!(x=a)||(y=b)&&!(2-3.5) 的值为 。 解:0 6.判断变量a、b是否绝对值相等而符号相反的逻辑表达式为 。 解:a==-b 7.判断变量a、b中必有且只有一个为0的逻辑表达式为 。 解:a*b==0&&a+b!=0 8.设int m=2,n=2,a=1,b=2,c=3;执行语句d=(m=a==b)&&(n=b>c);后,m和n的值分别为 。 解:m为0,n为2 9.设int a=2;,表达式“a%2!=0”的值为 。 解:0 10.设char c='y';,表达式“c>='a'&&c<='z'|| c>='A'&&c<='Z'”的值为 。 解:1 11.写出与代数式 (x+2)ex+2 对应的C表达式 。 解:(x+2)*exp(x+2) 12.设int a=2;执行语句a=3*5,a*4;后a的值为 。 解:15 五、写出下列程序的输出结果。 1. #include unsigned k,n; scanf(\输入数据为:69 k=n*10+n/10; printf(\} 解:n=69 k=96 2. #include int x=2,y=3; x*=y+4; printf(\x/=y=5; printf(\x-=y%2; printf(\} 解:14,3 7 2,5 1,5 3. #include int a, b; a=8; b=7; a=(a-- ==b++)? a%3 : a/3; printf(\} 解: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=1。 #include { int a,b,c, ① ; printf(“Enter a,b,c:”); scanf(“%d%d%d”, ② ); ③ ; a=b; b=c; ④ ; printf(“a=%d b=%d c=%d\\n”,a,b,c); } 解:① t ② &a,&b,&c ③ t=a ④ c=t 2.以下程序不借助任何变量把a、b中的值进行交换。 #include { int a,b; printf(“Input a,b:”); scanf(“%d%d”, ① ); a+= ② ; b=a- ③ ; a- = ④ ; printf(“a=%d b=%d\\n”,a,b); } 解:① &a,&b ② b ③ b ④ b 七、编程题。 1.输入3个字符后,按各字符ASCII码从小到大的顺序输出这些字符。 解:#include void main() { char c1,c2,c3,t,min,mid,max; c1=getchar(); c2=getchar(); c3=getchar(); min=(t=c1 8 max=(t=c1>c2?c1:c2)>c3?t:c3; mid=c1+c2+c3-min-max; putchar(min); putchar(mid); putchar(max); } 2.输入两点坐标(x1,y1)、(x2,y2),计算并输出两点间的距离。 解:#include #include void main() { double x1,y1,x2,y2,d; printf(“请输入两点坐标 (x1,y1),(x2,y2)\\n”); scanf(“(%lf,%lf),(%lf,%lf)”,&x1,&y1,&x2,&y2); d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); printf(“两点间距离=%f\\n”,d); } 3.编写程序,计算球体积并输出它的值。要求输入半径值,计算结果保留三位小数。 解:#include void main() { double r,gv; printf(“请输入半径值:\\n”); scanf(“%lf”,&r); gv=4.0/3*PI*pow(r,3); printf(“半径为%f的球的体积为:%.3f\\n”,r,gv); } 4.输入三角形的底和高,求三角形面积。 解:#include #define PI 3.14159 void main() { double a,h,s; printf(“请输入三角形的底,高\\n”); scanf(“%lf,%lf”,&a,&h); s=a*h/2; printf(“三角形面积=%f\\n”,s); } 5.编写程序,输入一个实数后输出该数的绝对值。 解:#include double x,y; 9 printf(“请输入一个实数\\n”); scanf(“%lf”,&x); y=x>=0?x:-x; printf(“|%g|=%g\\n”,x,y); } 6.输入梯形的上底、下底和高,求梯形面积。 解:#include double a,b,h,s; printf(“请输入梯形的上底,下底,高\\n”); scanf(“%lf,%lf,%lf”,&a,&b,&h); s=(a+b)*h/2; printf(“ 梯形面积=%f\\n”,s); } 7. 输入矩形的边长,求矩形面积。 解:#include double a,b,s; printf(“请输入矩形的长,宽\\n”); scanf(“%lf,%lf”,&a,&b); s=a*b; printf(“ 矩形面积=%f\\n”,s); } 8. 已知等差数列的第一项为a,公差为d,求前n项之和,a、d、n由键盘输入。 解:#include int a,d,n,sum; printf(“请输入等差数列的首项 公差 项数\\n”); scanf(“%d%d%d”,&a,&d,&n); sum=a*n+n*(n-1)*d/2; printf(“ sum=%d\\n”,sum); } 9. 编写程序,将d天h小时m分钟换算成分钟,输入d、h、m,输出换算结果。 解:#include int d,h,m,t; printf(“请输入天 小时 分钟\\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 10. 编写程序,求出给定半径r的圆以及内接正n边形的面积,输出计算结果。r和n的值由键盘输入。 解:#include double r,s1,s2; int n; printf(“Input r n\\n”); scanf(“%lf%d”,&r,&n); s1=PI*r*r; s2=n/2.0*r*r*sin(2*PI/n); printf(“圆面积=%f,正内接%d边形面积=%f\\n”,s1,s2); } 习 题 4 一、单项选择题 1.下列语句将小写字母转换为大写字母,其中正确的是( )。 A.if(ch>='a'&ch<='z')ch=ch-32; B.if(ch>='a'&&ch<='z')ch=ch-32; C.ch=(ch>='a'&&ch<='z')?ch-32:' '; D.ch=(ch>'a'&&ch<'z')?ch-32:ch; 2.下列各语句中,能够将变量u、s中最大值赋给变量t的是( )。 A.if(u>s)t=u;t=s; B.t=s;if(u>s)t=u; C.if(u>s)t=s;else t=u D.t=u;if(u>s)t=s; 3.假设变量x、k都已定义,下列语句片段中,无语法错误的是( )。 A. switch(x){ case x>=90: putchar('A'); case x<60: putchar('E'); } B. switch(x) { case 1+2: 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 )中的条件等价的是( )。 11 A.s==0 B.s!=0 C.s==1 D.s=0 5.下列语句中,哪一个可以输出26个大写英文字母( )。 A.for(a='A';a<='Z';printf(\,++a)); B.for(a='A';a<'Z';a++)printf(\,a); C.for(a='A';a<='Z';printf(\,a++)); D.for(a='A';a<'Z';printf(\,++a)); 6.判断下面的while循环体的执行次数( )。 i=0; k=10; while( i=8 ) i=k––; A.8次 B.10次 C.2次 D.无数次 解:(1) 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# 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(\} 解:3 *2. #include void main( ) { int k=0; char c='A'; do { switch (c++) { case 'A': k++; break; case 'B': k--; case 'C': k+=2; break; case 'D': k=k%2; break; case 'E': k=k*10; break; default: k=k/3; 12 } k++; }while(c<'G'); printf(\} 解:k=8 *3. #include char a,b,x; int i; do x=getchar(); //运行时输入:2abcD while (isupper(x)==0); 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'); } } 注:isupper(x)是判断x是否大写字母的函数,如果x是大写字母函数值为1 否则为0。 解: A BBB CCCCC DDDDDDD 4. #include int i,n; scanf(\输入2520 i=2; while(n>1) if(n%i==0){ printf(\ n/=i; } else i++; printf(\} 13 解: 2 2 2 3 3 5 7 三、填空题 1.求1~10的乘积,写作: for( , i=1; i<=10; ++i) s*=i; 解: s=1 2.下面程序段执行后,x、y的值分别为 。 y=1; x=5; while(x) { x--; y++; } 解: x、y分别为0和6 *3.输入若干个以问号结束的字符,同时输出这串字符(不包括问号); while( !='?') putchar(ch); 解: (ch=getchar()) //注意外面的这对括号不能少 *4.有以下程序片段: s=1.0; for(k=1;k<=n; k++) s+=1.0/(k*(k+1)); printf(\填空,使下程序段与上程序段功能完全相同。 s=0.0; ; k=0; do { s+=d; ; d=1.0/(k*(k+1)); } while( ); printf(\ 解: d=1 k++ k<=n 5.下列程序输出6~10000之间的亲密数对,填空将程序补充完整。若a、b是亲密数对,则a的因子和等于b,b的因子和等于a,且a不等于b。 #include { int a,b,c,i; for(a=6;a<=10000;a++) { b=1; for(i=2;i<=a/2;i++) if( ) b+=i; for(i=2;i<=b/2;i++) if(b%i==0) c+=i; 14 if( &&a!=b) printf(\ } } 解:a%i==0 c=1; c==a 6.计算2+22+222+2222+?+22+?+2的和。 n #include void main() { int s=1,t=1,a,n; scanf(\ for(int i=2;i<=n;i++) { t=t*10+1; } printf(\} 解:a=2; s+=t; s*=a; 四、编程题 1.输入一个实数,输出它的平方根值,如果输入数小于0,则输出“The number is error!”的提示。 解:#include #include double a,x; printf(“Input data:\\n”); scanf(“%lf”,&a); if(a>=0){ x=sqrt(a); printf(“%g的平方根值为%g\\n”,a,x); } else printf(“The number is error!\\n”); } 2.用if语句编程序,输入x后按下式计算y值,并输出结果。 2 x+2*x +10 0≤x≤8 y= x-3*x3-9 x<0 或 x>8 解:#include void main() { double x,y; 15 printf(“Input x:\\n”); scanf(“%lf”,&x); if(x>=0&&x<=8) y=x+2*x*x+10; else y=x-3*x*x*x-10; printf(“x=%f,y=%f\\n”,x,y); } 3.输入一个百分制的成绩t后,按下式输出它的等级,要求分别写成if结构和switch结构。等级为:90~100为“A”,80~89为“B”,70~79为“C”,60~69为“D”,59~0为“E”。 if结构 解:#include void main() { double t; printf(“Input score:\\n”); scanf(“%lf”,&t); if(t>=90&&t<=100) putchar(?A?); else if(t>=80&&t<90) putchar(?B?); else if(t>=70&&t<80) putchar(?C?); else if(t>=60&&t<70) putchar(?D?); else if(t>=0&&t<60) putchar(?E?); else printf(“error!\\n”); } switch结构 解:#include void main() { double t; printf(“Input score:\\n”); scanf(“%lf”,&t); switch((int)(t/10)){ case 10: case 9:putchar(?A?);break; case 8:putchar(?B?);break; case 7:putchar(?C?);break; case 6:putchar(?D?);break; case 5: case 4: 16 } } case 3: case 2: case 1: case 0:putchar(?E?);break; default:printf(“error!\\n”); 4.输入x、y,计算f(x,y)的函数值。 f(x,y)定义如下: ?x?y?22?x?yf(x,y)???x?y??x?y22x??0x?0x??0x?0y??0y?0y?0y??0解:#include double x,y,f; printf(“Input x y:\\n”); scanf(“%lf%lf”,&x,&y); if(x>=0&&y>=0) f=x*x+y*y; else if(x<0&&y<0) f=x*x-y*y; else if(x>=0&&y<0) f=x+y; else if(x<0&&y>=0) f=x-y; printf(“f(%f,%f)=%f\\n”,x,y,f); } 5.输入三角形的三条边长a、b、c,计算并输出三角形的面积。要求判断输入的三条边a、b、c三个数是否能构成三角,如果不能构成三角形,则输出提示信息告诉用户。 根据三条边的边长,计算三角形面积的公式如下: s?x?y?z2面积?s(s?x)(s?y)(s?z) 解:#include #include double a,b,c,s,area; printf(“Input a b c:\\n”); scanf(“%lf%lf%lf”,&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a){ s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); 17 printf(“area=%.3f\\n”,area); } else } 6.输入1~7,输出对应的星期一~星期天。 解:#include void main() { int s; printf(“Input s(1~7):\\n”); scanf(“%d”,&s); switch(s){ case 1:printf(“星期一\\n”);break; case 2:printf(“星期二\\n”);break; case 3:printf(“星期三\\n”);break; case 4:printf(“星期四\\n”);break; case 5:printf(“星期五\\n”);break; case 6:printf(“星期六\\n”);break; } } 7.输入年、月、日,输出是该年的第几天。 解:#include void main() { int y,m,d,days; printf(“Input 年 月 日:\\n”); scanf(“%d%d%d”,&y,&m,&d); days=d; switch(m){ case 12:days+=30; case 11:days+=31; case 10:days+=30; case 9:days+=31; case 8:days+=31; case 7:days+=30; case 6:days+=31; case 5:days+=30; case 4:days+=31; case 3: if(y%4==0&&y0!=0||y@0==0) days+=29; 18 printf(“线段%f,%f,%f不能构成三角形\\n”,a,b,c); case 7:printf(“星期天\\n”);break; default:printf(“The s is error!\\n”); } } else days+=28; case 2:days+=31; printf(“%d月%d日是%d年的第%d天\\n”,m,d,y,days); 8.输入n和相应的n个数,输出它们中所有奇数的乘积。 解:#include void main() { int n,i,t,x; printf(“请输入 n:\\n”); scanf(“%d”,&n); printf(“请输入%d个数:\\n”,n); for(i=1,t=1;i<=n;i++){ scanf(“%d”,&x); if(x%2==1) t*=x; } printf(“%d\\n”,t); } 9.输入一个正整数,求它们所有数字之和。 解:#include void main() { int a,sum=0; printf(“请输入一个正整数:\\n”); scanf(“%d”,&a); a=a>=0?a:-a; while(a!=0){ sum+=a; } } 10.输入n和相应的n个数,统计输入的数中负数、零及正数的个数。 解:#include void main() { int n,i,t,s,k; double x; t=s=k=0; a/=10; printf(“%d\\n”,sum); 19 printf(“请输入 n:\\n”); scanf(“%d”,&n); printf(“请输入%d个数:\\n”,n); for(i=1;i<=n;i++){ scanf(“%lf”,&x); if(x>0) t++; else if(x<0) s++; else k++; } printf(“负数:%d\\t零:%d\\t正数:%d\\n”, s, k, t); } 11.输入10个学生的成绩,输出最低分数。 解:#include void main() { int i; double score,min; printf(“请输入 10个学生成绩:\\n”); scanf(“%lf”,&score); min=score; // 给min赋初值 for(i=1;i<10;i++){ } } printf(“min=%g\\n”, min); scanf(“%lf”,&score); if(min>score) min=score; 或 解:#include void main() { int i; double score,min; printf(“请输入 10个学生成绩:\\n”); for(i=1;i<=10;i++){ } printf(“min=%g\\n”, min); 20 scanf(“%lf”,&score); if(i==1) min=score; min=score; if(min>score) } 12.青年歌手大奖赛中,10个评委给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分。计算并输出选手张三的得分。(注:如果最高分或最低分有多个相同时,去掉其中一个) 解:#include void main() { int i; double score,min,max,sum,aver; printf(“请输入 10个评委给张三的评分:\\n”); scanf(“%lf”,&score); min=max=sum=score; for(i=1;i<10;i++){ } } aver=(sum-max-min)/8; printf(“张三得分:%g\\n”, aver); scanf(“%lf”,&score); if(min>score) min=score; max=score; if(max 或 解:#include void main() { int i; double score,min,max,sum=0,aver; } printf(“请输入 10个评委给张三的评分:\\n”); for(i=1;i<=10;i++){ } aver=(sum-max-min)/8; printf(“张三得分:%g\\n”, aver); scanf(“%lf”,&score); if(i==1) max=min=score; min=score; max=score; if(min>score) if(max 21 13.用循环语句输出26个大写字母及它们的ASCII码值。 解:#include void main() { char c; for(c=?A?;c<=?Z?;c++) printf(“%c\\t%d\\n”,c,c); } 或 解:#include void main() { char ch='A'; while( ch<='Z'){ printf(\ ch++; } } 14.输出所有的“水仙花数”,水仙花数是指一个三位数,其各位数字的立方和等于其本身,如:153=13+53+33。 解:#include void main() { int x,a,b,c; } printf(“水仙花数:\\n”); for(x=100;x<1000;x++){ } printf(“\\n”); a=x/100; b=x0/10; c=x; if(x==a*a*a+b*b*b+c*c*c) printf(“%d\\t”, x); 15.求算式1?12?13?14?15?16?n前40项的和。 解:#include void main() { int i; double sum=0,flag=1; for(i=1;i<=40;i++){ sum+=flag/i; flag=-1*flag; // 或flag=-flag 22 } } printf(“sum=%g\\n”,sum); 16.输出一张华氏与摄氏温度对照表,将华氏温度从30°~40°F之间的每度转换对应的摄氏温度输出。张华氏转化为摄氏温公式:c=5/9(F-32) 解:#include void main() { double f,c; for(f=30;f<=40;f++){ } } c=5.0/9*(f-32); printf(“%g\\t%g\\n”,f,c); *17.求数列的和。设数列的首项为81,以后各项为前一项的平方根(如81,9,3,1.732,?),求前20项和。 解:#include #include int i; double sum=0,a=81; for(i=1;i<=20;i++){ } } printf(“sum=%g\\n”,sum); sum+=a; a=sqrt(a); // 下一项为前一项的平方根 18.输出一个如下的乘法口诀表。 1×1=1 1×2=2 2×2=4 1×3=3 2×3=6 3×3=9 ??? 1×9=9 2×9=18 3×9=27 ??? 9×9=81 解:#include void main() { int i,j; for(i=1;i<=9;i++){ for(j=1;j<=i;j++) printf(“%d*%d=%d\\t”,j,i,i*j); 23 } } printf(“\\n”); *19.猴子吃桃子。第1天猴子吃掉桃子总数一半多一个,第2天又将剩余的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第十天准备吃的时候只剩下一个桃子。请问第1天开始吃的时候桃子的总数。 //递推公式 x=2*(x+1) 解:#include void main() { int n,x; x=1; //第10天的挑子数 for(n=9; n>=1; n--) { x=2*(x+1); //计算第n天的桃子数 } printf(\第1天吃前挑子总数=%d\\n\ } *20.用循环体编程序,分别输出如下两个图形,如图4.15所示。* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 左图 解:#include int i,j; for(i=1;i<=4;i++) { for(j=1;j<=8-2*i;j++) putchar(' '); for(j=1;j<=2*i-1;j++) printf(\ putchar('\\n'); } } 右图 解:#include void main() { 24 * int i,j; for(i=1;i<=4;i++) //图上半部分 { for(j=1;j<=8-2*i;j++) putchar(' '); for(j=1;j<=2*i-1;j++) printf(\ putchar('\\n'); } for(i=3;i>=0;i--) //图下半部分 { for(j=1;j<=8-2*i;j++) putchar(' '); for(j=1;j<=2*i-1;j++) printf(\ putchar('\\n'); } } 21.输入正整数a、b,输出a、b之间所有素数之和。 解:#include int i,j,a,b,sum=0; printf(“请输入a b (a≤b)\\n”); scanf(“%d%d”,&a,&b); for(i=a;i<=b;i++) { for(j=2;j<=i/2;j++) if(i%j==0)break; // 此时可判定i不是素数 if(j>i/2&&i!=1) sum+=i;// 满足此条件表示除1和自身外,其它数均不能整除i } printf(“%d至%d之间的素数和=%d\\n”,a,b,sum); } 或 解:#include int i,j,a,b,sum=0,flag; printf(“请输入a b (a≤b)\\n”); scanf(“%d%d”,&a,&b); for(i=a;i<=b;i++) { flag=1; // 要判别当前i是否素数,先将标志变量赋值为1 25 for(j=2;j<=i/2;j++) if(i%j==0){ flag=0;break; }// 此时可判定i不是素数,退出循环 if(flag==1&&i!=1) sum+=i;//满足此条件表示除1和自身外,其它数均不能整除i } printf(“%d至%d之间的素数和=%d\\n”,a,b,sum); } *22.当x为–2,–1.5,–1,?,1.5,2时,求函数f(x)=x2–3.14x–6的解所取的最大值、最小值。 解:#include double x,y,max,min; max=min=(-2)*(-2)-3.14*(-2)-6; //f(-2)作为max、min的初始值 for(x=-1.5;x<=2;x+=0.5) { y=x*x-3.14159*x-6; if(y>max) max=y; else if(y } printf(\ } *23.当n取值在–39~40范围内时,判断表达式n2+n+41的值是否都是素数。 解:#include #include int i,j,y,count=0; for(i=-39;i<=40;i++) { y=i*i+i+41; for(j=2;j<=sqrt(y);j++) if(y%j==0) { printf(\当i为%d时,y=%d,结论不成立!\\n\ count++; break; } } if (count!=0) printf(\共有%d个i值,使结论不成立!\\n\ else printf(\结论成立,都是素数!\\n\ } 26 *24.用区间对分法求x+xsinx–5=0在区间[0,5]内的一个实根(设ε=10)。 【说明】 在[a,b]区间连续的函数f(x),若满足条件f(a)·f(b)<0,则必有a<ξ (2)若|f(c)|<ε或|b-a|<ε,则输出c作为近似解,并终止程序执行。 (3)如果f(a)·f(c)<0,则b=c;否则a=c,再次执行第(1)步。 解:#include #include float a,b,c; a=0; b=5; //初始化区间a、b值 do { c=(a+b)/2; //计算a、b区间的中值 if((a*a+a*sin(a)-5)*(c*c+c*sin(c)-5)<0 ) b=c; //以c代替区间b值 else a=c; //以c代替区间a值 }while(fabs(c*c+c*sin(c)-5)>=1e-5&&fabs(b-a)>=1e-5); printf(\} 2–5 习 题 5 一、单项选择题 1.下列叙述中,正确的叙述项是( )。 A.定义函数时,必须要有形参 B.函数中可以没有return语句,也可以有多条return语句 C.函数f可以用f(f(x))形式调用,这种调用形式是递归调用 D.函数必须有返回值 2.下列叙述中,不正确的叙述项是( )。 A.函数调用时,形参变量只有在被调用时才被创建(分配存储单元) B.函数调用时,实参可以是常量、变量或表达式 C.定义变量时,省略对变量的存储类别定义,则变量是自动型变量 D.语句return(a,b);则函数可以返回两个值 3.传值调用的特点是( )。 A.实参传给形参变量的数据是地址 B.在函数中形参变量值改变后,不改变实参变量的值 C.在函数中形参变量值改变后,实参变量的值随之也改变 D.实参必须是变量 4.如果在函数中定义一个变量,有关该变量作用域正确的是( )。 A.只在该函数中有效 B.在该文件中有效 C.在本程序中有效 D.为非法变量 5.根据下面函数print的定义,选出调用函数print(5378)的值是( )。 void print(long n) { 27 if (n==0) return ; else{ print(n/10); printf(\ return ; } } A.5 3 7 8 B.8 7 3 5 C.3 5 7 8 D.8 7 5 3 *6.根据下面函数f,选出f(f(3))的值是( )。 int f(int x) { static int k=0; x=x+k; k--; return x; } A.5 B.3 C.2 解:(1)B (2)D (3)B (4)A (5)A 二、写出下列程序的输出结果 *1. #include int f1(int,int),f11(int); void f2(int); void main() { int i,j; for(i=0;i<5;i++) { f2((5-i)*3); for(j=0;j<=i;j++) printf(\ putchar('\\n'); } } int f1(int m,int n) { return f11(m)/f11(n)/f11(m-n); } int f11(int k) { if(k<=1) return 1; return k*f11(k-1); } void f2(int n) { for(int i=1;i<=n;i++) putchar(' '); } 解: 1 1 1 1 2 1 28 D.4 (6)C 1 3 3 1 1 4 6 4 1 *2. #include if(m%n==0) return n; else return f(n,m%n); } void main() { printf(\ } 解:24 3. #include void fun(int a,int b,int c,int add,int mult) { add=a+b+c; mult=a*b*c; printf(\} void main() { int x,y; x=y=0; fun(9,12,-4,x,y); printf(\ } 解:add=17 mult=-432 add=0 mult=0 4. #include void fun(int a,int b,int c,) { add=a+b+c; mult=a*b*c; printf(\} void main() { fun(9,12,-4); printf(\ } 解:add=17 mult=-432 add=17 mult=-432 5. #include void main() { int i; void fun(); 29 for(i=1;i<=4;i++){ a++; printf(\ fun(); } } void fun() { int a=0; a++; printf(\} 解:In main: a= 1In fun:a=1 In main: a= 2In fun:a=1 In main: a= 3In fun:a=1 In main: a= 4In fun:a=1 6. #include int x=2,i; int f(int x); for(i=0;i<3; i++) printf(\} int f(int x) { int y=0; static z=0; y++; z++; return(x+y+z); } 解: 4 5 6 三、程序填空题 1.输入若干个正整数,判断每个数从高位到低位各位数字是否按值从小到大排列。其中input()返回输入的数据,且保证输入的数据是一个正整数。fun1()函数是判断正整数n是否按数字从小到大排列。 #include int fun1(int m); void main() { int n; if(fun1(n)==1) printf(\中各位数字按是从小到大排列\\n\} int input() 30 { int n; printf(\请输入n:\\n\ scanf(\ if (n>0) ; do{ printf(\必须正整数,请重新输入 n:\\n\ scanf(\ }while(n<0); return n; } int fun1( ) { int k; k=m; while(m!=0) if( m/10>k) return 0; else { k=m; } return 1; } 解:n=input(); return n int m m=m/10 2.输入一个末尾数非0的正整数,输出它的逆序数。其中,input是数据输入函数,reverse是数据逆序函数。 #include long reverse(long n); void main() { int n; n=input(); printf(\逆序数是:%d\\n\} long input() { long n; printf(\请输入n:\\n\ scanf(\ if ( ) return n ; do{ printf(\必须正整数,且末尾数非0,请重新输入 n:\\n\ }while(n<0||n==0); return n; } long reverse(long n) { long k=0; while(n){ n/=10; } 31 return k; } 解:reverse(n) n>0&&n!=0 scanf(“%d”,&n) k=k*10+n 五、编程题 1.输入一个x,输出下面分段函数f(x)的值。要求将分段函数的计算定义成函数。 ?1?f(x)??0??1?x?0x?0x?0 解:#include int f(double x) // 函数定义 { int y=0; if(x>0) y=1; else if(x==0) y=0; else y=-1; return y; } void main() { double x; int y; scanf(“%lf”,&x); y=f(x); // 函数调用 printf(\} 2.输入一个正整数,输出该数的各个数字之和。要求编写函数,计算整数的各个数字之和。 解:#include int sum(int a) { int s=0; while(a!=0){ s+=a; a=a/10; } return s; } void main() { int x; scanf(“%d”,&x); printf(\} 3.编写函数,判断一个正整数a是否为完数,如果是完数,函数返回值为1;否则为0。(完数:一个数的所有因子之和等于该本身,如6、28都是完数;6=1+2+3;28=1+2+4+7+14。) 32 解:#include int wanshu(int n) { int i,a=0; for(i=1;i<=n/2;i++) if(n%i==0) a+=i; if(a==n) return 1; else return 0; } void main() { int n; scanf(“%d”,&n); if(wanshu(n)==1) printf(\是完数\\n\ else printf(\不是完数\\n\} 4.输入三个数,输出它们的最小值。要求定义一个函数,返回两个数的最小值。 解:#include double min(double x,double y) { if(x void main() { double a,b,c,m; printf(\ scanf(“%lf%lf%lf”,&a,&b,&c); m=min(min(a,b),c); printf(“最小数:%f\\n\} 5.在主函数中输入字符c和m,调用函数prn,连续将字符c输出m次。定义函数prn,完成连续将某个字符c输出m次后换行。 解:#include void prn(char,int); // 函数声明 void main() { char c; int m; printf(“Input c m:\\n”); scanf(“%c%d”,&c,&m); prn(c,m); } void prn(char c,int m) { int i; for(i=1;i<=m;i++) putchar(c); printf(“\\n”); 33 } 6.输入一个年、月、日输出它是这年的第几天。要求定义函数,根据年月日计算是第几天的函数。 解:#include int days(int year,int month,int date) { int d=date; switch(month-1) { case 11: d+=30; case 10: d+=31; case 9: d+=30; case 8: d+=31; case 7: d+=31; case 6: d+=30; case 5: d+=31; case 4: d+=30; case 3: d+=31; case 2: if((year%4==0&&year0!=0)||(year@0==0)) d+=29; else d+=28; case 1: d+=31; } return d; } void main() { int year,month,date; int d; printf(“请输入 年 月 日:\\n”); scanf(\ d=days(year,month,date); printf(\月%d日是%d年的第%d天!\month,date,year,d); } 7.定义一个函数将正整数n转换成文字形式输出星期几(n值0~6分别转换成星期天,星期一,?,星期六)。 解:#include { case 0: printf(“星期天”); break; case 1: printf(“星期一”); break; case 2: printf(“星期二”); break; case 3: printf(“星期三”); break; case 4: printf(“星期四”); break; case 5: printf(“星期五”); break; case 6: printf(“星期六”); break; } } void main() { int num; printf(“请输入一个整数0~6:\\n”); scanf(\ week(num); } 7.输入一个整数n,计算3.2n的值。要求定义函数计算xn 值。 解:#include 34 double fact(double x,int n); void main() { double x,y; int n; printf(“Input x n:\\n”); scanf(“%lf%d”,&x,&n); y=fact(x,n); printf(“%f\\n”,y); } double fact(double x,int n) { int i; double t=1; for(i=1;i<=n;i++) t=t*x; return t; } 8.输入平面上p1(x1,x2)、p2(x2,y2)两点坐标,计算两点间的距离输出。要求定义一个函数计算平面上两点间的距离。 解:#include #include double f(double,double,double,double); void main() { double x1,x2,y1,y2,d; printf(“Input (x1,y1),(x2,y2):\\n”); scanf(“(%lf,%lf),(%lf,%lf)”,&x1,&y1,&x2,&y2); d=f(x1,y1,x2,y2); printf(“%f\\n”,d); } double f(double x1,double y1,double x2,double y2) { double d; d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); return d; } 9.在主函数中输出1!+2!+3!+?+10!的值。要求将计算阶乘的运算写成函数。 解:#include int fact(int k) { int i,res=1; for(i=1; i<=k; i++) res=res*i; return res ; } void main( ) { int n,sum=0; for(n=1;n<=10;n++) 35 sum+=fact(n); printf(“1!+2!+3!+?+10!=%d\\n”,sum); } 10.编写函数int digit(int n,int k),函数返回n中从右边开始的第k位数字的值。如:digit(231456,3)=4;digit(1456,5)=0。 解:#include int digit(int n,int k) { long s; if (log10(n)+1 else s=n/(int)pow(10,k-1); return s; } void main() { int n,k; printf(\输入整数n和k:\\n\ scanf(\ printf(\ } *11.输入正整数a、b,输出a、b之间所有回文数。要求定义一个函数判断正整数n是否是回文数。回文数是指正整数n的逆序数与原数相等。如121、2332、55等都是回文数。 解:#include while(m!=0) // 将n的逆序数放入k中 { k=k*10+m; m=m/10; } if(n==k) return 1; // n与k相同则n是回文数 else return 0; } void main() { int a,b,i; printf(\输入整数a和b:\\n\ scanf(\ printf(“%d、%d之间所有回文数:\\n”,a,b); for(i=a;i<=b;i++) if(huiwen(i)==1) printf(\ printf(“\\n”); } -3-2-n-112.定义函数main(),输入正整数n,当精度e分别取值为10、10、10、??、10时,分别计算并输出下列算式的值,直到最后一项的绝对值小于精度e,以比较不同精度下算出的结果。要求调用函数cal(e)计算下列算式的值。 s?1?12!?13!?14!?..... 解:#include double jiecheng(int a) { double f; 36 if(a==1) f=1; else f=a*jiecheng(a-1); return f; } double cal(double e) { double s=0,t; int i=1; t=1/jiecheng(i); while(t>=e) { t=1/jiecheng(i); s=s+t; i++; } return s; } void main() { int n,e; double p; printf(\输入正整数n:\\n\ scanf(\ for(e=10;e<=pow(10,n);e=e*10) { p=cal(1.0/e); printf(\ } } *13.年份信息查询程序,输入年份,查询相应的信息。采用菜单选择功能,输入1或2其功能分别是:闰年信息查询、元旦是星期几信息查询,输入3程序结束。 要求根据结构化程序设计方法,把问题分解成四个子问题(1)输入年份,判断输入数据的合法性。(2)判断是否闰年。(3)计算元旦是星期几。(4)输出文字形式的星期几。然后再把这些子问题组合起来,完成整个大问题的求解 (仿照书上例6.7) 。 其中元旦是星期几的计算公式: w=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7; w值0~6,分别表示星期天、星期1,?星期六。 解:#include void leapyear(int y); int judgeweeknumber(int y); void judgeweekchinese(int y); void main() { int number,week,year; printf(“功能菜单:”); printf(“1.闰年信息查询 2.元旦是星期几信息查 3. 程序结束\\n”); printf(“请输入年份:\\n”); scanf(“%d”,&year); printf(“请选择功能:\\n”); scanf(“%d”,&number); if(number==1) { year=legal(year); leapyear(year); } if(number==2) { week=judgeweeknumber(year); 37 judgeweekchinese(week); } if(number==3) return; } int legal(int y) { if(y<0) do { printf(“请重新输入一个年份:”); scanf(“%d”,&y); } while(y<0); return y; } void leapyear(int y) { if(y%4==0&&y0!=0||y@0==0) printf(“%d是闰年\\n”,y); else printf(“%d不是闰年\\n”,y); } int judgeweeknumber(int y) { int week; week=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7; return week; } void judgeweekchinese(int week) { switch(week) { case 0: printf(“星期天”); break; case 1: printf(“星期一”); break; case 2: printf(“星期二”); break; case 3: printf(“星期三”); break; case 4: printf(“星期四”); break; case 5: printf(“星期五”); break; case 6: printf(“星期六”); break; } } *14.输入n、x,计算xn 输出。要求定义一个递归函数计算xn 。 解:#include double mypow(double x,int n) { double y=1; if (n>0) return(x*mypow(x,n-1)); else if (n<0) return(1/x*mypow(x,n+1)); else return 1; } void main() { double x; int n; printf(“请输入x n:\\n”); scanf(\ printf(\} *15.数列的第1、2项为1,此后各项为前两项之和。编制求数列中任何一项值的递归 38 函数。 解:此数列为1、1、2、3、5、8、13 ??。 #include { if (n==1||n==2) return (1); else return (f(n-1)+f(n-2)); } void main() { int n; while(scanf(\ printf(\数列第%d项为:%d\ } 习 题 5 一、单项选择题 1.下列能正确定义一维数组a的语句是( )。 A.int a(10); B.int n=10,a[n]; C.int n;scanf(\,&n); D.#define n 10 int a[n]; int a[n]; 2.若有定义语句“int a[10];”则下列对a中数组元素正确引用的是( )。 A.a[10/2–5] B.a[10] 3.能对一维数组正确初始化的语句是( )。 C.a[4.5] D.a(1) A.int a[6]={6*1}; B.int a[6]={1,,,3}; C.int a[6]={}; D.int a[6]=(0,0,0); 4.以下能正确定义二维数组的语句为( )。 A.int a[][]; B.int a[][4]; C.int a[3][]; D.int a[3][4]; 5.若有数组定义语句“int a[4][5];”,则对a中数组元素的正确引用是( )。 A.a[4][1] B.a[2,1] C.a[4][5] D.a[4–1][5–5] 6.以下能对二维数组a进行正确初始化的语句为( )。 A.int a[2][]={{1},{4,5}}; B.int a[2][3]={1,2,3,4,5,6,7}; C.int a[][]={1,2,3,4,5,6}; D.int a[][3]={1,2,3,4,5}; 7.下列对字符数组s的初始化不正确的是( )。 A.char s[5]=\; B.char s[5]={'a','b','c','d','e'}; C.char s[5]=\; D.char s[]=\; 8. 下列程序段的运行结果为( )。 char s[]=\ A.ab0 B.ab C.Abcd D.ab cd 9.下列数组s中所存放字符串的长度为( )。 char s[]=\ A.9 B.10 C.11 D.18 10.有数组定义语句“char a[20];”,则正确的输入语句为( )。 A.scanf(\,&a); B.scanf(\,a[]); C.gets(a[20]); D.gets(a); 11.下面程序执行后的正确输出项是( )。 39
正在阅读:
C语言程序设计(第二版)习题参考答案07-03
小学五年级下册数学《包装的学问》教案11-10
在双拥模范单位和个人表彰大会上的发言材料08-08
连锁加盟合同书08-26
集合住宅理论探究报告01-30
七年级地理上册 世界的地形教案 湘教版03-12
皮带机安全操作规程08-14
诗歌鉴赏练习题10-21
办公室派车管理办法11-23
软件发布管理流程规范模板04-08
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 习题
- 程序设计
- 答案
- 语言
- 参考
- 电气车间SOP25-公用工程配电室EPS检查和操作 V1.0-2015.3.05
- 八下历史期末复习 - 图文
- 单亲家庭的学生同伴交往存在的问题及对策
- 公务员制度试卷答案(转发)
- 大学生理学复习题集
- 高中历史北师大版《必修一 政治史》《第一单元 古代中国的政治制
- dsp实验指导书
- 江苏省五年制高职英语课程标准
- 泄露天机 - 2016年金太阳高考押题 精粹 数理(教师用卷)
- 市政改造工程材料、设备质量及施工质量保证措施 - 图文
- 固安工业园区新型城镇化项目PPP模式案例研究
- 2015-2016学年第二学期期末考试《计算机辅助设计》大作业
- 杭州十一郎大数据公司盘 存 表
- 小学英语外研版三年级上册期末复习
- .浅析图像分割的原理及方法
- 骨科X线解剖(四肢、关节) - 图文
- 2008年上海市第二十二届初中物理竞赛复赛试题及答案
- 最新长春版六年级语文上册第二单元测试题及答案
- 北京工商大学与国家开放大学(中央广播电视大学)合作开展本科开
- 选用DMG机床的理由