C语言程序设计课后习题1-8参考答案_第1页
C语言程序设计课后习题1-8参考答案_第2页
C语言程序设计课后习题1-8参考答案_第3页
C语言程序设计课后习题1-8参考答案_第4页
C语言程序设计课后习题1-8参考答案_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言程序设计课后习题1-8参考答案习题1参考答案一'简答题1、 冯诺依曼计算机模型有哪几个基本组成部分?各部分的主要功能是什么?答:冯诺依曼计算机模型是由运算器、控制器、存储器、输入设备、输出设备五大功能部件组成的。运算器又称算术逻辑部件,简称ALU,是计算机用来进行数据运算的部件。数据运算包括算术运算和逻辑运算。控制器是计算机的指挥系统,计算机就是在控制器的控制下有条不紊地协调工作的。存储器是计算机中具有记忆能力的部件,用来存放程序和数据。输入设备是用来输入程序和数据的部件。输出设备正好与输入设备相反,是用来输出结果的部件。2、 简述计算机的工作原理。答:计算机的工作原理可简单地概

2、括为:各种各样的信息,通过输入设备,进入计算机的存储器,然后送到运算器,运算完毕把结果送到存储器存储,最后通过输出设备显示出来。整个过程由控制器进行控制。3、 计算机软件系统分为哪几类?答:软件内容丰富,种类鳖多,通常根据软件用途将其分为两大类:系统软件和应用软件。系统软件是指管理'监控'维护计算机正常工作和供用户操作使用计算机的软件。这类软件一般与具体应用无关,是在系统一级上提供的服务。系统软件主要包括以下两类:一类是面向计算机本身的软件,如操作系统'诊断程序等。另一类是面向用户的软件,如各种语言处理程序(像BC、VC等)'实用程序'字处理程序等。应用

3、程序是指某特定领域中的某种具体应用,供最终用户使用的软件,它必须在操作系统的基础上运行。4、什么叫软件?说明软件与硬件之间的相互关系。答:软件是指计算机程序及有关程序的技术文档资料。两者中更为重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。在不太严格的情况下,认为程序就是软件。硬件与软件是相互依存的,软件依赖于硬件的物质条件,而硬件则需在软件支配下才能有效地工作。在现代,软件技术变得越来越重要,有了软件,用户面对的将不再是物理计算机,而是一台抽象的逻辑计算机,人们可以不必了解计算机本身,可以采用更加方便、更加有效地手段使用计算机。从这个意义上说,软件是用户与机器的

4、接口。二、填空题1算术逻辑2'键盘鼠标3、控制器运算器4'1025'OOx6、原码反码补码7、00010111111010018'127-128三、选择题1、C2、A3、B4、A5、B6、B7、D8、A9、A10、B11、A12、B习题2参考答案一'简答题1、C语言有哪些特点?答:(1)简洁紧凑、灵活方便;(2)运算符丰富;(3)数据结构丰富;(4)C语言是结构(6) C语言允许直接访问式语言;(5)C语言的语法限制不太严格'程序设计自由度大;物理地址,可以直接对硬件进行操作;(7)C语言程序生成代码质量高,程序执行效率高;(8)C语言使用范围大

5、,可移至性好;旧)具有预处理功能;(10)具有递归功能。2、C语言的主要应用有哪些?答:(1)许多系统软件和大型应用软件都是用C语言编写的,如UNIX、Linux等操作系统。(2)在软件需要对硬件进行操作的场合,用C语言明显优于其他高级语言。例如,各种硬件设备的驱动程序(像显卡驱动程序、打印机驱动程序等)一般都是用C语言编写的。(3)在图形、图像及动画处理方面,C语言具有绝对优势,特别是游戏软件的开发主要就是使用C语言。(4)随着计算机网络飞速发展,特别是Internet的出现,计算机通信就显得尤其重要,而通信程序的编制首选就是C语言。(5)C语言适用于多种操作系统,像Windows、UNIX

6、、Linux等绝大多数操作系统都支持C语言,其他高级语言未必能得到支持,所以在某个特定操作系统下运行的软件用C语言编制是最佳选择。3、列举几种程序设计语言。答:C语言'Java语言、Pascal语言、BASIC语言、LOGO语言等。二'填空题1、机器语言汇编语言高级语言2、机器语言3、ALGOL604、多个函数5、main6、include7、定义使用8、声明部分执行部分声明部分执行部分三、选择题1、D2、B3、B4、C5、C6、C7、D8、C9、D10、A11、B12、A13、B14、C15、A习题3参考答案一、填空题1、整型字符型实型2、字母数字下划线字母下划线3、直接符号

7、符号4、00x5、126、487-32768-327678、-169、x+=1;10、2611、(m/10)%10*100+m/100(100M0)+m%10、选择题1'D2、C3A4、B5、B6、D7、B8,C9、A10、A11、C12、B13B14'D15B16、D17、B18、D19'C20A21、B22、D23、D24、D25、D26D27、C28、A29、C30、B习题4参考答案一、填空题1、seanfprintf2、按指定的输出格式将信息输出到屏幕上常规字符格式控制符3、X、E,G4'getehe输入的字符回显,而geteh输入的字符不回显5、ffl

8、ush6、解决某个问题的具体的方法和步骤7、自然语言描述伪代码流程图N-S图8、顺序分支循环二'选择题1、B2、C3、D4、C5、B6、C7、D8、C9、B10、B11、D12、C13、D14、D15'A三、编程题1、编写一程序要求任意输入四位十六进制整数,以反序的方式输出该十六进制数。例如:输入9AF0,则输出0FA9o#include<stdio.h>voidmain()(unsignedshorta,b;scanf("%4x”,&a)输入4位十六进制数给变ab=(a&0X000F)«12;,取a的最低一位十六进制数并左移12

9、位后赋值给bb+=(a&0X00F0)«4;取a的次第一位十六进制数并左移4位后与b相加再赋值给b+=(a&0X0F00)«4;取a的次高一位十六进制数并右移4位后与b相加再赋值给b+=(a&0XF000)«12;/做a的最高一位十六进制数并右移12位后与b相加再赋值给printf( “ %4x,b);输出变化后的十六进制数将变2、编程从键盘输入两个整数分别给变量a和b.要求在不借助于其他变量的条件卜,量a和b的值实现交换。#include<stdio.h>voidmain()(inta,b;scanf("%d%d,&

10、amp;a,&b);printf("beforeswap:a=%d=%dn",a,b);a=a+b;b=a-b;a=a-b;printf("afterswap:a=%d=%dn",a,b);)3、编程从键盘输入圆的半径r,计算出圆的周长和面积。#include<stdio.h>#definePI3.14159voidmain()(floatr,c,s;scanf(“%f,&r);printf("c=%fs=%f,c,s);)2、编程从键盘输入两个整数分别给变量a和b.要求在不借助于其他变量的条件卜,将变4、编程从键盘

11、输入任意一个十六进制负整数,以输入的形式输出。例如:输入-FA98,输出FA98°#include<stdio.h>voidmain()(shortinta;scanf(",&a);printf("n"-a);)5、已知一元二次方程ax2+bx+c=0,编一程序当从键盘输入a、b、c的值后,计算x的值。#include<stdio.h>#include<math.h>voidmain()(floata,b,c;floatd;floatx1,x2;printf(Minputa,b,c:");scanf(

12、“%f%f%f,&a,&b,&c);d=sqrt(b*b-4*a*c);XC(-b+d)/(2*a);x2=(-b-d)/(2*a);printf("x£%.2f2=%.2fn”,x1,x2);)6、假设从键盘输入某日午夜零点到现在已经历的时间(单位:S),遍一程序计算到现在为止已近过了多少天,现在的时间是多少?#include<stdio.h>voidmain()(unsignedlongt,r;intd,h,m,s;printf("second=");scanf("%c",&t);d=V

13、(24*3600);r=t%(24*3600);h=r/3600;m=(r%3600)/60;s=(r%3600)%60;rT , d, h, m, s):printf("havepasseddaysis%d,currenttime)习题5参考答案编程题1编一程序判断输入整数的正负性和奇偶性。#include<stdio.h>voidmain()(inta;scanf("%c",&a);if(a>=0)printf("thenumber%dispositivenumber,a);elseprintf("thenumbe

14、r%disnegativenun",a);if(a%2=0)printf("thenumber%disevennumber,a);elseprintf("thenumber%disoddnumber,a);)2、编程判断输入数据的符号属性。#include<stdio.h>voidmain()(intx,sign;scanf("%d9,&x);if(x>0)sign=1;elseif(x=0)sign=0;elsesign=-1;printf("sigr%dn”,sign);)3、输入任意三个数numl、num2、nu

15、m3,按从小到大的顺序排序输出。#include<stdio.h>voidmain()intnuml,num2,num3;scanf("%d%d%”,&numl,&num2,&num3);if(num1<=num2)if(num2<=num3)printf("%d%dn”,numl,num2,num3);elseif(num1>=num3)printf("%d%dn”,num3,num1,num2);elseprintf("%d%dn”,num1,num3,num2);elseif(num2>=

16、num3)printf("%d%dn”,num3,num2,num1);elseif(num1>=num3)printf("%d%dn”,num2,num3,num1);elseprintf("%d%dn”,num2,num1,num3);)4、在屏幕上显示一张如下所示的时间表。#include<stdio.h>voidmain()charc;printf(").n”printf(“1mornmng);printf(“2afterno6n);printf("3mg'ht);printf("Pleaseente

17、ryourchoice:c=getcahr();switch(c)casei:printf(case2,:printf(case3,:printf(default:printf()"GooraTmo"GoochaftArrboeak;"G6od;rtoighik;“Selectioner)r!switch语句编程。5、输入一个年份和月份,打印出该月份有多少天(考虑闰年)#include<stdio.h>voidmain()(intyear,month;printf(Mlnputyear,month:");scanf("%d%c”,&

18、amp;year,&month);switch(month)(case1:case3:case5:case 7:case 8:case10:case 12: printf(“ 31Hdaysbreak;case4:case6:case9:case 11: printf(“ 30'daysprintf( " sum=b%d, sum);break;case2:if(year%4=0&&year%100!=0)|(year%400=0)printf(« 29 days);elseprintf(« 28 days);break;defau

19、lt: printf(“Inpub erijor!习题6参考答案编程题1、编程计算2+4+6+98+100的值。(1)利用for循环语句实现,在循环体外为sum赋初值#include<stdio.h>voidmain()inti,sum=O;for(i=2;i<=100;i+=2)sum+=i;i和sum赋初值。(2)利用while循环语句实现,在循环体外为#include<stdio.h>voidmain()(inti=2,sum=0;while(i<=100)(sum+=i;i+=2;)printf("sum=n%d,sum);)2、编程计算V

20、2*3+4*5*6+-+99*100*101的值。#include<stdio.h>voidmain()(inti;longterm,sum=0;f0r(i=1;i<=99;i+=2)(term=i*(i+1)w(i+2);sum+=term;)printf("sum=n%d,sum);孑、编程计算1!+2!+3!+10的值。(1)用累加和算法,累加项为term=term*i;i=1,2,10Term的初始值为1,使用单重循环完成。#include<stdio.h>voidmain()(longterm=1,sum=0;inti;for(i=1;i<

21、;=10;i+)(term*=i;sum+=term;)printf(“1!+2!+3!+-+10!=n%ldsum);)(2)用内层循环求阶乘'外层循环控制累加的项数。#include<stdio.h>voidmain()(longterm,sum=0;inti,j;for(i=1;i<=10;i+)(term=1;f0r(j=1;j<=i;j+)term*=j;sum+=term;printf(F!+2!+3!+10!=n%l(dsum);)4、编程计算a+aa+aaa+aa.(n个a)的值,n和a的值由键盘输入。#include<stdio.h>

22、;voidmain()(longterm=0,sum=0;inta,i,n;printf(,flnputanw:);scanf("%d,%c",&a,&n);for(i=1;i<=n;i+)(term=term*10+a;sum+=term;)printf("sum=%ld,sum);)5、参考答案:#include<stdio.h>voidmain()(floatterm,result=1;intn;for(n=2;*=100;n+=2)term=(float)(n*n)/(n-1)*(n+1);result*=term;)pr

23、intf("result=%f,2*result);)6、参考答案:#include<stdio.h>#include<math.h>voidmain()(intn=1,count=0;floatx;doublesum,term;printf(Hlnputx:M)scanf("%ff,&x);sum=x;term=x;do(term=-term*x*x/(n+1)(n+2);/计算相应项,并改相应符号sum+=term;n+=2;count+;while(fabs(term)>=le-5);printf("sin(x)=%f,

24、count=%d,sum,count);7、 参考答案:#include<stdio.h>voidmain()(inti,j,k,n;printf(4,resultis:");for(n=100;n<1000;n+)(i=n/100;分出百位j=(n-i*100)/10分出十位k=n%10;分出个位if(n=i*i*i+j*j*j+k*k*k)printf("”,n);)printf(npu);)8、 参考答案:#include<stdio.h>#include<math.h>voidmain()(intil,i2,i3,i4,k,

25、n;printf( " In put data is:“);k=abs(n);i1=k/1000;分离出千位i2=(k-i1*1000)/100/分离出百位"分离出十位i3=(k-i1*1000-12*100)/10i1+i2+i3+i4);i4=k%10;分离出个位printf("Thesumofthetotalbitis%d,9、参考答案:#include<stdio.h>voidmain()(intn,m=0,s,r;printf(MInputdatais:");scanf("d*,&n);s=n;While(s!=0

26、)(r=s%10;从低位到高位逐一分离m=10*m+r;重新组合一正数s=s/10;求其商)if(m=n)printf("n”s);elseprintf(nno);10、参考答案:#include<stdio.h>voidmain()(intx,y,乙count=0;x,y,z分别表示5分、2分和1分硬币的数量for(x=1;x<=28;x+)5分硬币最多不超过28枚for(y=1;y<=73;y+),2分硬币最多不超过73枚(z=100-x-y;共有100枚硬币,减去5分和2分硬币后为1分硬币数量if(5*x+2*y+z=150)(count+增力口一种方案

27、printf(-%02%02d,%02d”,x,y,z);输出每一种方案if(count%6=0)printf(n”);没输出6种方案后,换行)printf("count=%d,count);)11、设计思想:将A、B、C、D4个人的回答用一条件表达式来表示,对于A的回答:thisman!=A于B的回答:thisman=,;C对于C的回答:thisman=r;对于D的回4个条件表达式答:thisman!='D然后>采用枚举的方法>一个人一个人的去试>如果这中有3个为真,即4个条件表达式的值相加为3,则可判定是其中某人做的好事。参考答案:#include<

28、;stdio.h>voidmain()(intk=0;sum=0;g=0;charthisman='';for(k=0;k<=3;k+)循环控制变量为k,循环共进行4次(thisman="A'+/k初始认为A做好事,依次为B、C、Dsum=(thisman!=)+(thisman=D*)+(thisman!=1D*);C*)+(thisman=if(sum=3)(printf("Thismanis%c,thisman);g=1;)if(g!=1)printf("Can*tfoUnd)12、参考答案:#include<std

29、io.h>voidmain()(inti,j;for(i=1;i<=3;i+)/先显示前三行for(j=1;j<=i-1;j+)/输出每行前的空格printf("”);for(j=l;j<=5-2*(i-1);j+)输出每行的*号printf();printf(n"");)for(i=1;i<=2;i+)接着显示后两行(for(j=l;j<=2-i;j+)printf("”);for(j=l;j<=2*i+1;j+)printf();printf(n"");)参考答案(2):#include&

30、lt;stdio.h>voidmain()(inti,j,k;for(i=1;i<=5;i+)/i控制行数(for(j=1;j<=5-i;j+)/B行数的增加,输出递减数目的空格printf(一);for(k=1;k<=5;k+)每行输出5个写符printf();printf( n “);将光标移到下一行起始位置处)参考答案(3):#include<stdio.h>voidmain()(inti,j;for(i=1;i<=5;i+)(for(j=l;j<=2*(i-1)+1;j+)printf();printf(n”)习题7参考答案编程题1

31、9;参考答案:#include<stdio.h>voidmain()(inti,sum=0;a20;for(i=0;i<20;i+)Scanf(“%d',&ai);输入20个整数for (i=0; i<20; i+)对非负数进行统计if(ai<0)continue;为负数,进入下一轮循环sum+=ai;非负数累计)printf("sum=%di",sum);)2、参考答案#include<stdio.h>voidmain()(inti,j,odd,even,n,t,a10;odd=0;even=9;for(i=0;i

32、<10;i+)将键盘输入的数据存入数组中(scanf("%d',&n);if(n%2!=0)aodd+=n;将奇数放置在数组的左边elseaeven-=n;将偶数放置在数组的哟边)for(i=0;i<odd-1;i+)通过选择排序对奇数进行升序排列(n=j;if(aj<anJ)n=j;if(n!=i)(t=ai;a«=an;an=t;)for(i=odd;i<9;i+)通过选择排序对偶数进行升序排列(n=i;for(j=i+1;j<10;j+)if(aj<anJ)n=j;If(n!=i)(t=ai;ai=an;an=t;)

33、for(i=0;i<10;i+)printf(-%d,ai输出排序结果printf(n”“);3、参考答案:#include<stdio.h>void mai n()printf( Mlnpirtt6ger number:);inti,max,min,a10;printf(Mlnput10integernumber:输入10个整数for(i=0;i<10;i+)scanf("%d,&ai);max=0;min=0;for(i=1;i<10;i+)(if(ai>amax)max=i;if(ai<amin)min=i;)i=amax;am

34、ax=amin;amin=i;for(i=0;i<10;i+)printf(M%”,ai);printf(n"");)4、参考答案:#include<stdio.h>voidmain()inti,j,t,a6;for(i=0;i<6;i+)scanf(%c”,&ai);printf(n”");for(i=0;i<6;i+)(for(j=0;j<6;j+)printf(M%d”,aO);printf(n,H,);t=a5;for(j=5;j>0;j-)a0=a0-1;a0=t;)5、参考答案:#include<

35、stdio.h>voidmain()(inti,j,sum=0,mul=1,a55;printf("Input5*5array:);for(i=0;i<5;i+)for(j=0;j<5;j+)scanf("%d,&aiO);printf(n"");for(i=0;i<5;i+)(sum+=aiO;if(i>=2)sum+=ai4_i;if(i%2!=0)continue;mul*=aii;if(i>=2)mur=ai4-i;)sum, mul);printf(Msum=%dul=%dn”)6、参考答案:#inc

36、lude<stdio.h>#defineN6voidmain()(inti,j,aNN;for(i=0;i<N;i+)a皿i=1;for(j=1;j<i;j+)ai0=ai-10-1+ai-10;)for(i=0;i<N;i+)(for(j=0;j+)printf("”);for(j=0;j<=i;j+)printf(“%2”,aiO);printf(n"");)7、参考答案:#include<stdio.h>#include<string.h>#defineN80voidmain()(charstrN;

37、inti;printf("Inputastring:");gets(str);printf("Afterreverse:");for(i=strlen(str)-1;i>=0;i-)printf(n");)8、参考答案:#include<stdio.h>#/nclude<string.h>#defineN80voidmain()(charstrN,strtempN;unsignedinti,j;printf("Inputastring:);gets(str);for(i=0,j=0;i<strlen

38、(str);i+)if(stri!=*c,)strtempj+=stri;strtempj=011;strcpy(str,strtemp);printf(HAfterdeletecharacteC:”);printf(nT%s,str);)9、参考答案:#include<stdio.h>#defineN80voidmain()chars1N,s2N="abhdeg";unsignedinti;i=0;while(1)(s1i=s2i;if(s2i=O')break;i+;)printf("Afterstringcopy:%",s1);

39、)10、参考答案:#include<stdio.h>voidmain()(chardstStr20=12345srcStr20='67890';unsignedinti,j;,dstStr,srcStr);printf("Beforestrcat:dstStr=%ssrcStn”for(i=0;dstStri!=O'i+'+)for(j=0;srcStrj!=01;j+'+)dstStri切=srcStrj;dstStri+j=Or*:printf("Afterstrcat:dstStr=%M,dstStr);11、参考答

40、案:#include<stdio.h>voidmain()inta10=1,3,5,7,9,num=5,i,n;printf("Beforeinsert:);for(i=0;i<num;i+)printf(M%”,ai);printf(n”);printf("InputanumbeM:)scanf("%d',&n);for(i=num-1;i>=0;i-)if(ai>n)ai+1=ai;elsebreak;ai+1=n;printf("Afterinsert1:);for(i=0;i<num+1;i+)

41、printf("%d=ai);printf();s)习题8参考答案编程题1设计一个困数'用来判断一个整数是否为素数。参考答案:#include<stdio.h>#include<math.h>intIsPrimeNumber(intnumber);voidmain()(inta;printf(nInputaintegernumbe");scanf("%d',&a);if(lsPrimeNumber(a)printf("%disprimenumb",a);elseprintf("%disn

42、'tprimenumbea);)intlsPrimeNumber(intnumber)(intI;if(number<=-1)return(O);for(i=2;i<sqrt(number);i+)if(number%i=0)return(O);return(i);2、设计函数MaxCommonFactor()>计算两个正整数的最大公约数。参考答案:#include<stdio.h>intMaxCommonFactor(inta,intb);voidmain()(intatb,c;printf("Inputtwointegernumber,);s

43、canf("%d%d,&a,&b);c=MaxCommonFactor(a,b);if(c!=-1)printf("Thebiggestcommonfactoro%dand%dis%dn”,atb,c);elseprintf("Thebiggestcommonfactoro%dand%disn'texhs”,a,b);)intMaxCommonFactor(inta,intb)(if(a<=0|b<=0)return(-1);while(a!=b)(if(a>b)a=a-b;elseif(b>a)b=b-a;rutu

44、rn(a);)3、定义函数GetData()用于接收键盘输入的一组整型数据,并放入一数组中;另外再定义一个函数Sort()用于对输入的这一组数据按照降序排列。主函数向后调用GetData和Sort函数,输出最后的排序结果。参考答案:#include<stdio.h>#defineN10voidGetData(intaO,intn);voidSort(intaOJntn);voidmain()(inti,aN;GetData(a,N);Sort(a.N);printf("Aftersort:);for(i=0;i<n;i+)printf("%d',a

45、i);printf(n”");)voidGetData(intaQJntn)(inti;printf("Inputnumbe::);for(i=0;i<n;i+)voidSort(intaQ,intn)intfor(i=0;i<n-1;i+)(k=i;for(j=i+1;j<n;j+)if(aO>ak)k=j;if(k!=i)(t=ai;ai=ak;ak=t;)4、参考答案:#include<stdio.h>#include<string.h>voidJsSort(charstrQ);voidmain()charstr80;p

46、rintf(HInputastring:)gets(str);JsSort(str);printf("Aftersort:%s,str);)voidJsSort(charstr)inti,j,kjen;charch;len=strlen(str);for(i=1;i<len-1;i+=2)(k=i;for(j=i+2;j<len;j+=2)if(strj>strk)k=j;if(k!=j)(ch=stri;stri=strk;strk=ch;)5参考答案:#include<stdio.h>#include<string.h>#defineN30voidJosegh(intp,intn,ints,intm);voidmain()(inti,pN;Josegh(p,N,1,10);for(i=N-1;i>=0;i-)printf(%4d,pi);if(i%10=0)printf(n,H,);)voidJosegh(intp,intn,ints,intm)(inti,j,s1,w;s1=s;for(i=1;i<=n;i+)for(i=n;i>=2;i-)(s1=(s1+m-1)%i;if(s仁=0)s1

温馨提示

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

评论

0/150

提交评论