你该逆袭了
红色标注的是:错误的答案
蓝色标注的是:正确的答案
绿色标注的是:做题时有疑问的地方
橙色标注的是:答案中需要着重注意的地方
练习题
- 一、复习题
- 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 强制转换成 float
printf(" %f", n); //输出结果:1
printf("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 60
int 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没有值,无法进行判断,要么使用未初始化的内存 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");
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 60
int 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 10
int 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 60
int 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 7
int 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;
}