习题二
1.if语句中 0表示假 非0表示真
2.else 总是与最靠近它的、没有与别的 else 匹配过的 if 语句进行匹配,而不是与对齐的 if 语句进行匹配。所以,不能靠对齐的方式来判断 else 与哪个 if 进行匹配。
习题三
1.b选项是对的(case后表达式只能是整型常量表达式);char也属于整型家族,因为字符存储时,存储的是ASCII码值
2.switch语句中的case和default语句对于顺序没有要求 但为了容易理解 还是按顺序写最好
习题四
1.自己作答:与case 1匹配,执行b=30
2.错误原因:1.忘记了switch语句执行后只有当遇到break或语句结尾才会停止(即使有匹配项的前提下后续遇到default也会执行该语句)
3.switch语句执行后只有当遇到break或语句结尾才会停止
习题七
题目:输入三个整数,输出时按照大小排序输出
习题八
题目:写一个代码打印1~100之间所有3的倍数的数字
作答:
#include<stdio.h>
int main()
{
int a[100];//建立一个名字为a,元素100个的整型数组
int b;
int i=0;
int c;//创建一个临时变量来存储1~100之间所有3的倍数的数字
int d;
for (b = 0; b <= 100; b++)//建立一个循环 用来生成1~100之间的数字
{
a[i] = b;//将数组下标为i的位置赋值b
i++;//i+1
}
for (d = 0; d <= 100; d++)//重新建立一个循环,将符合条件的数字打印出来
{
int c = a[d];//将a[b]储存给c
if(c % 3 == 0)
printf("%d\n", c);
}
return 0;
}
问题一:(for (b = 0; b <= 100; b++)//建立一个循环 用来生成1~100之间的数字)
此循环中是要访问a数组用来存储1~100之间的数字,但是由于数组的有效范围是100,而循环要执行101次,因此会导致数组越界访问使程序出错,因此要将“=”去除
优化一:
for循环本身就可以初始化一个变量,因此第二个就没有必要再创建一个临时变量d了,可以直接重新将b赋值为0继续使用。
优化二:(int c = a[d];//将a[b]储存给c)
没有必要新建立了一个变量存储a【d】,因为在判断是否为 3 的倍数时,可以直接在循环中进行判断,而无需单独创建一个变量来存储。
(重点)优化三:没必要建立一个数组和循环来存储生成的1~100之间的数字
一般建立一个变量来存储一个值,是为了方便后续操作(例如:接收函数的返回值,或函数的参数,建立一个循环需要先建立一个变量等),而此处没这个需求
优化后:
#include<stdio.h>
int main()
{
int b;
for (b = 0; b <= 100; b++)//建立一个循环将符合要求的数字打印出来
{
if (b % 3 == 0)
printf("%d\n", b);
}
return 0;
}