C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,if 、 switch 实现分支结构,使用 for 、 while 、 do while 实现循环结构。
if语句
if
if(表达式)
语句
//表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行
//在C语言中,0为假,⾮0表⽰真
例如:输入一个整数,判断是否为偶数
#include <stdio.h>
int main()
{
int num = 0;//给变量进行初始化
scanf("%d", &num);//输入数字
if(num % 2 == 0)
printf("%d是偶数\n", num);
return 0;
}
else
if ( 表达式 )
语句1
else
语句2
//if与else连用,如果满足if,执行语句1,否则执行语句2
例子:输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
else
printf("%d 是偶数\n", num);
return 0;
}
默认在 if 和 else 语句中默认都只控制一条语句
若要控制多条语句,则需在后加上{}
if(表达式)
{语句}
else
{语句}
例子:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
printf("成年了\n");
printf("可以交谈恋爱了\n");
}
else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("未成年\n");
printf("不可以早恋哦\n");
}
return 0;
}
嵌套if
在if else 语句中, else可以与另一个if 语句连用,构成多重判断。
例子:要求输入一个整数,判断输入的整数是0,还是正数或者负数。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num == 0)
printf("输⼊的数字是0\n");
else if(num > 0) //这⾥的if 相当于嵌套在els语句中,形成了嵌套结构
printf("输⼊的数字是正数\n");
else
printf("输⼊的数字是负数\n");
return 0;
}
关系操作符
• > 大于运算符
• < 小于运算符
• >= 大于等于运算符
• <= 小于等于运算符
• == 相等运算符
• != 不相等运算符
关系表达式通常返回 0 或 1 ,表示真假。
多个关系运算符不宜连用。
逻辑操作符:&& , || , !
- ! :逻辑取反运算符(改变单个表达式的真假)。
if(!flag)
{
printf("do something\n");
}
//如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真
- && :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
int month = 0;
scanf("%d", &month);
if(month >= 3 && month <= 5)
{
printf("春季\n");
}
//月份是3月到5月,是春天
//month既要大于等于3,⼜要小于等于5,必须同时满⾜
- || :或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。
int month = 0;
scanf("%d", &month);
if(month == 12 || month==1 || month == 2)
{
printf("冬季\n");
}
//一年中月份是12月或者1月或者2月是冬天
短路
如果不满足左边表达式,那么就不用考虑右边了
if(month >= 3 && month <= 5)
如果满足左边其中一个表达式,那么就不用考虑右边了
if(month ==12 || month==1 || month == 2)
switch语句
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
//根据表达式 expression 不同的值,执行相应的 case 分支。如果找不到对应的值,就执行 default 分支
switch 后的 expression 必须是整型表达式
case 后的值,必须是整形常量表达式
只有在 switch 语句中使用 break 才能在跳出 switch 语句,如果某一个 case 语句的后边没有 break 语句,代码会继续玩下执行,有可能执行其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。
while循环
例子:在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
for循环
for(表达式1; 表达式2; 表达式3)
语句;//如果循环体想包含更多的语句,可以加上大括号
表达式1 用于循环变量的初始化
表达式2 用于循环结束条件的判断
表达式3 用于循环变量的调整
例子:在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
do-while循环
do
语句;
while(表达式);
// do while 循环则是先直接进⼊循环体,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环
例子:在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
break和continue语句
• break 的作用是用于永久的终止循环,只要 break 被执行,直接就会跳出循环,继续往后执行。
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;//当i等于5后,就执行break,循环就终止了
printf("%d ", i);
i = i+1;
}
return 0;
}
• continue 的作用是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所差异的。
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
//当i等于5后,就执行continue,直接跳过continue的代码,去循环的判断的地⽅
//因为这里跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环
printf("%d ", i);
i = i+1;
}
return 0;
}
goto语句
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next:
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
猜数字游戏
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void game()
{
int r = rand()%100+1;
int guess= 0;
while(1)
{
printf("请猜数字>:");
scanf("%d", &guess);
if(guess < r)
{
printf("猜⼩了\n");
}
else if(guess > r)
{
printf("猜⼤了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
void menu()
{
printf("***********************\n");
printf("****** 1. play ******\n");
printf("****** 0. exit ******\n");
printf("***********************\n");
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("游戏结束\n");
break;
default:
printf("选择错误,重新选择\n");
break;
}
}while(input);
return 0;
}