第1题
答案解析:C
上述代码本来的想法应该是:循环10次,每次循环时如果i==5则打印i的结果。
但if语句中表达式的==写成了赋值,相当于每次循环尽量都是将i的值设置成了5,5为真,因此每次都会打印5
i每次修改成5打印后,i的值永远不会等于10,因此造成死循环
故:死循环的打印5
第2题
int main() {
for (int i = 1; i <= 100; i++)
if (i % 3 == 0)
printf("%d ",i);
return 0;
}
“面向结果的编程”
int main() {
for (int i = 3; i <= 100; i += 3)
printf("%d ",i);
return 0;
}
第3题
int main() {
int a = 2;
int b = 3;
int c = 1;
printf("a=%d b=%d c=%d\n", a, b, c);
if (a < b) {
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
if (a < c) {
a = a ^ c;
c = a ^ c;
a = a ^ c;
}
if (b < c) {
b = b ^ c;
c = b ^ c;
b = b ^ c;
}
printf("a=%d b=%d c=%d\n", a, b, c);
return 0;
}
第4题
答案解析:C
答案解析:
A:错误,if之后可以跟多条语句,跟多条语句时需要使用{}括起来
B:错误,0表示假,非零表示真,(负数也表示真)
C:正确
D:不一定,要看具体的代码,如果代码不规范,可能没有对齐,就近原则
比如:
if()
if()
else
;
上述else虽然是和外层if对齐,但是会和内部if进行匹配。
第5题
答案解析:C
C语言中的关系操作符有:<,<=,>,>=,==,!=六种
比较两个字符串是否相等用strcmp函数
扩展:
strcmp函数需要引用头文件string,其返回值为整形,比较的原理为:找到第一个不一样的字符进行比较,然后比较两者对应的ASCII码值。左>右就返回正数,左<右就返回负数,左=右就返回0
#include<string>
int main() {
int ret = strcmp("abcd", "abce");
if (ret > 0) {
printf("abcd>abce");
}
if (ret < 0) {
printf("abcd<abce");
}
if (ret = 0) {
printf("abcd=abce");
}
return 0;
}
第6题
答案解析:C
|| 操作符的两个操作数只要有一个是真,则表达式结果为真,两个同时为假,才为假
第7题
答案解析:C
A:正确,可以放在任意位置,但是一般建议最好还是放在最后
B:正确,case语句后一般放整形结果的常量表达式或者枚举类型,枚举类型也可以看成是一个特殊的常量
C:错误,没有规定case必须在default之前,一般case最好放在default之前
D:正确,但一般还是按照次序来
第8题
答案解析:C
switch的每个case之后如果没有加break语句,当前case执行结束后,会继续执行紧跟case中的语句。
func(1)可知,在调用func时形参a的值为1,switch(a)<==>switch(1),case 1被命中,因为该switch语句中所有分支下都没有增加break语句,因此会从上往下顺序执行,最后执行default中语句返回。
第9题
答案解析:D
switch语句中表达式的类型只能是:整形和枚举类型
D选项为浮点类型,不是整形和枚举类型
第10题
答案解析:hellohtird
switch语句时多分支的选择语句,switch中表达式结果命中那个case,就执行该case子项,如果case子项后没有跟break语句,则继续往下执行。
第11题
#include <stdio.h>
int main() {
int a, b,c;
while (scanf("%d %d %d", &a, &b,&c) != EOF) { // 注意 while 处理多个 case
// 64 位输出请用 printf("%lld") to
if((a+b>c)&&(a+c>b)&&(b+c>a)){
if(a==b&&b==c)
printf("Equilateral triangle!\n");
else if((a==b)||(c==b)||(a==c))
printf("Isosceles triangle!\n");
else
printf("Ordinary triangle!\n");
}
else
printf("Not a triangle!\n");
}
return 0;
}
需要注意的是,当进行判断等腰三角形时,没必要写为a==b&&b!=c,而是直接写a==b||b==c||a==c,等腰三角形的判断范围是大于等边三角形的,所以在碰到更合适的条件时,if会走更合适的路线。有时候不应该将if else镶嵌看的像switch case那么的独立。
第12题
思路:若想数1~100之间的数,那么先存在1~100的数,整数中会出现9,无非是个位、十位出现
错误演示:
int main() {
int count = 0;
for (int i = 1; i <= 100; i++) {
if (i / 10 == 9)
count++;//十位中9的个数
else if (i % 10 == 9)
count++;//个位中9的个数
}
return 0;
}
这里虽然逻辑和结果上没有上面问题,但是我们可以这样想:十位中9的个数,是从90开始到99,正好10个,无需再进行/10判断操作,可以修改为
int main() {
int count = 0;
for (int i = 1; i < 100; i++) {
if ((i % 10 == 9) || (i >= 90 && i < 100))
count++;
}
printf("9的个数为%d\n", count);
return 0;
}