《《C语言学习知识编程基础学习知识》习题集规范标准答案.doc》由会员分享,可在线阅读,更多相关《《C语言学习知识编程基础学习知识》习题集规范标准答案.doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、/.C语言编程基础(第2版)习题答案前 言C语言编程基础(第2版)每章后面都安排了一定数量的习题,这有利于读者理解、消化和掌握各单元的学习内容。习题中,除了有填空题、选择题、回答问题等适合掌握基本概念的题型外,大部分是分析程序运行结果和要求编写实用程序,这有利于读者训练编程技巧和增强编程能力。应广大读者要求,特别是一线教学老师的要求,我们给出全部习题答案,供读者参考。编程答案只是实现题目算法要求的一种,并不一定是最好的。希望读者自己多做思考,利用多种方法进行编程,用以提高自己的程序设计水平和锻炼自己的创新能力。由于作者水平所限,错误和不当之处在所难免,恳请批评指正。习题一1、填空题。 C语言程
2、序由_函数_组成,其中必须有且只能有一个名为_main_的函数。C程序的执行从_名为main的主_函数开始。 每个C语句必须以_分_号结束。 标识符只能由_英文字母_、_数字_和_下划线_三类符号构成,而且标识符的第一个字符必须是_英文字母_或_下划线_。 关键字是指_C语言编译系统所固有的、具有专门意义的标识符_。 C程序中,注释的内容应放在_/*_和_*/_符号之间。2、选择题。 下面合法的C语言标识符是_ C _。 C语言中主函数的个数是_ A_。 以下有关注释的描述中,错误的是_ C _。 C程序中,main函数的位置_ D_。3、指出并改正下面程序中的错误。 main 应为 main
3、() 应在本程序最后加上大括号 。 语句结束应有分号。如:int a,b; a=1;b=2; printf(%d,a+b);4、分析下列程序,写出运行结果。 该程序是计算两个整数a和b的乘积并赋值给c,运行结果为:c=30 该程序输出一个字符串和一排星号,运行结果为:Hello! *5、编程题。 按题目要求,编写输出固定信息的程序如下:main() pt();printf( Welcome!); pt();pt() printf(*); 按题目要求,编写输入数据输出其表达式的程序如下: main() int a,b,c; scanf(%d,&a); scanf(%d,&b); c=a*b+10
4、; printf(c=%d,c);习题二1、单项选择题。 C语言中的变量名只能由字母、数字和下划线组成,且第一个字符_ C _。 合法的常量是_ D _。 C语言中的基本数据类型所占存储空间长度的顺序是_ D_。 下列符号串中与123.0相同的合法常量是_ C_。2、填空。 C语言中的基本数据类型包括_整型(int)_、_浮点型(flot)_ 和_字符型(char)_三种。 整型常数有_十进制整数_、_八进制整数_和_十六进制整数_三种表示形式; 整型变量可分为四类: _一般整型(int)_、_短整型(short)_、_长整型(long)_、_无符号型_。其中_无符号型_又可分为_无符号整型(
5、unsigned int)、_无符号短整型(unsigned short)和_无符号长整型(unsigned long)_3种。 有10个用指数形式表示的符点常数:请指出合法的有_。 在C中,没有专为存贮字符串的变量,但可以用_字符型数组_ 或_字符型指针变量_存贮字符串。其定义格式为_ char str6;_和_ char *a;_。 数据类型混合运算时, 要进行同型转换, 转换方式分为_自动转换(隐式转换)_和_强制转换(显式转换)_两种。3、写出下列程序运行结果。 215/9=238 97 b 4.0000004、编写程序。 按题目要求编写求三个已知数的乘积,程序如下:main()int
6、 a,b,c;a=19;b=22;c=650;printf(a*b*c=%dn,a*b*c); 按题目要求,编写将值整数化后赋值的程序如下:main()int a1,a2;float b,c;b=35.425;c=52.954;a1=(int)(b*c);a2=(int)c%(int)b;printf(a1=%d;a2=%dn,a1,a2); 按题目要求,编写计算圆周长、面积和圆柱体积的程序如下:main()int r,h,c,s,v;r=15;h=3;c=2*3.14*15; s=3.14*r*r; v=s*h;printf(c=%d, s=%d , v=%dn,c,s,v);习题三1、填空
7、题。 设有int x=11;则表达式(x+*1/3)的值是_3_。 已知数学表达式y=x-2x+5,写出对应的C语言表达式_y=x*x-2*x+5_。 已知a10,则表达式x=(a=a+b,a-b)的值为_x=10_。2、选择题。 在C语言中,下列运算符的操作数必须是int类型的运算符是( D )。 假设所有变量均为整型,则表达式(a=2,b=5,a+,b+,a+b)的值为( A )。 已定义int m=6,n=5;,则执行m%=n-1;之后,m的值是( B )。 已有int a=1,b=1;则执行b=(a=2*3,a*5),a+7之后,a,b的值是( B )。 已有int x=2,y=1;则
8、执行x+=y-;的结果是( D )。3、求下面算术表达式的值。 2.500000 3.5000004、分析下列程序,写出运行结果。 注意,在C语言中,因为函数调用中参数按从右到左的顺序求值,因此该程序执行打印输出的结果为:3 1 1 该程序在计算条件表达式的值赋给a时,其x值已为6,y值已为7,因此运行结果为:a=7,b=0,c=6 该程序利用运算符与结合性的优先级不同,而取得a与b的值。(因为该题使用了逻辑运算符,可在学了第5章以后再详细分析)运行结果如下: a=2,b=1 该程序应用复合的赋值运算符和从右至左结合性的运算规则,求取n的值,运行结果如下:n=28 该程序在执行语句“y=x+-
9、1;”时,y为0而x在执行后变为2;在执行语句“z=-y+1;”时,z为0而y便成了-1。运行结果如下:x=2,y=-1,z=05、编程题。 用符号常量编写简单计算程序如下(复杂应用应在第9章学习后再做):#define N 12#define M 25main()float c;printf(N+M=%dn,N+M);printf(N-M=%dn,N-M);printf(N*M=%dn,N*M);c=(float)N/M;printf(N/M=%fn,c); 查看i+与+j运算结果差异的程序,编写如下:main()int i=20,j=20;printf(i+:%dn+j:%dn,i+,+j
10、); 查看m-与-n运算结果差异的程序,编写如下:main()int m=20,n=20;printf(m-:%dn-n:%dn,m-,-n);习题四1、单项选择题。 下列叙述不正确的是_B_。 当输入数据为12345678时,下面程序运行的结果是_C_。 putchar函数可以向终端输出一个_D_。 按格式输出的格式符_ C_。2、回答问题。 在键盘上输入数据格式如下:12,24,Aa2.58-2.58168.5(代表空格,其中数据1是为了对付%*f占位,代表回车) 该题是求输入任意两个整数a与b的和。若读入a=b=5,其运行结果为: type a number please!a=? 5 t
11、ype another please!b=? 5 a sum b is 103、写出下列程序的执行结果。 执行结果:32767,-327682147483647,-214748364865535,0 执行结果:yes,I am computer. 执行结果:abtw 123 执行结果:58.887299,555.67797958.887299,555.67797958.887, 555.678,58.887,555.678,58.887299,555.6779795.88873e+01, 5.6e+02B,66,102,427567890,34675022,7a1211232,25740,2b
12、e0,11232COMPUTER, ABC4、编写程序。 对输入的大写字母改用小写输出的程序,编写如下:#include main()char c;printf(输入一个大写字母:n);c=getchar();putchar(c+32); 计算三门课总成绩等数据的程序,编写如下:#include main()float a,b,c,sum,ave,mod;printf(输入三门课程的成绩:n);scanf(%f%f%f,&a,&b,&c);sum=a+b+c;ave=(a+b+c)/3;mod=fmod(sum,3);printf(总成绩=%5.1f,平均成绩=%5.1f,总成绩除3的余值=%
13、3.1fn,sum,ave,mod); 已知数据,按输出结果的要求编写输出程序如下:main()int a=1,b=2,c=3,g=12345; float d=7.2,e=-5.5,f=1.56; long h=123456; char i=o,j=p; printf(a=%d b=%d c=%dn,a,b,c); printf(d=%f,e=%f,f=%fn,d,e,f); printf(d+e=%4.2f e+f=%4.2f d+f=%5.3fn,d+e,e+f,d+f); printf(g=%7d h=%ldn,g,h); printf(i=%c or %dnj=%c or %dn,i
14、,i,j,j); 习题五1、单项选择题。 C语言用_C_表示逻辑量为“假” 要求当A的值为奇数时,表达式的值为“真”;A的值为偶数时,表达式的值为“假”。以下不满足要求的表达式是_D_。 在if语句的嵌套中,else总是与_C_配对。 下面对for循环概念描述正确的是_D_。2、填空题。 switch后面的“表达式”,通常为_整_型或_字符_型表达式;每个case的常量表达式的值_不能相同_。 如果不算goto语句构成的循环结构,那么C语言可以构建循环的语句一共有_3_种,分别是_for循环、while循环、do-while循环_。 continue语句与break语句在使用时,有两点主要的不
15、同:它不适用于_switch_语句;它跳转时是_跳过循环体中下面的语句从下一次循环开始_。 把下面的两条if分支语句合并成一条if分支语句应该写成: if(x=y) printf(”m=%dn”, m=2); else printf(”n=%dn”, n=1);3、指出以下程序的打印结果。该程序运行结果如下:x=11 y=10x=55 y=10x=8 y=10 z=10x=2 y=2x=3 y=3x=4 y=4x=5 y=5x=6 y=6x=7 y=7x=8 y=8x=9 y=9x=2 y=2x=1 y=1000x=2 y=100x=3 y=104、编写程序。 按要求,用两种循环方式编写相关程
16、序如下:-的for循环#include main()int r;float v;for (r=1;r=100;r+=2) v=4/3*3.14*pow(r,3); printf(r=%d,v=%fn,r,v);-的while循环#include main()int r;float v;r=1;while (r=100)v=4/3*3.14*pow(r,3);printf(r=%d,v=%fn,r,v);r+=2;-的for循环main()int s,i;s=0;for (i=13;i=103;i+=10) s=s+i;printf(s=%dn,s);-的while循环main()int s,i
17、;s=0;i=13;while (imax) max=n; if (nmin) min=n; scanf(%d,&n);printf(最高分:%d,最低分:%dn,max,min); 输出“水仙花数”的程序,编写如下:#include main()int n,a,b,c;for (n=100;n=999;n+) a=n/100; b=n%10; c=(n%100-b)/10; if (pow(a,3)+pow(b,3)+pow(c,3)=n) printf(%dn,n);习题六1、填空题。 数组是一组具有相同_类型_的数据的集合。 如果一个数组的长度为10,则该数组中数组元素下标的最小值为_0
18、_,最大值为_9_。 若有 int a=10,20,30,40; 则数组a的长度为_4_。 在C语言中,没有字符串变量,字符串的存储是通过_字符数组_来实现的。 strlen函数的功能是_测试字符串的长度_,strcmp函数的功能是_比较两个字符串的大小_。2、选择题。 定义一个有100个元素的int型数组,下面正确的语句是_D_。 下面正确的对数组b进行初始化的语句是_C_。 在C程序中,引用一个数组元素时,其下标的数据类型允许是_D_。 下面语句中正确的是_A_。 若有定义:char str=Hello ; 则数组str所占的空间为_B_。3、分析下列程序,写出运行结果。 该程序通过for
19、循环为数组元素自动赋值,然后输出。运行结果如下:a0=1a1=2a2=3a3=4a4=5a5=6a6=7a7=8a8=9a9=10 该程序定义并初始化了a、b、c三个数组,然后分别输出各数组的各个元素,用来验证初始化的结果。运行结果如下:数组a:10 20 30 40 50数组b: 1 2 3 0 0数组c: 0 1 2 3 该程序通过gets()函数为字符数组接收字符,然后输出各元素。运行结果如下: abc(输入的字符)str0=a str1=b str2=c 4、编写程序。 对输入一组数进行相关统计的程序,编写如下:main()int i,num10;int max,min,sum=0;f
20、loat average;clrscr();printf(输入10个数:n);for(i=0,i10;i+) scanf(%d,&numi);/* 输入数值 */sum+=numi; /* 累加求和 */ average=(float)sum/10;/* 求平均值 */max=min=num0;for(i=1;imax)max=numi; /*求最大值*/else if(numimin)min=numi;/*求最小值*/printf(最大值=%dn,max);printf(最小值=%dn,min);printf(10个数的和为:%dn,sum);printf(平均值为:%6.2f,averag
21、e); 求素数的程序编写如下:main()int i,j,k,m=0;clrscr();for(i=2;i=100;i+) k=0; for(j=2;j=i-1;j+) if(i%j=0) k=1;break; if(k=0) printf(%4d,i); m=m+1; if(m%8=0) printf(n); 判断一个浮点数是否在一个浮点型数组中的程序,编写如下:main()int i,exist;float a4,n;printf(输入浮点型数组:n);for (i=0;i4;i+) printf(a%d=,i); scanf(%f,&ai);printf(n);printf(输入一个浮点
22、数:);exist=0;scanf(%f,&n);for (i=0;i4;i+) printf(a%d=%f;n,i,ai); if (ai=n) exist=1;if (exist=1) printf(%f在数组中。n,n);else printf(%f不在数组中!n”,n);此题前面的浮点型数组的值,也可通过初始化直接赋值的办法得到。 输出二维数组中最大值及位置的程序,编写如下:main() int i,j,row=0,col=0,max; int a46; for(i=0;i4;i+) for(j=0;j6;j+) scanf(“%d”,&aij); max=a00; for(i=0;i
23、4;i+) for(j=0;jmax) max=aij;row=i;col=j;printf(“max=%d,row=%d,col=%dn”,max,row,col); 在字符串中的指定位置插入字符串的程序,编写如下:main()char ch110,ch23,ch313;int i=0,n;printf(输入字符串1(长度为10):n);scanf(%s,ch1);printf(输入字符串2(长度为3):n);scanf(%s,ch2);printf(插入位置n(n10):n);scanf(%d,&n);n-;for (i=0;in;i+) ch3i=ch1i;for (i=n;in+3;i
24、+) ch3i=ch2i-n;for (i=n;iy) t=x; x=y; y=t; if (xz) t=x; x=z; z=t; if (yz) t=y; y=z; z=t; Printf(%d %d %d,x,y,z); 将输入的秒数值,转换为时:分:秒输出,编程如下:int hou=0,min=0; main()int sec,sec2;clrscr();printf(请输入秒数:n);scanf(%d,&sec);sec2=change(sec);printf(%d 个小时:%d 分钟:%d 秒,hou,min,sec2); int change(sec1) int sec1; if(
25、sec13600) hou=sec1/3600; min=(sec1%3600)/60; sec1=sec1%60; else if(sec160) hou=0; min=sec1/60; sec1=(sec1%60); return(sec1); 求一组学生成绩的总分、平均分、最高分和最低分的程序,编写如下:main() float s,ave,score100; int I,m;clrscr(); printf(输入学生人数:) ; scanf(%d,&m); printf(输入%d个学生的成绩:n,m);for (i=0 ; im ; i+) scanf(%d,&scorei);s=s+
26、scorei;printf(总成绩=%.2fn,s);ave=average(score,m);printf(最高分=%dn,max);printf(最低分=%dn,min);printf(平均成绩=%.2f,ave);float max=0,min=0;float average(array,n)float array;int n;int i; float aver,sum=array0; max=min=array0; for(i=1;imax) max=arrayi; /*求最高分*/ else if(arrayimin) min=arrayi;/*求最低分*/ sum=sum+arra
27、yi; aver=sum/n; /* 求取平均成绩 */ return(aver); /* 返回主程序值 */ 显示菜单并实现相应选择功能的程序,编写如下:#include main()int i;while (i!=3)clrscr( );printf(*n);printf(1.求整数n的立方n);printf(2.求整数n的立方根n);printf(3.结束程序n);printf(*n);scanf(%d,&i);if (i=1) lifang();else if (i=2) lifanggen();lifang()int n;long s;printf(input n:n);scanf(
28、%d,&n);s=pow(n,3);printf(%d 的立方为:%ldnn,n,s);lifanggen()int n;double s;printf(input n:n);scanf(%d,&n);s=(double)1/3;s=pow(n,s);printf(%d 的立方根为:%fnn,n,s); 用递归法求n!的程序,编写如下:main()long f(),t;int n;printf(input number:n);scanf(%d,&n);t=f(n);printf(%d 的阶乘为:%ld,n,t);long f(int n)static long s=1;if (n1) f(n-
29、1);s*=n;习题八1、填空。(1) 文件是存贮在外部存贮设备上的_信息集合_。一般分为_程序_文件和_数据_文件。(2) C 语言文件存贮在磁盘上有两种形式 , 一种是按_ASCII码存储_, 另一种是按_二进制码存储_。(3) 定义文件指针变量的格式为_FILE *fp_ 。(4) feof()函数是_文件尾_ 检测函数,当文件位置指针处于_文件尾_ 时,它返回一个_非0_ 值。(5) 对流式文件可以进行顺序读写,也可以进行随机读写,关键是_如何控制文件的位置指针_ 。2、回答问题。 有三大好处:保存运算的中间结果或最终结果,方便使用;将数据独立于程序之外,便于多处、多人共享;事先录入保
30、存所需数据,可以提高程序运行时的效率。 在ASCII码文件中,一个字节代表一个字符,便于字符的输入输出处理,但占用存储空间较大;二进制文件占用的存储空间较小,但在文件中,一个字节并不代表一个字符。 w: 创建一个ASCII码文件只写;r: 打开一个ASCII码文件只读;a: 打开一个ASCII码文件添加;wb: 创建一个二进制文件只写;rb+:打开一个二进制文件读/写。 文件操作完以后及时关闭,可将文件指针脱离该文件,并将内存缓冲区中的数据写入磁盘,用以保证写入文件的数据完整。 EOF在stdio.h中定义为-1,它也是一个合法的二进制整数,用fgetc()函数检查文件尾容易发生错判。3、程序
31、改错。 该程序是要求将键盘上输入的一些字符写入磁盘文件xt1.txt中,程序中有两处错误: (检查文件是否存在且要向文件写,注意文件名和打开方式)fp=fopen(xt.txt,r) 应改为:fp=fopen(xt1.txt,w) (向文件中写而不是读)fgetc(fp); 应改为:fputc(c,fp); 该程序是要求从文件中读并统计其正数、负数和零的个数,在屏幕上显示。程序中有两处错误: (当不是文件尾时才读取并统计)while(feof(p)=1) 应改为: while(feof(p)=0)(f为存储负数的变量应取i0)else if(i=0)f+; 应改为:else if(i0)f+;
32、4、编写程序。 将字符串写入文件的程序,编写如下:#include FILE *fp;main()char a28=Turbo C,BASIC;fp=fopen(lx1.txt,w);fputs(a0,fp);fputs(a1,fp);fclose(fp); 将字符串从文件中读出的程序,编写如下:#include FILE *fp;main()char *a;if(fp=fopen(lx1.txt,r)=NULL) printf(cannot open filen);exit(1);fgets(a,13,fp);clrscr();printf(%sn,a);fclose(fp); 将三个数写入
33、文件的程序,编写如下:#include FILE *fp;main()int a,b,c;fp=fopen(lx2.txt,wb);fprintf(fp,%dn%dn%d,100,200,300);fclose(fp); 将数值从文件中读出并求其和的程序,编写如下:#include FILE *fp;main()int a,b,c;if (!(fp=fopen(lx2.txt,rb) printf(cannot open file!n);exit(1);fscanf(fp,%d%d%d,&a,&b,&c);printf(%d+%d+%d=%dn,a,b,c,a+b+c);fclose(fp);
34、 将10个整数写入文件的程序,编写如下:#include FILE *fp;main()int i,a10=8,2,6,4,5,9,1,3,7,4;fp=fopen(lx3.txt,wb);for (i=0;i10;i+) fwrite(&ai,2,1,fp);fclose(fp); 将指定位置的整数从文件中读出的程序,编写如下:#include FILE *fp;main()int n,i,num;if (!(fp=fopen(lx3.txt,rb) printf(cannot open filen); exit(1);printf(输入数值i:);scanf(%d,&i);n=2*(i-1);fseek(fp,n,SEEK_SET);fread(&num,2,1,fp);printf(第%d号数据是:%dn,i,num);fclose(fp);习题九1选择题。 将C的库函数中数学函数库的头文件包含到程序中,应在程序的头部加上( C )。 欲将一个文件file.c包含到程序中,应该在程序的头部加上( A )。 “文件包含”预处理语句的使用形式中,当#include后面的文件名用“ ”括起时,寻找被包含的文件的方式为( B )。 在C语言中,编译预处理命令都是以( B )符号开头的。2、分析下列程序,写