提示:本篇文章适合初学者阅读、也可用作期末考复习参考
文章目录
前言
本篇文章详细讲解了C语言中分支与循环语句的用法
一、什么是语句?
C语言语句可分为以下五类:
1.表达式语句
2.函数调用语句
3.控制语句
4.复合语句
5.空语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。
可分为三类:
1.条件判断语句:即分支语句:if语句,switch语句。
2.循环执行语句:do while语句、while语句、for语句。
3.转向语句:break语句、goto语句、continue语句、return语句。
二、分支语句(选择结构)
如果你好好学习,赢取白富美,走上人生巅峰。
如果你不学习,毕业即事业,回家卖红薯。
这里就涉及到了一个选择语句。
1.if语句
if(表达式)
语句;
if(表达式)
语句1;
else
语句2;
多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
代码演示
//代码1
#include<stdio.h>
int main()
{
int grade = 0;
scanf("%d",&age);
if(grade<60)
{
printf("不及格\n");
}
}
//代码2
#include<stdio.h>
int main()
{
int grade = 0;
scanf("%d",&grade);
if(grade<60)
{
printf("不及格\n");
}
else
{
printf("及格\n");
}
}
//代码3
#include<stdio.h>
int main()
{
int grade = 0;
scanf("%d",&grade);
if(grade<60)
{
printf("不及格\n");
}
else if(grade>=60 && grade<85)
{
printf("良好\n");
}
else
{
printf("优秀\n");
}
}
如果表达式的结果为真,则语句执行
在C语言中0表示假,非0表示真
如果不在if和else后加上{}则只执行一条语句
如果要执行多条语句,应该使用{},这里一对花括号的内容就是一个代码块
else的匹配: else总是和离它最近的if匹配。
习题讲解
1)判断一个数是否为奇数
#include<stdio.h>
int x=0;
scanf("%d",&x);
if(x%2==0)
printf("%d是偶数\n",x);
else
printf("%d是奇数\n",x);
2)输出1-100之间的奇数
#include<stdio.h>
int main()
{
int i=0;
for(i=1;i<=100;i++)
{
if(i%2!=0)
printf("%d ",i);
}
return 0;
}
2.switch语句
switch语句是一种分支语句。
常用于多分支的情况
举个例子,如果以下情况写成if…else if…else if的形式太过于复杂,此时可以考虑使用switch语句
#include<stdio.h>
int main()
{
int day=0;
scanf("%d",&day);
switch(day)
{
case 1:printf("星期一\n");break; //注意要搭配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;
}
break语句的实际效果是把语句列表划分为不同的分支部分
如果表达式的值与所有的case标签值都不匹配,就会执行default语句后的内容default语句可以出现在任意位置。所以,每个switch语句中只能出现一条default子句。但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
三、循环语句
1.while循环
语法结构
while(表达式)
循环语句;
表达式为真,继续循环,为假,结束循环
例如:在屏幕上打印1-10的数字
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
1)while语句中的break和continue
//break 代码实例
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i = i+1;
}
return 0;
}
这里代码输出的结果是1 2 3 4.在i=5时跳出了循环,没有继续打印。
break在循环中的作用:
在循环中遇到break,就停止了所有的循环
//continue 代码实例1
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
printf("%d ", i);
i = i+1;
}
return 0;
}
这里的代码输出结果是1 2 3 4…死循环,因为当i=5时,不会打印,也不会+1变成6,一直无限循环。
//continue 代码实例2
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
i = i+1;
if(i == 5)
continue;
printf("%d ", i);
}
return 0;
}
这里的输出结果是2 3 4 6 7 8 9 10 11
continue在循环中的作用:
用于终止本次循环,进入到下一次循环判断
2.for循环
语法结构
for(表达式1; 表达式2; 表达式3)
循环语句;
表达式1
表达式1为初始化部分,用于初始化循环变量的。
表达式2
表达式2为条件判断部分,用于判断循环时候终止。
表达式3
表达式3为调整部分,用于循环条件的调整。
使用for循环 在屏幕上打印1-10的数字。
#include <stdio.h>
int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
3.do while()循环
语法结构
do
循环语句;
while(表达式);
特点:循环至少执行一次
使用场景有限
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d\n", i);
}while(i<10);
return 0;
}
结果输出了一个10。
4.练习
1)计算n的阶乘
#include<stdio.h>
int main()
{
int n=0;
int ans=1//储存结果,因为求阶乘,注意要初始化为1
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
ans = ans*i;//ans*=i; 也等效
}
printf("%d\n",ans);//输出结果
return 0;
}
2)计算1!+2!+3!+…+n!
#include<stdio.h>
int main()
{
int n=0;
scanf("%d",&n);
int ret = 1;
int ans=0;
for(int i=1;i<=n;i++)
{
ret*=i;//求出i的阶乘
ans+=ret;//把每次阶乘的结果保存
}
printf("%d\n",ans);
return 0;
}
3)二分查找(在一个有序数组中查找具体数字n)
#include<stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int left = 0;
int right = sizeof(arr)/sizeof(arr[0])-1;
int key = 7;
int mid = 0;
while(left<=right)
{
mid = (left+right)/2;
if(arr[mid]>key)
{
right = mid-1;
}
else if(arr[mid] < key)
{
left = mid+1;
}
else
break;
}
if(left <= right)
printf("找到了,下标是%d\n", mid);
else
printf("找不到\n");
}
总结
本篇文章详细讲解了分支与循环语句,讲了for循环、while循环、do while循环三大循环的特点和用法,以及一些基础习题的讲解。