C primer plus(第五版)编程练习第五章

时间:2021-11-25 00:04:44
第一题:编写一个程序,将用分钟表示的时间转换成用小时和分钟表示的时间。要求用常量来辨识转换值60,用while循环来让用户可以重复运行程序,并当输入小于或等于0的值时终止程序。
解:
代码如下:
#include <stdio.h>
#define RATE 60
int main(void)
{
    int n,a,b;
    
    printf("please input a minute number.\n");
    scanf("%d",&n);
    while(n > 0)
    {
        a = n / RATE;
        b = n % RATE;
        printf("%d hour and %d minute.\n",a,b);
        scanf("%d",&n);
    }
    return 0;
}
———————————————分割线—————————————————
第二题:编写一个程序,此程序要求输入一个整数,然后打印出从(包括)输入值到(包括)比输入值大10的所有整数值(输入5,则打印从5到15)。要求在各个输出值之间用空格、制表符或换行符分开。
解:
代码如下:
#include <stdio.h>
#define RATE 10
int main(void)
{
    int n,m;
    
    printf("please input a number.\n");
    scanf("%d",&n);
    m = n + RATE;
    while(n < m + 1)
    {
        printf("\t%d",n);
        n++;
    }
    printf("\n");
    return 0;
}
———————————————分割线—————————————————
第三题:编写一个程序,该程序要求用户输入天数,然后将该值转换成周数和天数。例如把18转换成2周4天,现实形式如下:
18 days are 2 weeks,4 days.
并用while实现循环输入,当输入非正数时,程序终止。
解:
代码如下:
#include <stdio.h>
#define RATE 7
int main(void)
{
    int n,a,b;
    
    printf("please input a day number.\n");
    scanf("%d",&n);
    while(n > 0)
    {
        a = n / RATE;
        b = n % RATE;
        printf("%d days are %d weeks,%d days.\n",n,a,b);
        scanf("%d",&n);
    }
    return 0;
}
———————————————分割线—————————————————
第四题:编写一个程序,让用户按照厘米输入一个高度值,然后程序按照厘米和英尺英寸现实这个高度值。允许厘米和英寸的值出现小树部分。程序允许用户继续输入,知道用户输入一个非正的数值。程序运行的形式如下:
Enter a height in centimeters:182
182.0 cm = 5 feet,11.7 inches
Enter a height in centimeters(<=0 to quit):168
168.0 cm = 5 feet,6.1 inches
Enter a height in centimeters(<=0 to quit):0
bye
解:1cm 约等于0.3937008 英寸(in);1英尺等于12英寸。
代码如下:
#include <stdio.h>
#define RATE1 0.3937008
#define RATE2 12.0
int main(void)
{
    int input,feet_i;
    double cm,inches,feet_f,inch;
    
    printf("Enter a height in centimeters:");
    scanf("%d",&input);
    while(input > 0)
    {
        cm = (float)input;
        inches = cm * RATE1;
        feet_f = inches / RATE2;
        feet_i = (int)feet_f;
        inch = inches - (float)feet_i * RATE2;
        printf("%.1f cm = %d feet,%.1f inches\n",cm,feet_i,inch);
        scanf("%d",&input);
    }
    printf("bye\n");
    return 0;
}
———————————————分割线—————————————————
第五题:编写一个程序,用户输入结束的正数值,计算求从1开始到这个正数值的所有数值之和。例如从1到3,则计算1+2+3,结果等于6。
解:
代码如下:
#include <stdio.h>
#define START 1
int main(void)
{
    int value,end,total;
    value = START;
    total = 0;
    
    printf("Input a number to the end:");
    scanf("%d",&end);
    while( value < end +1)
    {
        total = total + value++;
    }
    printf("total is %d\n",total);
    return 0;
}
———————————————分割线—————————————————
第六题:编写一个程序,用户输入结束的正数值,计算求从1开始到这个正数值的所有数值平方后之和。例如从1到3,则计算1*1+2*2+3*3,结果等于14。
解:
代码如下:
#include <stdio.h>
#define START 1
int main(void)
{
    int value,pow,end,total;
    value = START;
    total = 0;
    
    printf("Input a number to the end:");
    scanf("%d",&end);
    while( value < end +1)
    {
        pow = value * value;
        total = total + pow;
        value++;
    }
    printf("total is %d\n",total);
    return 0;
}
———————————————分割线—————————————————
第七题:编写一个程序,要求使用自定义有参数函数,计算用户输入的float类型的值得立方,并打印出来。main()函数负责传输参数到该自定义函数。
解:
代码如下:
#include <stdio.h>
void cube(float n);
int main(void)
{
    float n;

    printf("Input a float number:");
    scanf("%f",&n);
    cube(n);
    return 0;
}

void cube(float n)
{
    printf("cube is %f\n",n * n *n);
}
———————————————分割线—————————————————
第八题:编写一个程序,要求用户输入一个华氏温度。程序以double类型读入温度值,并将它作为参数传给自定义函数Temperatures()。该自定义函数将计算相应的摄氏温度和绝对温度,并以小数点右侧保留两位数字的格式显示这三种温度。它应该用每个值所代表的温度刻度来标识这三个值。将华氏温度转换为摄氏温度的公式为:
Celsius = 1.8 * Fahrenheit + 32.0
将摄氏温度转换为绝对温度的公式为:
Kelvin = Celsius + 273.16
要求将这两个公式中的三个数字设定为常量,用户可以循环输入数字,直到输入q或其他非数字值,循环结束。
解:这里需要判断scanf()函数输入的是否是double类型,通过判定scanf()函数返回值是否为1来确认。
代码如下:
#include <stdio.h>
#define C1 1.8
#define C2 32.0
#define K1 273.16
void Temperatures(double a);
int main(void)
{
    int n;
    double a;
    
    printf("Input a Fahrenheit:");
    n = scanf("%lf",&a);
    while(n > 0)
    {
        Temperatures(a);
        printf("Input again or q to quit.:");
        n = scanf("%lf",&a);
    }
    return 0;
}

void Temperatures(double a)
{
    double b,c;
    b = C1 * a +C2;
    c = b + K1;
    printf("Fahrenheit=%.2f,Celsius=%.2f,Kelvin=%.2f\n",a,b,c);
}