第一题
下面对此题给出的两种代码
#include <stdio.h>
int main()
{
int a=0;
int b=0;
int c=a/b;
int d=a%b;
scanf("a b",&a,&b);
printf("%d %d",c d);
return 0;
}
#include <stdio.h>
int main()
{
int a=0;
int b=0;
scanf("a b",&a,&b);
int c=a/b;
int d=a%b;
printf("%d %d",c d);
return 0;
}
很显然第一种代码并不能正常执行,要想理解原因,首先需理解代码的运行方式
第一段代码前二句先对整形a,b赋值初始化,三四句根据a,b的初始值求得c,d后,由scanf函数再次对a,b进行赋值,随之打印之前计算的c,d。可见c,d的值并非由scanf函数输入值决定,而是在输入前便已运算。
第二段代码看似仅改变了两行代码的顺序,实际上已满足题目要求。首先仍为对整形a,b赋值初始化,之后由scanf函数再次对a,b赋值,随后由运算语句对正确赋值的a,b进行运算,最终达到预期效果。
由此总结:要熟知代码运行顺序,正确赋值变量,赋值要在运算前!
第二题
本题可由简单分支语句完成,分为智商大于等于140和小于140,输入整形进行判断后,分别有printf函数输出不同结果,代码如下
#include <stdio.h>
int main()
{
int IQ = 0;
scanf("%d", &IQ);
if (IQ >= 140)
printf("Genius");
else
printf("SB");
return 0;
}
本题考查if else分支语句的应用,因过于简单不做赘述
第三题
对于是否能整除类的问题,主要考察算数操作符“取模”(%)的使用,若无余数则为整除,否则反之,此处产生的二向分支仍可由上述if else语句实现,代码如下
int main()
{
int a = 0;
int b = 0;
b=a % 5;
scanf("%d", &a);
if (b == 0)
printf("YES");
else
printf("NO");
return 0;
}
第四题
对本题暂先不做分析,给出如下四种代码
代码1:
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
{
if (a == b)
printf("%d=%d", a, b);
else if (a < b)
printf("%d<%d", a, b);
else (a > b)
printf("%d>%d", a, b);
}
return 0;
}
代码2:
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
{
if (a == b)
printf("%d=%d", a, b);
else if (a < b)
printf("%d<%d", a, b);
else (a > b);
printf("%d>%d", a, b);
}
return 0;
}
代码3:
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
{
if (a == b)
printf("%d=%d", a, b);
else if (a < b)
printf("%d<%d", a, b);
else
printf("%d>%d", a, b);
}
return 0;
}
代码4:
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
{
if (a == b)
printf("%d=%d", a, b);
else if (a < b)
printf("%d<%d", a, b);
else if (a > b)
printf("%d>%d", a, b);
}
return 0;
}
四段代码经调试可知,第一段代码无法运行,第二段代码运行结果为:“3<43>4”,第三、四段代码则可正常运行
四者间唯一差异体现在最后的else语句,可见一句代码即可影响整段代码的正常运行。C语言的语法之严谨,对细节要求之严格,是每位初学者应该用心掌握的
至于四者的差异,主要在if、if else、else分支语句的语法与使用上,对此将在下篇文章中予以说明