目录
分支语句
if语句
- if语句的三种结构
if(表达式)
语句;
if(表达式)
语句1;
else
语句2;
//注意: if else这个整体为一个语句,不要认为if(表达式)是一个语句,else又是一个语句
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
- 错误写法
//18~30 青年
//31~50 中年
int main()
{
int age=0;
scanf("%d",&age);
if(18<=age<=30)
printf("青年");
}
注意:以上写法错误,程序会先进行判断18<=age是否为真,
如果结果为真,则18<=age这个表达式就相当于是1,进而判断1<=30
如果结果为假,则18<=age这个表达式就相当于是0,进而判断0<=30
从而输出结果为:青年
- 正确写法
int main()
{
int age=0;
scanf("%d",&age);
if(18<=age&&age<=30)//使用&&符号
printf("青年");
}
示例:
/*age<18 未成年
18~30 青年
31~50 中年
51~70 中老年
71~99 老年
>99 老寿星 */
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
printf("未成年");
else if (age <= 30)
printf("中年");
else if (age <= 70)
printf("中老年");
else if (age <= 99)
printf("老年");
else
printf("老寿星");
return 0;
}
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("未成年\n");
}
else if(age>=18 && age<=30)
{
printf("青年\n");
}
else if(age>30 && age<=50)
{
printf("中年\n");
}
else if(age>50 && age<=70)
{
printf("中老年\n");
}
else if(age>70&&age<=99)
{
printf("老年\n");
}
else
{
printf("老寿星\n");
}
return 0;
}
- if else 的配对问题
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
//这里即使else和第一个if(a==1)相齐,但实际上它是和if(b==2)是配套的
//这样写容易致使逻辑混乱
printf("haha\n");
return 0;
}
改正
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
//改正后逻辑就清晰起来了
注:(1)if 和else后面默认只能跟一条语句,如果要执行多条语句,应用{ }括起来
(2)else和离得最近的if匹配
- 判断常量和变量相等的问题
int main()
{
int a=10;
if(5==a)
printf("hehe\n");
//即使手误写成了a=5这样的赋值语句,编译器也会给出提示
return 0;
}
注意:C语言中变量是可以被赋值的,但表达式不行
switch语句
- 语法结构
switch(表达式)
{
case常量1:
语句1;
case常量2:
语句2;
case常量3:
语句3;
...
case常量n:
语句n;
default:
语句;
}//根据需求添加break
- 示例
//输入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;
default:
printf("输入错误\n");
break;
}
return 0;
}
循环语句
while循环语句
- 语法结构
while(表达式)
循环语句;
- while语句中存在continue语句
- while循环中continue的作用:跳过本次循环的后边的代码,直接去判断部分,看是否进行下一次判断
- while循环中的break是永久的终止循环,只要遇到break,循环就终止
int main()
{
int i = 1;
while(i<=10)//判断部分
{
if(i==5)
continue;
printf("%d ",i);
i++;
}
return 0;
}
结果为:1 2 3 4 (不断执行)
int main()
{
int i=1;
while(i<=10)
{
i++;
if(i=5)
continue;
printf("%d ",i);
}
return 0;
}
结果为:2 3 4 6 7 8 9 10 11
- getchar()和putchar的用法
- getchar() 获取(输入)一个字符getchar读取字符成功的时候,返回字符的ASCII码值;读取失败或遇到文件末尾的时候就返回EOF
- putchar() 输出一个字符
- 运行时 Ctrl+z(敲回车)终止程序
示例
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
if (ch < '0' || ch > '9')
continue;
putchar(ch);
}
return 0;
}
代码目的:输出字符 '0'~'9'
- 缓冲区
- 解决
do-while循环语句
- 语法结构
do
循环语句;
while(表达式);
语法特点:循环至少执行一次
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d ", i);
}while(i<10);
return 0;
}
结果:10
关于break和continue语句在do-while循环语句中的使用和在while语句中的用法相同
for循环语句
- 语法结构
for(表达式1; 表达式2; 表达式3)
循环语句;
表达式1
表达式1为初始化部分,用于初始化循环变量
表达式2
表达式2为条件判断部分,用于判断循环是否终止
表达式3
表达式3为调整部分,用于循环条件的调整
执行先后顺序
- for循环中的continue语句
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;
printf("%d ",i);
}
return 0;
}
结果:1 2 3 4 6 7 8 9 10
注:在for循环中,如果遇到continue,会跳过continue后边的代码,直接去循环的调整部分,注意区别while循环中的continue
- for循环中的break语句
break在for循环中也是直接终止循环,只要遇到break,循环就直接结束,这里和while循环相同
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ",i);
}
return 0;
}
结果:1 2 3 4
- for循环中省略表达式
for循环的三个表达式都可以省略,但是:判断部分如果省略了,就意味着判断部分恒为真,可能导致死循环
示例:
int main()
{
//代码1
for(;;)
{
printf("hehe\n");
}
return 0;
}
结果:hehe死循环
示例:
- 使用多余一个变量控制循环
int main()
{
int x=0, y=0;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}
结果:hehe
hehe