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;
}