[学习记录]C Primer Plus(第6版)编程练习题 答案(带运行结果)——第5章

本篇博客详细解答了C Primer Plus第六版第5章的编程练习,包括将分钟转换为小时和分钟、打印指定范围整数、天数转换成周数和天数等题目,每个题目都提供了运行结果。

5.11编程练习

第1题

编 写 一 个 程 序, 把 用 分 钟 表 示 的 时 间 转 换 成 用 小 时 和 分 钟 表 示 的 时 间。 使 用# define 或 const 创 建 一 个 表 示 60 的 符 号 常 量 或 const 变 量。 通 过 while 循 环 让 用 户 重 复 输 入 值, 直 到 用 户 输 入 小 于 或 等 于 0 的 值 才 停 止 循 环。

答案代码:

#include <stdio.h>
#define M_PER_H 60
int main(void)
{
    int mins,h,m;
    printf("Please enter a time in minute(<=0 to quit):\n");
    scanf("%d",&mins);
    while (mins>0) 
    {
    h=mins/M_PER_H;
    m=mins%M_PER_H;
    printf("The time is %d hours, %dminutes\n",h,m);
    printf("Enter another time: \n");
    scanf("%d",&mins);
    }
    printf("The program exit!");
    return 0;
}

运行结果:

在这里插入图片描述

第2题

编 写 一 个 程 序, 提 示 用 户 输 入 一 个 整 数, 然 后 打 印 从 该 数 到 比 该 数 大 10 的 所 有 整 数( 例 如, 用 户 输 入 5, 则 打 印 5 ~ 15 的 所 有 整 数, 包 括 5 和 15)。 要 求 打 印 的 各 值 之 间 用 一 个 空 格、 制 表 符 或 换 行 符 分 开。

答案代码:

第一种方法
#include <stdio.h>
int main(void)
{
    int n,m;
    printf("Please enter a number:\n");
    scanf("%d",&n);
    printf("The numbers are:\n");
    m=n+10;
    printf("%d\n",n);
    while(n++<m)
        printf("%d\n",n);
    return 0;
}
第二种方法
#include <stdio.h>
int main(void)
{
    int n=0;
    int m;
    printf("Please enter a number:\n");
    scanf("%d",&m);
    printf("The numbers are:\n");
    while (n++<11)
        printf("%d\n",m++);
    return 0;
}

运行结果:

在这里插入图片描述

第3题

编 写 一 个 程 序, 提 示 用 户 输 入 天 数, 然 后 将 其 转 换 成 周 数 和 天 数。 例 如, 用 户 输 入 18, 则 转 换 成 2 周 4 天。 以 下 面 的 格 式 显 示 结 果:
18 days are 2 weeks, 4 days.
通 过 while 循 环 让 用 户 重 复 输 入 天 数, 当 用 户 输 入 一 个 非 正 值 时( 如 0 或-20), 循 环 结 束。

答案代码:

#include <stdio.h>
#define  d_per_w 7
int main(void)
{
    int input,week,day;
    printf("Please enter the days(<=0 to exit):\n");
    scanf("%d",&input);
    while (input>0) 
    {
        week = input / d_per_w;
        day = input % d_per_w;
        printf("%d days are %d weeks, %d days\n",input,week,day);
        printf("Please enter another days:\n");
        scanf("%d",&input);    
    }
    printf("The program exit!");
    return 0;
}

运行结果:

在这里插入图片描述

第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

答案代码:

#include <stdio.h>
#define FEET_TO_CM 30.48   //1英尺=30.48厘米
#define INCH_TOCM 2.54      //1英寸=2.54厘米
int main(void)
{
    float input,inch;
    int feet;
    printf("Enter a height in centimeters: \n");
    scanf("%f",&input);
    while (input>0) 
    {
    feet = input / FEET_TO_CM;
    inch = (input-feet*FEET_TO_CM)/INCH_TOCM;
    printf("%.1f cm =%d feet, %.1f inches\n",\
(float)(int)input,feet,inch);//(float)(int)input输入168.7能输出168.0
    printf("Enter a height in centimeters( < = 0 to quit): \n");
    scanf("%f",&input);
    }
    printf("bye");
    return 0;
}

运行结果:

在这里插入图片描述

题目更正

这个题,书上印错了,正确的应该是下面这种。这种的会更简单一点,直接输入浮点,输出浮点就行了。
在这里插入图片描述

答案代码:

#include <stdio.h>
#define FEET_TO_CM 30.48   //1英尺=30.48厘米
#define INCH_TOCM 2.54      //1英寸=2.54厘米
int main(void)
{
    float input,inch;
    int feet;
    printf("Enter a height in centimeters: \n");
    scanf("%f",&input);
    while (input>0) 
    {
    feet = input / FEET_TO_CM;
    inch = (input-feet*FEET_TO_CM)/INCH_TOCM;
    printf("%.1f cm =%d feet, %.1f inches\n",input,feet,inch);
    printf("Enter a height in centimeters( < = 0 to quit): \n");
    scanf("%f",&input);
    }
    printf("bye");
    return 0;
}

运行结果:

在这里插入图片描述

第5题

修 改 程 序 addemup.c( 程 序 清 单 5.13), 你 可 以 认 为 addemup.c 是 计 算 20 天 里 赚 多 少 钱 的 程 序( 假 设 第 1 天 赚 $ 1、 第 2 天 赚 $ 2、 第 3 天 赚 $ 3, 以 此 类 推)。 修 改 程 序, 使 其 可 以 与 用 户 交 互, 根 据 用 户 输 入 的 数 进 行 计 算( 即, 用 读 入 的 一 个 变 量 来 代 替 20)。

//程序清单5.13 addemup.c-几种常见的语句
#include <stdio.h>
int main(void)  //  计算前20个整数的和
{
    int count,sum;
    count = 0;
    sum = 0;
    while (count++<20) 
    sum = count+sum;
        printf("sum = %d\n",sum);
    return 0;    
}

答案代码:

#include <stdio.h>
int main(void)  
{
    int count,sum;
    sum = 0;
    printf("Please enter the day:\n");
    scanf("%d",&count);
    while (count>0) 
    sum = sum+count--;
        printf("sum = %d\n",sum);
    return 0;    
}

运行结果:

在这里插入图片描述

第6题

修 改 编 程 练 习 5 的 程 序, 使 其 能 计 算 整 数 的 平 方 和( 可 以 认 为 第 1 天 赚 $ 1、 第 2 天 赚 $ 4、 第 3 天 赚 $ 9, 以 此 类 推, 这 看 起 来 很 不 错)。 C 没 有 平 方 函 数, 但 是 可 以 用 n * n 来 表 示 n 的 平 方。

答案代码:

#include <stdio.h>
int main(void)  
{
    int count,sum,earn;
    sum = 0;
    printf("Please enter the day:\n");
    scanf("%d",&count);
    while (count>0) 
    {
    earn=count*count;
    sum = sum+earn;
    count--; 
    }
        printf("sum = %d\n",sum);
    return 0;    
}

运行结果:

在这里插入图片描述

第7题

编 写 一 个 程 序, 提 示 用 户 输 入 一 个 double 类 型 的 数, 并 打 印 该 数 的 立 方 值。 自 己 设 计 一 个函 数 计 算 并 打 印 立 方 值。 main() 函 数 要 把 用 户 输 入 的 值 传 递 给 该 函 数。

答案代码:

第一种方法
#include <stdio.h>
double cube(double n);
int main(void)
{
  double a;
  printf("Please enter a number:\n");
  scanf("%lf",&a);
  cube(a);
  return 0;
}
double cube(double n)
{
  printf("The %lg's cubic is %lg",n,n*n*n);
  return 0;
}

第二种方法
#include <stdio.h>
double cube(double n);
int main(void)
{
  double a;
  printf("Please enter a number:\n");
  scanf("%lf",&a);
  printf("The %lg's cubic is %lg",a,cube(a));
  return 0;
}
double cube(double n)
{
  double b;
  b=n*n*n;
  return b;
}

运行结果:

在这里插入图片描述

第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

答案代码:

#include <stdio.h>
int main(void)
{
    int a,b;
    printf("This program computes moduli.\n");
    printf("Enter an integer to serve as the second operand: ");
    scanf("%d",&b);
    printf("Now enter the first operand: ");
    scanf("%d",&a);
    while (a>0) 
    {
        printf("%d %% %d is %d\n",a,b,a%b);
        printf("Enter next number for first operand( < = 0 to quit):" );
        scanf("%d",&a);
    }
    printf("Done");
    return 0;
}

运行结果:

在这里插入图片描述

第9题

编 写 一 个 程 序, 要 求 用 户 输 入 一 个 华 氏 温 度。 程 序 应 读 取 double 类 型 的 值 作 为 温 度 值, 并 把 该 值 作 为 参 数 传 递 给 一 个 用 户 自 定 义 的 函 数 Temperatures()。 该 函 数 计 算 摄 氏 温 度 和 开 氏 温度, 并 以 小 数 点 后 面 两 位 数 字 的 精 度 显 示 3 种 温 度。 要 使 用 不 同 的 温 标 来 表 示 这 3 个 温 度 值。 下 面 是 华 氏 温 度 转 摄 氏 温 度 的 公 式:
摄 氏 温 度 = 5.0 / 9.0 * (华 氏 温 度 - 32.0)
开 氏 温 标 常 用 于 科 学 研 究, 0 表 示 绝 对 零, 代 表 最 低 的 温 度。 下 面 是 摄 氏 温 度 转 开 氏 温 度 的 公 式:
开 氏 温 度 = 摄 氏 温 度 + 273.16
Temperatures() 函 数 中 用 const 创 建 温 度 转 换 中 使 用 的 变 量。 在 main() 函 数 中 使 用 一 个 循 环 让 用 户 重 复 输 入 温 度, 当 用 户 输 入 q 或 其 他 非 数 字 时, 循 环 结 束。 scanf() 函 数 返 回 读 取 数 据 的 数 量, 所 以 如 果 读 取 数 字 则 返 回 1, 如 果 读 取 q 则 不 返 回 1。 可 以 使 用 = = 运 算 符 将 scanf() 的 返 回 值 和 1 作 比 较, 测 试 两 值 是 否 相 等。

答案代码:

#include <stdio.h>
double Temperatures(double feh);
int main(void)
{
    double input;
    printf("This program convert fahrenheit to celsius and kelvin.\n");
    printf("Enter a fehrenheit to start:");
    while (scanf("%lf",&input)==1) 
    {
        Temperatures(input);
        printf("Enter again(q to quit):");
    }
    printf("Done!");
    return 0;
}
double Temperatures(double feh)
{
    const double F_TO_C=32;
    const double C_TO_K=273.16;
    double cel,kel;
    cel=5.0/9.0*(feh-F_TO_C);
    kel=cel+C_TO_K;
    printf("%.2f fahrenheit equals %.2f celsius, and %.2f kelvin\n",feh,cel,kel);
    return 0;
}

运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值