前面讲的内容都只能编写一些简单的程序,而学了控制结构后就可以用c语言编写一些较为复杂的程序了。由于复杂的问题往往需要根据条件的真假来按照不同的方法来执行不同的步骤,或者为了达到某一条件而对同一算法执行若干次,所以控制结构可以大致分为顺序结构,选择结构和循环结构。
一、顺序结构
顺序结构是最简单也最基础的c语言控制结构,它是完全按照语句的先后顺序执行的。由于比较简单也比较常见,直接来个例题大家应该就明白了。
例
尝试输入两个值x和y,交换他们之间的值并输出他们交换前和交换后的值。
代码实现:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x,y,z;/*定义x,y,z变量,这里z变量用于x,y交换时临时储存x的值*/
scanf("%d %d",&x,&y);
printf("before x=%d,y=%d\n",x,y);/*此代码在交换的代码之前,所以此时x,y还未交换*/
z=x;
x=y;
y=z;/*实现x,y的交换*/
printf("after x=%d,y=%d",x,y);/*输出交换后的x,y的值*/
return 0;
}
输入
5 6
输出
before x=5,y=6
afte rx=6,y=5
所谓的顺序结构也就是最深入我们生活的“先来后到”,在前面的先执行,在后面的后执行。
二、选择结构
选择结构顾名思义,就是根据不同情况选择不同方法的结构。它能根据不同的判断条件来执行不同的操作步骤,所以在c语言中用处十分广泛。
1、swich语句
“swich”这一单词有“开关,转换器”的意思,而swich语句也如同开关一样起选择作用。要注意的是当case n的表达式成立时,会自动执行case n后面的所有程序。
一般形式
swich()
{
case 常量表达式1:
语句序列1;
case 常量表达式2:
语句序列2;
...
caes 常量表达式n:
语句序列n;
}
它的变化不多,我们直接来个例题吧。
例
试编写此程序,当用户未操作时显示“话费查询请按1,手机充值请按2,人工服务请按3,其他操作请按4”,当输入1时显示“正在查询中,请稍后”;输入2时显示“请登录官网充值”;当输入3时显示“正在转接中”;当输入4时显示“系统繁忙”。
题目分析
这是典型的要求制作菜单类型的题目,由于没有数字运算,所以swich语句成了上上选。但是要注意当case中的一个成立时后面的都会执行,所以我们此时要用上break语句表示停止此结构。
代码实现
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x;
printf("话费查询请按1,手机充值请按2,人工服务请按3,其他操作请按4\n");
scanf("%d",&x);/*输入x*/
switch(x)
{
case 1:
printf("正在查询中,请稍后");
break;
case 2:
printf("请登录官网充值");
break;
case 3:
printf("正在转接中");
break;
case 4:
printf("系统繁忙");
break;
}
return 0;
}
未输入时显示
话费查询请按1,手机充值请按2,人工服务请按3,其他操作请按4
输入样例
2
输出样例
请登录官网充值
swich语句经常被使用在制作菜单等程序中,在编写菜单或表格类的题目时,我们可以优先考虑swich语句。
2、if语句
if语句用于判定条件是否成立,若成立,则执行if后的语句;若不成立,则不执行。if语句也可以和“else”使用。
1,if形式
只使用一个if构成语句,表示条件成立就执行语句,不成立直接跳过。
if(表达式)/*也就是判断条件*/
{
语句
}
tip:若用“{}”扩起来,则表示成立时执行“{}”内的全部内容,若未扩起来,默认只执行if后的第一个语句
2,else if形式
由一个“if”和多个“else if”构成,表示若表达式1成立,则执行语句1;若表达式1不成立但表达式2成立,则执行表达式2以此类推,若以上都不成立,则执行else后的语句。
if(表达式1)
{语句1}
else if(表达式2)
{语句2}
...
else if(表达式n-1)
{语句n-1}
else
{语句n}
tip:在使用时,“else”是不能脱离“if”单独使用的!
来个例题消化下
例
输入两个数整数x,y输出它们三个中较大的一个。若x,y中有一个大于10,则输出“error”。
题目分析
本题需要进行两次判断,第一次需要判断两个中是否有大于或等于10的,若存在则直接输出“error”。第二次判断是在第一次成立的条件下判断哪一个较大。所以我们使用if语句时可以将两个if嵌套在一起。
代码实现
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x,y,max;/*定义x,y以及最大值max*/
scanf("%d %d",&x,&y);
if(x>10||y>=10)/*判断,若x>=0或y>=0,输出“error”*/
printf("error");/*由于if后面只执行这一个语句,所以不用打“{}”*/
else/*当上面条件不成立时,执行此语句*/
{
max=x;/*先假设x是最大的*/
if(x<y)/*若y比x大,则执行y赋值给max*/
max=y;
printf("%d",max);/*打印输出最大值max*/
}
return 0;
}
输入
2 5
输出
5
输入
10 2
输出
error
其实也可以只用if而不用else if,它和else if形的区别在于,前者若多个判定条件同时满足,会同时执行;后者只会执行最前面的满足条件的程序。
if语句
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x=5;
if(x>0)/*若x>0,打印输出“x>0”*/
printf("x>0\n");
if(x<10)/*若x<0,打印输出“x<0”*/
printf("x<10\n");
return 0;
}
输出
x>0
x<10
else if语句
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x=5;
if(x>0)/*若x>0,打印输出“x>0”*/
printf("x>0\n");
else if(x<10)/*若x<0,打印输出“x<0”*/
printf("x<10\n");
return 0;
}
打印输出
x>0
这一点小伙伴们在使用时一定要注意!
三、循环结构
注意啦,循环结构是c语言中非常重要的部分,它本身并不是十分的难,但它可以配合别的程序达到不同的骚操作!
循环结构是指程序重复循环以达到某个要求。它可以使计算机不知疲惫的重复执行某个固定的程序一直到它达到了你设定的标准,所以可以用循环结构解决许多人的大脑完成不了或者计算量大的问题。c语言主要提供了三种循环语句while,do…while和for。
1、while语句
while语句先判断条件是否成立,若成立则重复执行循环体语句直到条件不成立。
一般形式为
while(条件表达式)
{
循环体语句
}/*与if一样若不用“{}”则只执行while后的第一个语句*/
直接来个例题
例
输入一个整数n,并求出从1累加到n的值,即1+2+3+…n的值。
问题分析
这是一个累加的的题目,如果我们本身计算,通常会首位相加再乘2分之n。但使用计算机时,我们可以使用循环让计算机自己重复累加,从而快速解决问题。
代码实现
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,i,sum;/*sum用于存放累加值,i用控制循环
scanf("%d",&n);
i=0;
sum=0;/*由于下面i和sum运算时涉及到了自身,所以必须给它本身赋初值*/
while(i<=n)/*如果i<=n,则循环执行后面的程序*/
{
sum=sum+i;
i++;/*i++为i=i+1的简写*/
}
printf("%d",sum);
return 0;
}
输入
100
输出
5050
tip:大家在编程时,若变量涉及到自身的运算时,一定要给它赋初值。由于编译器和题目的判断机不同,若不赋初值,有的机器会自动赋值为0,有的会随机赋值。 而且编译器不会报错!
2、do…while语句
do…while语句同样是重复执行循环体一直到条件不成立,唯一的区别在于while语句是先判断,后循环,而do…while语句为先循环,后判断。
一般形式为
do
{
循环体
}while(判断条件);
这个语句与while语句几乎完全相同,这里就不用举例题了吧。唯一要注意的是若执行同样的次数,while语句会比do…while语句少执行一次。
3、for语句
for语句可以说是这几个语句中,在c语言里使用频率最高的语句了。它能重复执行循环体不满足循环条件。
一般形式
for(循环变量初值;循环条件;循环变量增值)
tip:for语句的三个表达式其实都可以省略,但是“:”不能省略。若完全省略,则语句会无限循环。
来个网上比较有名的例题
例
韩信点兵的问题大家都知道吧,韩信带兵1500人,死四五百,站3人一排多2,5人一排多4,7人一排多6,韩信一口说出士兵数量!
题目分析:
相信按照高中的思维,大家第一反应肯定是设士兵数量为x,然后解方程吧?但是如果是使用c语言用计算机算这题的话,就不用那么多步骤了。别忘了,计算机可是以运算快闻名的,所以这里可以用最笨的方法——穷举法。
代码实现
#include<stdio.h>
int main()
{
int n;/*定义人数为n*/
for(n=1000;n<1100;n++)/*由题目已知,损伤四五百,所以n的范围是1000到1100。即n从1000到1100全部试一遍*/
if((n%3==2)&&(n%5==4)&&(n%7==6))/*如果n同时满足这三个条件,就打印输出*/
printf("士兵还有%d人",n);
return 0;
}
输出
士兵还有1049人
怎么样,这个用法是不是很巧妙?
在我们实际的使用中,选择结构和循环结构常常被相互配合着使用,方法灵活多变。小伙伴们一定要熟练掌握哦!