《C Primer Plus》中文第六版 编程练习答案 第五章 运算符、表达式和语句
C Primer Plus 第5章 运算符、表达式和语句 编程练习答案
- 先说一下关于 i++和 ++i 情况。
-
-
- 1.编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时间。使用#define或const创建一个表示60的符号常量或const变量。通过while循环让用户重复输入值,直到用户输入小于或等于0的值才停止循环。
- 2.编写一个程序,提示用户输入一个整数,然后打印从该数到比该数大10的所有整数(例如:用户输入5,则打印5-15的所有整数,包括5和15).要求打印的各值之间用一个空格,制表符或换行符分开。
- 3.编写一个程序,提示用户输入天数,然后将其转换成周数和天数。例如,用户输入18,则转换成2周4天。以下面的格式显示结果:18 days are 2 weeks,4 day,通过while循环让用户重复输入天数,当用户输入一个非正值时(如0或-20),循环结束。
- 4.编写一个程序。提示用户输入一个身高(单位:厘米),并分别以厘米和英尺、英寸为单位显示该值,允许有小数部分。程序应该能然用户重复输入身高,直到用户输入一个非正值。其输出示例如下:
- 5.修改程序addemup.c(程序清单5.13),你可以认为addemup.c是计算20天里赚多少钱的程序(假设第一天赚1、第二天赚2、第三天赚$3,以此类推)修改程序,使其可以与用户交互,根据用户输入的数进行计算(即,用读入的一个变量来代替20)
- 6.修改编程练习5的程序,使其能计算整数的平方和(可以认为第一天赚1、第二天赚4、第三天赚$9,以此类推,这看起来还不错)。c没有平方函数,但是可以用n*n来表示n的平方。
- 7.编写一个程序。提示用户输入一个double类型的数,并打印该数的立方值。自己设计一个函数计算并打印立方值。main()函数要把用户输入的值传递给该函数。
- 8.编写一个程序,显示求模运算的结果。把用户输入的第一个整数作为求模运算符的第二个运算对象,该数在运算过程中保持不变。用户后面输入的数是1个运算对象。当用户输入一个非正值时,程序结束。其输出实例如下:
- 9.编写一个程序,要求用户输入一个华氏温度。程序应该读取double类型的值作为温度值,并把该值作为参数传递给一个用户自定义的函数Temperatures()。
-
先说一下关于 i++和 ++i 情况。
i++后自身值不变;而++i则会使得i的值增加1
在while(i++<n){}中,i先进行比较再递增;递增操作是在括号)完成后立即执行的,在{}内部完成
而while(++i<n){}中则是先递增后进行比较
做题时多去使用++和++i运算符,并体会括号内外、<、<=、>、>=等不同条件变化对程序流程的影响
编写一段代码来完成将以分钟为单位的时间转换为小时和分钟的形式。为了简化计算过程,请定义一个名为MINUTES_PER_HOUR并赋值为60的常量来代替数值60本身。然后利用while循环让用户反复输入时间值:每次读取用户的输入后将其转换为整数类型,并检查是否大于零;如果大于零,则继续执行计算并输出结果;否则终止循环。
#include <stdio.h>
#define time 60
int main()
{
int min,hour,minute;
printf("请您输入分钟:");
scanf("%d",&min);
while(min>0)
{
hour=min/time;
minute=min%time;
printf("%d分等于%d时%d分\n",min,hour,minute);
printf("请您再次输入分钟:");
scanf("%d",&min);
}
printf("done");
return 0;
}
请创建一个程序,并引导用户输入其所需的起始整数值。随后,请输出从该起始值开始一直到起始值加十的所有连续整数值(例如:当用户提供数字时,请输出所有这些数字)。特别地,请确保输出结果中各个数值之间使用空格、制表符或换行分隔开以提高可读性
第五章只涉及了while循环,故不用for循环
#include <stdio.h>
int main()
{
int n;
int cnt=0;
printf("请输入一个整数:");
scanf("%d",&n);
while(cnt<=10)
{
cnt++;
printf("%d ",n);
n++;
}
return 0;
}
请开发一个应用程序向用户提供天数请求,并将此数值转换为对应的周数与余下天数。例如,请根据以下示例展示结果:当您输入18时,则表示为2个星期零4个日子。使用while循环让程序让用户反复输入数值(直至其提供负值或零),此时循环将终止运行。
#include <stdio.h>
int main()
{
int n,weeks,days;
printf("请输入一个天数:");
scanf("%d",&n);
while(n>0)
{
weeks=n/7;
days=n%7;
printf("%d天等于%d周,%d天\n",n,weeks,days);
printf("请再输入一个天数:");
scanf("%d",&n);
}
printf("done");
return 0;
}
4. 开发一个计算工具。引导用户录入其身高信息(计量单位为厘米),并将其数值同时转换并展示为厘米、英尺和英寸三种形式(带有小数位数的数值显示)。该工具应具备循环功能,在每次运行时会提示重新录入身高数据(当用户提供负值或其他非正数值时停止循环)。其典型运行界面如下所示:
请输入以厘米为单位的高度:请键入数值并按回车键)
#include <stdio.h>
#define FT 30.48 //1英尺等于30.48cm,
#define IN 2.51 // 1英寸等于2.51cm 1英尺等于12英寸
int main()
{
double height,inch;//厘米,英寸
int foot;//,英尺
printf("Enter a height in centimeters:");
scanf("%lf",&height);
while(height>0)
{
foot=height/FT;
inch=(height-foot*FT)/IN;
printf("%0.1lf cm = %d feet,%0.1f inches\n",height,foot,inch);//double 匹配的是lf!!!
printf("Enter a height in centimeters:");
scanf("%lf",&height);
}
printf("done");
return 0;
}
对程序addemup.c进行调整(参考程序清单5.13),该程序原本用于估算连续20天内的收益情况(假设每天依次增加一美元)。通过读取输入变量来进行计算。
程序清单5.13在C Primer Plus P103
#include <stdio.h>
int main()
{
int days;
int sum=0;
int cnt=0;
printf("第几天:");
scanf("%d",&days);
while(cnt<=days)
{
sum+=cnt;
cnt++;
}
printf("%d天赚了$%d",days,sum);
return 0;
}
对编程练习5进行优化后,在其运行结果中能够计算整数平方的总和。比如第一天赚取1美元、第二天赚取4美元、第三天赚取9美元等。由于C语言中没有直接提供平方函数, 我们可以使用n*n来表示n的平方值。
#include <stdio.h>
int main()
{
int days,square;
int sum=0;
int cnt=0;
printf("第几天?");
scanf("%d",&days);
while(cnt++<days)
{
square=cnt*cnt;
sum+=square;
}
printf("%d天赚了$%d\n",days,sum);
return 0;
}
请开发一个完整的程序系统。请求用户输入一个双精度数值,并输出其立方结果。请实现一个自定义函数用于计算并输出立方值;主函数需要将接收的数值传递给自定义的计算函数以完成运算任务。
#include <stdio.h>
double cube(double n);
int main()
{
double m;
printf("请输入一个数:");
scanf("%lf",&m);
cube(m) ;
return 0;
}
void cube(double n)
{
printf("%g 的立方是%g",n,n*n*n);//使用%g根据输入的double数精度自动转换%e or %f
return;
}
请开发一个能够显示求模运算结果的应用程序。具体来说,请将第一个用户的整数值设定为求模操作中的除数,在整个操作过程中该值始终保持不变;后续用户的每一个数字都会被用作被取模的对象;当系统接收到来自用户的非正数值时,则停止整个操作流程;以下是一个实际运行示例:
该程序计算模数。
请输入一个整数作为第一个第二个操作数:256。
现在请输入第一个操作数:438。
请问:请问您是否知道如何计算两个整数的最大公约?不,请您先计算出它们之间的关系。
然后,请您计算这两个数字的最大公约是多少?
如果您的答案是正确的,则表示您已经成功理解了这个概念。
如果您的答案是错误的,请重新思考并尝试解答这个问题。
#include <stdio.h>
int main()
{
int a,b;
printf("This program computes moduli.\n");
printf("Enter an integer to sarve as the first second operand:");
scanf("%d",&a);
printf("Now enter the first operand:");
scanf("%d",&b);
while(b>0)
{
printf("%d %% %d is %d\n",b,a,b%a);
printf("Enter next number for first operand (<=0 to quit):");
scanf("%d",&b);
}
printf("Done");
return 0;
}
开发一个应用程序,请用户输入华氏温度值。该程序将从标准输入获取double类型的数据作为温度参数,并将其传递给自定义函数Temperatures()作为其参数
该函数计算摄氏温度和开尔文温标下的数值,并采用两位小数精度显示三个温度值。
为了分别表示这三个温度值所需采用的不同温标。
在摄氏温标转换公式中, 摄氏度与华氏度之间的换算关系式为: 摄氏度 = (华氏度 - 32) × 5/9。
开尔文温标被广泛应用于科学研究领域, 在此温标下绝对零度定义为0 K。
在Temperatures函数中使用const关键字初始化用于温度转换的变量。
主函数main()通过循环让用户重复输入数据, 当用户输入非数字字符q时循环将终止。
scanf()函数返回读取成功数据的数量, 因此当读取到数字时返回1, 如果读取到非数字字符q则返回值不等于1。
可以通过将scanf()返回值与整型常量1进行比较来判断是否读取到有效数据。
#include <stdio.h>
void Temperatures(double ht);
int main()
{
double HT;
printf("输入华氏温度:");
while(scanf("%lf",&HT)==1)//下面这句等同于true=scanf("%lf",&HT);while(true==1)
{
Temperatures(HT);
printf("再次输入华氏温度:");/*不能再写一遍scanf,再写一遍即需输入两次。若为注释这种,需再写一遍true判断 */
}
printf("done");
return 0;
}
void Temperatures(double ht)
{
const double a=5.0/9.0;
const double b=32.0;
const double c=273.16;
double st,kt;//摄氏温度,开式温度;
st=a*(ht-b);
kt=st+c;
printf("华氏温度为%0.2f时,摄氏温度为%0.2f,开式温度为%0.2f\n",ht,st,kt);
return;
}
