大学课程 C语言程序设计 习题答案16章_第1页
大学课程 C语言程序设计 习题答案16章_第2页
大学课程 C语言程序设计 习题答案16章_第3页
大学课程 C语言程序设计 习题答案16章_第4页
大学课程 C语言程序设计 习题答案16章_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章 :c语言程序设计概述1.1 一个c程序的执行是从 a 。a从main()函数开始,直到main()函数结束b第一个函数开始,直到最后一个函数结束c第一个语句开始,直到最后一个语句结束dmain()函数开始,直到最后一个函数结束1.2 在c程序中,main()的位置 c 。a必须作为第一个函数 b必须作为最后一个函数c可以任意 d必须放在它所调用的函数之后1.3 c语言源程序的基本单位是 b 。a过程 b.函数 c.子程序 d.标识符1.4 一个c源程序有且仅有一个 一个 函数和_零个或多个_个其他函数。 1.5 c语言源程序的语句分隔符是_分号_。1.6 c语言开发的四个步骤是_编辑源

2、程序对源程序进行编译与库函数连接运行目标程序_ 。1.7 c语言有哪些主要特点?主要特点有:1.c语言简洁、紧凑,使用方便、灵活;2运算符丰富;3数据类型丰富;4c语言是结构化语言;5语法限制不太严格,程序设计自由度大;6可直接与机器硬件打交道,直接访问内存地址;7生成的目标代码质量高,程序执行效率高;8c语言适用范围广,可移植性好。 1.8 简述c编译和运行的基本方法。略。1.9 常用的集成开发工具有哪些?各有什么特点?略。1.10 编写一个程序,在屏幕上输出以下内容:* you are welcome! * *#include void main( ) /*主函数 */ /*函数体开始*/

3、 printf (*n); /*输出语句*/printf (* you are welcome! *n);printf (*n);1.11 编写一个c程序,输入a、b、c 3个值,输出其中最大者。#includevoid main( ) /* 主函数*/float max(float x,float y); /* 对被调用函数max的声明 */float a,b,c,d,result; /*声明实型变量a、b、c */printf(a,b,c=); /*输出提示信息a,b,c= */scanf(%f%f%f,&a,&b,&c); /*输入变量a,b和c的值*/d=max(a,b); /*调用m

4、ax函数,将得到的返回值赋给d */result=max(c,d); /*调用max函数,将得到的返回值赋给result */printf(max=%fn,result); /*输出result的值*/float max(float x,float y) /* 定义max函数,函数值为实型,形式参数x,y为实型*/float z; /* max函数中的声明部分,声明本函数中用到的变量z为实型*/if(xy) z=x; /*如果xy ,则将x 值赋给z */else z=y; /*否则将y 值赋给z */return (z); /*将z的值返回给主调用函数*/第2章 :数据类型,运算符和表达式2

5、.1 以下标识符中不属于c语言的基本数据类型的是 c 。a.char b.longc.boold.float2.2 以下选项中属于c语言的数据类型是 c 。a.复数型b.逻辑型c.双精度型d.集合型2.3 下列标识符中,合法的标识符是 c 。a.-abc1b.1abcc._abc1d.for2.4 在标准c语言中,不正确的int类型的常数是 a 。a.32768b.0 c.037d.0xaf2.5 以下所列的c语言常量中,错误的是 b 。a.0xff b.1.2e0.5 c.2l d.722.6 在c语言中,合法的长整型常数是 b 。a.0lb.4962710 c.324562&d.216d2

6、.7 以下不正确的语句(设有int p,q)是 d 。ap*=3; b.p/=q; c.p+=3; d.p&=q;2.8 以下使i的运算结果为4的表达式是 d 。aint i=0,j=0; (i=3,(j+)+i); b. int i=1,j=0; j=i=(i=3)*2);c. int i=0,j=1; (j=1)? (i=1): (i=3); d. int i=1,j=1; i+=j+=2;2.9 设n=10,i=4,则赋值运算n%=i+1执行后,n的值是 a 。a.0 b.3 c.2 d.12.10逗号表达式(a=3*5,a*4),a+15的值为 c ,a的值是 c 。a.15 b.60

7、 c.30 d.不确定a.60 b.30 c.15 d.902.10 如果a=1,b=2,c=3,d=4,则条件表达式ab?a:cd?c:d的值为 d 。a.1 b.2 c.3 d.42.12 在c语言中,不同类型数据混合运算时,要先转换成同一类型后进行运算。设一表达式中包含有int,long,unsigned和char类型的变量和数据,则表达式最后的运算结果是 d 类型的数据。这四种类型数据的转换规律是 c 。a.int b.char c.unsigned d.longa.int-unsigned-long-char b.char-int-long-unsigned c.char-int-u

8、nsigned-long d.char-unsigned-long-int2.13 写出经过下列运算后变量a的值,设a的初值为15:(1) a+=a;(2) a-=2;(3) a*=2+3;(4) a/=a+a;(5) a%=(5%=2)(6) a+=a-=a*=a (1) 30 (2) 13 (3) 75 (4) 0 (5) 0 (6) 0 2.14 假定x=10,y=20,z=30;试判断下列逻辑表达式的真()假()。(1) x10(2) (xy+z)&(x+10=20)(3) x10(4) xy | yx(5) !(xy+z)|!(x+10=20)(6) (!(x=y)&(x!=y)&(

9、xy|yx)(1) 0 (2) 1 (3) 0 (4) 1 (5) 0 (6) 1 2.15 c有哪些基本数据类型?简述各类型所占的字节数。略(见课本表2-2)。2.16 字符常量与字符串常量有什么区别?由于字符数据在内存中是以ascii码存储,它的存储形式与整数的存储形式类似。一个字符常量在计算机的存储中占据一个字节。字符串常量在内存中按顺序逐个存储字符串中的字符的ascii码,并在最后自动加上一个字符0(空字符,该字符的ascii码值为0,也称null字符),作为字符串结束标志,所以字符串实际占用字节数要比字符串中字符的个数(长度)多1个。2.17 什么是表达式?什么变量?变量名和变量值有

10、什么本质区别?表达式是由运算符、常量、变量、函数、圆括号等按一定的规则组成的式子。每一个表达式也都具有一定的值。变量是以某标识符为名字(变量名),在程序运行过程中,其值是可以改变的量。变量名实际上是代表一个内存的存储地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。变量的存取操作,实际上是通过变量名找到相应的内存地址,从该存储单元中存取数据。第3章 :顺序结构3.1 有如下程序段: int a1,a2; char c1,c2;scanf(%d%c%d%c,&a1,&c1,&a2,&c2);若要求a1,a2,c1,c2的值分别为10,20,a,b正确的数据输入是 a 。 a.1

11、0a 20b b.10 a 20 b c.10 a20b d.10a20 b3.2 有如下程序,输入数据:12345 678后,x的值是 b ,y的值是 a 。 #include void main() int x; float y; scanf(%3d%f,&x,&y); (1) a.12345 b.123 c.45 d.345 (2) a.45.000000 b.45678.000000 c.678.000000 d.123.0003.3 请写出下面程序的运行结果:#includevoid main() short int a=65,b=100; float x=123.4567, y=-

12、100.3388; char c=a; long n=1234567; unsigned u=65535; printf(%c,%cn,a,b); printf(%6d,%6dn,a,b); printf(%f,%fn,x,y); printf(%-8.2f, %8.2f,%.4f,%.4f,%3f,%3fn,x,y,x,y,x,y); printf(%e,%10.2en,x,y); printf(%c,%d,%o,%xn,c,c,c,c); printf(%ld,%lo,%xn,n,n,n); printf(%u,%o,%x,%dn,u,u,u,u);运行结果:a,d 65, 100123.

13、456703,-100.338799123.46 , -100.34,123.4567,-100.3388,123.456703,-100.3387991.234567e+002,-1.00e+002a,97,141,611234567,4553207,12d68765535,177777,ffff,65535press any key to continue3.4 顺序结构有哪些主要特点? 顺序结构就是按照语句书写的先后顺序依次执行,具有“单入口和单出口”的控制特点。3.5 顺序结构语句可以分为哪几类? 简单顺序语句主要有表达式语句、空语句、复合语句等。3.6 编程输入两个整数,输出它们的平

14、方和它们的平方根。#include#includevoid main()int a,b;scanf(%d,%d,&a,&b);if(a=0&b=0)printf(a2=%d,b2=%dn,a*a,b*b);printf(a1/2=%f,b1/2=%fn,sqrt(a),sqrt(b);3.7 编程输入三角形的三边长,计算并输出三角形面积和周长。#include#includevoid main()int a,b,c,girth,s,p;scanf(%d,%d,%d,&a,&b,&c);if(a0&b0&c0&(a+b)c&(a+c)b&(b+c)a)girth=a+b+c;p=girth/2;

15、s=sqrt(p-a)*(p-b)*(p-c)*p);printf(girth=%dn,girth);printf(s=%dn,s);3.8 编程输入两个整数,输出它们相除的整数商(整除值)以及余数。#includevoid main()int a,b,c,d;scanf(%d,%d,&a,&b);c=a/b;d=a%b;printf(%d,%d,c,d);3.9 编程输入一个double类型的数,将该数小数点后的第三位按四舍五入的方法保留到小数点后两位(提示:将该数乘以100,加上0.5之后取整,再除以100)。#includevoid main()float a,b;scanf(%f,&a

16、);a=a*100;a=a+0.5;b=(int)a;b=b/100;printf(%f,b);3.10 编程输入一个实数将其分解为整数部分和小数部分并输出。如输入为345.67,则输出为:345.67=345+0.67。#includevoid main()float a,b;int c;scanf(%f,&a);c=(int)a;b=a-c;printf(%f=%d+%f,a,c,b);第4章:选择结构4.1 写出下列程序段的运行结果(1) 5分析:这是if语句嵌套问题。本题else是与第二个if语句(if (y0))配对的。(2) 2分析:这是if语句嵌套问题,关键是要清楚各个if与el

17、se的配对关系。本题的if与else的配对关系如下:if(ab) if(cd) x=1;else if (ac) if (b0)&(s=3)&(s1)&(s8) x=3;else x=1;else x=0;此时s各段数值的x取值为:1,2 : x=13-6 : x=107,8 : x=19,10: x=3其它: x=04.3 求分段函数的值: x2-1 x0 y = x2 0x1 x2+1 x1分析:先判断x是否小于0,若是则直接计算x2-1,否则(即x大于或等于0)再判断x是否小于1,是则计算x2,不是则说明x大于等于1,计算x2+1。#includevoid main() float x,

18、y; scanf(%f,&x);if (x0)y=x*x-1;else if(x1)y=x*x;elsey=x*x+1; printf(n x=%f y=%f n,x,y);4.4 判断一个整数是否既是5的倍数,也是9的倍数。分析:如果x除5的余数为0(x%5=0),x就是5的倍数,如果x除9的余数为0(x%9=0),x就是9的倍数。一个整数既是5的倍数,也是9的倍数,其判断条件为:(x%5=0)&(x%9=0)void main() int x; scanf(%d,&x);if (x%5=0)&(x%9=0)printf(%d既是5的倍数,也是9的倍数!n,x);else printf(%d

19、不同时是5和9的倍数!n,x);4.5 判断一个正整数是否是一个能被37整除的三位数。分析:先判断输入的数是不是一个三位的正整数,如果是,再判断其是否能被37整除。一个三位的正整数,其必须大于0并且小于1000;一个数能被37整除,则此数除37后余数为0。#includevoid main() int x; scanf(%d,&x);if (x0)&(xy则将x与y的值进行交换,然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小。#include main() int x,y,z,t; scanf(%d%d%d,&x,&y,&z); if (xy) t=x; x=y; y=

20、t; /*交换x,y的值*/ if(xz) t=z; z=x; x=t; /*交换x,z的值*/ if(yz) t=y; y=z; z=t; /*交换z,y的值*/ printf(small to big: %d %d %dn,x,y,z);4.7 编程实现:输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。分析:将a2+b2存于变量s,s百位以上的数字可通过s/100得到。#includevoid main() long a,b,s; scanf(%ld%ld,&a,&b); s=a*a+b*b; if (s100) printf(“%ld”,s/10

21、0);elseprintf(“%ld”,a+b);4.8 给出一个5位数,判断它是不是回文数。如:12321是回文数,个位与万位相同,十位与千位相同。分析:学会分解出每一位数。万位数字可通过将此数整除10000得到;将此数除10000后的得到的余数再整除1000,则可得到千位数字;将此数除100后的得到的余数再整除10,则可得到十位数字;将此数除10后的得到的余数就是个位数字。求出万位、千位、十位、个位数后,如果个位等于万位并且十位等于千位,则此数就是回文。#includevoid main()int ge,shi,qian,wan,x; scanf(%ld,&x); wan=x/10000;

22、 /*万位*/ qian=x%10000/1000; /*千位*/ shi=x%100/10; /*十位*/ ge=x%10; /*个位*/ if (ge=wan&shi=qian) /*个位等于万位并且十位等于千位*/ printf(%d是回文数! n,x); elseprintf(%d不是回文数! n,x);4.9 某企业发放的奖金是根据利润提成。利润10万元时,奖金可提10%;10万元利润20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万利润40万时,高于20万元的部分,可提成5%;40万利润60万时,高于40万元的部分,可提成3%;60万利润100万

23、时,高于60万元的部分,可提成1.5%,利润100万元时,超过100万元的部分按1%提成。要求:输入当月利润,输出应发放奖金数额。分析:由于利润数值较大,定义时需把利润定义为长整型。先计算10万、20万、40万、60万、100万利润的奖金提成bonus1、bonus2、bonus4、bonus6、bonus10,然后根据实际利润i所处的数值段计算奖金。#include main() long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf(%ld,&i); bonus1=100000*0.1; bonus2=bonus1+

24、100000*0.075; bonus4=bonus2+200000*0.05; bonus6=bonus4+200000*0.03; bonus10=bonus6+400000*0.015;if(i=100000) bonus=i*0.1;else if(i=200000) bonus=bonus1+(i-100000)*0.075;else if(i=400000) bonus=bonus2+(i-200000)*0.05;else if(i=600000) bonus=bonus4+(i-400000)*0.03;else if(i=1000000) bonus=bonus6+(i-60

25、0000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf(bonus=%d ,bonus);第五章:循环结构5.1(1) i=4,j=32 (2) k=2,n=3 5.2在循环体内,break用于跳出循环体,直接执行循环结构后的语句;continue用于结束本次循环,转到循环头去判断是否继续循环。break和continue一般都与if语句连用,当满足某种条件时跳出循环体。5.3#include void main() int i,j,k,;/*i表示鸡翁,j表示鸡母,k表示鸡刍*/int t,n=0;/*t表示花费的总钱数,n为记数器累计购买

26、的方式总数*/*用三重循环实现*/for(i=0;i20;i+)for(j=0;j33;j+)for(k=0;k=300;k+=3)t=5*i+3*j+k/3; if(i+j+k=100) &(t=100) n+;/*计数器加1*/ printf(i=%d,j=%d,k=%dn, i,j,k); printf(总共有%d种购买方式。n,n);5.4#include #include /*包含sqrt函数*/void main()int i,j,k,l,m,n=1;for(i=1;i=400000;i+) /*从1到400000依次判断*/ if(n) break; /*若n为假,则该命题为假,

27、跳出循环,程序结束*/for(j=1;j=sqrt(i);j+) /*用四个循环实现*/for(k=1;k=sqrt(i);k+)for(l=1;l=sqrt(i);l+)for(m=1;m=sqrt(i);m+)if(i=j*j+k*k+l*l+m*m)printf(%d=%d*%d+%d*%d+%d*%d+%d*%dn,i,j,j,k,k,l,l,m,m);else n=0; /*若等式不成立,置n为零*/5.5#include void main()int i,j,k,l,m; printf(“水仙花数:”); for(i=100;i1000;i+)j=i/100; /*百位数的值*/k

28、=(i-j*100)/10; /*十位数的值*/l=(i-j*100)%10; /*个位数的值*/m=j*j*j+k*k*k+l*l*l;if(i=m)printf(%d ,i); printf(“n”);5.6#include void main() int i,j; for(i=1;i=9;i+) for(j=1;j=i;j+) printf(%d*%d=%d ,j,i,i*j); printf(n); 5.7#include #define n 10void main() int i,n=0; float a; printf(请输入%d名学生c语言成绩:n,n); for(i=1;i=6

29、0.0&a=85.0)n+; printf(成绩在60到85之间的人数:%dn,n);5.8#include #include #define b 1void main() float x1=0,x2,x,f=0.0,len,delta;int i;delta=(float)b/100;/*在x轴上均匀分成100段*/for(i=1;i=100;i+)x1=delta*(i-1);/*第i个长方形两条长在x轴上的投影*/x2=delta*i;x=(x1+x2)/2;/*取每个长方形在x轴上投影的中点值*/len=x*x*x+x;/*计算长方形的长*/f+=len*delta;/*计算长方形的面

30、积并累加*/ printf(积分的结果为:%fn,f); 5.9#include void main()int i,j,k,l,m,n,a,b=393;for(i=1;i5;i+)for(j=1;j10;j+)for(k=0;k=0&a29)/*当余料小于29cm时,完成一次截取*/if(ab)/*余料比上一次短时,记录下来*/b=a; l=i; m=j; n=k;break;/*完成截取,重新循环*/ printf(81cm:%d,41cm:%d,29cm:%d,剩余:%dn,l,m,n,b);5.10#include void main() int a,i,b,n; printf(以下是3

31、000以内的亲密数对:n); for(a=1;a3000;a+) /*穷举3000以内的全部整数*/ for(b=0,i=1;i=a/2;i+) /*计算数a的各因子,各因子之和存放于b*/ if(!(a%i) b+=i; for(n=0,i=1;i=b/2;i+) /*计算b的各因子,各因子之和存于n*/ if(!(b%i) n+=i; if(n=a&ab) printf(%4d-%4d ,a,b); /*若n=a,则a和b是一对亲密数,输出*/ printf(n);5.11#include #include void main() int i,n,j,k,m; for(i=4;i=5000

32、;i+=2)for(n=2;ni;n+) for(j=2,k=1;j=(int)sqrt(n);j+)/*判断n是否素数*/if(n%j=0) k=0;if(k)/*n是素数继续判断i-n是否素数*/for(j=2,m=1;j=(int)sqrt(i-n);j+)/*判断i-n是否素数*/ if(i-n)%j=0) m=0; if(m) printf(%d=%d+%dn,i,n,i-n); break; if(n=i) printf(error %dn,i);/*n等于i,i不遵循哥德巴赫猜想*/ 5.12 #include void main()int i,j,k,l,m,n; for(i=

33、0;i100;i+)j=i*i; /*i的平方*/k=j/1000; /*千位数的值*/l=(j-k*1000)/100; /*百位数的值*/m=(j-k*1000-k*100)/10; /*十位数的值*/n=(j-k*1000-k*100)%10; /*个位数的值*/if(k=l)&(m=n)printf(%dn,j);第6章:数组6.1(1) 38(2) 7 15 3 4 5 26.2#include #define n 100void main()int i,j,s,temp;int an; printf(请输入100个整数:);for(i=0;in;i+)scanf(%d,&ai);f

34、or(i=0;in;i+)s=1;for(j=0;jaj+1)s=0;temp=aj; aj=aj+1; aj+1=temp;if(s=1) break;/*无反序则跳出*/for(i=0;in;i+)printf(%d ,ai);printf(n);6.3#include #define n 10void main()int i,j,num;int an+1=1,4,6,9,13,16,19,28,40,100; printf(原序列:);for(i=0;ian-1)an=num;elsefor(i=0;inum)for(j=n-1;j=i;j-)aj+1=aj;ai=num;break;p

35、rintf(插入后的序列:);for(i=0;i=n;i+)printf(%5d,ai);printf(n);6.4#include void main()int a,x,y,b,i=0;int num20;printf(输入十进制:);scanf(%d,&a);b=a;/*转换成二进制*/while(x=a/2)!=0)y=a%2;numi+=y;a=x;numi=a;printf(转换为二进制:);for(;i=0;i-)printf(%d,numi);printf(n);/*转换成十六进制*/i=0;while(x=b/16)!=0)y=b%16;numi+=y;b=x;numi=b;p

36、rintf(转换为十六进制:);for(;i=0;i-)if(numi=10)printf(%c,numi+55);elseprintf(%d,numi);printf(n);6.5#include #define n 10void main()int i=0,j=n-1,k,t;int an;for(k=0;kn;k+)scanf(%d,&ak);while(ij)while(ai0)&(i=0)&(ij) j-; /*找到右边小于0的数*/if(ij) /*交换*/t=ai;ai=aj;aj=t;i+;j-;for(k=0;kn;k+)printf(%d ,ak); printf(n);6

37、.6#include #define n 4#define m 5void main()int i,j,k,anm,max,maxj,flag;printf(请输入数组:);for(i=0;in;i+)for(j=0;jm;j+)scanf(%d,&aij);for(i=0;in;i+)max=ai0;/*开始时假设ai0最大*/maxj=0; /*将列号0赋给maxj保存*/for(j=0;jmax)max=aij;/*将本行的最大数存放在max中*/maxj=j; /*将最大数所在的列号存放在maxj中*/flag=1;/*先架设是鞍点,以flag为1代表*/for(k=0;kakmaxj

38、)/*将最大数和其同列元素相比*/flag=0;/*若max不是同列最小,表示不是鞍点,令flag为0*/continue;if(flag)/*若flag为1表示是鞍点*/printf(a%d%d=%dn,i,maxj,max);/*输出鞍点的值和所在的行、列号*/break;if(!flag)/*若flag为0表示鞍点不存在*/printf(无鞍点!);6.7#include void main()int i,j,k,p,n,a1616;p=1;while(p=1)/*要求阶数在1到15之间的奇数*/printf(请输入n的大小(0n16):);scanf(%d,&n);if(n!=0)&(

39、n=15)&(n%2!=0)p=0;/*初始化*/for(i=1;i=n;i+)for(j=1;j=n;j+)aij=0;/*建立表*/j=n/2+1;a1j=1;for(k=2;k=n*n;k+)i=i-1;j=j+1;if(in)i=i+2;j=j-1;elseif(in) j=1;if(aij=0)aij=k;elsei=i+2;j=j-1;aij=k;for(i=1;i=n;i+)for(j=1;j=n;j+)printf(%5d,aij);printf(n);6.8#include #include#define n 10 void main() char chn;int l,i,j;long n=1,num=0;printf(请输入一个%d个元素内的整数字符串:,n);gets(ch);l=strlen(ch);for(i=0;i0)/*整数每位乘以其位权*/n*=10;j-;num+=n; printf(%ld,num);6.9

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论