选择结构
if语句(用于判断的语句)
if语句用于判断,结果为真(1)执行语句,结果为假(0)则不执行
语法
if(判断语句)
{
//结果为真执行语句
}
实例
判断输入的数和20比较
#include <stdio.h>
int main()
{
int a;
printf("请输入一个数:");
scanf("%d",&a);
if(a > 20)
{
printf("a小于20");
}
printf("a>20");
return 0;
}
上述实例中,如果输入的数大于20,则进入语句中执行所需要执行的内容,如果小于则推出判断,执行后面代码
esle if语句
在if语句中加了否定结果的执行
如果结果为真,执行if内语句
如果结果为假,执行else内语句
语法
if(判断语句) //为真执行的内容
{
//执行语句
}
else //为假执行的内容
{
//执行语句
}
实例
同样以上述例子来写
#include <stdio.h>
int main()
{
int a;
printf("请输入一个数:");
scanf("%d",&a);
if(a > 20)
{
printf("a大于20");
}
else
{
printf("a小于20");
}
}
return 0;
在上述基础上加了else语句是程序便于判断,清晰思路
**注:**如果if或else语句下只有一条执行语句时,大括号可以省去;多条不能省略!!!
嵌套
if语句中套用if语句,在算法中也是常见的
语法
if(判断语句1)
{
/* 表达式 1 为真时执行 */
if(判断语句2)
{
/* 表达式 2 为真时执行 */
}
}
实例
#include <stdio.h>
int main ()
{
/* 局部变量定义 */
int a = 100;
int b = 200;
/* 检查布尔条件 */
if( a == 100 )
{
/* 如果条件为真,则检查下面的条件 */
if( b == 200 )
{
/* 如果条件为真,则输出下面的语句 */
printf("a 的值是 100,且 b 的值是 200\n" );
}
}
printf("a 的准确值是 %d\n", a );
printf("b 的准确值是 %d\n", b );
return 0;
}
上述代码在执行时,其结果是:
a 的值是 100,且 b 的值是 200
a 的准确值是 100
b 的准确值是 200
switch语句
witch 语句是一种有限制的控制流语句,它用于根据表达式的值执行不同的代码块。
一个 switch 语句允许测试一个变量等于多个值时的情况,每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查
语法
switch()
{
case 常量1:语句1;
printf("");
break;
case 常量2:语句2;
printf("");
break;
.
.
.
case 常量n:语句n;
printf("");
break;
default;
}
实例
#include <stdio.h>
int main()
{
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("请输入1-7");
break;
}
return 0;
}
break:执行完语句后跳出结构,若没有break 则会依次执行剩余语句、
defualt:在break语句执行失败后执行该语句;和if…else语句中的else用法类似
进阶实例
例一
(函数计算)函数 y = {x(x<1) 2x-1(1<=x<10) 3x-11(x>=10),在控制台中输入相应程序,得出y的值
#include<stdio.h>
int main()
{
int x,y; //开辟内存空间(定义整形变量)
scanf("%d",&x); //输入函数
if(x<1)
y=x;
else
{
if(x>=1&&x<10) //嵌套使用
y=2*x-1;
else
y=3*x-11;
}
printf("y=%d\n",y);
return 0;
}
例三
(分数判断)给出一个百分制成绩,要求输出’A’,‘B’,‘C’,‘D’,'E‘.90分以上为A,8089为B,7079为C,60~69为D,60分以下为E
#include<stdio.h>
int main()
{
float score; //定义变量类型
char grade; //学生成绩等级分为A,B,C,D,E
printf("请输入学生成绩:\n");
scanf("%f",&score);
if(score>90)
printf("该成绩等级为A");
else if(score<89&&score>80)
printf("该成绩为等级B");
else if(score<79&&score>70)
printf("该成绩等级为C");
else if(score<69&&score>60)
printf("该成绩等级为D");
else
printf("该成绩等级为E");
return 0;
}
例三
(排序问题)输入四个整数,依次从小到大排序
#include<stdio.h>
int main()
{
int a,b,c,d,t;
printf("请输入四个整数:");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a>b) //先比较再赋值
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(a>d)
{
t=a;
a=d;
d=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
if(b>d)
{
t=b;
b=d;
d=t;
}
if(c>d)
{
t=c;
c=d;
d=t;
}
printf("%d,%d,%d,%d",a,b,c,d);
return 0;
}
循环结构
for循环
语法
for(定义变量;条件判断;执行语句)
{
执行语句
}
实例
#include <stdio.h>
int main ()
{
/* for 循环执行 */
for( int a = 10; a < 20; a = a + 1 )
{
printf("a 的值: %d\n", a);
}
return 0;
}
上述实例中,for循环定义a的初始值为10,如果a小于20,打印printf然后执行 a = a + 1;
执行结果:
a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19
while循环
语法
while(控制表达式)
{
执行语句;
}
实例
int n=4;
while(n>0)
{
printf("Hello World\n");
n--;
}
当给定值满足while语句的执行表达式时进入while循环;打印语句执行n–,再次打印;当条件不满足时结束循环
do whlie循环
语法
do
{
语句序列
}
while
{
(循环控制表达式);
}
实例
#include <stdio.h>
int main ()
{
/* 局部变量定义 */
int a = 10;
/* do 循环执行,在条件被测试之前至少执行一次 */
do
{
printf("a 的值: %d\n", a);
a = a + 1;
}
while( a < 20 )
{
; //空语句
}
return 0;
}
嵌套
例一
先来个简单的嵌套练练!
#include <stdio.h>
int main()
{
int i=0;
int j=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("haha\n");
}
}
return 0;
}
例二
1634 = 1* 1* 1* 1 +6* 6* 6* 6 +3* 3* 3* 3 +4* 4* 4* 4
#include <stdio.h>
#include <math.h>
int main()
{
int i,t;
float sum;
for(i=1000;i<10000;i++)
{
t = i;sum=0;
while(t)
{
sum+=pow(t%10,4);
t/=10;
}
if(sum==i)
{
printf("%d\n",i);
}
}
return 0;
}
补充
在上述中讲到了break语句,还有一个continue语句
这两个语句最根本的区别就是break直接跳出当前所在循环,(可以理解为直接到终点站)
而continue跳过本次循环,执行下一循环(可以理解为,中间有一站没有停)