C语言是结构化的程序设计语言
1.顺序结构
2.选择结构 if、switch
3.循环结构 while、for、do while
一、什么是语句
二、分支语句(选择结构)
1.if语句
语法结构:
int main()
{
int age=0;
scanf("%d",&age);
if(age>=18)
printf("成年\n");
}
int main()
{
int age=0;
scanf("%d",&age);
if(age>=18)
printf("成年\n");
else
printf("未成年\n");
}
多分支
if(表达式1)
语句1;
else if(表达式2)
int main()
{
int age=0;
scanf("%d",&age);
if(age<18)
{
printf("未成年\n");
printf("好好学习\n");
}
else if(age>=18&&age<30)
printf("青少年\n");
else if(age>=30&&age<50)
printf("中年\n");
else if(age>=50&&age<80)
printf("中老年\n");
else
printf("老年\n");
}
1)悬空else
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
}
什么都不打印,下面的if、else匹配
改正
//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
}
打印haha
2)if书写形式的对比
int test2()
{
int a=0;
if(a)return 1;
elae return 0;
}
int test1()
{
int a=0;
if(a)
return 1;
return 0;
}
int main()
{
int ret1=test1();
int ret2=test2();
printf("ret1=%d\n",ret1);//0
printf("ret2=%d\n",ret2);//0
}
int main()
{
int num = 1;
if(num=5) //赋值
{
printf("hehe\n");//hehe
}
}
3)练习
eg1. 判断一个数是否为奇数
int main()
{
int n=0;
scanf("%d",&n);
if(n%2==1)
{
printf("奇数\n");
}
}
eg2. 输出1-100之间的奇数
int main()
{
int i=1;
while(i<=100)
{
if(i%2==1)//对i进行判断
printf("%d ",i);
i++;
}
}
2.switch语句
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一\n");
break;//决定出口
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
}
写成 if...else if ...else if 的形式太复杂,那我们就得有不一样的语法形式,这就是switch 语句。
switch(整型表达式){语句项;}//语句项是一些case语句://如下:case 整型常量表达式:语句;
1)在switch语句中的 break
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
}
}
break语句的实际效果是把语句列表划分为不同的分支部分。
2)default子句
#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)//1
{
case 1:
m++;//m=3
case 2:
n++;//n=2
case 3:
switch (n)//2
{//switch允许嵌套使用
case 1:
n++;
case 2:
m++;//m=4
n++;//n=3
break;//跳出自己的switch
}
case 4:
m++;//m=5
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);//m=5,n=3
}
三、循环语句
1.while循环
int main()
{
while(1)
printf("hehe\n");
}
//while 语法结构while(表达式)循环语句;
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
}
//break 代码实例
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);//1 2 3 4
i = i+1;
}
}
//continue 代码实例1
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
printf("%d ", i);//1 2 3 4死循环
i = i+1;
}
}
//代码1
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
}
这里的代码适当的修改是可以用来清理缓冲区的.
int main()
{
char ch = '\0';
while ((ch = getchar()) != EOF)
{
if (ch < ‘0’ || ch > ‘9’)
continue;
putchar(ch);
}
}
//这个代码的作用是:只打印数字字符,跳过其他字符
2 .for循环
1 )语法
for(表达式1; 表达式2; 表达式3)循环语句;
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
}
2)break和continue在for循环中
break
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ",i);//1 2 3 4
}
}
continue
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;
printf("%d ",i);//1 2 3 4 6 7 8 9 10
}
}
int main()
{
int i = 0;
for(i=1; i<=10;)
{
if(i == 5)
continue;
printf("%d ",i);//1 2 3 4死循环
i++;
}
}
3)for语句的循环控制变量
a. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
b. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
int i = 0;//前闭后开的写法for(i=0; i<10; i++){}//两边都是闭区间for(i=0; i<=9; i++){}
4)一些for循环的变种
int main()
{
for(;;)//for循环的判断部分省略了,就意味着判断恒为真
{
printf("hehe\n");
}
}
int main()
{
int i = 0;
int j = 0;
//这里打印多少个hehe?
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
printf("hehe\n");//100个
}
}
}
int main()
{
int i = 0;
int j = 0;
//这里打印多少个hehe?
for(; i<10; i++)
{
for(; j<10; j++)//第二次及以上循环式j由于没有初始化始终为10
{
printf("hehe\n");//10个
}
}
}
//使用多于一个变量控制循环
int main()
{
int x, y;
for (x = 0, y = 0; x<2 && y<5; ++x, y++)
{
printf("hehe\n");
}
}