当前位置: 首页 > news >正文

C Primer Plus 第5章习题

你该逆袭了

红色标注的是:错误的答案
蓝色标注的是:正确的答案
绿色标注的是:做题时有疑问的地方
橙色标注的是:答案中需要着重注意的地方

练习题

  • 一、复习题
    • 1、
    • 2、
    • 3、
    • 4、
      • 错误答案:
      • 正确答案:
    • 5、
      • 我的答案:正确,但是没有标准答案好
      • 标准答案
    • 6、
    • 7、
    • 8、
      • 我的答案:错误
      • 正确答案:
    • 9、
      • 我的答案:标准答案更好
      • 正确答案:
    • 10、
    • 11、
      • 我的答案:
      • 正确答案:
    • 12、
      • 第4问:错误
    • 13、
  • 二、编程练习
    • 1、
    • 2、
    • 3、
    • 4、
    • 5、
    • 6、
    • 7、
    • 8、
    • 9、

一、复习题

1、

在这里插入图片描述
a.x=30;
b.x=27;
c.x=1;y=1;
d.x=3;y=9;

2、

在这里插入图片描述
a.x=6;
b.x=52;
c.x=0;
d.x=13;

3、

在这里插入图片描述
a.37.5;
b.1.5;
c.35;
d.37;
e.37.5;
f.35.0;

4、

在这里插入图片描述

错误答案:

#include <stdio.h>int main()
{int i = 1;float n;printf("watch out! here come a bunch of fractions!\n");while (i < 30)n = 1 / i;  //从 int 强制转换成 floatprintf(" %f", n);   //输出结果:1printf("that's all,folks!\n");return 0;
}

正确答案:

由于变量 i 没有增加,程序会一直停留在 while 循环中。
会进行无限次的循环计算 n = 1 / i

#include <stdio.h>int main()
{int i = 1;float n;printf("watch out! here come a bunch of fractions!\n");  //一堆分数while (i++ < 30){n = 1.0 / i;printf(" %f\n", n);}printf("that's all,folks!\n");return 0;
}

5、

在这里插入图片描述

我的答案:正确,但是没有标准答案好

#include <stdio.h>
#define S_TO_M 60int main()
{int sec, min, left;printf("this program converts seconds to minutes and ");printf("seconds.\n");printf("just enter the number of seconds.\n");printf("enter 0 to end the program.\n");scanf("%d", &sec);while(sec > 0){//scanf("%d", &sec);    //sec没有值,无法进行判断,要么使用未初始化的内存 secmin = sec / S_TO_M;left = sec % S_TO_M;printf("%d sec is %d min, %d sec.\n", sec, min, left);printf("next input?\n");scanf("%d", &sec);}printf("bye\n");return 0;
}

标准答案

程序的主要问题是:
第一次进入 while 循环判断时,sec 并未赋值。
sec 数据无法确定(不同编译器有不同处理结果,有可能是垃圾数据,也有可能被清零)。
(sec > 0)的逻辑判断不能正确获得真或者假。
此外,scanf() 语句位于 while 循环语句块中第一行,输入数据 0 也将会进行数据转换和打印,直到下一次循环判断才能退出。

//程序的主要问题是:
//第一次进入 while 循环判断时,sec 并未赋值。
//sec 数据无法确定(不同编译器有不同处理结果,有可能是垃圾数据,也有可能被清零)。
//(sec > 0)的逻辑判断不能正确获得真或者假。
//此外,scanf() 语句位于 while 循环语句块中第一行,输入数据 0 也将会进行数据转换和打印,直到下一次循环判断才能退出。#include <stdio.h>
#define S_TO_M 60int main()
{int sec = 1; //sec 一开始设置成 1,就是为了让程序能运行起来int min = 0;int	left = 0;printf("this program converts seconds to minutes and ");printf("seconds.\n");printf("just enter the number of seconds.\n");printf("enter 0 to end the program.\n");while (sec > 0)   //sec 一开始设置成 1,就是为了让程序能运行起来{scanf("%d", &sec);min = sec / S_TO_M;left = sec % S_TO_M;printf("%d sec is %d min, %d sec. \n", sec, min, left);printf("next input?\n");}printf("bye!\n");return 0;
}

6、

加粗样式
答:
FORMAT,FORMAT11
11
12
11
在这里插入图片描述

7、

在这里插入图片描述
答:SOS:4 4.00
在这里插入图片描述

8、

在这里插入图片描述

我的答案:错误

答:
0 1 2 3 4 5 6 7 8 9

正确答案:

1 2 3 4 5 6 7 8 9 10
原因:n=0 进行判断,输出的结果是 n=1.
在这里插入图片描述

9、

在这里插入图片描述

我的答案:标准答案更好

#include <stdio.h>
#define TEN 10int main()
{char n = 'a';while (n <= 'g'){printf("%c", n);n++;}printf("\n");return 0;
}

正确答案:

#include <stdio.h>
#define END 'g'int main()
{char input = 'a';char n = 0;n = 'a' - 1;  //修改预定义起始值while (n++ < END){printf("%5c", n);}return 0;
}

10、

在这里插入图片描述
a.
1 2
b.
101
102
103
104
c.
s t u v w

11、

在这里插入图片描述

我的答案:

COMPUTER
然后程序就停在这里进行不下去了,因为 n 的值没有发生变化。

正确答案:

由于 n 的值没有发生变化,会一直无限循环下去。
在这里插入图片描述

12、

在这里插入图片描述
答:

x += 10;
x += 1;
c = (a + b) * 2;

第4问:错误

c = a * 2 + b * 2; //错误答案
//正确答案:
//c = a + b * 2; 

13、

在这里插入图片描述

x -= 1;
m = n % k;
p = q / b - a;
x = (a + b) / (c * d);

二、编程练习

1、

在这里插入图片描述

#include <stdio.h>
#define PER_M 60int main()
{int m = 0;int h = 0;int left = 0;printf("请输入分钟数,");printf("如果输入小于等于0的分钟数,那么程序停止。\n");scanf("%d", &m);while (m > 0){h = m / PER_M;left = m % PER_M;printf("%d转变成%d小时%d分钟。\n", m, h, left);scanf("%d", &m);}return 0;
}

2、

在这里插入图片描述

#include <stdio.h>int main()
{int input = 0;int count = 0;printf("请输入一个整数,我将打印从这个数到比它大10的数字。\n");printf("请输入整数:");scanf("%d", &input);while (count<=10){printf("%d	", input+count);count++;}return 0;
}

3、

在这里插入图片描述

#include <stdio.h>
#define PER_WEEK 7int main()
{int all = 0;int w = 0;int left = 0;printf("请输入天数,");printf("如果输入小于等于0的天数,那么程序停止。\n");scanf("%d", &all);while (all > 0){w = all / PER_WEEK;left = all % PER_WEEK;printf("%d days are %d weeks, %d days.\n", all, w, left);scanf("%d", &all);}return 0;
}

4、

在这里插入图片描述

#include <stdio.h>int main()
{double height = 0;int feet = 0;double inch = 0;printf("enter a height in centimeters:");scanf("%lf", &height);while (height > 0){feet = (int)(height / 30.48);inch = (height-30.48*feet) / 2.54;printf("%.1lf cm = %d feet, %.1lf inches\n",height,feet,inch);printf("enter a height in centimeters (<=0 to quit):");scanf("%lf", &height);}printf("bye\n");return 0;
}

5、

在这里插入图片描述

#include <stdio.h>int main()
{int count = 0;int sum = 0;int all = 0;printf("请输入总数:");scanf("%d", &sum);while (count <= sum){all += count;count++;}printf("%d 就是总和。\n", all);return 0;
}

6、

在这里插入图片描述

#include <stdio.h>int main()
{int count = 0;int sum = 0;int all = 0;printf("请输入总数:");scanf("%d", &sum);while (count <= sum){all += count * count;count++;}printf("%d 就是总和。\n", all);return 0;
}

7、

在这里插入图片描述

#include <stdio.h>double san(double input)
{double sum = 0;sum = input * input * input;return sum;
}int main()
{double input = 0;double result = 0;printf("输出数据,计算立方值:");scanf("%lf", &input);result = san(input);printf("%lf 就是%lf的立方结果。", result, input);return 0;
}

8、

在这里插入图片描述

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

9、

在这里插入图片描述

#include <stdio.h>double temperatures(const double hua)
{double she = 0;double kai = 0;she = 5.0 / 9.0 * (hua - 32.0);kai = she + 273.16;printf("华氏温度:%lf,摄氏温度:%lf,开氏温度:%lf\n", hua, she, kai);
}int main()
{double hua = 0;printf("请输入华氏温度:");while ((scanf("%lf", &hua)) == 1){temperatures(hua);printf("请输入华氏温度,如果输入的是非数字,那么程序结束。");}return 0;
}

http://www.mrgr.cn/news/28072.html

相关文章:

  • 【微软:多模态基础模型】(1)从专家到通用助手
  • JavaScript 中的 filter 函数
  • 如何修改npm包
  • Android View 调用基础 通用属性基础 方法场景说明
  • 【数据结构 | C++】整型关键字的平方探测法散列
  • 1、C语言学习专栏介绍
  • 数据清洗-缺失值填充-K-NN算法(K-Nearest Neighbors, K-NN算法)
  • 尚品汇-秒杀商品存入缓存、Redis发布订阅实现状态位(五十一)
  • 最少逆序对数量+dp
  • 鸿蒙 ArkUI组件二
  • Linux:进程状态和优先级
  • 基于51单片机的220V交流数字电流表proteus仿真
  • 差分进化算法(DE算法)求解实例---旅行商问题 (TSP)
  • 电脑硬盘被BitLocker,忘记秘钥
  • 仿先卜php阴盘奇门排盘的算法简述以及php的代码实现开源支持二开
  • Python进阶————迭代器与生成器
  • 《浔川社团官方联合会入驻 CSDN 公告》
  • java定时任务
  • 共享内存的理解
  • GDB调试
  • 【JAVA】
  • Linux驱动编程 - platform平台设备驱动总线
  • Linux:vim编辑技巧
  • 优思学院|质量工程师在APQP中具体做哪些工作?
  • Linux基础开发环境(git的使用)
  • PCIe进阶之TL:Completion Rules TLP Prefix Rules