概述
分支语句可以在程序执行的时候从几组语句中选择一组执行
在编写程序时如果遇到多种可能性,任何时候只能选择一种可能性,这种情况下就可以采用分支解决
if关键字用来编写分支
if分支里需要为每种可能性编写相应的处理语句
每组语句需要一个配对的逻辑表达式,如果某个逻辑表达式结果为真,就执行它对应的语句,其他语句就被忽略
只有不可能同时出现的多种可能性才可以用一个分支解决
1#include<stdio.h>
2int main(){
3 int num=0;
4 printf("请输入一个整数: ");
5 scanf("%d",&num);
6 if(num>=0){
7 printf("非负数n");
8 }
9 else if(num<0){
10 printf("负数n");
11 }
12 return 0;
13 }
也可以用elseprintf("负数n") ;
如果多种可能性中必然有一种可能性会出现就可以省略最后一组语句的逻辑表达式和if关键字
编写if分支的时候应该把简单逻辑表达式写在前面,复杂逻辑表达式写在后面
1#include<stdio.h>
2int main(){
3 int num = 0;
4 printf("请输入一个整数: ");
5 scanf("%d",&num);
6 if(num<0){
7 printf("负数n");
8 }
9 elseif(num>=0&&num%2==0){ //!(num&1)
10 printf("偶数n");
11 }
12 else if(num >= 0 && num%2 == 1){ //num&1
13 printf("奇数n");
14 }
15 return 0;
16 }
可以简化:
if分支里的多个逻辑表达式之间有前后顺序,如果前面的逻辑表达式结果为真,就忽略后面的逻辑表达式,可以利用这一点简化后面的逻辑表达式
(不能把if分支当作多组无关语句看待)
1#include<stdio.h>
2int main(){
3 int num = 0;
4 printf("请输入一个整数: ");
5 scanf("%d",&num);
6 if(num<0 ){
7 printf("负数n");
8 }
9 else if(num%2==1){
10 printf("奇数n");
11 }
12 else if(!(num%2==0)){
13 printf("偶数n");
14 }
15 else printf("输入错误n");
16 return 0;
17 }
编写程序,超重问题,结果分为超重的男人,超重的女人,不超重
1#include<stdio.h>
2int main(){
3 int gender,lenth,weight;
4 printf("请输入性别,身高,体重");
5 scanf("%d%d%d",&gender,&lenth,&weight);
6 if (gender==1&&lenth-weight<105) {
7 printf("超重的男人n");
8 }
9 else if(gender==0&&lenth-weight<110) {
10 printf("超重的女人n");
11 }
12 else {
13 printf("不超重n");
14 }
15 return 0;
16 }
编写程序从键盘上得到三个整数,找到最大的整数并显示
1#include<stdio.h>
2int main(){
3 int num1=0,num2=0,num3=0;
4 printf("please intputthree number: ");
5 scanf("%d%d%d",&num1,&num2,&num3);
6 if(num1>=num2&&num1>=num3){
7 printf("%dn",num1);
8 }
9 elseif(num2>=num1&&num2>=num3){
10 printf("%dn",num2);
11 }
12 else {
13 printf("%dn",num3);
14 }
15 return 0;
16 }
以上做法不好!!!不灵活,用以下做法
1#include<stdio.h>
2 int main(){
3 int num=0,num1=0,num2=0;
4 printf("please intput three number: ");
5 scanf("%d%d%d",&num,&num1,&num2);
6 if(num<num1){
7 if(nun1<num2){
8 printf("%d",num2)
9 }
10 else {
11 printf("%d",num1);
12 }
13 else {
14 if(num<num2){
15 printf("%d",num2);
16 }
17 else{
18 printf("%d",num);
19 }
20 }
21 return 0;
22 }
使用switch…case语句也可以编写分支
如果一个分支里包含有限个整数,每个整数需要使用专门的语句处理。这种分支可以采用switch…case 格式编写
1 #include<stdio.h>
2 int main(){
3 int season=0;
4 printf("请输入一个整数:");
5 scanf("%d",&season);
6 switch (season){
7 case 0:
8 printf("春天n");
9 break;
10 case 1:
11 printf("夏天n");
12 break;
13 case 2:
14 printf("秋天n");
15 break;
16 case 3:
17 printf("冬天n");
18 break;
19 default:
20 printf("不认识的数字n");
21 break;
22 }
23 return 0;
24 }如果不加beak , 输入0 执行case0语句后会依次执行,加break,会终止
练习:布尔值转换
1 #include<stdio.h>
2 int main(){
3 int num=0;
4 printf("please :");
5 scanf("%d",&num);
6 switch(num){
7 case 0:
8 printf("假n");
9 break;
10 default:
11 printf("真n");
12 break;
13 }
14 return 0;
15 }
编写程序从键盘得到一个年份数字,判断是不是闰年并把结果屏幕上
闰年判断方法:
如果年份数字可以被4整除但不能被100整除,则是闰年
如果年份数字可以被400整除,也是闰年
(!(year&3)&&(year%100))|| !(year%400)
1 #include<stdio.h>
2 int main(){
3 int num=0;
4 printf("please :");
5 scanf("%d",&num);
6 /* switch((num%4==0&&num%100!=0)||num%400==0){
7 case 0:
8 printf("不是闰年n");
9 break;
10 case 1:
11 printf("是闰年n");
12 break;
13 }*/
14 if((num%4==0&&num%100!=0)||num%400==0){
15 printf("是闰年n");
16 }
17 else{
18 printf("不是闰年n");
19 }
20 return 0;
21 }
循环语句可以反复执行同一组语句
for关键字用来编写循环
for循环里让一个变量依次代表一组数字,用一组语句分别处理它所代表的每个数字,这个变量叫做循环变量
采用如下格式描述循环变量的变化过程
(把开始数字赋值给循环变量;
用逻辑表达式描述循环变量和结束数字之间的关系;
每次循环变量的变化规律)
用循环打印
54321
5432
543
54
5
两种方法:
1#include<stdio.h>
2 intmain(){
3 /* int num=54321,i;
4 for(i=1;i<=5;i++){
5 printf("%dn",num);
6 num=num/10;
7 } */
8 int num=0;
9 for(num=54321;num>=5;num/=10){
10 printf("%dn",num);
11 }
12 return 0;
13 }
用户告诉程序有多少个成绩,编写程序从键盘得到多个考试成绩,找出其中最大成绩,最小成绩并计算总成绩,把它们显示在屏幕上
1#include<stdio.h>
2 intmain(){
3 intqty=0,num=0,grade=0,max=-1,min=101,sum=0;
4 printf("请输入考试成绩个数:");
5 scanf("%d",&qty);
6 for(num=1;num<=qty;num++){
7 printf("请输入一个考试成绩:");
8 scanf("%d",&grade);
9 if(max<grade){
10 max=grade;
11 }
12 if(min>grade){
13 min=grade;
14 }
15 sum+=grade;
16 }
17 printf("the max is %d,the min is%d,the sum is %dn",max,min,sum);
18 return 0;
19 }
假设有如下for循环
for { 1; 2 ; 3 } {
4
}
它按以下方式分组执行
[ 1, 2 ] [ 4 , 3 , 2 ] [ 4 , 3 , 2 ] . . . [ 4 , 3 , 2 ]
第一组和其他组都不一样
正常情况下for循环一定在两组之间结束
如果某一组最后编号为2的逻辑表达式结果为真,就启动下一组,否则结束循环
如果for循环正常结束,则循环变量落在数字范围之外
for循环有可能不执行大括号里面的语句
for循环小括号里每部分内容都可以省略
如果小括号中间的逻辑表达式没写,表示逻辑表达式的结果永远为真。这种循环不能结束,成为死循环。 例:
1#include<stdio.h>
2 intmain(){
3 int num=0;
4 for(num=1;;num++){
5 printf("%dn",num);
6 }
7 return 0;
8 }
for循环小括号里最前和最后的部分可以是用逗号连接的多条语句 例:
1 #include<stdio.h>
2 int main(){
3 int num=0,num1=0;
4 for(num=1,num1=9;num<=num1;num++,num1--){
5 printf("%dX%d=%dn",num,num1,num*num1);
6 }
7 return 0;
8 }
C99规范里允许在小括号中临时声明循环变量,这种循环变量只能在循环里使用
1 #include<stdio.h>
2 int main(){
3 int num=0,num1=0;
4 for(int num2=1;num2<=5;num2++){
5 printf("%dn",num2);
6 }
7 return 0;
8 }
执行语句: gcc -std=c99 sixunhuan.c
若:
1 #include<stdio.h>
2 int main(){
3 int num=0,num1=0;
4 for(int num2=1;num2<=5;num2++){
5 printf("%dn",num2);
6 }
printf("%dn",num2);
7 return 0;
8 }
则出错,num2未声明
可以在循环里使用break语句,用来终止循环的执行
当执行完break;语句后,循环里的所有语句都不再执行,循环变量也不会再改变
如果循环是采用break;语句结束的,循环结束后循环变量应该落在数字范围内
如果编写循环时不知道循环要重复的次数,就可以编写死循环,在循环合适的时候用break;语句结束循环
循环里使用continue;语句直接跳到循环大括号的末尾,本次循环剩下的语句都不执行
1 #include<stdio.h>
2 int main(){
3 int num=0;
4 for(num=1;num<=5;num++){
5 printf("%dn",num);
6 if(num==3){
7 continue;
8 }
9 printf("%dn",num+10);
10 }
11 printf("num is %dn",num);
12 return 0;
13 }
作业:编写程序计算鸡兔同笼的问题
一共40个头,100只脚
计算出兔子和鸡各有多少只
1 #include<stdio.h>
2 int main(){
3 /* int rabbit=0;
4 for(rabbit=0;rabbit<=40;rabbit++){
5 if(4*rabbit+2*(40-rabbit)==100){
6 break;
7 }
8 }
printf("兔子有%d只,n鸡有%d只n",rabbit,40-rabbit);
*/
9 int tu=0,ji=0;
10 for(tu=0;tu<=40;tu++){
11 for(ji=0;ji<=40;ji++){
12 if(4*tu+2*ji==100&&tu+ji==40){
13 printf("兔子有%d只,鸡有%d只n",tu,ji);
14 }
15 else continue;
16 }
17 }
18 return 0;
19 }
两种方法,选变量少的,代码量少的!!!
最后
以上就是欣喜绿茶为你收集整理的Day5、分支语句,for循环的全部内容,希望文章能够帮你解决Day5、分支语句,for循环所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复