c primer plus 第六版 第五单元
前提:在ubuntu(17.0.0)中使用gcc(11.4.0)编译,以伪代码形式展示。
//所写的代码仅为阅读者提供参考;
//若有不足之处请提出,本人会尽所能修改;
5.11 编程练习
使用 break跳出循环,后期将修改代码。尽量不使用为学的知识点。
1.编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时
间。使用#define或const创建一个表示60的符号常量或const变量。通过while
循环让用户重复输入值,直到用户输入小于或等于0的值才停止循环。
void mToHour(void)
{
int const transfer = 60;
int inMin,outHour,outMin,ret;
while(1)
{
printf("Please enter min : ");
ret = scanf("%d",&inMin);
if(ret == 0 || inMin <= 0 )
break;
outHour = inMin / transfer;
outMin = inMin % transfer;
printf("%d mins %d hours %d mins.\n",inMin,outHour,outMin);
}
printf("bye\n");
}
结果:
Please enter min : 320
320 mins 5 hours 20 mins.
Please enter min : 12
12 mins 0 hours 12 mins.
Please enter min : 0
bye
2.编写一个程序,提示用户输入一个整数,然后打印从该数到比该数大
10的所有整数(例如,用户输入5,则打印5~15的所有整数,包括5和
15)。要求打印的各值之间用一个空格、制表符或换行符分开。
void outPutData(void)
{
int plusNum = 10;
int num;
printf("please enter num: ");
scanf("%d",&num);
plusNum += num;
while(num <= plusNum)
printf("%d ",num++);
printf("\n");
}
结果:
please enter num: 5
5 6 7 8 9 10 11 12 13 14 15
3.编写一个程序,提示用户输入天数,然后将其转换成周数和天数。例
如,用户输入18,则转换成2周4天。以下面的格式显示结果:
18 days are 2 weeks, 4 days.
通过while循环让用户重复输入天数,当用户输入一个非正值时(如0
或-20),循环结束。
void dayToWeek(void)
{
int inDay,outWeek,outDay,ret;
int const transfer = 7;
while(1)
{
printf("Please enter day: ");
ret = scanf("%d",&inDay);
if(ret == 0 || inDay <= 0)
break;
outWeek = inDay / transfer;
outDay = inDay % transfer;
printf("%d days are %d weeks,%d days.\n",inDay,outWeek,outDay);
}
printf("bye\n");
}
结果:
Please enter day: 7
7 days are 1 weeks,0 days.
Please enter day: 12
12 days are 1 weeks,5 days.
Please enter day: 0
bye
4.编写一个程序,提示用户输入一个身高(单位:厘米),并分别以厘
米和英寸为单位显示该值,允许有小数部分。程序应该能让用户重复输入身
高,直到用户输入一个非正值。其输出示例如下:
Enter a height in centimeters: 182
182.0 cm = 5 feet, 11.7 inches
Enter a height in centimeters (<=0 to quit): 168.7
168.0 cm = 5 feet, 6.4 inches
Enter a height in centimeters (<=0 to quit): 0
bye
void cmToIn(void)
{
int ret,feet ;
float inches ,cm;
while(1)
{
printf("Enter a height in centimeters: ");
ret = scanf("%f",&cm);
if(ret == 0 || cm <= 0 )
break;
inches = cm / 2.54;
feet = inches / 12;
inches = inches - feet * 12;
printf("%f cm = %d feet, %.1f inches\n",cm,feet,inches);
}
printf("bye\n");
}
结果:
Enter a height in centimeters: 182
182.0 cm = 5 feet, 11.7 inches
Enter a height in centimeters: 168.7
168.7 cm = 5 feet, 6.4 inches
Enter a height in centimeters: 0
bye
5.修改程序addemup.c(程序清单5.13),你可以认为addemup.c是计算20
310
天里赚多少钱的程序(假设第1天赚$1、第2天赚$2、第3天赚$3,以此类
推)。修改程序,使其可以与用户交互,根据用户输入的数进行计算(即,
用读入的一个变量来代替20)。
void earnMoney(void)
{
int money = 0,day,ret, temp = 0;
while(1)
{
printf("please enter workday: ");
ret = scanf("%d",&day);
if(ret == 0 || day <= 0 )
break;
money = 0;
temp = 0;
while(++temp <= day)
money += temp;
printf("Working %d days earn %d money.\n",day,money);
}
printf("bye\n");
}
结果:
please enter workday: 1
Working 1 days earn 1 money.
please enter workday: 3
Working 3 days earn 6 money.
please enter workday: 4
Working 4 days earn 10 money.
please enter workday: 1
Working 1 days earn 1 money.
please enter workday: 6
Working 6 days earn 21 money.
please enter workday: 1
Working 1 days earn 1 money.
please enter workday: 0
bye
6.修改编程练习5的程序,使其能计算整数的平方和(可以认为第1天赚
$1、第2天赚$4、第3天赚$9,以此类推,这看起来很不错)。C没有平方函
数,但是可以用n * n来表示n的平方。
void earnMoreMoney(void)
{
int money = 0,day,ret, temp = 0;
while(1)
{
printf("please enter workday: ");
ret = scanf("%d",&day);
if(ret == 0 || day <= 0 )
break;
money = 0;
temp = 0;
while(++temp <= day)
money += temp * temp;
printf("Working %d days earn %d money.\n",day,money);
}
printf("bye\n");
}
结果:
please enter workday: 1
Working 1 days earn 1 money.
please enter workday: 2
Working 2 days earn 5 money.
please enter workday: 3
Working 3 days earn 14 money.
please enter workday: 1
Working 1 days earn 1 money.
please enter workday: 0
bye
7.编写一个程序,提示用户输入一个double类型的数,并打印该数的立
方值。自己设计一个函数计算并打印立方值。main()函数要把用户输入的值
传递给该函数。
void cube(double num)
{
double sum;
if(num == 0)
{
return ;
}
sum = num * num * num;
printf("%lf ^ 3 = %lf\n",num,sum);
}
int main(void)
{
double num;
int ret;
printf("please enter your num: ");
ret = scanf("%lf",&num);
cube(num);
return 0;
}
结果:
please enter your num: 1.1
1.100000 ^ 3 = 1.331000
please enter your num: 3
3.000000 ^ 3 = 27.000000
8.编写一个程序,显示求模运算的结果。把用户输入的第1个整数作为
求模运算符的第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
void modulo(void)
{
int ret, first ,second;
printf("This program computes moduil.\n");
printf("Enter an integer to serve as the second operand : ");
ret = scanf("%d",&first);
if(ret == 0 || first <= 0)
return ;
while(1)
{
printf("Now enter the first operand : ");
ret = scanf("%d",&second);
if(ret == 0 || second <= 0)
break;
printf("%d %% %d is %d\n",first,second,second%first);
}
printf("bye\n");
}
结果:
This program computes moduil.
Enter an integer to serve as the second operand : 256
Now enter the first operand : 438
256 % 438 is 182
Now enter the first operand : 1234567
256 % 1234567 is 135
Now enter the first operand : 0
bye
9.编写一个程序,要求用户输入一个华氏温度。程序应读取double类型
的值作为温度值,并把该值作为参数传递给一个用户自定义的函数
Temperatures()。该函数计算摄氏温度和开氏温度,并以小数点后面两位数字
的精度显示3种温度。要使用不同的温标来表示这3个温度值。下面是华氏温
度转摄氏温度的公式:
摄氏温度 = 5.0 / 9.0 * (华氏温度 - 32.0)
开氏温标常用于科学研究,0表示绝对零,代表最低的温度。下面是摄
氏温度转开氏温度的公式:
开氏温度 = 摄氏温度 + 273.16
Temperatures()函数中用const创建温度转换中使用的变量。在main()函数
中使用一个循环让用户重复输入温度,当用户输入 q 或其他非数字时,循环
结束。scanf()函数返回读取数据的数量,所以如果读取数字则返回1,如果
读取q则不返回1。可以使用==运算符将scanf()的返回值和1作比较,测试两
值是否相等。
void temperatures(double fah)
{
double cen,kel;
cen = 5.0/9.0 * (fah -32.0);
kel = cen + 273.16;
printf("Fah = %.2lf\nCen = %.2lf\nKel = %.2lf\n",fah,cen,kel);
}
int main(void)
{
double te;
int ret ;
while(1)
{
printf("Please enter tempareture : ");
ret = scanf("%lf",&te);
if(ret != 1)
break;
temperatures(te);
}
printf("bye\n");
return 0;
}
结果:
Please enter tempareture : 123
Fah = 123.00
Cen = 50.56
Kel = 323.72
Please enter tempareture : 0
Fah = 0.00
Cen = -17.78
Kel = 255.38
Please enter tempareture : q
bye

浙公网安备 33010602011771号