C语言程序设计课后习题18参考答案.docx

上传人:苏美尔 文档编号:11737320 上传时间:2021-09-02 格式:DOCX 页数:41 大小:34.69KB
返回 下载 相关 举报
C语言程序设计课后习题18参考答案.docx_第1页
第1页 / 共41页
C语言程序设计课后习题18参考答案.docx_第2页
第2页 / 共41页
C语言程序设计课后习题18参考答案.docx_第3页
第3页 / 共41页
C语言程序设计课后习题18参考答案.docx_第4页
第4页 / 共41页
C语言程序设计课后习题18参考答案.docx_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《C语言程序设计课后习题18参考答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计课后习题18参考答案.docx(41页珍藏版)》请在三一文库上搜索。

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

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

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

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

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

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

7、直接符号符号4、0 0x5、1 26、4 87、 -32768327678、-169、 x+=1;10、2611、(m/10)%10*100+m/100(100*10)+m%10、选择题1、D 2、C 3、A4、B 5、B 6、D 7、B 8、C 9、A 10、A11、C12、B13、B 14、D 15、B16、D 17、B 18、D 19、C 20、A 21、B22、D23、D24、D 25、D 26、D 27、C 28、A 29、C 30、B习题4参考答案一、填空题1、scanf printf2、按指定的输出格式将信息输出到屏幕上常规字符格式控制符3、X、E、G4、getche输入的字符回

8、显,而 getch输入的字符不回显5、fflush6、解决某个问题的具体的方法和步骤7、自然语言描述 伪代码流程图 N-S图8、顺序分支循环二、选择题1、B 2、C 3、D4、C5、B6、C7、D 8、C 9、B10、B 11、D12、C 13、D 14、 D 15、 A三、编程题1、编写一程序要求任意输入四位十六进制整数,以反序的方式输出该十六进制数。例如:输入9AF0,则输出0FA9。#includevoid main()unsigned short a, b;scanf( %4x” , &a)输入4位十六进制数给变 ab=(a & 0X000F)12; 取a的最低一位十六进制数并左移12

9、位后赋值给bb+=(a & 0X00F0)4;取a的次第一位十六进制数并左移4位后与b相加再赋值给b41b+=(a & 0X0F00)4; 取a的次高一位十六进制数并右移4位后与b相加再赋值给b12位后与b相加再赋值给bb+=(a & 0XF000)12; 取a的最高一位十六进制数并右移printf(%4x, b);/伟俞出变化后的十六进制数2、编程从键盘输入两个整数分别给变量a和b,要求在不借助于其他变量的条件下,将变量a和b的值实现交换。#includevoid main()int a, b;scanf( %d%d , &a, &b);printf( before swap: a=%d=%

10、d n” , a,b);a=a+b;b=a-b;a=a-b;printf( after swap: a=%d=%d n” , a, b);3、编程从键盘输入圆的半径r,计算出圆的周长和面积。#include#define PI 3.14159void main()float r, c, s;scanf( %f , &r);c=2*r*PI;s=PI*r*r;printf( c=%f s=%f , c, s);4、编程从键盘输入任意一个十六进制负整数,以输入的形式输出。例如:输入 -FA98,输出-FA98。#includevoid main() short int a;scanf( %X ,

11、&a);printf( n -,a); 5、已知一元二次方程ax2+bx+c=0,编一程序当从键盘输入#include#includevoid main() float a, b, c;float d;float x1, x2;printf( input a, b, c:);scanf( %f%f%f,&a, &b, &c);d=sqrt(b*b-4*a*c);x1=(-b+d)/(2*a);x2=(-b-d)/(2*a);printf( x1=%.22=%.2f n” , x1, x2); a、b、c的值后,计算x的值。s),遍一程序计算到现在6、假设从键盘输入某日午夜零点到现在已经历的时间

12、(单位: 为止已近过了多少天,现在的时间是多少?#includevoid main()unsigned long t, r;int d, h, m, s;printf( second=);scanf( %d , &t);d=t/(24*3600);r=t%(24*3600);h=r/3600;m=(r%3600)/60;s=(r%3600)%60;printf( have passed days is %d, current timen” , d, h, m, s):习题5参考答案编程题1、编一程序判断输入整数的正负性和奇偶性。#includevoid main()int a;scanf( %

13、d , &a);if (a=0)printf( the number %d is positive numbier , a);elseprintf( the number %d is negative nu n” , a);if (a%2=0)printf( the number %d is even numb er, a);elseprintf( the number %d is odd number, a);2、编程判断输入数据的符号属性。#includevoid main()int x, sign;scanf( %d , &x);if (x0)sign=1;else if (x=0)si

14、gn=0;elsesign=-1;printf( sigr%d n” , sign);3、输入任意三个数 num1、num2、num3,按从小到大的顺序排序输出。#includevoid main()int num1, num2, num3;scanf( %d%d%d , &num1, &num2, &num3);if (num1=num2)if (num2=num3)printf( %d %d n” , num3, numl, num2); elseprintf( %d %d n” , numl, num3, num2); elseif (num2=num3)printf( %d %d n”

15、 , num3, num2, numl);elseif (num1=num3)printf( %d %d n” , num2, num3, numl); elseprintf( %d %d n” , num2, numl, num3);4、在屏幕上显示一张如下所示的时间表。#includevoid main()char c;printf(*Time*n” );printf(“ 1 mornnng );printf(“2 afternoO n);printf( “3 nighti););printf( Please enter your choice:c=getcahr();switch (c)

16、case1:printf(case2:printf(case3:printf(default:printf(“GoonTmorbregk;“Goocba fterboonk“ Go od; bighik;Selection error!,用switch语句编程。5、输入一个年份和月份,打印出该月份有多少天(考虑闰年)#includevoid main()int year, month;printf( Input year, month:);scanf( %d %d , &year, &month);switch (month)case 1:case 3:case 5:case 7:case 8

17、:case 10:case 12: printf( 31 da ys);break;case 4:case 6:case 9:case 11: printf( 30 daysbreak;case 2: if (year%4=0 & year%100!=0)| (year%400=0)printf(29 days);elseprintf(28 days);break;default: printf( Inpuib error!习题6参考答案编程题1、编程计算 2+4+6+98+100的值。(1)利用for循环语句实现,在循环体外为sum赋初值0。#includevoid main()int i,

18、 sum=0;for(i=2; i=100; i+=2)sum+=i;printf( sum=b% d, sum);(2)利用while循环语句实现,在循环体外为i和sum赋初值。#includevoid main()int i=2, sum=0;while(i=100)sum+=i;i+=2;printf( sum=n% d, sum);2、编程计算 1*2*3+4*5*6+ +99*100*101 的值。#includevoid main()int i;long term, sum=0;for(i=1; i=99; i+=2)term=i*(i+1)*(i+2);sum+=term;pri

19、ntf( sum=n% d, sum);3、编程计算1!+2!+3!+ +1耐值。(1)用累加和算法,累加项为 term=term*i; i=1,2,,他Term的初始值为1,使用单重循环完成。#includevoid main()long term=1, sum=0;int i;for(i=1; i=10; i+)term*=i;sum+=term;printf( 1!+2!+3!+ +10! =n%ld sum);(2)用内层循环求阶乘,外层循环控制累加的项数。#includevoid main()long term, sum=0;int i, j;for(i=1; i=10; i+)te

20、rm=1;for(j=1; j=i; j+)term*=j;sum+=term;printf( 1!+2!+3!+ +10! =n%ld sum);4、编程计算a+aa+aaa+aa.a n个a)的值,n和a的值由键盘输入。#includevoid main()long term=0, sum=0;int a, i, n;printf( Input an n:);scanf( %d,%d , &a, &n);for(i=1; i=n; i+)term=term*10+a;sum+=term;printf( sum=%ld , sum);5、参考答案:#includevoid main()flo

21、at term, result=1;int n;for(n=2; n=100; n+=2)term=(float)(n*n)/(n-1)*(n+1);result*=term;printf( result=%f, 2*result);6、参考答案:#include#includevoid main()int n=1, count=0;float x;double sum, term;printf( Input x: ”)scanf( %f , &x);sum=x;term=x;doterm=-term*x*x/(n+1)(n+2); 计算相应项,并改相应符号 sum+=term;n+=2;co

22、unt+;while(fabs(term)=le-5);printf( sin(x) = %f, count= %d , sum, count);7、参考答案:#includevoid main()int i, j, k, n;printf( result is:);for(n=100; n1000; n+)i=n/100;分出百位j=(n-i*100)/10分出十位k=n%10;分出个位if(n=i*i*i+j*j*j+k*k*k)printf( %d , n);printf( n”);8、参考答案:#include#includevoid main()int i1, i2, i3, i4,

23、 k, n;printf( Input data is:);scanf( %d , &n);k=abs(n);i1=k/1000;分离出千位i2=(k-i1*1000)/100/分离出百位i3=(k-i1*1000-i2*100)/10/分离出十位i1+i2+i3+i4);i4=k%10;/分离出个位printf( The sum of the total bit is %d , 9、参考答案:#includevoid main()int n, m=0, s, r;printf( Input data is:);scanf( %d , &n);s=n;While(s!=0)r=s%10;从低位

24、到高位逐一分离m=10*m+r;重新组合一正数s=s/10;求其商if(m=n)printf(nes);elseprintf(nno);10、参考答案:#includevoid main()int x, y, z, 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+增加一种方案printf(02% 02d, %02d : x, y, z);

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

26、char thisman= ;for (k=0; k=3; k+)循环控制变量为k,循环共进行4次thisman= A +/k初始认为 A做好事,依次为B、C、Dsum=(thisman!= A )+(thisman= C )+(thisman= D )+(thisman!= D);if (sum=3)printf( This man is %c , thisman);g=1;if (g!=1)printf( Can t foun);12、参考答案(1):#includevoid main()int i, j;for (i=1; i=3; i+)先显示前三行for (j=1; j=i-1; j

27、+) /输出每行前的空格printf(”力for (j=1; j=5-2*(i-1); j+) 输出每行的 * 号printf( *);printf( n”“);for (i=1; i=2; i+)接着显示后两行for (j=1; j=2-i; j+)printf(”力for (j=1; j=2*i+1; j+)printf( *);printf( n”“);参考答案(2):#includevoid main()int i, j, k;for (i=1; i=5; i+)/i 控制行数for (j=1; j=5-i; j+) 随行数的增加,输出递减数目的空格printf(”力for (k=1;

28、 k=5; k+)每行输出5个*字符printf( *);printf( n); 将光标移到下一行起始位置处参考答案(3):#includevoid main()int i, j;for (i=1; i=5; i+)for (j=1; j=2*(i-1)+1; j+)printf( *);printf( n”“);习题7参考答案编程题1、参考答案:#includevoid main()int i, sum=0; a20;for (i=0; i20; i+)Scanf( d,&ai); 输入 20个整数for (i=0; i20; i+)对非负数进行统计if (ai0)continue;为负数,

29、进入下一轮循环sum+=ai;非负数累计printf( sum=n% d, sum);2、参考答案#includevoid main()int i, j, odd, even, n, t, a10;odd=0;even=9;for(i=0; i10; i+)将键盘输入的数据存入数组中scanf( %d , &n);if (n%2!=0)aodd+=n;/将奇数放置在数组的左边elseaeven-=n;/将偶数放置在数组的哟边for (i=0; iodd-1; i+)通过选择排序对奇数进行升序排列n=j;for (j=i+1; jodd; j+)if (ajan) n=j;if (n!=i)t=

30、ai;ai=an;an=t;for (i=odd; i9; i+)通过选择排序对偶数进行升序排列n=i;for (j=i+1; j10; j+)if (ajan)n=j;If (n!=i)t=ai;ai=an;an=t;for (i=0; i10; i+)printf(%d , ai输出排序结果printf( n”);3、参考答案:#includevoid main()int i, max, min, a10;printf( Input 10 integer number:输入 10个颦数for(i=0; i10; i+)scanf( %d , &ai);max=0;min=0;for(i=1

31、; iamax)max=i;if (aiamin)min=i;i=amax;amax=amin;amin=i;for(i=0; i10; i+)printf( %d , ai);printf( n”);4、参考答案:#includevoid main()int i, j, t, a6;printf( Input 6 integer number:);for(i=0; i6; i+)scanf( %d , &ai);printf( n”);for(i=0; i6; i+)for (j=0; j0; j-)aj=aj-1;a0=t;5、参考答案:#includevoid main()int i,

32、j, sum=0, mul=1, a55;printf( Input 5*5 array:);for(i=0; i5; i+)for(j=0; j5; j+)scanf( %d , &aij);printf( n”);for(i=0; i5; i+)sum+=aij;if(i!=2)sum+=ai4-i;if(i%2!=0)continue;mul*=aii;if(i!=2)mul*=ai4-i;printf( sum = %m ul = %d n” , sum, mul);6、参考答案:#include#define N 6void main()int i, j, aNN;for(i=0;

33、iN; i+)ai0=1;a皿i=1;for(j=1; ji; j+)aij=ai-1j-1+ai-1j;for(i=0; iN; i+)for(j=0; jN-i-1; j+)printf(”力for(j=0; j=i; j+)printf( %2d , aij);printf( n”);7、参考答案:#include#include#define N 80void main()char strN;int i;printf( Input a string:);gets(str);printf(After reverse:);for(i=strlen(str)-1; i=0; i-)print

34、f( %C , stri);printf( n”);8、参考答案:#include#include#define N 80void main()char strN, strtempN;unsigned int i, j;printf( Input a string:);gets(str);for(i=0, j=0; istrlen(str); i+)if(stri!= c )strtempj+=stri;strtempj= 0;strcpy(str, strtemp);printf(After delete characters :);printf(n% s, str);9、参考答案:#inc

35、lude#define N 80void main()char s1N, s2N= alSCdjkfg ;unsigned int i;i=0;while(1)s1i=s2i;if(s2i= 0)break;i+;printf( After string copy: %s , s1);10、参考答案:#includevoid main()char dstStr20= 12345 , srcStr20= 67890 ; unsigned int i, j;printf( Before strcat: dstStr=%s srcStr=%s , dstStr, srcStr);for(i=0; d

36、stStri!=0 ; i+);for(j=0; srcStrj!=0 ; j+)dstStri+j=srcStrj;dstStri+j= 0;printf( After strcat: dstStr=%s , dstStr);11、参考答案:#includevoid main()int a10=1,3,5,7,9, num=5, i, n;printf( Before inserf:);for(i=0; i=0; i-)if(ain)ai+1=ai;elsebreak;ai+1=n;printf(a After inserts );for(i=0; inum+1; i+)printf( %d

37、 , ai);printf( n” );s习题8参考答案编程题1、设计一个函数,用来判断一个整数是否为素数。参考答案:#include#includeint IsPrimeNumber (int number );void main()int a;printf( Input a integer number:);scanf( %d , &a);if(IsPrimeNumber(a)printf( %d is prime number. , a);elseprintf( %d isn t prime num be a);int IsPrimeNumber(int number)int I;if(

38、number=-1)return(0);for(i=2; isqrt(number); i+)if(number%i=0)return(0);return(i);2、设计函数 MaxCommonFactor(),计算两个正整数的最大公约数。参考答案:#includeint MaxCommonFactor(int a, int b);void main()int a,b,c;printf( Input two integer number:);scanf( %d%d , &a,&b);c=MaxCommonFactor(a,b);if(c!=-1)printf( The biggest common factor of %d and %d is %d n” , a,b,c); elseprintf( The biggest common factor o%d and %d isn t exnt , a,b);int MaxCommonFactor(int a, int b)if(a=0|bb)a=a-b;elseif(ba)b=b-a;ruturn(a); 3、定义函数 GetData()用于接收键盘输入的一组整型数据,并放入一数组中;另外再定义一个函数Sort()用于对输入的这一组数据按照降序排列。主函数向后调用GetData和Sort函数,输出最后的排序结果。参考答案:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1