一.对for语句的补充
我们在前一篇文章中学会了怎么来计算闰年,我们这里再次列举一下闰年的特征:
1.其年数可以被4整除但是不能被100整除
2.其年数可以被400整除
由此我们可以写
if(year % 4 == 0 && year % 100 != 0 )
else if(year % 400 == 0)
以上if语句也可以整合成一行代码
if((year % 4 == 0 && year %100 != 0) || (year % 400 == 0))
我们在第二种写法中使用了 || 操作符,整句代码的意思是 变量year模4的值等于0并且变量year模100不等于0 或者 变量year模400等于0,所以我们得出 || 操作符为或者关系,其作用和第一种代码一样,如图所示:
二.相关试题
1.关于while(条件表达式)循环体,以下叙述正确的是()(不考虑continue,break,goto,return语句)
A.循环体的执行次数总是比表达式的执行次数多一次
B.表达式的执行次数总是比循环体的执行次数多一次
C.条件表达式的执行次数与循环体的执行次数一样
D.条件表达式的执行次数与循环体的执行次数无关
答案:B,原因是while循环语句先执行表达式循环体,如果满足循环体中的条件则进入循环,若不满足于则跳出循环,当满足条件的时候执行完循环体语句然后重新执行条件表达式判断语句,所以表达式的执行次数总是比循环体多执行一次
2.以下代码的执行结果是()
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
int main(void){
int a = 0, b = 0;
for (a = 1, b = 1; a <= 100; a++){
if (b >= 20){
break;
}
if (b % 3 == 1){
b = b + 3;
continue;
}
b = b - 5;
}
printf("%d \n", a);
system("pause");
return 0;
}
A.10
B.9
C.8
D.7
答案:C,当a=1的时候b=4,然后自增a,a=2的时候b=4满足条件b=7,以此类推当a=8 b=22的时候满足b>=20这个条件,执行了break语句终止循环,所以a=8
编写一段代码,统计1-100个整数数字中出现了多少个9
不完全正确的代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
int main(void){
int i = 0;
int count = 0;
for (i = 1; i <= 100; i++){
if (i % 10 == 9 || i / 10 == 9){
count++;
printf("%d ",i);
}
}
printf("共有%d个9",count);
system("pause");
return 0;
}
我们来分析一下代码:当9在十位上的时候,如 90 91 92 那么我们除以10,其商就为9,当9在个位上的时候,如:89 79 等我们模10,其余数就是9,我们使用 || 或操作符 当两个条件满足其中一个的时候则输出当前数字,并对count变量进行自增,直到变量i的值不再满足条件跳出for循环为止,输出count的值,但是我们发现 1-100的数中一共有20个数字,但是程序只输出了19,这是为什么呢?
原来当数值为99的时候则两条语句都满足条件,也就是说两条语句都需要执行,但是我们只执行了一条
所以我们可以对代码进行修改
示例代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
int main(void){
int i = 0;
int count = 0;
for (i = 1; i <= 100; i++){
if (i % 10 == 9){
count++;
printf("%d ",i);
}
if (i / 10 == 9){
count++;
printf("%d ",i);
}
}
printf("共有%d个9",count);
system("pause");
return 0;
}
这样子当i的值为99的时候两条语句都会被执行,所以程序最终的输出就为20
2023/7/30
王起舟