C语言程序设计课后习题18参考答案解析.docx
- 文档编号:28089808
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:27
- 大小:24.64KB
C语言程序设计课后习题18参考答案解析.docx
《C语言程序设计课后习题18参考答案解析.docx》由会员分享,可在线阅读,更多相关《C语言程序设计课后习题18参考答案解析.docx(27页珍藏版)》请在冰豆网上搜索。
C语言程序设计课后习题18参考答案解析
C语言程序设计课后习题1-8参考答案
习题1参考答案
一、简答题
1、冯诺依曼计算机模型有哪几个基本组成部分?
各部分的主要功能是什么?
答:
冯诺依曼计算机模型是由运算器、控制器、存储器、输入设备、输出设备五大功能部件组成的。
运算器又称算术逻辑部件,简称ALU,是计算机用来进行数据运算的部件。
数据运算包括算术运算和逻辑运算。
控制器是计算机的指挥系统,计算机就是在控制器的控制下有条不紊地协调工作的。
存储器是计算机中具有记忆能力的部件,用来存放程序和数据。
输入设备是用来输入程序和数据的部件。
输出设备正好与输入设备相反,是用来输出结果的部件。
2、简述计算机的工作原理。
答:
计算机的工作原理可简单地概括为:
各种各样的信息,通过输入设备,进入计算机的存储器,然后送到运算器,运算完毕把结果送到存储器存储,最后通过输出设备显示出来。
整个过程由控制器进行控制。
3、计算机软件系统分为哪几类?
答:
软件内容丰富,种类繁多,通常根据软件用途将其分为两大类:
系统软件和应用软件。
系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的软件。
这类软件一般与具体应用无关,是在系统一级上提供的服务。
系统软件主要包括以下两类:
一类是面向计算机本身的软件,如操作系统、诊断程序等。
另一类是面向用户的软件,如各种语言处理程序(像BC、VC等)、实用程序、字处理程序等。
应用程序是指某特定领域中的某种具体应用,供最终用户使用的软件,它必须在操作系统的基础上运行。
4、什么叫软件?
说明软件与硬件之间的相互关系。
答:
软件是指计算机程序及有关程序的技术文档资料。
两者中更为重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。
在不太严格的情况下,认为程序就是软件。
硬件与软件是相互依存的,软件依赖于硬件的物质条件,而硬件则需在软件支配下才能有效地工作。
在现代,软件技术变得越来越重要,有了软件,用户面对的将不再是物理计算机,而是一台抽象的逻辑计算机,人们可以不必了解计算机本身,可以采用更加方便、更加有效地手段使用计算机。
从这个意义上说,软件是用户与机器的接口。
二、填空题
1、算术逻辑
2、键盘鼠标
3、控制器运算器
4、102
5、00x
6、原码反码补码
7、0001011111101001
8、127-128
三、选择题
1、C2、A3、B4、A5、B6、B7、D8、A9、A10、B11、A12、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、ALGOL60
4、多个函数
5、main
6、#include
7、定义使用
8、声明部分执行部分声明部分执行部分
三、选择题
1、D2、B3、B4、C5、C6、C7、D8、C9、D10、A11、B12、A13、B14、C15、A
习题3参考答案
一、填空题
1、整型字符型实型
2、字母数字下划线字母下划线
3、直接符号符号
4、00x
5、12
6、48
7、-32768~32767
8、-16
9、x+=1;
10、26
11、(m/10)%10*100+m/100(100*10)+m%10
二、选择题
1、D2、C3、A4、B5、B6、D7、B8、C9、A10、A11、C12、B13、B14、D15、B16、D17、B18、D19、C20、A21、B22、D23、D24、D25、D26、D27、C28、A29、C30、B
习题4参考答案
一、填空题
1、scanfprintf
2、按指定的输出格式将信息输出到屏幕上常规字符格式控制符
3、X、E、G
4、getche输入的字符回显,而getch输入的字符不回显
5、fflush
6、解决某个问题的具体的方法和步骤
7、自然语言描述伪代码流程图N-S图
8、顺序分支循环
二、选择题
1、B2、C3、D4、C5、B6、C7、D8、C9、B10、B11、D12、C13、D14、D15、A
三、编程题
1、编写一程序要求任意输入四位十六进制整数,以反序的方式输出该十六进制数。
例如:
输入9AF0,则输出0FA9。
#include
voidmain()
{
unsignedshorta,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(“%4x\n”,b);//输出变化后的十六进制数
}
2、编程从键盘输入两个整数分别给变量a和b,要求在不借助于其他变量的条件下,将变量a和b的值实现交换。
#include
voidmain()
{
inta,b;
scanf(“%d%d”,&a,&b);
printf(“beforeswap:
a=%db=%d\n”,a,b);
a=a+b;
b=a-b;
a=a-b;
printf(“afterswap:
a=%db=%d\n”,a,b);
}
3、编程从键盘输入圆的半径r,计算出圆的周长和面积。
#include
#definePI3.14159
voidmain()
{
floatr,c,s;
scanf(“%f”,&r);
c=2*r*PI;
s=PI*r*r;
printf(“c=%fs=%f\n”,c,s);
}
4、编程从键盘输入任意一个十六进制负整数,以输入的形式输出。
例如:
输入-FA98,输出-FA98。
#include
voidmain()
{
shortinta;
scanf(“%x”,&a);
printf(“-%hx\n”,-a);
}
5、已知一元二次方程ax2+bx+c=0,编一程序当从键盘输入a、b、c的值后,计算x的值。
#include
#include
voidmain()
{
floata,b,c;
floatd;
floatx1,x2;
printf(“inputa,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=%.2fx2=%.2f\n”,x1,x2);
}
6、假设从键盘输入某日午夜零点到现在已经历的时间(单位:
s),遍一程序计算到现在为止已近过了多少天,现在的时间是多少?
#include
voidmain()
{
unsignedlongt,r;
intd,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(“havepasseddaysis%d,currenttimeis%02d:
%02d:
%02d\n”,d,h,m,s):
}
习题5参考答案
编程题
1、编一程序判断输入整数的正负性和奇偶性。
#include
voidmain()
{
inta;
scanf(“%d”,&a);
if(a>=0)
printf(“thenumber%dispositivenumber\n”,a);
else
printf(“thenumber%disnegativenumber\n”,a);
if(a%2==0)
printf(“thenumber%disevennumber\n”,a);
else
printf(“thenumber%disoddnumber\n”,a);
}
2、编程判断输入数据的符号属性。
#include
voidmain()
{
intx,sign;
scanf(“%d”,&x);
if(x>0)
sign=1;
elseif(x==0)
sign=0;
else
sign=-1;
printf(“sign=%d\n”,sign);
}
3、输入任意三个数num1、num2、num3,按从小到大的顺序排序输出。
#include
voidmain()
{
intnum1,num2,num3;
scanf(“%d%d%d”,&num1,&num2,&num3);
if(num1<=num2)
if(num2<=num3)
printf(“%d%d%d\n”,num1,num2,num3);
else
if(num1>=num3)
printf(“%d%d%d\n”,num3,num1,num2);
else
printf(“%d%d%d\n”,num1,num3,num2);
else
if(num2>=num3)
printf(“%d%d%d\n”,num3,num2,num1);
else
if(num1>=num3)
printf(“%d%d%d\n”,num2,num3,num1);
else
printf(“%d%d%d\n”,num2,num1,num3);
}
4、在屏幕上显示一张如下所示的时间表。
#include
voidmain()
{
charc;
printf(“*****Time*****\n”);
printf(“1morning\n”);
printf(“2afternoon\n”);
printf(“3night\n”);
printf(“Pleaseenteryourchoice:
”);
c=getcahr();
switch(c)
{
case‘1’:
printf(“Goodmorning\n”);brenk;
case‘2’:
printf(“Goodafternoon\n”);break;
case‘3’:
printf(“Goodnight\n”);break;
default:
printf(“Selectionerror!
\n”);
}
}
5、输入一个年份和月份,打印出该月份有多少天(考虑闰年),用switch语句编程。
#include
voidmain()
{
intyear,month;
printf(“Inputyear,month:
”);
scanf(“%d%d”,&year,&month);
switch(month)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
printf(“31days\n”);
break;
case4:
case6:
case9:
case11:
printf(“30days\n”);
break;
case2:
if((year%4==0&&year%100!
=0)||(year%400==0))
printf(“29days\n”);
else
printf(“28days\n”);
break;
default:
printf(“Inputerror!
\n”);
}
}
习题6参考答案
编程题
1、编程计算2+4+6+…+98+100的值。
(1)利用for循环语句实现,在循环体外为sum赋初值0。
#include
voidmain()
{
inti,sum=0;
for(i=2;i<=100;i+=2)
sum+=i;
printf(“sum=%d\n”,sum);
}
(2)利用while循环语句实现,在循环体外为i和sum赋初值。
#include
voidmain()
{
inti=2,sum=0;
while(i<=100)
{
sum+=i;
i+=2;
}
printf(“sum=%d\n”,sum);
}
2、编程计算1*2*3+4*5*6+…+99*100*101的值。
#include
voidmain()
{
inti;
longterm,sum=0;
for(i=1;i<=99;i+=2)
{
term=i*(i+1)*(i+2);
sum+=term;
}
printf(“sum=%d\n”,sum);
}
3、编程计算1!
+2!
+3!
+…+10!
的值。
(1)用累加和算法,累加项为term=term*i;i=1,2,…,10。
Term的初始值为1,使用单重循环完成。
#include
voidmain()
{
longterm=1,sum=0;
inti;
for(i=1;i<=10;i++)
{
term*=i;
sum+=term;
}
printf(“1!
+2!
+3!
+…+10!
=%ld\n”,sum);
}
(2)用内层循环求阶乘,外层循环控制累加的项数。
#include
voidmain()
{
longterm,sum=0;
inti,j;
for(i=1;i<=10;i++)
{
term=1;
for(j=1;j<=i;j++)
term*=j;
sum+=term;
}
printf(“1!
+2!
+3!
+…+10!
=%ld\n”,sum);
}
4、编程计算a+aa+aaa+…+aa..a(n个a)的值,n和a的值由键盘输入。
#include
voidmain()
{
longterm=0,sum=0;
inta,i,n;
printf(“Inputa,n:
\n”);
scanf(“%d,%d”,&a,&n);
for(i=1;i<=n;i++)
{
term=term*10+a;
sum+=term;
}
printf(“sum=%ld\n”,sum);
}
5、参考答案:
#include
voidmain()
{
floatterm,result=1;
intn;
for(n=2;n<=100;n+=2)
{
term=(float)(n*n)/((n-1)*(n+1));
result*=term;
}
printf(“result=%f\n”,2*result);
}
6、参考答案:
#include
#include
voidmain()
{
intn=1,count=0;
floatx;
doublesum,term;
printf(“Inputx:
”)
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=%d\n”,sum,count);
}
7、参考答案:
#include
voidmain()
{
inti,j,k,n;
printf(“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(“%d”,n);
}
printf(“\n”);
}
8、参考答案:
#include
#include
voidmain()
{
inti1,i2,i3,i4,k,n;
printf(“Inputdatais:
”);
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(“Thesumofthetotalbitis%d\n”,i1+i2+i3+i4);
}
9、参考答案:
#include
voidmain()
{
intn,m=0,s,r;
printf(“Inputdatais:
”);
scanf(“%d”,&n);
s=n;
While(s!
=0)
{
r=s%10;//从低位到高位逐一分离
m=10*m+r;//重新组合一正数
s=s/10;//求其商
}
if(m==n)
printf(“yes\n”);
else
printf(“no\n”);
}
10、参考答案:
#include
voidmain()
{
intx,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=%d\n”,count);
}
11、设计思想:
将A、B、C、D4个人的回答用一条件表达式来表示,对于A的回答:
thisman!
=’A’;对于B的回答:
thisman==’C’;对于C的回答:
thisman==’D’;对于D的回答:
thisman!
=’D’;然后,采用枚举的方法,一个人一个人的去试,如果这4个条件表达式中有3个为真,即4个条件表达式的值相加为3,则可判定是其中某人做的好事。
参考答案:
#include
voidmain()
{
intk=0;sum=0;g=0;
charthisman=’’;
for(k=0;k<=3;k++)//循环控制变量为k,循环共进行4次
{
thisman=’A’+k;//初始认为A做好事,依次为B、C、D
sum=(thisman!
=’A’)+(thisman==’C’)+(thisman==’D’)+(thisman!
=’D’);
if(sum==3)
{
printf(“Thismanis%c\n”,thisman);
g=1;
}
}
if(g!
=1)
printf(“Can’tfound\n”);
}
12、参考答案
(1):
#include
voidmain()
{
inti,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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课后 习题 18 参考答案 解析