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;
}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] != '\0'; i++){
if(ch[i] >= '0' && ch[i] <= '9') fNum++;
else if(ch[i] >= 'a' && ch[i] <= 'z') eNum++;
else if(ch[i] >= 'A' && ch[i] <= 'Z') eNum++;
else oNum++;
}
printf("数字有:%d 个,英文有:%d 个, 其他字符有:%d 个", fNum, eNum, oNum);
return 0;
}
6.从键盘输入任意个整数,以-888结束(不计入),计算并输出其中的最大数和最小数。
#include <stdio.h>
int main(){
int num[100], i = 0, max = -9999999, min = 99999999;
do{
scanf("%d", &num[i]);
if(num[i] == -888) break;
max = max > num[i] ? max : num[i];
min = min < num[i] ? min : num[i];
}while(++i);
printf("Max = %d, Min = %d", max, min);
return 0;
}
7.要将100元钱换成1元、5元和10元的零钱,每种零钱的张数大于0,且为5(的倍数,编程输出所有可能的换法。
#include <stdio.h>
int main(){
int oNum, fNum, tNum, count = 0;
for(oNum = 5; oNum <= 100; oNum += 5)
for(fNum = 5; fNum <= 20; fNum += 5)
for(tNum = 5; tNum <= 10; tNum += 5)
if(oNum + fNum * 5 + tNum * 10 == 100)
printf("1块钱 %d 张,5块钱 %d 张,10块钱 %d 张\n", oNum, fNum, tNum);
return 0;
}
8.百钱百鸡问题。用100钱买100只鸡,公鸡一只五钱,母鸡一只三钱,小鸡三只一钱,编程输出所有可能的买法(要求每种鸡至少要买1只)。
#include <stdio.h>
int main(){
int bNum, gNum, cNum;
for(bNum = 1; bNum <= 20; bNum++)
for(gNum = 1; gNum <= 33; gNum++)
for(cNum = 1; cNum <= 300; cNum++)
if(bNum + gNum + cNum == 100 && bNum * 5 + gNum * 3 + cNum / 3.0 == 100.0)
printf("公鸡 %d 只,母鸡 %d 只,小鸡 %d 只\n", bNum, gNum, cNum);
return 0;
}
第六章
1.计算面积:输入rl,r2,求出圆形垫片的面积。
#include <stdio.h>
#include <math.h>
const double PI = 3.1415926;
double fun(double r1, double r2){
return fabs(PI * (r1 * r1 - r2 * r2));
}
int main(){
double r1, r2, res;
scanf("%lf%lf", &r1, &r2);
res = fun(r1, r2);
printf("%lg", res);
return 0;
}
2.找到10000以内所有完数,其中判断完数的功能用函数实现。
#include <stdio.h>
#include <math.h>
int wan(int i){
int n = 1, j;
for(j = 2; j <= (int)sqrt(i); j++)
if(i % j == 0) n += j + i / j;
return n == i && i != 1;
}
int main(){
int i;
for(i = 1; i <= 10000; i++)
if(wan(i)) printf("%d ", i);
return 0;
}
3,输入两个正整数m和n,求其最大公约数和最小公倍数。
#include <stdio.h>
int gcd(int a, int b) {
int i;
for(i = a < b ? a : b; i >= 0; i--)
if(a % i == 0 && b % i == 0)
return i;
return 0;
}
int lcm(int a, int b) {
int i = a > b ? a : b;
do{
if(i % a == 0 && i % b == 0) return i;
}while(++i);
return 0;
}
int main(){
int a, b;
scanf("%d%d", &a, &b);
printf("gcd = %d, lcm = %d", gcd(a, b), lcm(a, b));
return 0;
}
4.一个5位数,判断它是不是回文数。例如,12321是回文数,个位与万位相同,十位与千位相同。
#include <stdio.h>
int hws(char num[8]){
int i, j;
for(i = 0, j = 4 ; i <= j; i++, j--)
if(num[i] != num[j]) return 0;
return 1;
}
int main(){
char num[8];
gets(num);
if(hws(num)) printf("Yes");
else printf("No");
return 0;
}
5.从键盘输入任意一个正整数,输出该数的逆序数。
#include <stdio.h>
void fun(int n){
if(!n) return;
printf("%d", n % 10);
fun(n / 10);
return;
}
int main(){
int n;
scanf("%d", &n);
fun(n);
return 0;
}
【未完待续】
|