3. 控制语句
3.1. if语句
- 细节:省略大括号时,if语句只会认为第一条时if语句里的
int a = 10;
//这里的if判断没用{}大括号括起来,当判断为false时只会认定第一条是if的语句
if (a>10)
printf("我来了\n");
printf("我是第二次");
return 0;
- if else if elseif else语句的使用
//-----------------------if else if else if else else语句-----------
//通过控制台输入的分数来判断学生成绩的等级,分abcd四个等级
printf("请输入您要查找等级的分数\n");
int score ;
//scanf_s方法的使用时控制台输入
scanf_s("%d", &score);
if (score >100 || score <0)
{
printf("您输入的分数有误,请重新输入");
}
else if (score>=90)
{
printf("您查询的成绩为a");
}
else if (score >= 80)
{
printf("您查询的成绩为b");
}
else if (score >= 60)
{
printf("您查询的成绩为c");
}
else
{
printf("您查询的成绩为d");
}
- for循环控制语句
-
- break关键字在for循环中的使用,作用时跳出整个循环
- continue关键字只会眺出i=5这次循环
int i;
for ( i = 0; i < 50; i++)
{
if (i==5)
{
printf("我是5,通过continue我下面的的都不会再走了,我会直接去到i=6再次循环");
continue;
}
printf("i=%d\n", i);
}
return 0;
//----------------------暑促结果--------------------
i=0
i=1
i=2
i=3
i=4
我是5,通过continue我下面的的都不会再走了,我会直接去到i=6再次循环i=6
i=7
i=8
i=9
-
- for循环整个的过程
//--------------------------for循环语句---------------------------------------
int num;
int i;
//for循环的执行过程
//第一次执行,通过表达式1给i 赋值,这里注意表达式一只执行一次,以后都不执行了.然后通过表达式2来判断是否需要执行下去,表达式2结果是bool类型,
//如果表达式2为真将执行{}大括号里的代码,如果为假则直接跳出for循环
//二:经过了一次循环,又来到了for ( i = 0; i < 100; i++)这里,接下来的顺序是先是表达式3将i自增+1
//,变成2,接下来就会走到表达式2,来进行判断是否为真为假,为真执行{}大括号的代码,为假跳出for循环
//三:和二一样的过程
//上面我们可以看到是先加一,在进行判断的,所以我们可以想到当i=99执行完之后,来到了for ( i = 0; i < 100; i++)
//就先会执行表达式3,+1,加一之后就变成100了,然后来到表达式2,代码是这样的i<100 ==>相当于100<100
//这时表达式为假,就会跳出for循环了,到这整个循环就结束了
//for (表达式一, 表达式二 ,表达式三){
//在大括号里的面的叫循环体
//}
for ( i = 0; i < 100; i++)
{
printf("现在i === %d\n", i);
}
return 0;
-
- 练习题---九九乘法表(使用嵌套for循环)
int a;
int b;
for (a = 1; a <= 9; a++)
{
for(b = 1; b <= a; b++)//注意这里,b的循环大小是由外循环a来决定的
{
printf("%d * %d = %d ", b, a, b * a);
}
printf("\n");
}
- while循环(和平常的循环差不多,就是一个判断表达式)
- do..while循环:先执行do里面的代码,然后到while中判断,然后在执行do里面的代码.不管如何do都会执行
//-------------do while就循环一百的和-----------------
int i = 1;
int num = 0;\
//do...while语句限制性一块代码块,后判断,while语句则是先判断在执行while中的代码块
do
{
num = num + i;
i++;
} while (i <= 100);
printf("num = %d", num);
return 0;
- goto: 作用就是代码执行跳转到指定地方执行,被跳过的中间部分不会被执行(在程序中少使用goto会导致你代码逻辑的混乱)
-
- goto的使用
//-----------------------goto语句的使用---------------------------------------
printf("我是11111111111111111111\n");
printf("我是22222222222222222\n") ;
goto tmp;//注意这里会直接眺到输出666666666666,中间跳过的345不会执行
printf("我是33333333333333\n") ;
printf("我是4444444444444444444\n");
printf("我是555555555555555\n") ;
tmp :
printf("我是66666666666666\n") ;
printf("我是777777777777777777\n") ;
return 0;
//输出结果
我是11111111111111111111
我是22222222222222222
我是66666666666666
我是777777777777777777
- switch语句
-
- 注意 : switch (表达式)表达式只能是字符型或整型的(shortint int long int)
- break的作用:跳出switch语句
//--------------siwtch--------------------------------------------------------------
//表达式只能是字符型或整型的(shortint int long int)
int a = 4;
switch (a )
{
case 1 :
printf("i am 1");
break;
case 2:
printf("i am 2");
break;
case 3:
printf("i am 3");
break;
case 4:
printf("i am 4");
break;
default:
printf("我是最后一个 5噢");
break;
}
return 0;
本节练习
练习一:
//-----------------------------求0-999的水仙花数------
//水仙花数:各为的立方相加等于这个数 比如: 153 = 1*1*1 + 5*5*5 + 3*3*3;
int i;
int num1;
int num2;
int num3;
for (i = 0; i <= 999 ; i++)
{
//通过求余来区分 个,十, 百,千
//通过百位对100相除的到百位
num1 = i / 100;
//先通过一百求余,得到53,53对10相乘的十位
num2 = (i % 100) / 10;
//直接整个于10求余不就得到了个位吗
num3 = i % 10;
if (i == (num1 * num1 * num1+num2 * num2 * num2+ num3*num3*num3))
{
printf("0-999的水仙花数为= %d\n", i);
}
}
练习二:(注意scanf_s方法的使用:scanf_s("%d %d %d", &year, &month, &day); 有几个参数就写几个格式符),其实可以不用写的这么复杂的,因为除了闰年多了一天,其他的都是一样的
int year;
int month;
int day;
int totalDay;
printf("请输入您要查询天数的年月日,请使用空格来隔开\n");
scanf_s("%d %d %d", &year, &month, &day);
//先要注意平年和闰年
// 闰年:条件是年份能被四百整除,或年份能被4整除但不能被100整除
if ((year % 400 == 0 && month > 0 && month <= 12) || (year % 4 == 0 && year % 100 != 0 && month > 0 && month <= 12))
{
switch (month)
{
//31:1 3 5 7 8 10 12
case 1:
totalDay = day;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 2:
totalDay = 1*31+day;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 3:
totalDay = 1 * 31 + day+29;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 4:
totalDay =2 * 31 + day + 29;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 5:
totalDay = 2 * 31 + day + 29+30;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 6:
totalDay = 3 * 31 + day + 29 +30;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 7:
totalDay = 3 * 31 + day + 29 +2*30;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 8:
totalDay = 4 * 31 + day + 29 +60;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 9:
totalDay = 5 * 31 + day + 29 +60;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 10:
totalDay = 5 * 31 + day + 29 +3*30;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 11:
totalDay = 6 * 31 + day + 29 +3*30;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 12:
totalDay = 6 * 31 + day + 29 +4*30;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
default:
printf("您输入的时间有误,请重新输入");
break;
}
}
else //这里是平年的代码
{
switch (month)
{
case 1:
totalDay = day;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 2:
totalDay = 1 * 31 + day;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 3:
totalDay = 1 * 31 + day + 28;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 4:
totalDay = 2 * 31 + day + 28;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 5:
totalDay = 2 * 31 + day + 28 + 30;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 6:
totalDay = 3 * 31 + day + 28 + 30;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 7:
totalDay = 3 * 31 + day + 28 + 2 * 30;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 8:
totalDay = 4 * 31 + day + 28 + 60;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 9:
totalDay = 5 * 31 + day + 28 + 60;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 10:
totalDay = 5 * 31 + day + 28 + 3 * 30;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 11:
totalDay = 6 * 31 + day + 28 + 3 * 30;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
case 12:
totalDay = 6 * 31 + day + 29 + 4 * 30;
printf("查询到你输入的日期是今年的第%d天", totalDay);
break;
default:
printf("您输入的时间有误,请重新输入");
break;
}
}
return 0;