第一章 C语言程序设计概述 -习题答案1
算法的描述有哪些基本方法? 答 1、自然语言 2、专用工具
2 C语言程序的基本结构是怎样的?举一个例子说明。 答
1、C语言程序由函数构成;
2、“/*”与“*/”之间的内容构成C语言程序的注释部分;
3、用预处理命令#include、#define可以包含有关文件或预定义信息; 4、大小写字母在C语言中是有区别的;
5、除main()函数和标准库函数外,用户也可以自己编写函数,应用程序一般由多个函数组成,这些函数指定实际所需要做的工作。 3 C语言有什么特点?
答 1、具有结构语言的特点,程序之间很容易实现段的共享;
2、主要结构成分为函数,函数可以在程序中被定义完成的任务,地编译代码,以实现程序的模块化;
3、运算符丰富,包含的范围很广; 4、数据类型丰富;
5、允许直接访问物理地址,即可直接对硬件进行损伤,实现汇编语言的大部分功能; 6、不太严格,程序设计自由度大,这样使C语言能够减少对程序员的束缚; 7、生成的目标代码质量,程序执行效率高,同时C语言编写的程序的可移植性好。 4
★指出合法与不合法的标识符命名。 答
AB12--√
leed_3-- a*b2--× 8stu--× D.K.Jon--× EF3_3--√ PAS--√ if--× XYZ43K2--√ AVE#XY--× _762--√ #_DT5--× C.D--× 5
说明下列Turbo C热键的功能。 答
F2:源文件存盘 F10:调用主菜单 F4:程序运行到光标所在行(用于调试程序) Ctrl+F9:编译并链接成可执行文件 Alt+F5:将窗口切换到 DOS 下,查看程序运行结果。 6
说明下列Turbo C方式下输入并运行下列程序,记录下运行结果。
①main()
{printf(\"********************\\n\"); printf(\" welcome you \\n\"); printf(\" very good \\n); printf(\"********************\\n\"); }
②main()
{ int a,b,c,t;
2021年
printf(\"please input three numbers;\");
scanf(\"%d,%d,%d\教材S是错误的*/ t=max(max(a,b),c);
printf(\"max number is:%d\\n\ }
int max(int x, int y) { int z;
if(x>y)z=x; else z=y; return(z); } 答
运行结果:
******************** welcome you very good ******************** 运行结果:
please input three numbers;3,1,4 /*左侧下划线内容为键盘输入*/ max number is:4 7
一个C程序是由若干个函数构成的,其中有且只能有一个___函数。 答
main() 8
在Turbo C环境下进行程序调试时,可以使用Run下拉菜单的___命令或按___键转到用户屏幕查看程序运行结果。 答
1、User screen 2、Alt+F5 9
★C语言对标识符与关键字有些什么规定? 答
1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。
2021
2
2021年
2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能
根据系统的规定使用它们。2021 10
C源程序输入后是如何进行保存的? 答
是以C为扩展名保存的纯文本文件。
第二章 C语言程序的基本数据类型与表达式 -习题答案
1
★指出下列常数中哪些是符合C语法规定的。 答
'\\'--× '101'--× \"\\\"--× e3--× 019--√ 0x1e--√ \"ab\\n\"--√ 1.e5--× (2+3)e(4-2)--× 5.2e2.5-- × 2
请找出下列程序中的错误,改正后写出程序运行结果。
①void main()
{int x,y=z=5,aver; x=7
AVER=(x+y+z)/3
printf(\"AVER=%d\\n\ }
②void main()
{ char c1='a';c2='b';c3='c'; int a=3.5,b='A'
printf(\"a=%db=\\'\\\"end\\n\
printf(\"a%cb%c\\bc%c\abc\\n\ } 答
main()
3
2021年
2021
{int x,y=5,z=5,aver; x=7;
aver=(x+y+z)/3;
printf(\"AVER=%d\\n\ }
int 99 -1 char 'h'
unsigned int 66
运行结果:AVER=5 ②main()
{ char c1='a', c2='b', c3='c'; int a=3,b='A';
printf(\"a=%d,b=\\'%c\\'\\\"end\\\"\\n\ printf(\"a%cb%c\\bc%c\abc\\n\ }
运行结果:a=3,b='A'\"end\"
aabcc abc 3
写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据(实数保留到小数点后两位)。
4
2021年
2021 float 55.78
long int 68
答 int 99 104 66 55 68 -1 char 'c' 'h' 'B' '7' 'D'
unsigned int 99 104 66
5
2021年
202155 68 65535 float 99.00
104.00 66.00 55.78 68.00 -1.00
long int 99 104 66 55 68 -1
4
★写出程序运行结果。
①void main() {int i,j; i=8,j=10;
printf(\"%d,%d,%d,%d\\n\ }
②main()
{ int a=1,b=2,c=30;;
printf(\"%d,%d,%d,%d\\n\ }
注意:a=b=c,a=b==c之间应为逗号,教材有误 答
运行结果: 9,11,9,10 运行结果: 30,1,0,0
6
2021年
2021
③void main()
{int a=10,b=20,c=30,d; d=++a<=10||b-->=20||c++;
printf(\"%d,%d,%d,%d\\n\
} 答
运行结果: 11,19,30,1 5
★写出下面表达式的值(设a=10,b=4,c=5,d=1,x=2.5,y=3.5)。 ⑴a%=(b%=3)
⑵n++,a+=a-=a*=a
⑶(float)(a+c)/2+(int)x%(int)y ⑷a*=b+c ⑸++a-c+b++ ⑹++a-c+++b ⑺a⑼a+b,18+(b=4)*3,(a/b,a%b)
⑽x+a%3*(int)(x+y)%2/4+sizeof(int) ⑾a⑴0 ⑵0 ⑶9.500000 ⑷90 ⑸10 ⑹10 ⑺'A' ⑻2 ⑼4.5 ⑽1 ⑾0 ⑿20 ⒀0 6
下列每组表达式中,被执行后结果完全等价的是哪些(设a、b、m是已被赋值的整型变量)?
①m=(a=4,4*5)与m=a=4,4*5 ②(float)(a/b)与(float)a/b ③(int)a+b与(int)(a+b) ④m%=2+a*3与m=m%2+a*3
7
2021年
⑤m=1+(a=2)+(b=3)与a=2,b=3,m=1+a+b 答
①前面是赋值表达式,而后面的是一个逗号表达式,所以一定不同;
②前面的表达式中a/b结果为一整数,结果已经取整,精度可能受到影响,之后强制float后才为浮点型,后面的是先将a转换为float后再与b相除,其值保证了精度,所以不同。 ③因为a、b均为整数,其前后两个表达式的计算结果是一致的。
④前一表达式是一算术表达式,而后者为一赋值表达式,此为一点不同;另外,前一表达式的m只被赋过一次值,后一表达式中的m曾两次被赋值,第一次赋值时与第一表达式中的值一致,第二次赋值后即不再相同。
⑤前后表达式的计算结果应该是一致的:a=2, b=3, m=6 7
条件表达式x>0?x:-x的功能是什么? 答
如果x的值是一正数,则表达式的值为x值;如果x的值是一非正数,则表达式的值为-x。其实该表达式的值即为x的绝对值,C语言中提供了一个函数fabs(x)即可完成此功能,该函数包含在math.h头文件中。 8
用一个条件表达式描述从a、b、c中找出最大都赋给max. 答
max=a>(b>c?b:c)?a:(b>c?b:c); 9
★若x为int型变量,则执行以下语句后x的值为( )。 x=6;
x+=x-=x*x;
A. 36 B. -60 C. 60 D. -24 答 B. 10
★若有以下类型说明语句:
char w; int x; float y; double z; 则表达式w*x+z-y的结果为( )类型。 A. float B. char C. int D. double
2021
8
2021年
答 D.
2021
第三章 顺序结构程序设计 -习题答案
1
变量k为float类型,调用函数scanf(\"%d\,不能使变量k得到正确数值的原因是___。 答
格式修饰符与变量类型不一致。因为%d输入的数据类型应该为十进制整数,而&k为占用4个字节的float类型变量的地址。 2
★a=1234,b=12,c=34,则执行“printf(\"|%3d%3d%-3d|\\n\ 答
|1234 1234 |
分析如下:
①%3d为右对齐输出变量,且指定输出变量的值宽度为3个字符位,如果变量实际位数小于3,则左端补空格,如果变量实际位数大于3,则按实际长度输出,不受。
②%-3d为左对齐输出变量,在输出变量时,如是变量实际位数小于3,则在右端补空格,否则按实际输出。 3
★设有“int a=255,b=8;”,则“printf(\"%x,%o\\n\ 答
ff,10
①如果“printf(\"%X,%o\\n\FF,10。说明在输出十六进制字母时,其大小写受格式修饰符的,如果是“%x”则输出小写,如果是“%X”则输出大写。 ②如果希望在输出十六进制时输出前导符0x或0X,则以上输出语句应改
“printf(\"%#x,%o\\n\\\n\ 4
★以下程序输出的结果是___。 main() {
9
2021年
int a1=1,a2=0,a3=2;
printf(\"%d,%d,%d\\n\} 答
1,3,1 5
printf函数中用到格式符%5s,其中5表示输出字符占用5列。如果字符串长度大于5,则按___输出;如果字符串长度小于5,则按___输出。 答
①实际 ②左端补空格 6
★已定义变量如下: int a1,a2; char c1,c2;
若要求输入a1、a2、c1和c2的值,正确的输入函数调用语句是___。 答
scanf(\"%d,%d,%c,%c\ 7
输入两个整型变量a、b的值,输出下列算式以及运算结果___。 a+b、a-b、a*b、a/b、(float)a/b、a%b
每个算式占一行。如a=10,b=5,a+b输出为:10+5=15 答
设int a=10,b=5;以下为输出语句及结果:
①printf(\"%d+%d=%d\\n\ 10+5=15 ②printf(\"%d-%d=%d\\n\ 10-5=5 ③printf(\"%d*%d=%d\\n\ 10*5=50 ④printf(\"%d/%d=%d\\n\ 10/5=2
⑤printf(\"%(float)d/%d=%f\\n\ (float)10/5=2.000000 ⑥printf(\"%d%%%d=%d\\n\ 10%5=0 8
★输入一个非负数,计算以这个数为半径的圆周长和面积。 答
#define PI 3.1415926 main() {
2021
10
2021年
float r,l,area;
printf(\"Input a positive:\"); scanf(\"%f\ l=2*PI*r; area=PI*r*r;
printf(\"l=%f\area=%f\\n\} 9
输入任意一个3位数,将其各位数字反序输出(例如输入123,输出321)。 答
main() {
int x,y;
printf(\"Input a number(100-999):\"); scanf(\"%d\
y=100*(x%10)+10*(x/10%10)+x/100; /*注意分析此处算法*/ printf(\"%d--->%d\\n\} 10
★输入任意大小的3个整数,判断其中是否有两个奇数一个偶数。若是则输出YES,不是则输 出NOT(要求用条件表达式进行判断,不使用if语句)。 答
main() {
int x,y,z,oddcount=0; /*奇数数计数变量*/ printf(\"Input x,y,z:\"); scanf(\"%d,%d,%d\ x%2==1?oddcount++:0; y%2==1?oddcount++:0; z%2==1?oddcount++:0;
oddcount==2?printf(\"YES\"):printf(\"NOT\"); } 11
求前驱字符和后继字符。输入一个字符,找出它的前驱字符和后继字符,并按ASCII码值,按从大到小的顺序输出这3个字符及其对应的ASCII码值。 答
2021
11
2021年
本题考查同学们对字符类型数据的认识,如果在ASCII范围内则即可以显示为字符,又可以显示为整数值;无论是否能够显示为字符,字符类型数据是可能参与数值运算的,切记。 main() {
char c;
printf(\"Input character:\"); scanf(\"%c\
printf(\"%c----->%d\\n\ printf(\"%c----->%d\\n\
printf(\"%c----->%d\\n\ +1,c+1);
getch(); /*为便于调试程序,运行至此程序停顿,此时可以看到运行结果,按任意键程序真难得结束并返回到编辑环境*/ } 12
★输入三角形的边长,求三角形面积(面积=sqrt(s(s-a)(s-b)(s-c)),s=(a+b+c)/2)。 答
#include\"math.h\" /*由于程序中使用了开平方函数sqrt(),所以需要包含数学头文件*/ main() {
float a,b,c,s,area; int ok=0;
printf(\"Input a,b,c:\"); scanf(\"%f,%f,%f\
a+b>c?ok++:0; /*以下3条语句为判断是否输入的数据是否构成封闭三角形*/ a+c>b?ok++:0; b+c>a?ok++:0;
ok==3?(s=(a+b+c)/2,area=sqrt(s*(s-a)*(s-b)*(s-c)),printf(\"area=%f\(\"error\"); getch(); }
2021
第四章 选择结构程序设计 -习题答案
1
★设x、t均为int型变量,则执行语句“x=10;t=x&&x>10;”后,t的值为___。 答
12
2021年
0 2
★假定所有变量均已正确定义,则程序段: int a=0, y=10;
2021
if(a=0)y- -; else if(a>0)y++; else y+=y;
运行后 y 的值是___; 答 20 3
★能表述 20 ★若有定义语句“int a=25,b=14,c=19;”,则以下语句执行结果是___。 if(a<=25 && b<=2 && c) printf(\"***a+b=%d, a-b=%d***\\n\ else printf(\"***a=%d, b=%d, c=%d***\\n\ 答 ***a=25, b=14, c=19*** 5 ★假定 i 和 j 为 int 型变量,则执行以下语句后 i 的值是___。 int i=1; switch(i) { case 1: { for(j=0; j<9; j++) i+=j; break;} case 2: { for(j=1; j<10; j++) i+=j; break;} case 3: i++; } 答 37 13 2021年 分析:执行了case 1: 和case 3: 中的代码。同时case 1:语句中的{ }是可以取消的。 6 ★以下两条 if 语句可合并成一条 if 语句,即___。 if(a<=b) x=1; else y=2; if(a>b)printf(\"***y=%d\\n\else printf(\"***x=%d\\n\ 答 if(a<=b) printf(\"***x=%d\\n\else printf(\"***y=%d\\n\ 7 ★输入两个字符,若这两个字符的序号(ASCII码)之差为偶数,则输出它们的后继字符,否则输出它们的前驱字符。 答 main() { char a,b; printf(\"Input two chatacter a,b:\"); scanf(\"%c,%c\ if((a-b)/2==0) printf(\"%c,%c\ else printf(\"%c,%c\} 8 ★输入整数 a 和 b ,如果 a 能被 b 整除,就输出算式和商,否则输出算式、整数商和余数。 答 main() { int a,b; printf(\"Input two integer numbers a,b:\"); scanf(\"%d,%d\ if(b!=0&&a%b==0) printf(\"%d/%d=%d\ else printf(\"%d/%d=%d......%d\} 2021 14 2021年 9 输入某个点 A 的平面坐标 (x,y),判断(输出)A点是在圆内、圆外还是在圆周上,其中圆心坐标为 (2,2),半径为 1。 答 include\"math.h\" main() { float x,y,d; printf(\"Input x,y:\"); scanf(\"%f,%f\ d=sqrt((x-2)*(x-2)+(y-2)*(y-2)); if(d>1)printf(\"outside\"); else if(d<1)printf(\"inside\"); else printf(\"inside\"); } 10 ★输入年号和月份,输出这一年该月的天数(一个年份,先判断是否闰年)。 答 main() { int y,m,d,f; printf(\"Input year and month y-m:\"); scanf(\"%d-%d\ f=(y%4==0&&y/100!=0||y/400==0); if(m==2) d=28+f; /*依据是否闰年决定2月份的实际天数,若是闰年,则f=1,d即为29天*/ else d=31-(m==4)+(m==6)+(m==9)+(m==11);/*m==4时其值为1,则本月为30天,典型算法,重要啊*/ printf(\"%d-%d is %d days.\\n\} 11 ★请将以下语句改写成 switch 语句(a>0)。 2021 if(a<30) m=1; else if(a<40) m=2; else if(a<50) m=3; 15 2021年 else if(a<60) m=4; else m=5 答 switch(a/10) { case 1: case 2: case 3:m=1;break; case 4:m=2;break; case 5:m=3;break; case 6:m=4;break; default:m=5; } 12 有一函数 x-1 -5 2021 main() { float x,y; printf(\"Input x:\"); scanf(\"%f\ if(x>-5&&x<0)y=x-1; if(x==0)y=0; if(x>0&&x<8)y=x+1; printf(\"y=%f\\n\} 使用嵌套的 if 语句程序如下: main() { float x,y; 16 2021年 scanf(\"%f\ if(x>-5&&x<8) if(x<0)y=x-1; else if(x==0)y=0: else y=x+1; 2021 printf(\"y=%f\\n\ } main() float x,y; scanf(\"%f\ if(x<8) if(x>0)y=x+1; else if(x==0)y=0; else if(x>-5)y=x-1; printf(\"y=%f\\n\} 使用多分支语句程序如下: main() { float x,y; int m; printf(\"Input x:\"); scanf(\"%f\ if(x>-5&&x<8) if(x<0)m=-1; else if(x==0)m=0: else m=1; switch(m) { case -1:y=x-1;break; case 0:y=0;break; case 1:y=x+1;break; } printf(\"y=%f\\n\} 以下为假设对int类型的变量进行处理,但毕竟不算完美 main() { 17 2021年 2021 int x,y; printf(\"Input x:\"); scanf(\"%d\ switch(x) { case -4: case -3: case -2: case -1: y=x-1; break; case 0: y=0; break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: y=x+1; break; } printf(\"y=%d\\n\ } 第五章 循环结构程序设计 -习题答案 1 ★输入 n 个整数,求这 n 个数之中的偶数平均值,并输出。 答 main() { int n,i,x,sum=0,count=0; printf(\"Input n:\"); scanf(\"%d\ for(i=0;i if(x%2==0){sum+=x;count++;} } printf(\"Average is:%f\\n\ 18 2021年 getch(); } 2 ★输入一串字符,直到输入一个星号(*)为止,统计(输出)其中的字母个数和数字字符个数。 答 #include\"stdio.h\" main() { char ch; int charcnt=0,numcnt=0; while((ch=getchar())!='*') { if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')charcnt++; if(ch>='0'&&ch<='9')numcnt++; } printf(\"Characters number:%d\\nDigits number:%d\\n\ getch(); } 3 ★从键盘输入一个正整数 n,计算该数的各位数字之和并输出。例如,输入数是5246,则计算5+2+4+6=17并输出。 答 #include\"stdio.h\" main() { int n,i,sum=0,count=0; printf(\"Input n:\"); scanf(\"%d\ while((n/10)!=0) { count++; sum+=n%10; printf(\"%d+\ n/=10; } printf(\"=%d\ getch(); } 2021 19 2021年 4 ★输入一个字符串,将其中的大写字母改为小写字母,小写字母改为大写字母,然后输出。 答 #include\"stdio.h\" main() { char ch; printf(\"Input string:\"); while((ch=getchar())!='\\n') { if(ch>='a'&&ch<='z')printf(\"%c\ if(ch>='A'&&ch<='Z')printf(\"%c\ } getch(); } 5 设某县2000年工业总产值为200亿元,如果该县预计平均年工业总产值增长率为4.5%,那么多少年后该县年工业总产值将超500亿元。 答 main() { float x=200; int n=0; do { x*=(1+0.045); n++; }while(x<500); printf(\"n=%d\ getch(); } 6 ★输出1~999中能被3整除,而且至少有一位数字是5的所有数字。 答 main() { int x,y,flag; 2021 20 2021年 for(x=1;x<1000;x++) { flag=0; y=x; if(y%3==0) /*余数为0说明该数能够被3整除*/ { while(y%10!=0) { if(y%10==5)flag=1; /*依个位、十位、百位顺序判断是否余数为5*/ y/=10; } if(flag==1)printf(\"%d\\ } } getch(); } 7 求爱因斯坦数学题。有一条长阶,若每步跨2阶,则最后剩1阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶每步跨6阶,则最后剩5阶每步跨7阶,最后正好1阶。 答 main() { int x=0,flag=0; while(1) { x++; if(x%2==1) if(x%3==2) if(x%5==4) if(x%6==5) if(x%7==0) { printf(\"%d\ break; } } getch(); } 2021 21 2021年 8 输入一个3位数,判断是否是一个“水仙花数”。水仙花数是指3位数的各位数字的立方和等于这个3位数本身。例如,153=1*1*1+5*5*5+3*3*3 答 main() { int x,a,b,c; printf(\"Input number:\"); scanf(\"%d\ a=x/100; /*变量a中记录x的百位数字*/ b=x/10%10; /*变量b中记录x的十位数字*/ c=x%10; /*变量c中记录x的个位数字*/ if(a*a*a+b*b*b+c*c*c==x) { printf(\"%d=%d*%d*%d+%d*%d*%d+%d*%d*%d\\n\ printf(\"YES\"); } else printf(\"NOT\"); getch(); } 9 ★计算斐波那契分数序列前n项之和(n是某个常数,波那契分数序列为2/1,3/2,5/3,8/5,...)。 答 main() { int i,n=10; float f1=1,f2=2,f,sum=0; for(i=0;i printf(\"total=%d\\nsum=%f\ getch(); } 2021 22 2021年 10 输入一个正整数,各输出n行的正(倒)三角形宝塔图案。 答 main() { int n,i,j; printf(\"Input n:\"); scanf(\"%d\ for(i=0;i ★输出九九乘法表。 答 main() { int i,j; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) printf(\"%d*%d=%-3d\ printf(\"\\n\"); } getch(); } 12 输入一串字符,直到输入一个星号为止,统计(输出)其中的正整数和负整数个数以及所有正整 2021 23 2021年 数的平均值和所有负整数的平均值。2021 答 #include\"stdio.h\" #include\"math.h\" main() { char ch; int x=0,y=1,f=0,pcnt=0,ncnt=0; float psum=0,nsum=0; while((ch=getchar())!='*') { if(ch=='-') { if(x!=0) { if(f==1) { x=-x; nsum+=x; ncnt++; } else { psum+=x; pcnt++; } printf(\"%d\\n\ } f=1;x=0;y=1; continue; } else if(ch>='0'&&ch<='9') { x=10*x+ch-'0'; y=10*y; if(x!=0&&10*x 24 2021年 2021 { if(f==1) { x=-x; nsum+=x; ncnt++; } else { psum+=x; pcnt++; } printf(\"%d\\n\ } f=0;x=0;y=1; continue; } } if(x!=0) { if(f==1) { x=-x; nsum+=x; ncnt++; } else { psum+=x; pcnt++; } printf(\"%d\\n\ } printf(\"\\n---------\\n\"); printf(\"Plus:\\n\"); printf(\"Count=%d\\n\ printf(\"Average=%f\\n\ printf(\"-------\\n\"); printf(\"Negative:\\n\"); printf(\"Count=%d\\n\ printf(\"Average=%f\\n\ getch(); 25 2021年 } 13 一个整数等于该数所有因子之和,则称该数是一个完数。例如,6和28都是完数。因为6=1+2+3,28=1+2+4+7+14。输出3位数中所有的完数。 答 main() { int k1, k2, k3, k4, k5, k6, k7, k8, k9, k10; int i,a,n,s; for (a = 100; a <= 999; a++) { n = 0; /* n累计因子的个数 */ s = a; /* s存放未求出的因子之和,初值为被测数本身 */ for (i = 1; i < a; i++) if (a % i == 0) /* 由i到a循环检测i是否为a的因子 */ { n++; /* 找到一个因子 */ s = s - i; /* 减去已找到的因子 */ switch (n) /* 将找到的因子赋绐k1, k2, ... */ { case 1 : k1 = i; break; case 2 : k2 = i; break; case 3 : k3 = i; break; case 4 : k4 = i; break; case 5 : k5 = i; break; case 6 : k6 = i; break; case 7 : k7 = i; break; case 8 : k8 = i; break; case 9 : k9 = i; break; case 10 : k10 = i; break; } } if (s == 0) /* 已经找到全部因子 */ { printf(\"%d Its factors are \ if (n > 1) printf(\"%d,%d\k1, k2); /* n>1表示a至少有2个因子 */ if (n > 2) printf(\注意以下if的用法,追加的方法 */ if (n > 3) printf(\ if (n > 4) printf(\ if (n > 5) printf(\ 2021 26 2021年 if (n > 6) printf(\ if (n > 7) printf(\ if (n > 8) printf(\ if (n > 9) printf(\ printf(\"\\n\"); } } getch(); } 14 ★编写程序按下列公式计算e的值(精度为1e-6)。 e=1+1/1!+1/2!+1/3!...+1/n! 答 main() { int i; double e=0,t=1; for(i=1;t>0.000001;i++) { for(j=1;j<=i;j++)t*=j; t=1/t; e+=t; } printf(\"e=%f\\n\ getch(); } 15 用二分法求方程2x3-4x2+3x=0在(-10,10)附近的根(二分法:先找到a、b,使f(a)、f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],现在假设f(a)<0,f(b>0,af[(a+b)2]=0,该点就是零点,如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,按上述方法再求该区间中点的函数值,通过每次把f(x)的零点所有小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,该值即是方程的根)。 答 #include\"math.h\" main() { double x,fx,fa,fb,a=-10,b=10,z=0.0001; fa=2*a*a*a-4*a*a+3*a; 2021 27 2021年 } 2021 第六章 函数与编译预处理 -习题答案 fb=2*b*b*b-4*b*b+3*b; if(fa*fb<0) { do { x=(a+b)/2; fx=2*x*x*x-4*x*x+3*x; if(fx<0) { a=x; fa=2*a*a*a-4*a*a+3*a; } else { b=x; fb=2*b*b*b-4*b*b+3*b; } }while(fabs(fa-fb)>z); printf(\"The root is:%lf\\n\ } getch(); 1 ★写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。 答 main() { unsigned int m,n,p,q; for(;;) { printf(\"m,n=\");scanf(\"%d,%d\ if(m<0||n<0){printf(\"The end.\\n\");break;} p=funp(m,n); q=funq(m,n); 28 2021年 printf(\"p(%d,%d)=%d\\nq(%d,%d)=%d\\n\ } } int funp(int m,int n) { int i; if(m>n){i=m;m=n;n=i;} for(i=m;i>0;i--)if(m%i==0&&n%i==0)return(i); } int funq(int m,int n) { int i; if(m ★编写一个函数,由参数传入一个字符串,统计此字串中字母、数字和其他字符的个数,在主函数中输入字符串并显示统计结果。 答 未制作函数,主要利用了选择语句结构: #include\"stdio.h\" main() { int i,c,zm=0,sz=0,kg=0,qt=0; printf(\"Input a string:\"); while((c=getchar())!='\\n') if(c==' ')kg++; else if(c>47&&c<58)sz++; else if(c>='A'&&c<='Z'||c>='a'&&c<='z')zm++; else qt++; printf(\"am=%d,sz=%d,kg=%d,qt=%d\\n\} 制作函数,利用函数调用: #include\"stdio.h\" int analys(char ch); main( ) { int i,zm=0,sz=0,qt=0,c; 2021 29 2021年 } 2021 printf(\"Input a string:\"); while((c=getchar())!='\\n') { i=analys(c); switch(i) { case 1: zm++; break; case 2: sz++; break; case 3: qt++; } } printf(\"zm=%d,sz=%d,qt=%d\\n\ int analys(char ch) { if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')return 1; if(ch>47&&ch<58)return 2; return 3; } 3 ★按照第5章第8题的要求编写判断水仙花数的函数,从主函数输入正整数n,在主函数中调用判断水仙花数的函数,找出n以内所有的水仙花数。 【输入一个3位数,判断是否是一个“水仙花数”。水仙花数是指3位数的各位数字的立方和等于这个3位数本身。例如,153=1*1*1+5*5*5+3*3*3】 答 main() { int x,i,f; printf(\"Input number:\"); scanf(\"%d\ for(i=0;i<=x;i++) { f=0; f=fun(i); if(f==1)printf(\"%d\\ } getch(); } 30 2021年 int fun(int x) { 2021 int a,b,c; a=x/100; b=x/10%10; c=x%10; if(a*a*a+b*b*b+c*c*c==x)return 1; else return 0; } 4 ★定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显示结果。 答 #define f(a,b) (a=a+b,b=a-b,a=a-b) main() { int x,y; printf(\"Input x,y:\"); scanf(\"%d,%d\ printf(\"%d,%d\ f(x,y); printf(\"<-->%d,%d\\n\ getch(); } 5 已知二阶Fibonacci数列: 0 若n=0 Fib(n)= 1 若n=1 Fib(n-1)+Fib(n-2) 其它情况 定义递归函数求Fib(n)。 答 main() { int i,n; printf(\"Input n:\"); scanf(\"%d\ for(i=0;i<=n;i++) printf(\"%d\\ getch(); 31 2021年 } int fib(int n) { 2021 if(n==0)return 0; else if(n==1)return 1; else return (fib(n-1)+fib(n-2)); } 6 定义函数求F=(n+m)!+n!,m、n均为任意正整数。要求使用递归调用。 答 long int f(int x); main() { int i,m,n; long int sum; printf(\"Input m,n:\"); scanf(\"%d,%d\ sum=f(n+m)+f(n); printf(\"%ld\ getch(); } long int f(int x) { int i,j; if(x==0||x==1)return 1; else return(x*f(x-1)); } 7 ★定义一个函数完成第5章第11 题的功能。 【输出九九乘法表。】 答 main() { fun(); getch(); } fun() { 32 2021年 int i,j; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) printf(\"%d*%d=%-3d\ printf(\"\\n\"); } } 8 如果有两个数,每一个数的所有约数(除了它本身以外)的和正好等于对方,则称这两个数为互满数,求出30000以内所有的互满数,并显示输出,求一个数它的所有约数(除了它本身以处)的和,用函数实现。 答 main() { int x,y; for(x=1;x<30000;x++) { for(y=1;y getch(); } facsum(int n) { int i,sum=0; for(i=1;i return sum; } 9 编写以下函数:①输入职工的姓名和职工号;②按职工号由小到大排序,姓名顺序也随之调整;③输入一个职工号,找出该职工的姓名。在主函数中调用这些函数。 答 2021 33 2021年 2021 10 ★设计程序完成下列计算。 已经:y=f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3)) 其中:f(x,n)=1-x2/2!+x4/4-...+(-1)n·x2n/(2n)! (n≥0) 当: x=5.6, n=7时,求:y 要求通过嵌套调用完成计算。 答 #include main() { float x=5.6,y; int n=7,i; y=1+f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3)); printf(\"y=%f\\n\\n\} float f(float x,int n) { float sum=0.0; int i; for(i=1;i<=n;i++) { sum+=f1(-1,i)*f1(x,2*i)/f2(2*i); } return sum; } float f1(float x,int m) { int i; float y=1.0; for (i=1;i<=m;i++) { y*=x; 34 2021年 } return y; } 第七章 数 组 -习题答案 1 ★以下各题中,选择一个正确的答案。 1、能正确对一维数组 a 中所有元素进行初始化的是( )。 A. int a[5]={ } B. int a[ ]={0} C. int a[5]=0,0,0,0,0 D. int a[5]={0} 2、有说明 int k=3,a[10]; 则下列可以正确引用数组元素的表达式是( )。 A. a[k] B. a[10] C. a[1,3] D. a[3*5] 3、有定义 int d[ ][3]={1,2,3,4,5,6}; 执行语句printf(\"%c\结果是( )。 A. A B. B C. D D. E 4、有定义 char c='A',ch[20]={'a','b','c','\\0','d','\\0'}; 若执行printf(\"%s\结果是( )。 A. 'abc' B. float f2(int m) { int i; float y=1; for (i=1;i<=m;i++) { y*=i; } return y; } 2021 35 2021年 abc C. abcd D.abc\\0d 5、对数组进行初始化 char carr[ ]={'s','t','u','d','e','n','t'},barr[ ]=\"student\"; 则2021 正确的是( )。 A. carr 与 barr 长度相同 B. carr 比 barr 长 C. carr 与 barr 相 同 D. carr 比 barr 短 答 1、BD 2、A 3、D 4、B 5、D 2
Copyright © 2019- hids.cn 版权所有 赣ICP备2024042780号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务