一个完整的程序控制流包含下面三种控制流:
1.顺序流程 (从上到下顺序执行)
2.分支流程 (有所选择执行)
3.循环流程 (循环执行)
(一)常用的一些语句
① if()…else (条件语句)
② for()… (循环语句)
③ while() (循环语句)
④ do...while() (循环语句)
⑤ continue (结束本次循环语句)
⑥ break (中止执行switch或循环语句)
⑦ switch (多分支选择语句)
⑧ return (从函数返回语句)
if()…else (条件语句)
1. if语句
#include <stdio.h>
#include <stdlib.h> //使用exit函数需要包含 stdlib.h的头文件
int main()
{
int data;
puts("请输入一个整形数");
scanf("%d",&data);
if(data > 5){ //如果data > 5
puts("data > 5"); //输出 "data > 5"
exit(0); //程序结束退出
}
puts("data < 5"); //如果data > 5 ,则会执行exit(0),程序结束退出; 第12行语句就不会执行
return 0;
}
if()else()语句
#include <stdio.h>
int main()
{
int data;
puts("请输入一个整形数");
scanf("%d",&data);
if(data > 5){ //如果data > 5,执行8行行{到 10行}中的程序
puts("data > 5"); //输出 "data > 5"
}else{ //如果data < 5曾则执行else{} 中的程序
puts("data < 5");
}
return 0;
}
if语句代数法交换值
#include <stdio.h>
int main()
{ //如果data1 > data 2的值,则交换data1和data2 中的值
int data1 ;
int data2 ;
int temp; //temp用于临时接收data1 或者data2的值
puts("请输入data1的值");
scanf("%d",&data1);
puts("请输入data2的值");
scanf("%d",&data2);
if(data1 > data2){
printf("交换data1和data2 中的值\n");
temp = data1;
data1 = data2;
data2 = temp;
}else{
printf("data2 > data1 不需要交换\n");
}
printf("data1 = %d,data2 = %d\n",data1,data2);
return 0;
}
逻辑运算符
#include <stdio.h>
int main()
{
int a;
int b;
printf("请输入a,b两个数:\n");
scanf("%d%d",&a,&b);
if( a==1 && b==0){ //逻辑与:&& 需要同时满足两个要求 一个'='是赋值,两个'='判断是否相等
printf("逻辑与成功\n");
}
if( a==1 || b==0){ //逻辑或:|| 只需要满足一个要求
printf("逻辑或成功\n");
}
if( !a ){ //逻辑非:! 相反作用
printf("逻辑非\n");
}
return 0;
}
if语句嵌套
#include <stdio.h>
int main()
{
int a;
puts("请输入一个整数");
scanf("%d",&a);
if( a >1 && a <5 ){
printf("1< a <5\n");
if( a >2 && a < 4){
printf("a = %d \n",a);
}else {
printf("a = 2 or a = 3 or a = 4\n");
}
} else{
printf("a>5 || a < 1\n");
}
return 0;
}
2.switch选择语句
#include <stdio.h>
int main()
{
char data;
int data2;
printf("请输入一个字符\n");
data = getchar();
printf("请输入一个整形数\n");
scanf("%d",&data2);
switch(data){ //如果data = a ;则执行第9、10行语句,以下同理
case 'a':printf("this is a\n");
break; //break :结束本次循环
case 'b':printf("this is b\n");
break;
case 'c':printf("this is c\n");
break;
default: printf("请输入正确的字符\n"); //default:若data ≠ a,b,c;则执行这条语句
break;
}
switch(data2){ //如果data = a ;则执行第9、10行语句,以下同理
case 1:printf("this is 1\n");
break; //break :结束本次循环
case 2:printf("this is 2\n");
break;
case 3:printf("this is 3\n");
break;
default: printf("请输入正确的数字\n"); //default:若data ≠ a,b,c;则执行这条语句
break;
}
return 0;
}
#include <stdio.h>
int main()
{
int data2;
printf("请输入一个整形数\n");
scanf("%d",&data2);
switch(data2){
case 1:
case 2:printf("this is 1、2\n");
break;
case 3:printf("this is 3\n");
break;
default: printf("请输入正确的数字\n"); //default:若data ≠ a,b,c;则执行这条语句
break;
}
return 0;
}
#include <stdio.h>
int main()
{
int x;
int y;
scanf("%d",&x);
if(x < 1){
y = x;
}else if(x >=1 && x < 10 ){
y = 2*x-1;
}else if(x>=10){
y = 3*x -11;
}
printf("y = %d\n",y);
return 0;
}
3.while循环语句
#include <stdio.h>
int main()
{
int data = 10; //第一个表达式,变量初始值
int number = 1;
//循环10次
while(data){ // 第二个表达式,条件临界值 data值为0时不执行{}内程序 while():()里的内容为真(非零),则执行{}里的内容
printf("%d\n",number++); //number++:先打印number的值再给number的值加一;++number:先给number加一再打印
data--; //同上 data的值:10 9 8 7 6 5 4 3 2 1 0
data = data -1; //第三个表达式,条件发生变化
}
/*
while(1){ //死循环,一直执行
}
*/
return 0;
}
#include <stdio.h>
//计算 1~100的和
int main()
{
int number = 1;
int sum = 0; //记得赋予初值,不然会有随机数
while(number <= 100){
sum = sum + number;
number++;
}
printf("sum = %d\n",sum);
return 0;
}
do...while循环
#include <stdio.h>
//do..while 和 while的区别
int main()
{
int data = 0;
/*
while(data != 0){
printf("data = %d\n",data);
}
*/
do{ //do...while 先执行do{}的内容再去判断while
printf("data = %d\n",data);
}while(data != 0);
return 0;
}
4.for循环语句
#include <stdio.h>
int main()
{
int i ;
/*
int i = 1;
for(; i < 5 ; i ++)
*/
/*
for(; i < 5 ;){ 与 while(i < 5)相似
//循环体
i++;
}
*/
//
/*
for(int i = 0 ; i < 5 ; i ++)
*/
// 赋初值 判断临界值 条件改变
// 表达式1 表达式2 表达式3
for(i = 0 ; i < 5 ; i ++){
printf("这里是循环体\n"); //循环体
}
/*
for(;;){ //死循环,一直执行
}
*/
return 0;
}
5.break & continue 循环干涉
break
#include <stdio.h>
int main()
{
int data;
int temp;
int number = 0;
for(data = 1 ; data < 10 ;data++){
printf("请输入一个数\n");
scanf("%d",&temp);
number = number + temp;
if(number >= 20){
printf("已经有20了,现在有%d\n",number);
break; //结束本次循环
}
}
return 0;
}
continue
#include <stdio.h>
//水仙花案列
int main()
{
int data;
for(data = 100;data <= 200;data++){
if(data % 3 != 0){ //满足 data除3取余数,余数不等于0,执行{}内程序
continue; //提前结束本次循环,直接进入下一次循环
}
printf("%d ",data);
}
return 0;
}
循环的嵌套输出
#include <stdio.h>
/*
要求输出如此矩阵:
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
*/
int main()
{
int j;
int k;
int data = 0;
for(j = 1 ; j < 5 ;j++){
for(k = 1 ; k <= 5 ;k++){
data = j * k;
printf("%d ",data);
}
printf("\n");
}
return 0;
}