目录
分支语句(选择结构):
-if语句
-switch语句
循环语句:
-while语句
-for语句
-do while语句
C语言是结构化的程序设计语言,这里的结构是指顺序结构,选择结构,循环结构。
1.if语句
1.1 if
if语句的表达式为
if(表达式)
{
语句;
}
在C语言中,0表示假,非0表示真,表达式为0,语句不执行,表达式为非0,则语句执行。
例子
当表达式为真时,输出打印“我爱C语言”。
#include <stdio.h>
int main()
{
if (1)
{
printf("我爱C语言\n");
}
return 0;
}
当表达式为假时 ,显然是没输出任何东西的。
#include <stdio.h>
int main()
{
if (0)
{
printf("我爱C语言\n");
}
return 0;
}
1.2 else
如果一个数不是奇数,那么就是偶数,那我们该如何清楚地判断一个整数是奇数还是偶数呢,就得运用双分支结构 if...else语句了,该语句表达式为:
if(表达式)
{
语句块1;
}
else(表达式)
{
语句块2;
}
例子:输入一个年龄,大于等于18输出成年,否则输出未成年。
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{
printf("成年了\n");
}
else
{
printf("未成年\n");
}
return 0;
}
1.3 嵌套if
另外,在if语句中,else还可以和另外一个if连用,构成多重语句,该语句表达式为:
if(表达式1)
{
语句块1;
}
else if(表达式2)
{
语句块2;
}
else if(表达式3)
{
语句块3;
}
......
else if(表达式n)
{
语句块n;
}
else
{
语句块m;
}
例子:输入一个正数,再判断是奇数还是偶数,如果不是正数则输出负数。
#include <stdio.h>
int main()
{
int number = 0;
scanf("%d", &number);
if (number > 0)
{
if (number % 2 == 0)
{
printf("是偶数\n");
}
else
{
printf("是奇数\n");
}
}
else
{
printf("是负数\n");
}
return 0;
}
2.switch语句
switch语句是C语言另外提供的一种选择结构语句,也是可以实现分支结构的。其语法格式为:
switch(表达式)
{
case 常量表达式1: 语句块1
case 常量表达式2: 语句块2
default: 语句块
}
执行流程是:根据表达式中不同的值执行相应的case语句,如果表达式中的值与后面所有case常量表达式均不匹配则执行default后面的语句。
注:一般情况下需要使用break语句跳出switch语句,如果一个case语句后没有break语句,代码会一直执行下去,这样就有可能会执行其他case语句中的代码了,因此break在switch语句中起着关键作用,有了break才真正实现了分支效果。
例子:输入1~7七个数字,打印输出对应的星期几。
#include <stdio.h>
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;
}
return 0;
}
拓展:当输入1-5时,输出是“工作日”;当输如6、7 时,输出是“休息日”。
思路:只需将上面代码稍修改正即可实现,即在情况5和7的后面加上输出并使用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("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}
3.while语句
语法格式:
while(条件表达式)
{
循环体/语句块
}
执行流程是:首先上来是执行判断表达式,如果表达式为真则进入循环体,如果为假则退出循环体。
例子:在屏幕上输出打印1~20的值。
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 20)
{
printf("%d ", i);
i++;
}
return 0;
}
4.for语句
语法格式是:
for(表达式1;表达式2;表达式3)
{
循环体;
}
表达式1:用于循环变量的初始化
表达式2:用于循环结束条件的判断
表达式3:用于循环变量的调整
执行流程是:先执行表达式1,初始化变量;再执行表达式2的判断部分,如果为真则执行循环体,否则循环结束;循环语句执行完后再执行表达式3,调整循环变量,然后再去执行表达式2的判断部分,表达式2结果真假如何,决定循环是否继续。
例子:在屏幕上打印1~20的值。
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 20; i++)
{
printf("%d ", i);
}
return 0;
5.do while语句
在循环语句中使用频率最少,其语法格式为:
do
{
语句;
}while(表达式);
执行流程是:先执行do后面的语句,然后判断while后面的表达式是否成立,如果成立,则继续执行do后面的语句,执行完后接着执行while后面的表达式,如果不成立则循环结束。
例子:在屏幕上打印1~20的值。
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
} while (i <= 20);
return 0;
}
while和do while的区别:
1.while是先判断条件是否成立,再选择是否进入循环体,do while是一开始直接进入循环体然后再判断条件是否成立,再决定是否进入循环体。
2.while语句没有逗号,do while语句中的while后面有逗号。
3.while写在大括号之前,do while中的while写在大括号之后。
循环嵌套
我们学习了while,for,do while三种循环,往往我们需要将这三中循环一起使用才能更好地解决一些问题。
例子:找出100~200之间的素数,并在屏幕上打印出来。
分析:
1.从100~200之间找出素数,首先得有100~200的数,这个用for循环实现。
2.假设要判断i是否为素数,则需要拿2~i-1之间的数字去试除i,需要产生2~i-1个数字,这个也可以用for循环来实现。
3.如果2~i-1中有数字能将i整除,则i不是素数,反之是素数。
代码如下:
#include <stdio.h>
int main()
{
int i = 0;//i是100~200之间的数
for (i = 100; i < 200; i++)//产生100~200的数
{
int flag = 1;//假设i1是素数
int j = 0;//j是2~i-1之间的数
for (j = 2; j < i - 1; j++)//产生2~i-1的数
{
if (i % j == 0)
{
flag = 0;//不是素数
break;
}
}
if (flag == 1)
{
printf("%d ", i);
}
}
return 0;
}