红皮书_C语言程序设计实用教程参考答案
更新时间:2023-06-02 08:27:01 阅读量: 实用文档 文档下载
习题解答
习题1
1.Dennis Ritchie
2.源代码文件:所谓源代码文件就是按着C语言的语法规则,使用文本编辑器编写的扩展名为.c 动代码。可执行文件
可以脱离开发环境独立运行。 3.不是。
4.目标文件中。
5.在工程Sun中添加earth.c源文件,见左图1,earth.c代码如下:
#include <stdio.h> int multiply(int,int); int main(){ int result=0;
result=multiply(20,10); printf("\n%d",result); getchar(); }
}
左图1 工程Sun
6. 在工程City中添加student.c、school.c等源文件,见左图2,代码如下: 源文件: sudent.c
int add(int x,int y){ return x+y; }
源文件: teacher.c
int sub(int x,int y){ return x-y; } 左图2 工程City
源文件: school.c
#include "stdio.h" int add(int,int); int sub(int,int); int main(){
int result1=0,result2=0; result1=add(5,3); result2=sub(5,3);
printf("%d,%d\n",result1,result2); return 0; }
习题2
1.以下(A)~(B)中哪个叙述是正确的。
(D) 一个C 程序可以由多个函数构成,这些函数可以分别写在多个源文件中。
2.需要。
3.
(1)函数封装代码便于程序的模块化管理
让C程序由若干个函数所构成,每个函数负责完成一定的任务,而且一个C程序可以将它使用的各个函数存放在一个源文件中,也可以将它使用的各个函数分别存放在不同的源文件中,当程序需要修改某个函数时,只需要重新编译该函数所在的源文件即可,不必重新编译其他函数所在的源文件,因此,用函数封装解决某一问题的过程便于程序的模块化管理、有利于系统的维护。
(2)函数封装代码便于在程序设计过程中代码复用,提高效率
由于一个源文件中的函数可以被多个C程序链接使用,这非常有利于代码的复用,比如,如果某个程序员想计算圆和梯形的面积,那么这个程序员无需知道计算圆面积的算法和计算梯形面积的算法,只要在他编写的main函数中调用(链接)circle.c 和lader.c中的函数即可,也就是说circle.c 和lader.c中的函数就是可复用的代码。 4.
可以编译、链接、运行成功 Allmans风格:
#include <stdio.h> int main() { }
Kernighan风格:
#include <stdio.h> int main(){ int a,b,c;a=12;b=100,c=-23; printf("%d\n",a); printf("%d\n",b);printf("%d\n",c);c=129;
printf("%d\n",a+b+c);return 0; }
习题3
1.B D
2.不能通过编译
3.下列程序的输出结果不是10,而是一个随机数。y没有初值。 4.B C 5.B
6.(A) &x
7.(D) 56Tiger198 8.(C) Ta
e 9.
#include <stdio.h>
#define PI 3.1415926 //定义符号常量 int main() {
double radius; //圆半径 double circleArea; //圆面积 double circleLength; //圆周长
radius = 100.12;
circleArea = PI*radius*radius; //使用const常量
circleLength = 2*PI*radius; //使用const常量
:%0.8f\n",radius,circleArea); %0.8f }
10.
#include<stdio.h> #include<stdlib.h>
int main(){ int highTemperature; //最高气温
int lowTemperature; //最低气温
int highSubLow; //最高气温与最低气温的差
printf("现在输出的最高气温是不可预测的垃圾值:%d\n",highTemperature); scanf("%d%d",&highTemperature,&lowTemperature); printf("最高气温:%d\n",highTemperature); printf("最低气温:%d\n",lowTemperature); highSubLow = highTemperature - lowTemperature;
printf("请输入最高气温和最低气温(用空格或回车分隔两个整数): ");
printf("最高气温与最低气温的差:%d\n",highSubLow); system("PAUSE"); return 0;
} 11.
#include <stdio.h>
int main() { double elephantWeight; //存储大象重量
double antOne,antTwo; //存储两只蚂蚁的重量 double weightSum; //存放重量和 printf("请输入大象和两只蚂蚁的重量:");
scanf("%lf%lf%lf",&elephantWeight,&antOne,&antTwo); printf("两只蚂蚁的重量分别是:\n");
printf("%0.20f和%0.20f\n",antOne,antTwo);
weightSum = antOne+antTwo; printf("两只蚂蚁的重量和:");
printf("%0.20f\n",weightSum); printf("%e\n",weightSum); printf("大象的重量是:\n"); printf("%0.20f\n",elephantWeight);
weightSum =elephantWeight+antOne+antTwo; printf("大象与两只蚂蚁的重量和:");
printf("%0.20f\n",weightSum); printf("%e\n",weightSum); return 0;
}
12.
#include <stdio.h>
int main() { char letter1,letter2,letter3,letter4,letter5,end; printf("请连续输入5个大写字母(然后按Enter):");
letter1 = getchar(); letter2 = getchar();
letter3 = getchar(); letter4 = getchar();
letter5 = getchar();
end = getchar(); //得到用户输入5个字母之后按的回车字符
putchar(letter1+32); putchar(letter2+32);
}
putchar(letter3+32); putchar(letter4+32); putchar(letter5+32); putchar('\n'); return 0;
习题4
1.(A) 76 (B) 7 (C) 22 (D) 3.5
2.(A) 9 (B) 8 (C) 7 (D) 6 3.B
4. (A) 12 (B) 13 (C) 12.08 (D) 20.0 5. (B) 3 6. (A) 72
7. (D) 2*x, x += 2 8. (C) c<'Z' && c >= 65 9.
3,1 3,1 0,3,1 1,3,1 10.c,c,c 99,99,99 11.x=7,y=3 z=18 12.T
0 1 1
13.一共4条语句 14.
#include <stdio.h>
int main(){
int a,b,c;
double result;
printf("请从键盘输入a,b,c的值,数之间用空格或回车分隔:\n"); scanf("%d%d%d",&a,&b,&c); result =2.0/3*a+5.0/6*b+6.0/7*c; printf("a=%d,b=%d,c=%d\n", a,b,c); printf("%.3f\n", result); return 0;
} 15.
#include <stdio.h>
int main(){
int number; short position1,position2,position3,position4 ; printf("请从键盘输入number的值:");
scanf("%d",&number); position4 =number/1000; position2 =number%100/10;
position3 =number%1000/100;
position1 =number%10; printf("number中个位上的数字是%d\n", position1); }
printf("number中十位上的数字是%d\n", position2); printf("number中百位上的数字是%d\n", position3); printf("number中千位上的数字是%d\n", position4); return 0;
习题5
1.y = 100;;处多了一个分号。
2.(A)_10,129___(B)2,-129__(C)__55,129___(D)_2,0_ 3. Tiger
#include <stdio.h> int main() {
int x = 10; if(x >= 0){ } else{ printf("wolf"); }
} else{ printf("Dog"); }
return 0; } 4. 30。
5.BAAA 6.
#include <stdio.h> int main(){ int a,b,c,d; int temp; int count = 0; printf("输入a,b,c,d的值,用空格或回车分隔:"); scanf("%d%d%d%d",&a,&b,&c,&d); if(a>b) { temp = a; a = b; b = temp; count++; printf("第%d次排序结果:a=%d,b=%d,c=%d,d=%d\n",count,a,b,c,d); }
if(a>c) { temp = a; a = c; c = temp; count++;
printf("第%d次排序结果:a=%d,b=%d,c=%d,d=%d\n",count,a,b,c,d); }
if(a>d) { temp = a; a = d; d = temp; count++; printf("第%d次排序结果:a=%d,b=%d,c=%d,d=%d\n",count,a,b,c,d); } if(b>c) { temp = b; b = c; c = temp; count++; printf("第%d次排序结果:a=%d,b=%d,c=%d,d=%d\n",count,a,b,c,d); } if(b>d) { temp = b; b = d; d = temp; count++; printf("第%d次排序结果:a=%d,b=%d,c=%d,d=%d\n",count,a,b,c,d); } if(c>d) { temp = c; c = d; d = temp; count++; printf("第%d次排序结果:a=%d,b=%d,c=%d,d=%d\n",count,a,b,c,d); } if(count == 0) { printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d); } return 0; } 7.
#include <stdio.h> int main(){ int score; printf("输入学生成绩的值(1~100之间),用空格或回车分隔:"); scanf("%d",&score); if(score>=90) {
printf("优\n"); } else if(score>=80) { printf("良\n"); } else if(score>=70) { printf("中\n"); }
else if(score>=60) { printf("及格\n"); } else { printf("不及格\n"); } return 0; } 8.
#include <stdio.h> int main(){ int a,b,c;
printf("输入三角形的三个边,用空格或回车分隔:"); scanf("%d%d%d",&a,&b,&c); if(a<b+c&&b<a+c&&c<a+b){ printf("能构成三角形.\n"); if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(a*a==b*b+c*c)){ printf("并且能构成直角三角形"); } else{ printf("但不能构成直角三角形"); } }
else{ printf("不能构成三角形"); }
return 0; } 9.
#include <stdio.h> int main() {
int number;
printf("输入一个正整数:"); scanf("%d",&number);
if(number%3==0){ printf("Tiger\n"); }
else if(number%3==1){ printf("Dog\n"); }
else if(number%3==2){ printf("Cat\n"); }
return 0; }
10.(也可以参考5.3节用if-else if -else 条件分支语句解决此问题) #include <stdio.h> int main() {
int number; double cost;
printf("输入用水量(正整数):"); scanf("%d",&number); switch(number){ case 1: case 2: case 3: case 4: case 5: cost=number*2.3; break; case 6: case 7: case 8: case 9: case 10: case 11: case 12: cost=number*5; break; default:
cost=number*6; }
printf("水费为%.2f元\n",cost); return 0; }
习题6
1.下列程序的输出结果是_sum=25,i=11_。 2.下列程序的输出结果是_1,2,0_____。 1. 下列程序的输出结果是__15____。 2. 下列程序的输出结果是__2____。
3. 下列程序的输出结果是。 4. 下列程序的输出结果是__25__。
5. 下列程序的输出结果是__ sum=321____。 6. 下列程序的输出结果是___ sum=88888___。 7. 下列程序的输出结果是__123____。
8. 下列程序运行时,从键盘输入shoping<回车>,程序输出的结果是__shop___。 9. 下列程序运行时,从键盘输入girl<回车>,程序输出的结果是__ giir$___。 10. while循环中的【表达式】应当是_(A). number!=0 ______。 11.
int n=0;
c=getchar();
while(c!='\n'){
if((c<='z'&& c>='a')||(c<='Z'&&c>='A'))
n++;
c=getchar(); }
printf("一共有=%d个字母",n); return 0; } 14.
方法之一 #include "stdio.h"
int main(){ int i=0,item1=-4,item2=1;
double item3=1;
double item4=0; int sum1=0;
int sum2=0; double sum3=0;
double sum4=0;
//求第一个数列的前100项之和
for(i=1;i<=100;i++){
sum1=sum1+item1; item1=item1+2;
}
printf("-4,-2,0,2,4,6前100项之和为 %d\n",sum1);
//求第二个数列的前100项之和 for(i=1;i<=100;i++){ sum2=sum2+item2;
item2=item2+4;
}
printf("1,5,9,13,17,21 前100项之和为 %d\n",sum2); //求第三个数列的前100项之和 for(i=1;i<=100;i++){
sum3=sum3+item3; item3=item3*3;
}
printf("1,3,9,27,81,243 前100项之和为 %E\n",sum3); //求第四个数列的前100项之和
for(i=1;i<=100;i++){
item4=item4+i; sum4=sum4+item4;
}
printf("1,1+2,1+2+3,1+2+3+4 前100项之和为 %E\n",sum4); return 0;
}
方法之二(只在求第四个数列的前100项之和处与方法一有差异) #include "stdio.h" int main(){
int i=0,j=0,item1=-4,item2=1; double item3=1;
double item4=0;
int sum1=0; int sum2=0;
double sum3=0; double sum4=0;
//求第一个数列的前100项之和 for(i=1;i<=100;i++){
sum1=sum1+item1;
item1=item1+2; }
printf("-4,-2,0,2,4,6前100项之和为 %d\n",sum1);
//求第二个数列的前100项之和 for(i=1;i<=100;i++){ sum2=sum2+item2;
item2=item2+4;
}
printf("1,5,9,13,17,21 前100项之和为 %d\n",sum2);
//求第三个数列的前100项之和 for(i=1;i<=100;i++){ sum3=sum3+item3;
item3=item3*3;
}
printf("1,3,9,27,81,243 前100项之和为 %E\n",sum3);
//求第四个数列的前100项之和
for(i=1;i<=100;i++){
for(j=1,item4=0;j<=i;j++){ item4=item4+j; }
sum4=sum4+item4; }
printf("1,1+2,1+2+3,1+2+3+4 前100项之和为 %E\n",sum4); return 0;
}
15.编程输出等差数列的前n项和,其中等差数列的首项、公差和求和项数n的值从键盘输入。
#include "stdio.h" int main(){ int i=0; int a1=0; //首项 int t=0; //公差
int n=0; //求和项数
double sum=0;//数列的前n项之和
int item=0;
printf("请输入首项、公差和求和项数n,用空格或回车分隔:"); scanf("%d%d%d",&a1,&t,&n); item=a1; for(i=1;i<=n;i++){
sum=sum+item; item=item+t; }
printf("首项为%d,公差为%d的等差数列前%d项之和为%E\n",a1,t,n,sum); return 0; }
16.编程输出1!+2!+3!...的前10项和。 方法之一
#include "stdio.h" int main(){
int i=0,n=1;
double fact=1;//求和的每一项(阶乘)
double sum=0;//前10项之和 while(n<=10){ sum=sum+ fact;
n++;
fact=fact*n;
}
printf("1!+2!+3!...的前10项和为%E\n",sum); return 0; }
方法之二(利用循环嵌套)
#include "stdio.h" int main(){
int i=0,n=1;
double fact=1;//求和的每一项(阶乘)
double sum=0;//前10项之和
while(n<=10){ fact=1;
i=1;
while(i<=n){ // n的阶乘
fact=fact*i; } i++;
sum=sum+ fact; n++;
}
printf("1!+2!+3!...的前10项和为%E\n",sum); return 0;
}
17.编写程序输出1~100之间不能被2除尽或不能被3除尽的数,并计算输出它们的和。
#include "stdio.h" int main(){
int i=0;
double sum=0,t=0; //满足条件的各项之和 for(i=0;i<=100;i++){ if( (i%2!=0) ||(i%3!=0)){
}
printf("%d ",i); sum=sum+i;
}
printf("满足条件的各项之和为%E\n",sum);
return 0;
}
18.编写程序输出如下排列格式的字符。
A BB CCC DDDD EEEEE
#include "stdio.h" int main(){
int i=0,j=0;
char ch='A';
for(i=1;i<=5;i++){ for(j=1;j<=i;j++){ printf("%c",ch); }
printf("\n"); ch=ch+1; }
return 0; }
19.改进例子6的猜数字游戏,使得具有如下功能:
当猜测次数操作10次时,禁止用户继续猜测(用break结束循环),并输出“你要好好想一想呀,要动脑呀!” 当猜测次数少于5次时,程序输出“你好聪明呀!”
#include <stdio.h> #include <time.h> #include <stdlib.h> int main(){
int randomNumber; //随机数 int guess; //用户的猜测
int count = 0; //记录用户的猜测次数 int ok = 0;
srand(time(NULL)); //用当前时间做随机种子
printf("给你一个1至100之间的数,请猜测:\n"); randomNumber = rand()%100+1; ok = scanf("%d",&guess); if(ok==0){ printf("发生输入错误,程序退出"); exit(0); }
count++;
while(guess != randomNumber) { count++; if(guess > randomNumber){ printf("猜大了,请再猜:\n"); } else if(guess < randomNumber){ printf("猜小了,请再猜:\n"); }
if(count>10){ //判断是否超过10次 break; } ok =scanf("%d",&guess); if(ok==0){ printf("发生输入错误,程序退出"); exit(0); } }
//判断次数,决定如何输出 if(count<5){
printf("您猜对了,共猜了%d次,这个数就是:%d\n",count,randomNumber); printf("你好聪明呀!"); }
else if(count<=10)
printf("您猜对了,共猜了%d次,这个数就是:%d\n",count,randomNumber); else printf("你要好好想一想呀,要动脑呀!"); return 0; }
20.数学上有一个计算 的公式:
1111 1
4
3
5
7
9
编写程序,计算并输出 的近似值,小数点保留12位。 #include <stdio.h> #include <math.h>
int main(){ double sum=0,fenzi=1,fenmu=1,dx=1;
while(fabs(dx)>1E-6){ //更换为1E-10可提高精度,但作者的机器稍有延迟出结果 sum=sum+dx; fenzi=-fenzi; fenmu=fenmu+2; dx= fenzi/fenmu; }
printf("\n%.12f",4*sum);
return 0;
}
21.编写程序,输出100内具有10个以上(含10个)因子的整数,并输出它的全部因子(例如,60一共有1,2,3,4,5,6,10,12,15,20,30,60十二个因子)。
#include <stdio.h> #include <math.h> int main(){ int i=0,j=0;
int count=0;//因子个数 for(j=10;j<=100;j++){ count=0; for(i=1;i<=j;i++){ if(j%i==0){ count++; } } if(count>=10){
printf("%d 有",j); for(i=1;i<=j;i++){ if (j%i==0) printf("%d ",i); } printf("共%d个因子 \n",count); } }
return 0; }
习题7
1. (B) void f(int,int,int); 2. (C) void add(int x,int y){
}
3. 37 4. 10 5.A 6. 9,6 7. 7 8. 6,12 9. 6,6
10. 290 11.
#include <math.h>
float tringle(float,float,float); int main(){ float a,b,c,tringle_area; printf("请输入三角形的三边的值: "); scanf("%f%f%f",&a,&b,&c); tringle_area=tringle(a,b,c); printf("三角形的面积是: %.2f\n",tringle_area); return 0; }
float tringle(float a,float b,float c){ float s,p; p=(a+b+c)/2.0f; s=(float)sqrt(p*(p-a)*(p-b)*(p-c)); return s; } 12.
#include <stdio.h> void f(int n); int main(){ int n=200; printf("以下输出1至200之间的全部素数\n"); f(n); return 0;
正在阅读:
红皮书_C语言程序设计实用教程参考答案06-02
网络舆论对司法公正的影响弊大于利.一辩稿08-17
必修三 第四章 第一节种群的特征01-30
南邮国际贸易复习06-30
机械制图——补视图和补缺线(2)03-21
实用版 控辍保学先进个人材料10-17
2017-2018武汉江汉区八上英语期中试卷及答案 - 图文10-20
家乡的春天日记10-29
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 红皮书
- 程序设计
- 答案
- 语言
- 参考
- 实用
- 教程
- (精品)新人教版《语文园地四趣味语文》公开课教案_2
- 药店(简介版)GSP自查报告
- 激光扩束镜原理与应用
- 【课外阅读】替代农业与未来农业
- 会计电算化发展中存在的问题及对策
- 2011全国高考英语新课标卷全面解析
- 加强综合性和设计性实验,培养学生创新能力——生物科学(师范)专业实验课程体系改革与实践
- 第一章 人的由来 第一节 人类的起源和发展(人教版)
- 2004-2010年历年程序员试题
- 实用法律基础(省开)期末复习指导
- 中国对越南国际工程承包的现状、问题及对策
- 2015年中国微生物农药发展趋势研究报告
- 实验室常用培养基的配制方法
- 电厂危险源辩识与评价清单
- 软件体系结构-1 概述
- 中班美术活动《全家福》反思
- 2012最新婚礼主持词
- 别墅装修设计注意事项
- 最牛最全的2013年高考应试心理调适指南
- 课程与教学论体育