admin 管理员组文章数量: 1086019
2024年12月31日发(作者:ardikars)
C语言程序设计课后习题1—8参考答案
习题1参考答案
一、简答题
1、冯 诺依曼计算机模型有哪几个基本组成部分?各部分的主要功能是什么?
答:冯 诺依曼计算机模型是由运算器、控制器、存储器、输入设备、输出设备五
大功能部件组成的。
运算器又称算术逻辑部件,简称ALU,是计算机用来进行数据运算的部件。数
据运算包括算术运算和逻辑运算。
控制器是计算机的指挥系统,计算机就是在控制器的控制下有条不紊地协调
工作的.
存储器是计算机中具有记忆能力的部件,用来存放程序和数据.
输入设备是用来输入程序和数据的部件。
输出设备正好与输入设备相反,是用来输出结果的部件。
2、简述计算机的工作原理。
答:计算机的工作原理可简单地概括为:各种各样的信息,通过输入设备,进入计
算机的存储器,然后送到运算器,运算完毕把结果送到存储器存储,最后通过输出
设备显示出来。整个过程由控制器进行控制。
3、计算机软件系统分为哪几类?
答:软件内容丰富,种类繁多,通常根据软件用途将其分为两大类:系统软件和
应用软件。
系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的
软件。这类软件一般与具体应用无关,是在系统一级上提供的服务。系统软件主
要包括以下两类:一类是面向计算机本身的软件,如操作系统、诊断程序等。另
一类是面向用户的软件,如各种语言处理程序(像BC、VC等)、实用程序、字处
理程序等。
应用程序是指某特定领域中的某种具体应用,供最终用户使用的软件,它必须
在操作系统的基础上运行。
4、什么叫软件?说明软件与硬件之间的相互关系。
答:软件是指计算机程序及有关程序的技术文档资料。两者中更为重要的是程序,
它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。在不太
严格的情况下,认为程序就是软件。硬件与软件是相互依存的,软件依赖于硬件
的物质条件,而硬件则需在软件支配下才能有效地工作.在现代,软件技术变得越
来越重要,有了软件,用户面对的将不再是物理计算机,而是一台抽象的逻辑计
算机,人们可以不必了解计算机本身,可以采用更加方便、更加有效地手段使用计
算机。从这个意义上说,软件是用户与机器的接口.
二、填空题
1、算术 逻辑
2、键盘 鼠标
3、控制器 运算器
4、10 2
5、0 0x
6、原码 反码 补码
7、00010111 11101001
8、127 -128
三、选择题
1、C 2、A 3、B 4、A 5、B 6、B 7、D 8、A 9、A 10、B 11、A 12、
B
习题2参考答案
一、简答题
1、C语言有哪些特点?
答:(1)简洁紧凑、灵活方便;(2)运算符丰富;(3)数据结构丰富;(4)C语言是
结构式语言;(5)C语言的语法限制不太严格、程序设计自由度大;(6)C语言允
许直接访问物理地址,可以直接对硬件进行操作;(7)C语言程序生成代码质量高,
程序执行效率高;(8)C语言使用范围大,可移至性好;(9)具有预处理功能;(10)
具有递归功能.
2、C语言的主要应用有哪些?
答:(1)许多系统软件和大型应用软件都是用C语言编写的,如UNIX、Linux等操
作系统。(2)在软件需要对硬件进行操作的场合,用C语言明显优于其他高级语
言。例如,各种硬件设备的驱动程序(像显卡驱动程序、打印机驱动程序等)一般
都是用C语言编写的.(3)在图形、图像及动画处理方面,C语言具有绝对优势,
特别是游戏软件的开发主要就是使用C语言。(4)随着计算机网络飞速发展,特
别是Internet的出现,计算机通信就显得尤其重要,而通信程序的编制首选就是C
语言.(5)C语言适用于多种操作系统,像Windows、UNIX、Linux等绝大多数操作
系统都支持C语言,其他高级语言未必能得到支持,所以在某个特定操作系统下运
行的软件用C语言编制是最佳选择。
3、列举几种程序设计语言。
答:C语言、Java语言、Pascal语言、BASIC语言、LOGO语言等。
二、填空题
1、机器语言 汇编语言 高级语言
2、机器语言
3、ALGOL 60
4、多个函数
5、main
6、#include
7、定义 使用
8、声明部分 执行部分 声明部分 执行部分
三、选择题
1、D 2、B 3、B 4、C 5、C 6、C 7、D 8、C 9、D 10、A 11、B 12、
A 13、B 14、C 15、A
习题3参考答案
一、填空题
1、整型 字符型 实型
2、字母 数字 下划线 字母 下划线
3、直接 符号 符号
4、0 0x
5、1 2
6、4 8
7、—32768~32767
8、-16
9、x+=1;
10、26
11、(m/10)%10*100+m/100(100*10)+m%10
二、选择题
1、D 2、C 3、A 4、B 5、B 6、D 7、B 8、C 9、A 10、A 11、C 12、
B 13、B 14、D 15、B 16、D 17、B 18、D 19、C 20、A 21、B 22、D
23、D 24、D 25、D 26、D 27、C 28、A 29、C 30、B
习题4参考答案
一、填空题
1、scanf printf
2、按指定的输出格式将信息输出到屏幕上 常规字符 格式控制符
3、X、E、G
4、getche输入的字符回显,而getch输入的字符不回显
5、fflush
6、解决某个问题的具体的方法和步骤
7、自然语言描述 伪代码 流程图 N-S图
8、顺序 分支 循环
二、选择题
1、B 2、C 3、D 4、C 5、B 6、C 7、D 8、C 9、B 10、B 11、D 12、
C 13、D 14、D 15、A
三、编程题
1、编写一程序要求任意输入四位十六进制整数,以反序的方式输出该十六进制数.
例如:输入9AF0,则输出0FA9。
#include〈stdio。h〉
void main()
{
unsigned short a, b;
scanf(“%4x”, &a) //输入4位十六进制数给变a
b=(a & 0X000F)<<12; //取a的最低一位十六进制数并左移12位后赋值给b
b+=(a & 0X00F0)〈<4; //取a的次第一位十六进制数并左移4位后与b相加再
赋值给b
b+=(a & 0X0F00)〈〈4; //取a 的次高一位十六进制数并右移4位后与b相
加再赋值给b
b+=(a & 0XF000)<<12; //取a的最高一位十六进制数并右移12位后与b相加
再赋值给b
printf(“%4xn”, b); //输出变化后的十六进制数
}
2、编程从键盘输入两个整数分别给变量a和b,要求在不借助于其他变量的条件
下,将变量a和b的值实现交换。
#include void main() { int a, b; scanf(“%d%d”, &a, &b); printf(“before swap: a=%d b=%dn”, a,b); a=a+b; b=a—b; a=a—b; printf(“after swap: a=%d b=%dn”, a, b); } 3、编程从键盘输入圆的半径r,计算出圆的周长和面积. #include #define PI 3。14159 void main() { float r, c, s; scanf(“%f”, &r); c=2*r*PI; s=PI*r*r; printf(“c=%f s=%fn”, c, s); } 4、编程从键盘输入任意一个十六进制负整数,以输入的形式输出。例如:输入 -FA98,输出—FA98. #include void main() { short int a; scanf(“%x", &a); printf(“-%hxn”, —a); } 5、已知一元二次方程ax+bx+c=0,编一程序当从键盘输入a、b、c的值后,计算 x的值. #include #include〈math.h> void 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=%。2f x2=%。2fn”, x1, x2); } 6、假设从键盘输入某日午夜零点到现在已经历的时间(单位:s),遍一程序计算 到现在为止已近过了多少天,现在的时间是多少? #include void 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; 2 m=(r%3600)/60; s=(r%3600)%60; printf(“have passed days is %d, current time is %02d:%02d:%02dn”, d, h, m, s): } 习题5参考答案 编程题 1、编一程序判断输入整数的正负性和奇偶性。 #include void main() { int a; scanf(“%d", &a); if (a>=0) printf(“the number %d is positive numbern”, a); else printf(“the number %d is negative numbern”, a); if (a%2==0) printf(“the number %d is even numbern”, a); else printf(“the number %d is odd numbern”, a); } 2、编程判断输入数据的符号属性。 #include〈stdio。h〉 void main() { int x, sign; scanf(“%d”, &x); if (x>0) sign=1; else if (x==0) sign=0; else sign=—1; printf(“sign= %dn”, sign); } 3、输入任意三个数num1、num2、num3,按从小到大的顺序排序输出。 #include void main() { int num1, num2, num3; scanf(“%d%d%d”, &num1, &num2, &num3); if (num1〈=num2) if (num2〈=num3) printf(“%d %d %dn”, num1, num2, num3); else if (num1〉=num3) printf(“%d %d %dn”, num3, num1, num2); else printf(“%d %d %dn", num1, num3, num2); else if (num2>=num3) printf(“%d %d %dn”, num3, num2, num1); else if (num1>=num3) printf(“%d %d %dn", num2, num3, num1); else printf(“%d %d %dn”, num2, num1, num3); } 4、在屏幕上显示一张如下所示的时间表。 #include void main() { char c; printf(“*****Time*****n"); printf(“1 morningn”); printf(“2 afternoonn"); printf(“3 nightn”); printf(“Please enter your choice: "); c=getcahr(); switch (c) { case ‘1’: printf(“Good morningn”); brenk; case ‘2’: printf(“Good afternoonn"); break; case ‘3’: printf(“Good nightn"); break; default: printf(“Selection error!n”); } } 5、输入一个年份和月份,打印出该月份有多少天(考虑闰年),用switch语句编 程. #include〈stdio.h> void 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: case 10: case 12: printf(“31 daysn”); break; case 4: case 6: case 9: case 11: printf(“30 daysn"); break; case 2: if ((year%4==0 && year%100!=0)|| (year%400==0)) printf(“29 daysn”); else printf(“28 daysn”); break; default: printf(“Input error!n”); } } 习题6参考答案 编程题 1、编程计算2+4+6+…+98+100的值。 (1)利用for循环语句实现,在循环体外为sum赋初值0。 #include〈stdio。h〉 void main() { int i, sum=0; for(i=2; i<=100; i+=2) sum+=i; printf(“sum= %dn”, sum); } (2)利用while循环语句实现,在循环体外为i和sum赋初值. #include〈stdio。h> void main() { int i=2, sum=0; while(i〈=100) { sum+=i; i+=2; } printf(“sum= %dn”, sum); } 2、编程计算1*2*3+4*5*6+…+99*100*101的值。 #include void main() { int i; long term, sum=0; for(i=1; i<=99; i+=2) { term=i*(i+1)*(i+2); sum+=term; } printf(“sum= %dn”, sum); } 3、编程计算1!+2!+3!+…+10!的值。 (1)用累加和算法,累加项为term=term*i; i=1,2,…,10。Term的初始值为1, 使用单重循环完成。 #include〈stdio.h〉 void main() { long term=1, sum=0; int i; for(i=1; i〈=10; i++) { term*=i; sum+=term; } printf(“1!+2!+3!+…+10! = %ldn”, sum); } (2)用内层循环求阶乘,外层循环控制累加的项数。 #include〈stdio.h> void main() { long term, sum=0; int i, j; for(i=1; i〈=10; i++) { term=1; for(j=1; j<=i; j++) term*=j; sum+=term; } printf(“1!+2!+3!+…+10! = %ldn”, sum); } 4、编程计算a+aa+aaa+…+aa..a(n个a)的值,n和a的值由键盘输入。 #include void main() { long term=0, sum=0; int a, i, n; printf(“Input a, n:n”); scanf(“%d,%d”, &a, &n); for(i=1; i〈=n; i++) { term=term*10+a; sum+=term; } printf(“sum=%ldn”, sum); } 5、参考答案: #include void main() { float term, result=1; int n; for(n=2; n〈=100; n+=2) { term=(float)(n*n)/((n—1)*(n+1)); result*=term; } printf(“result=%fn”, 2*result); } 6、参考答案: #include〈stdio。h〉 #include〈math.h> void main() { int n=1, count=0; float x; double sum, term; printf(“Input x: ”) scanf(“%f”, &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, count= %dn”, sum, count); } 7、参考答案: #include〈stdio。h> void main() { int i, j, k, n; printf(“result is: ”); 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(“%d ", n); } printf(“n”); } 8、参考答案: #include〈stdio.h〉 #include void main() { int i1, i2, i3, i4, 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 //分离出十位 i4=k%10; //分离出个位 printf(“The sum of the total bit is %dn”, i1+i2+i3+i4); } 9、参考答案: #include void main() { int n, m=0, s, r; printf(“Input data is: ”); scanf(“%d”, &n); s=n; While(s!=0) { r=s%10; //从低位到高位逐一分离 m=10*m+r; //重新组合一正数 s=s/10; //求其商 } if(m==n) printf(“yesn”); else printf(“non”); } 10、参考答案: #include〈stdio.h〉 void 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(“%02d, %02d, %02d ”, x, y, z); //输出每一种方案 if (count%6==0) printf(“n”); //没输出6种方案后,换行 } } printf(“count=%dn”, count); } 11、设计思想:将A、B、C、D4个人的回答用一条件表达式来表示,对于A的回答: thisman!=’A';对于B的回答:thisman=='C';对于C的回答:thisman==’D’; 对于D的回答:thisman!='D’;然后,采用枚举的方法,一个人一个人的去试, 如果这4个条件表达式中有3个为真,即4个条件表达式的值相加为3,则可判定是其 中某人做的好事。 参考答案: #include〈stdio。h〉 void main() { int k=0; sum=0; g=0; char thisman=''; for (k=0; k〈=3; k++) //循环控制变量为k,循环共进行4次 { thisman=’A'+k; //初始认为A做好事,依次为B、C、D sum=(thisman!=’A’)+(thisman==’C’ (thisman!=’D’); if (sum==3) { )+(thisman==’D’)+ printf(“This man is %cn”, thisman); g=1; } } if (g!=1) printf(“Can't foundn”); } 12、参考答案(1): #include〈stdio.h> void main() { int i, j; for (i=1; i<=3; i++) //先显示前三行 { for (j=1; j〈=i-1; j++) //输出每行前的空格 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): #include void main() { int i, j, k; for (i=1; i<=5; i++) //i控制行数 { for (j=1; j<=5-i; j++) //随行数的增加,输出递减数目的空格 printf(“ ”); for (k=1; k<=5; k++) //每行输出5个*字符 printf(“*”); printf(“n”); //将光标移到下一行起始位置处 } } 参考答案(3): #include〈stdio。h> void main() { int i, j; for (i=1; i〈=5; i++) { for (j=1; j<=2*(i-1)+1; j++) printf(“*”); printf(“n”); } } 习题7参考答案 编程题 1、参考答案: #include〈stdio。h〉 void main() { int i, sum=0; a[20]; for (i=0; i<20; i++) Scanf(“%d”, &a[i]); //输入20个整数 for (i=0; i〈20; i++) //对非负数进行统计 { if (a[i]〈0) continue; //为负数,进入下一轮循环 sum+=a[i]; //非负数累计 } printf(“sum= %dn”, sum); } 2、参考答案 #include〈stdio.h〉 void main() { int i, j, odd, even, n, t, a[10]; odd=0; even=9; for(i=0; i<10; i++) //将键盘输入的数据存入数组中 { scanf(“%d”, &n); if (n%2!=0) a[odd++]=n; //将奇数放置在数组的左边 else a[even——]=n; //将偶数放置在数组的哟边 } for (i=0; i〈odd—1; i++) //通过选择排序对奇数进行升序排列 { n=j; for (j=i+1; j if (a[j] n=j; if (n!=i) { t=a[i]; a[i]=a[n]; a[n]=t; } } for (i=odd; i<9; i++) //通过选择排序对偶数进行升序排列 { n=i; for (j=i+1; j〈10; j++)
版权声明:本文标题:(word完整版)C语言程序设计课后习题1-8参考答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1735698559a1682866.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论