概述
C语言程序设计(第二版) 主编:余贞侠 何钰娟 (课后习题 代码题答案)
ps.由于没有官方答案,博主将自己写的代码分享出来,若有错误之处请多多谅解,转载注明出处!
版权声明:本文为CSDN博主「RanLZ」的原创文章,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/RangeLZ/article/details/121644174
第二章
15.编程实现:从键盘输入一个华氏温度 F F F,要求输出摄氏温度 C C C,计算公式为 C = 5 ( F − 32 ) / 9 C=5(F-32)/9 C=5(F−32)/9.
#include <stdio.h>
int main(){
double F, C;
scanf("%lf", &F);
C = 5 * (F - 32) / 9;
printf("%.3lf ℉ == %.3lf ℃", F, C);
return 0;
}
16.从键盘输入 x , v , z x,v,z x,v,z 的值,编写程序输出以下表达式的值: x + z x+z x+z % 3 3 3 ∗ ( i n t ) ( x + y ) *(int)(x+y) ∗(int)(x+y) % 2 / 4 2/4 2/4
#include <stdio.h>
int main(){
double x, y;
int z;
scanf("%lf %lf %d", &x, &y, &z);
printf("%g", x + z % 3 * (int)(x + y) % 2 / 4);
return 0;
}
第三章
(1)从键盘读入矩形的长和宽的值,编程计算矩形的周长和面积,并将结果显示到屏幕上。
#include <stdio.h>
int main(){
double l, w;
scanf("%lf%lf", &l, &w);
printf("c = %lg, s = %lg", (l + w) * 2, l * w);
return 0;
}
(2)从键盘读入一个英文大写字母,将其转换成小写字母,并且将转换前后的字母及其 A S C I I ASCII ASCII 码都显示到屏幕上。
#include <stdio.h>
int main(){
char c;
scanf("%c", &c);
printf("%c(ASCII:%d) -> %c(ASCII:%d)", c, c, c -'A' + 'a', c -'A' + 'a');
return 0;
}
(3)编写一程序实现以下功能:从键盘读入5个数 n u m 1 、 n u m 2 、 n u m 3 、 n u m 4 、 n u m 5 num1、num2、num3、num4、num5 num1、num2、num3、num4、num5 输出: ( n u m l ÷ n u m 2 的 商 ) × n u m 3 + n u m 4 − n u m 5 (numl÷num2的商)×num3+num4-num5 (numl÷num2的商)×num3+num4−num5,不需考虑 n u m 2 num2 num2 为 0 0 0 和计算结果溢出的情况。要求输出的结果中,整数部分宽度为6(不足6时以0补足)、小数部分宽度为8。编程可用素材:printf(“请输入5个数:”),printf(“n计算结果为:”)。
#include <stdio.h>
int main(){
double num1, num2, num3, num4, num5;
scanf("%lf%lf%lf%lf%lf", &num1, &num2, &num3, &num4, &num5);
double res = (num1 / num2) * num3 + num4 -num5;
printf("%015.8lf", res);
return 0;
}
(4)编写一程序实现以下功能:从键盘读入4个数据(依次为1个整数、2个字符、1个实数),然后按示例格式倒序输出这4个数据。编程可用素材:printf(“请输入4个数据(依次为1整数、2字符、1实数):”),printf(“n这4个数据倒序为:”)。
例如:输入123 a b 254.67输出:4-254.673-b 2-a 1-123
#include <stdio.h>
int main(){
int a;
char b, c;
double d;
scanf("%d %c %c %lf", &a, &b, &c, &d);
printf("4-%lg 3-%c 2-%c 1-%d", d, c, b, a);
return 0;
}
(5)编写一程序实现以下功能:从键盘输入一日期,年月日之间以“-”分隔,并以同样的形式但以“/”作为分隔符。编程可用素材:printf( “n please input a date:”),printf("n the date is: ")。
#include <stdio.h>
int main(){
int y, m, d;
printf("n Please input a date:");
scanf("%d-%d-%d", &y, &m, &d);
printf("n the date is: %d / %d / %d", y, m, d);
return 0;
}
(6)编写一程序实现以下功能;从键盘上输入一个3位整数,逆序输出这个3位数并且计算各个位上的数字之和。
#include <stdio.h>
int main(){
int x, res = 0;
scanf("%3d", &x);
do{
printf("%d", x % 10);
res += x % 10;
// 两行等价于
// res += printf("%d", x % 10);
}while(x /= 10);
printf("nres = %d", res);
return 0;
}
(7)已知直角三角形的两条直角边,求第三条边。
#include <stdio.h>
#include <math.h>
int main(){
double a, b, c;
scanf("%lf%lf", &a, &b);
c = sqrt(a * a + b * b);
printf("%lg", c);
return 0;
}
(8)分别用getchar()和scanf()函数读入2个不同的字符,用 putchar()和printf()函数将这两个字符输出,比较这几个函数对字符操作的不同。
#include <stdio.h>
int main(){
char a, b;
a = getchar();
scanf("%c", &b);
putchar(a);
printf("%c", b);
return 0;
}
(9)计算如下图所示的圆环的面积。小圆和大圆的半径从键盘读入,输出要有文字说明,精确到小数点后3位,请编程实现。
#include <stdio.h>
int main(){
double a, b, res;
scanf("%lf%lf", &a, &b);
if(a < b){
res = a;
a = b;
b = res;
}
res = 3.141 * a * a - 3.141 * b * b;
printf("%.3lf", res);
return 0;
}
第四章
1、从键盘输入4个整数,输出其中的最大数和次大数。
#include <stdio.h>
void quicksort(int q[], int l, int r){
if(l >= r) return;
int x = q[(l + r) / 2], i = l - 1, j = r + 1;
while(i < j){
do i++; while(q[i] < x);
do j--; while(q[j] > x);
if(i < j){
int temp = q[i];
q[i] = q[j], q[j] = temp;
}
}
quicksort(q, l, j);
quicksort(q, j+ 1, r);
}
int main(){
int q[4];
scanf("%d%d%d%d", &q[0], &q[1], &q[2], &q[3]);
quicksort(q, 0, 3);
printf("最大 = %d, 次大 = %d", q[3], q[2]);
return 0;
}
2.有一个函数:
Y = x ( x<1)
Y = 3x+5, (1<=x<30)
Y = 7x-3 (x>=30)
编写程序输入x的值,计算并输出y的值。
#include <stdio.h>
int main(){
double x, y;
scanf("%lf", &x);
if(x < 1) y = x;
else if(x < 30) y = 3 * x + 5;
else y = 7 * x -3;
printf("%lg", y);
return 0;
}
3.从键盘输入一个整数,如果是正数,输出该数自身;如果是负数,输出它的绝对值。
#include <stdio.h>
int main(){
int a;
scanf("%d", &a);
if(a < 0) a = -a;
printf("%d", a);
return 0;
}
4、从键盘输入a,b,c三个数,判断能否构成三角形。若能构成三角形,计算并输出三角形的面积。
#include <stdio.h>
#include <math.h>
int main(){
int a, b, c;
double p, s;
scanf("%d%d%d", &a, &b, &c);
if(a + b < c || a + c < b || b + c < a){
printf("No");
return 0;
}
p = (a + b + c) / 2.0;
s = sqrt(p * (p - a) * (p - b) * (p - c));
printf("yes, S = %lg", s);
return 0;
}
5.从键盘输入一个字符,如果是小写字母,则转换为其对应的大写字母;如果是大写字母,则原样输出:如果是教字,则输出其十进制ASCII值;如果是其他字符,则统一输出@。
#include <stdio.h>
int main(){
char c;
scanf("%c", &c);
if(c >= 'A' && c <= 'Z') printf("%c", c);
else if(c >= 'a' && c <= 'z') printf("%c", c - 'a' + 'A');
else if(c >= '0' && c <= '9') printf("%d", c);
else printf("@");
return 0;
}
6.身体质量指数(BMI)是常用的衡量人体肥胖程度和是否健康的重要标准。BMI判断标准如下:
BMI | 分类 |
---|---|
小于18.5 | 体重过低 |
18.5(含)~24.0 | 正常范围 |
24.0(含)~28.0 | 超重 |
大于等于28.0 | 肥胖 |
BMI的计算公式:体重(kg)/身高(m)的平方。编程实现从键盘输入一个人的体重和身高,计算并输入其所在分类。 |
#include <stdio.h>
int main(){
double w, h, BMI;
scanf("%lf%lf", &w, &h);
BMI = ( w / (h * h));
if(BMI < 18.5) printf("体重过低");
else if(BMI < 24.0) printf("正常范围");
else if(BMI < 28.0) printf("超重");
else printf("肥胖");
return 0;
}
7.从键盘输入4个整数,要求按从大到小的顺序输出。
#include <stdio.h>
void quicksort(int q[], int l, int r){
if(l >= r) return;
int x = q[(l + r) >> 1], i = l - 1, j = r + 1;
while(i < j){
do i++; while(q[i] < x);
do j--; while(q[j] > x);
if(i < j){
int temp = q[i];
q[i] = q[j], q[j] = temp;
}
}
quicksort(q, l, j);
quicksort(q, j+ 1, r);
}
int main(){
int q[4], i = 4;
while(i--) scanf("%d", &q[3 - i]);
quicksort(q, 0, 3);
for(i = 0; i < 4; i++) printf("%d ", q[i]);
return 0;
}
第五章
1.计算并输出l!+2!+…+n!(其中n<16)。
#include <stdio.h>
int main(){
int n, i, res = 0, temp = 1;
scanf("%d", &n);
for(i = 1; i <= n; i++){
temp *= i;
res += temp;
}
printf("%d", res);
return 0;
}
2.输出1000以内的所有完数。“完数”是指一个数的因子之和等于自身3.输入两个正整数m和n,计算并输出其最大公约数。
#include <stdio.h>
#include <math.h>
int main(){
int n, i, j;
for(i = 2; i <= 1000; i++){
n = 1;
for(j = 2; j <= (int)sqrt(i); j++)
if(i % j == 0) n += j + i / j;
if(n == i) printf("%d ", i);
}
return 0;
}
3.输入两个正整数m和n,计算并输出其最大公约数。
#include <stdio.h>
int main(){
int m, n, i;
scanf("%d%d", &m, &n);
for(i = m < n ? m : n; i >=1; i--)
if(m % i == 0 && n % i == 0) break;
printf("最大公约数是:%d", i);
return 0;
}
4.一个球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第8次落地时共经过多少米,第8次反弹多高。
#include <stdio.h>
int main(){
double h = 100;
int i = 8;
while(i--) h /= 2;
printf("%lg", h);
return 0;
}
5.输入一行字符,分别统计其中英文字母、数字和其他字符的个数。
#include <stdio.h>
int main(){
int fNum = 0, eNum = 0, oNum = 0, i;
char ch[100];
scanf("%s", ch);
for(i = 0; ch[i] != '