C语言_4 程序流程结构

4 程序流程结构

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

  • 顺序结构:程序按顺序执行,不发生跳转。
  • 选择结构:依据是否满足条件,有选择的执行相应功能。
  • 循环结构:依据条件是否满足,循环多次执行某段代码。

4.2 选择结构
4.2.1 if语句
4.2.2 if…else语句
4.2.3 if…else if…else语句
在这里插入图片描述

#include<stdio.h>
int main()
{
	int score;
	scanf("%d\n", &score);
	//如果表达式结果为真 执行{}对应的代码
	//if(表达式)
	//if(表达式){} else{}
	//if(表达式1){} else if(表达式2){} esle{}
	if (score > 700)
	{
		printf("我要上清华");
	}
	else if (score > 680)
	{
		printf("我要上北大");
	}
	else
	{
		printf("我要上传智");
	}
	return 0;
}
#include<stdio.h>
//三只小猪称体重
int main()
{
	if (a > b)
	{
		if (a > c)
			printf("小猪a最重\n") 
		else
		{
			printf("小猪c最重\n")
		}
	}
	else
	{
		if (b > c)
			printf("小猪b最重\n") 
		else
		{
			printf("小猪c最重\n")
		}
	}
	return 0;	
}

4.2.4 三目运算符

#include<stdio.h>
//#define 重定义 常量、函数、表达式
//重定义表达式
#define MAX(a,b) (a)>(b)?(a):(b)
int main()
{
	int a = 10;
	int b = 20;
	printf("%d\n", MAX(a,b));
	return 0;
}
int main07()
{
	int a = 10;
	int b = 20;
	//if(a>b)
	//{
	//	printf("a大\n");
	//}
	//else
	//{
	//	printf("b大\n");
	//}
	//表达式1?表达式2:表达式3; 表达式1为真-->执行表达式2,否则执行表达式3
	//c = a > b ? a : b;
	printf("最大值为:%d\n", a > b ? a : b);
	return 0;
}

4.2.5 switch语句

#include<stdio.h>
int main()
{
	int score;
	scanf("%d", &score);
	switch(score/10)
	{
	case 10:
		printf("优秀\n")break;
	case 9:
		printf("优秀\n")break;
	case 9:
		printf("优秀\n")break;
	case 8:
		printf("良好\n")break;		
	case 7:
		printf("良好\n")break;
	case 6:
		printf("及格\n")break;
	default://else
		printf("不及格\n");
		break;
	}
	return 0;
}

循环 挨个判断,switch 满足条件直接判断 执行效率高;swich只能判断单一区间 要么满足要么不满足区间 不能判断多个区间 如[80,90]一个档 不允许嵌套
4.3 循环结构
4.3.1 while语句
在这里插入图片描述

#include<stdio.h>
int main08()
{
	//while(表达式){}
	int i = 0;
	//死循环
	while (i < 10)
	{
		printf("%d\n", i);
	}
	return 0;
}
//打印1-100内所有偶数
int main()
{
	int i = 1;
	while(i <= 100)
		if( i % 2 == 0)
		{
			printf("%d\n", i);
		}
		i++;	
	return 0;		
}
//1-100 凡是带7或7的倍数都需要敲桌子,否则正常输出
int main09()
{
	int i = 1;
	while(1<=100)
	{
		//7的倍数 各位带7 十位带7
		if(i % 7 ==0 || i % 10 ==7 || i / 10 == 7)
			{
				printf("敲桌子你\n");
			}
		else
		{
			printf("%d\n", i);
		}	
		i++;	
	}
	return 0;
}

4.3.2 do…while语句
do后面的代码一开始有可能为假,执行完后为真,最后条件为假退出循环。

#include<stdio.h>
#include<math.h>
int main10()
{
	int i = 0;
	do
	{
		printf("%d\n", i);
		i++;
	}while (i);//执行次数过大最后溢出变为0,停止循环

	while(i)
	{
		printf("%d\n", i);
		i++;
	}//不执行
	return 0;
}
//水仙花 100-999 各个位数的立方和相加等于这个数本身就是一个水仙花数
int main()
{
	int i = 100;
	do
	{
		int a = i % 10;//个位数
		int b = i / 10 % 10;//十位数
		int c = i2 = i/100;//百位数
		//if (a*a*a + b*b*b + c*c*c == i)
		//pow 计算次方根 double pow(double x,double y)计算以x为底的y次方值
		//开头导入#include<math.h>
		if(pow(a, 3) + pow(b, 3) + pow(c, 3) == i)
			printf("%d\n", i);	
	}while(i<=999);
	return 0;
}

4.3.3 for语句

#include<stdio.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
int main10()
{
	//int i;
	for (int i = 0; i < 10; i++)
	{
		printf("%d\n", i);
	}

	int j = 5;
	for (int i = 0; i < 10, j < 10; i++, j+=5)
	{
		printf("%d\n", i);
	}
	return 0;
}
//猜数字 通过程序产生随机一个1-100之内的数
int main()
{
	//产生随机数
	//1.导入头文件 time.h stdlib.h
	//2.添加随机数种子
	//3.获取随机数
	strand((unsignes int)time(NULL));//每次随机数不一样
	for (int i = 0; i < 10; i++)
		{
			int value = rand()%10;//0-9
			printf("%d\n", value);
		}
	return 0;
}
int main11()
{
	int value = rand()%100;//0-99
	int num;
	for(;;)
	{
		printf("请输入数字:");
		scanf("%d", &num);
		if (value > num)
		{
			printf("您输入的数太小了\n");
		}
		else if (value < num)
		{
			printf("您输入的数太大了\n");
		}
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
	}
	return 0;
}

4.3.4 嵌套循环

#include<stdio.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
#include<Windows.h>
int main12()
{
	//外层执行一次,内层执行一周
	for (int i = 0; i < 5; i++)
	{
		for(int j = 0; j < 5; j++)
		{
			sysrem("cls");//清屏
			printf("i = %d, j = %d\n", i,j);
			Sleep(980);//980毫秒
		}
	}
	return 0;
}
//打印钟表
int main13()
{
	for (int i = 0; i < 24; i++)
	{
		for (int j = 0; j < 60; j++)
		{
			for (int z = 0; z < 60; z++)
			{
				printf("%02d:%02d:%02d", i, j, z);
			}
		}
	}
	return 0;
}
//打印九九乘法表
/*
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
*/
int main14()
{
	for (int i = 1; i < 9; i++)
	{
		for (int j = 1; j < i; j++)
		{
			printf("%d*%d=%d\t", i, j, i*j);
		}
		printf("\n");
	}
	return 0;
}

4.4 跳转语句break、continue、goto
4.4.1 break语句
在switch条件语句和循环语句中都可以使用break语句:

  • 当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构
  • 当它出现在循环语句中,作用是跳出当前内循环语句,执行后面的代码
  • 当它出现在嵌套循环语句中,跳出最近的内循环语句,执行后面的代码
#include<stdio.h>
int main15()
{
	for (int i = 0; i < 10; i++)
	{
		for(int j = 0; j < 10; j++)
		{
			if (j == 5)
			{
				break;
			}
			printf("%d %d\n", i,j);
		}
	}
	return 0;
}

4.4.2 continue语句
在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句

#include<stdio.h>
int main16()
{
	for (int i = 0; i < 100; i++)
	{
		for(int i % 2 ==1)
		{
			continue;
		}
		printf("%d %d\n", i,j);
	}
	return 0;
}

4.4.3 goto语句(无条件跳转,尽量少用)
定义标志位,跳转到所在标志位 标志位一般大写

#include<stdio.h>
int main17()
{
	printf("hello world1\n");
	printf("hello world2\n");
	goto FLAG;
	printf("hello world3\n");
	printf("hello world4\n");
	FLAG:
	printf("hello world5\n");
	printf("hello world6\n");
	return 0;
}
int main17()
{
	printf("hello world1\n");
	printf("hello world2\n");
	goto FLAG;
	printf("hello world3\n");
	printf("hello world4\n");
	return 0;
FLAG: //可以将程序放在return后面,程序遇到return停止
	printf("hello world5\n");
	printf("hello world6\n");
}
int main18()
{
	int i=0,j=0;
	for(i = 0; i <10; i++)
	{
		if (i == 5)
		{
			goto FLAG1;
		}
		printf("i = %d\n", i);
	}
	for (j = 0; j <10; j++)
	{
		FLAG:
			printf("j = %d\n", j);
			//上面直接跳转到这,j还没赋值 会报错,所以开头要赋值
			//这个循环中对j=0赋值无意义,因为没有执行到这句话 不要在函数中跳转
	}
	return 0;
}
//死循环
int main19()
{
FLAG:
	printf("hello world");
	//if(1)
	//{
	//	return 0;//或从这里跳到另外一个FLAG中
	//}
	goto FLAG;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值