《C Primer Plus》第6版-第5章 编程练习
- 编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时间。使用#define或const创建一个表示60的符号常量或const常量。通过while循环让用户重复输入值,直到用户输入小于或等于0的值才停止循环。
#include <stdio.h>
#define ONE_HOUR_MIN 60;
int main(void) {
int input;
printf("请输入分钟:");
scanf("%d", &input);
while (input > 0) {
int hour = input / ONE_HOUR_MIN;
int minute = input % ONE_HOUR_MIN;
printf("转换结果 %d小时%d分钟\n", hour, minute);
printf("请输入分钟:");
scanf("%d", &input);
}
printf("输入数据小于或等于0,程序结束\n");
return 0;
}
- 编写一个程序,提示用户输入一个整数,然后打印从该数到比该数大10的所有整数(例如,用户输入5,则打印5-15的所有整数,包括5和15)。要求打印的各值之间用一个空格、制表符或换行符分开。
#include <stdio.h>
int main(void) {
int input;
printf("请输入数据:");
scanf("%d", &input);
int max = input + 10;
while (input <= max) {
printf("%d ", input++);
}
return 0;
}
- 编写一个程序,提示用户输入天数,然后将其转换成周数和天数。例如,用户输入18,则转换成2周4天。以下面的格式显示结果
18 days are 2 weeks, 4 days.
通过while循环让用户重复输入天数,当用户输入一个非正值时(如0或-20),循环结束。
#include <stdio.h>
int main(void) {
const int ONE_WEEK_DAY = 7;
int input;
printf("please input days:");
scanf("%d", &input);
while (input > 0) {
int week = input / ONE_WEEK_DAY;
int day = input % ONE_WEEK_DAY;
printf("%d days are %d weeks, %d days.\n", input, week, day);
printf("please input days:");
scanf("%d", &input);
}
return 0;
}
- 编写一个程序,提示用户输入一个身高(单位:厘米),并分别以厘米和英寸为单位显示该值,允许有小数部分。程序应该能让用户重复输入身高,知道用户输入一个非正值。其输出示例如下
- 修改程序 addemup.c (程序清单 5.13),你可以认为addemup.c是计算20天里赚多少钱的程序(假设第1天赚$1、第2天赚$2、第3提天赚$3, 以此类推)。修改程序,使其可以与用户交互,根据用户输入的数进行计算(即,用读入的一个变量来代替20)。
addemup.c
#include <stdio.h>
int main(void) {
int count, sum;
count = 0;
sum = 0;
while (count++ < 20) {
sum = sum + count;
}
printf("sum = %d\n", sum);
return 0;
}
#include <stdio.h>
#include <stdio.h>
int main(void) {
int count, sum, day;
count = 0;
sum = 0;
printf("请输入天数:");
scanf("%d", &day);
while (count++ < day) {
sum = sum + count;
}
printf("sum = %d\n", sum);
return 0;
}
- 修改编程练习5的程序,使其能计算整数的平方和(可以认为第1天赚$1、第2天赚$4、第3天赚$9, 以此类推)。C没有平方函数,但是可以用 n*n 来表示 n 的平方。
#include <stdio.h>
#include <stdio.h>
int main(void) {
int count, sum, day;
count = 0;
sum = 0;
printf("请输入天数:");
scanf("%d", &day);
while (count++ < day) {
sum = sum + count * count;
}
printf("sum = %d\n", sum);
return 0;
}
- 编写一个程序,提示用户输入一个double类型的数,并打印该数的立方值。自己设计一个函数计算并打印立方值。main()函数要把用户输入的值传递给该函数。
#include <stdio.h>
double calCube(double num);
int main(void) {
double input = 1.1;
printf("请输入浮点数据:");
scanf("%lf", &input);
double result = calCube(input);
printf("计算结果是 %f", result);
return 0;
}
double calCube(double num) {
return num * num * num;
}
- 编写一个程序,显示求模运算的结果。把用户输入的第一个整数作为求模运算符的第2个运算对象,该数在运算过程中保持不变。用户后面输入的数是第1个运算对象。当用户输入一个非正值时,程序结束。其输出示例如下:
This program computes moduli.
Enter an integer to serve as the second operand:256
Now enter the first operand:438
438 % 256 is 182
Enter next number for first operand (<= 0 to quit):1234567
1234567 % 256 is 135
Enter next number for first operand (<= 0 to quit):0
Done
#include <stdio.h>
int main(void) {
int first_operand,second_operand;
printf("This program computes moduli.\n");
printf("Enter an integer to serve as the second operand:");
scanf("%d", &second_operand);
printf("Now enter the first operand:");
scanf("%d", &first_operand);
while (first_operand > 0) {
int result = first_operand % second_operand;
printf("%d %s %d is %d\n", first_operand, "%", second_operand, result);
printf("Enter next number for first operand (<= 0 to quit):");
scanf("%d", &first_operand);
}
printf("Done\n");
return 0;
}
scanf 函数解析
#include <stdio.h>
int main(void) {
int num1, num2, num3;
int result0 = 0,result1 = 0,result2 = 0,result3 = 0;
while (!(result0 == 0 && result1 == 1 && result2 == 2 && result3 == 3)) {
printf("请不要输入整数:");
result0 = scanf("%d");
getchar();
printf("请输入1个整数:");
result1 = scanf("%d", &num1);
getchar();
printf("请输入2个整数:");
result2 = scanf("%d %d", &num1, &num2);
getchar();
printf("请输入3个整数:");
result3 = scanf("%d %d %d", &num1, &num2, &num3);
getchar();
printf("输入验证结果 %d %d %d %d\n", result0, result1, result2, result3);
}
printf("程序退出");
return 0;
}
- 运行上面的程序,如何输入才能到达程序退出?
- 如果删除 getchar() 函数,程序的运行逻辑和原来一致吗?