四、顺序结构、选择结构和循环结构--附代码案例


C语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。

4.1 选择结构

4.1.1 if语句

请添加图片描述

4.1.2 if…else语句

请添加图片描述

4.1.3 if…else if…else语句

请添加图片描述

#include <stdio.h>
#pragma warning(disable:4996)
int main(){
	unsigned int score;
	printf("score=\n");
	scanf("%u", &score);
	if(score > 700){
		printf("school:Qinghua University\n");
		if(score > 710){
			printf("major:computer\n");
		}else{
			printf("major:other\n");
		}
	}else if(score > 650){
		printf("school:Beijing University\n");
	}else{
		if(score < 200){
			printf("Fail\n");
		}
	}
	return 0;
}

4.1.4 三目运算符

#include <stdio.h>
#pragma warning(disable:4996)
//#define MAX(a,b) (a)>(b)?(a):(b)		//可以宏定义常量、表达式、函数
int main(){
	unsigned int score1, score2, score3;
	printf("please input three score(devide by space):");
	scanf("%u %u %u", &score1, &score2, &score3);
	printf("the most score is %d\n", score1 > score2 ? (score1 > score3 ? score1 : score3) : (score2 > score3 ? score2 : score3));//三目运算符不适用于嵌套(复杂),适用于简单
//printf("the most score is %d\n", MAX(MAX(score1, score2), score3));
	return 0;
}

4.1.5 switch语句

#include<stdio.h>
#pragma warning(disable:4996)
int main(){
	unsigned int CET4;
	printf("CET4=");
	scanf("%u", &CET4);
	switch (CET4 >= 425){//仅仅适用于两个选择
		case 1:	printf("及格\n");	break; //假如输入大于等于425,真
		case 0:	printf("不及格\n");	break; //假如输入小于425,假
	}
	printf("switch执行效率比if高,从F5调试得知,if要进行判断(尤其是嵌套if),而switch只进行选择即可\n");
	
	unsigned int score;
	printf("score=");
	scanf("%u", &score);
	//假如score>90,100-90都是优秀,要列11个case
	switch (score / 10){//适用于多个选择
		case 10:	printf("满分\n");	break;//结束switch语句
		case 9:	printf("优秀\n");		break;
		case 8:	printf("良\n");			break;
		case 7:	printf("中\n");			break;
		case 6:	printf("及格\n");		break;
		default:	printf("不及格\n");	break;
	}//switch语句适用离散型(ATM机器),而if语句适用连续型和嵌套
	return 0;
}

4.2 循环结构

4.2.1 while语句

请添加图片描述

#include<stdio.h>
int main(){
	int b = 1;
//游戏:1-50内数字为7的倍数或者个位是7的人不能喊出来,只是拍桌子;其他数的人只能喊出来,不能拍桌子
	while (b<50){// while循环是先进行判断,再执行语句
		if (b%7 == 0 || b%10 == 7)		{ printf("拍桌子\n");    }
		else							{ printf("b = %d\t", b); }
		b++;	//如果没有b++,就会出现死循环,死循环会导致程序崩溃
	return 0;
}

请添加图片描述

4.2.2 do…while语句

请添加图片描述

#include<stdio.h>
#include<math.h>
int main(){
	printf("do while循环\n");
	char a = 0;
	do{
		printf("%6d", a);
		a++;
		if (a % 16 == 0)	{ printf("\n"); }
	} while (a); 	//结合数据溢出,一直到while(0)才结束循环
	putchar('\n');


	printf("while循环\n");
	char b = 0;
	printf("%6d", b);
	b++;
	while (b){//while(0)是条件为假,不执行循环语句
		if (b % 16 == 0)			{ putchar('\n'); }
		printf("%6d", b);
		b++;
	}
	printf("\n\n");

	int i = 100;
	do{
		int x = i % 10;
		int y = i / 10 % 10;
		int z = i / 100;
		if (pow(x, 3) + pow(y, 3) + pow(z, 3) == i){
			printf("水仙花数有%d\n", i);
		}
		i++;
	} while (i < 1000);
	return 0;
}

在这里插入图片描述

4.2.3 for语句

for(初值表达式;条件表达式;步长表达式){循环体语句}
初值表达式:对循环的变量赋初值,指定循环的起点,只有初值表达式不参与循环;
条件表达式:循环的条件;若表达式为真(假),则(结束)继续循环;
步长表达式:改变循环的步长,改变循环变量的值,从而改变条件表达式的结果;
循环体语句:重复执行{}内的句子;
死循环语句:while(1)、for( ; ; )、flag:语句 goto flag。
初值表达式、条件表达式、步长表达式之间用分号隔开,每个表达式内都可以有多条语句,也可以空语句,语句和语句之间用逗号隔开。

#include<stdio.h>
int main(){
	int a;
	for (a = 0; a < 5; a++);//以;结尾,仅仅循环for语句的a
	printf("a=%d", a);		//未参与循环,只打印a=5
	printf("\n");			//未参与循环,换行1次

	int b;
	for (b = 0; b < 5; b++)	//无符号结尾,仅仅循环for语句的b和下一句
		printf("%d", b);	//参与5次循环,打印b=01234
	printf("\n");			//未参与循环,换行1次

	int c;
	for (c = 0; c < 5; c++){//正确写法
		printf("c = %d", c);//参与5次循环
		printf("\n");		//参与5次循环
	}

	int d = 0;				//当作for语句的初值表达式
	for (; ; ){				//全为空语句
		if (d >= 5){		//当作for语句的条件表达式
			break;			//跳出循环
		}
		printf("d = %d", d);//参与5次循环
		d++;				//当作for语句的步长表达式
		printf("\n");		//参与5次循环
	}						//代码同c执行的完全一样,写法不同

	int e, f;
	for(e = 0, f = 0; e < 10, f < 10; e++, f += 2){
		printf("e = %d", e);//参与5次循环
		printf("\n");//参与5次循环
	}
	return 0;
}

请添加图片描述

4.2.4 嵌套循环

#include <stdio.h>
int main(){								//九九乘法表
	for (int i = 1; i < 10; i++){		//首先根据变化(内层)跟不变(外层)判断内外层
		for (int j = 1; j <= i; j++){	//内层跟外层一样,就停止内层循环
			printf("%d*%d=%2d\t", j, i, j*i);
		}
		printf("\n");
	}
	return 0;
}

请添加图片描述

#include <stdio.h>
#include <stdlib.h>		//调用system函数
#include <Windows.h>	//导入window的API 
int main(){				//时钟
	int hour, minute, second = 0;
	for (hour = 0 ; hour < 24; hour++){			//外层执行一次
		for (minute = 0; minute < 60; minute++){//内层执行一周
			for (second = 0; second < 60; second++){
				system("cls");	//清屏操作
				printf("%02d:%02d:%02d\n", hour, minute, second);
				Sleep(950);		//睡眠950毫秒
			}
		}
	}
	return 0;
}

请添加图片描述
请添加图片描述

4.3 跳转语句break、continue、goto

4.3.1 break语句

在switch条件语句和循环语句中都可以使用break语句。
当它出现在嵌套循环语句中,跳出最近的内循环语句,执行后面的代码。

#include <stdio.h>
int main(){
	for (int a = 0; a < 10; a++){
		for (int b = 0; b < 10; b++){
			if (b == 5)	{	break;		}//结束内层循环,执行50次
			printf("a=%d,b=%d\n", a, b);
		}
	}
	for (int c = 0; c < 10; c++){
		if (c == 5){	break;		}	//结束外层循环,一共执行50次
		for (int d = 0; d < 10; d++)	{	printf("c=%d,d=%d\n", c, d);	}
	}
	return 0;
}

4.3.2 continue语句

结束本次循环,进行下一次循环。

#include <stdio.h>
int main(){
	for (int i = 0; i <= 100; i++){
		if (i % 2 == 0) 	{	continue;	}
		printf("%d是奇数\n", i);
	}
	return 0;
}

4.3.3 goto语句(无条件跳转,尽量少用)

#include <stdio.h>
int main(){
	int i = 0, j = 0;
	for (; i < 10; i++){
		if (i == 5){
			goto flag; //设置跳转的位置
		}
		printf("i%d = %d\n",i, i);
	}

	for (; j < 10; j++){//这种写法就是避免图1的错误(没有赋值j直接跳转运行)
	flag:
		if (j == 5){
			goto end;
		}
		printf("j%d = %d\n", j, j);
	}
	return 0;
end: //还可以跳转到return后面的语句
	printf("end");
	return 0;
}

请添加图片描述

码字不易,如果大家觉得有用,请高抬贵手给一个赞让文章上推荐让更多的人看到吧,也可以评论提出意见让后面的文章内容越来越生动丰富。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值