C语言的三种基本结构
顺序结构
顾名思义 顺序结构就是顺序写的c语言程序 没有判断也没有循环
所有的语句都是用线性的顺序执行
如下代码为基础的顺序结构
#include <stdio.h>
int main()
{
//声明了两个整形变量a和b
int a=0,b=0;
//输入两个整数并赋值给整形变量a和b
scanf("%d %d",&a,&b);
//计算a+b的值并输出
printf("a+b=%d\n", a+b);
return 0;
}
选择结构
顾名思义 选择结构就是 有if/else/else if/switch等分支结构c语言程序 程序根据不同的条件可以执行不一样的代码
1.简单的选择结构
如下代码为if-else的选择结构
//接收一个数 输出这个数的绝对值
#include<stdio.h>
int main(){
//定义一个双精度的浮点数
double a = 0.0;
//输入双精度的浮点数
scanf("%lf",&a);
//如果该浮点数小于0则输出相反数
if(a<0.0){
printf("%lf",-a);
}else{
printf("%lf",a);
}
}
如下代码为if else if-else的选择结构
//接收一个成绩 判断成绩的等级
#include<stdio.h>
int main(){
//定义一个双精度的成绩
double score = 0.0;
//输入双精度的成绩
scanf("%lf",&score);
//低于60分不合格 高于90分为优秀
if(score<60.0)
printf ("不及格\n");
else if(score<90.0)
printf ("合格\n");
else
printf ("优秀\n");
return 0;
}
2.关系运算符
根据关系运算符书写选择结构的程序
#include<stdio.h>
//从键盘输入三个数 按从小到大输出
void swap(double *px,double *py)
{
double temp=0;
temp=*px;
*px=*py;
*py=temp;
}
int main()
{
double a,b,c;
//定义并输入三个双精度浮点数
scanf("%lf %lf %lf",&a,&b,&c);
//如果a大于b 交换a与b
if(a>b)
{
swap(&a,&b);
}
//如果a大于c 交换a与c
if(a>c)
{
swap(&a,&c);
}
//如果b大于c 交换b与c
if(b>c)
{
swap(&b,&c);
}
printf("%lf %lf %lf\n",a,b,c);
}
如果a等于b时 a == b为1 如果a不等于b时 a==b为不为1
#include<stdio.h>
//关系运算符==
//如果两个数相同输出TRUE 如果不同输出FALSE
int main()
{
double a,b;
scanf("%lf %lf",&a,&b);
if((a==b)==1)
{
printf("TRUE");
}
else
{
printf("FALSE");
}
}
3.六种常见的关系运算符
符号 | 含义 | 用例 | 意义 |
---|---|---|---|
> | 大于 | a>b | a大于b时为真,反之为假 |
>= | 大于或等于 | a>=b | a大于等于b时为真,反之为假 |
== | 等于 | a==b | a等于b时为真,反之为假 |
!= | 不等于 | a!=b | a不等于b时为真,反之为假 |
< | 小于 | a<b | a小于b时为真,反之为假 |
<= | 小于或等于 | a<=b | a小于等于b时为真,反之为假 |
注:a==b是关系运算符 表示判断a是不是等于b的关系运算。而a=b为赋值运算符,返回值恒为真
4.三目表达式
三目表达式的基本格式为 表达式1?表达式2:表达式3
表达式1为真则执行表达式2 反之则执行表达式3
#include<stdio.h>
//三目表达式 表达式1?表达式2:表达式3
//如果两个数都不为0输出TRUE 如果至少有一个为零则输出FALSE
int main()
{
double a,b;
scanf("%lf %lf",&a,&b);
//三目表达式 可以很简单的书写程序 但是比之前if-else略难看懂
(a&&b)==1?printf("TRUE\n"):printf("FALSE\n");
/**
if((a&&b)==1)
{
printf("TRUE\n");
}
else
{
printf("FALSE\n");
}
**/
return 0;
}
5.逻辑表达式
&& 意为逻辑’和’,如果两个数都不为0,则表达式为TRUE。如果至少有一个为零,则表达式为FALSE
|| 意为逻辑’或’,如果两个数都不同时为0,则表达式为TRUE。如果都为零,则表达式为FALSE
! 意为逻辑’非’,如果该数为0,则表达式为TRUE。如果a不为0,则表达式为FALSE
#include<stdio.h>
//逻辑运算符 && || !
int main()
{
double a,b;
scanf("%lf %lf",&a,&b);
if((a&&b)==1)
{
//如果两个数都不为0输出TRUE 如果至少有一个为零则输出FALSE
printf("TRUE\n");
}
else
{
printf("FALSE\n");
}
if((a||b)==1)
{
//如果两个数都不同时为0输出TRUE 如果都为零则输出FALSE
printf("TRUE\n");
}
else
{
printf("FALSE\n");
}
if((!a)==1)
{
//如果a为0输出TRUE 如果a不为0则输出FALSE
printf("TRUE\n");
}
else
{
printf("FALSE\n");
}
return 0;
}
6.选择结构的嵌套
在if-else结构的程序中 在if或者else模块中还嵌套了另外的选择结构
#include<stdio.h>
//Floor y(x) 向下取整阶梯函数
//Sgn z(x) 符号函数 正1 零 0 负-1
int main()
{
double x;
int y,z;
scanf("%lf",&x);
//Floor函数
y=(int)x;
printf("x=%lf Floor=%d\n",x,y);
//选择结构嵌套的Sgn函数
if(x>0){
z=1;
}else{
if(x==0){
z=0;
}else{
z=-1;
}
}
printf("x=%lf Sgn=%d\n",x,z);
return 0;
}
7.switch开关语句
switch开关在使用效果上是等价于if-else if-else的
基本的结构是
switch(要判断内容){
case 条件1:语句1(或多条);break;
…
…
case 条件n:语句n(或多条);break;
default:语句k(或多条);break;
}
每个case的末尾必须要加break 如果不加 会继续往下个条件执行 造成错误
#include<stdio.h>
//开关语句
//根据输入的成绩判定等级
int main()
{
int x;
scanf("%d",&x);
if(x<0||x>100)
{
printf("out of range!!!");
}
else
{
switch(x/10)
{
case 10:
printf("A+");
break;
case 9:
printf("A");
break;
case 8:
printf("B");
break;
case 7:
printf("C");
break;
case 6:
printf("D");
break;
default:
printf("F");
break;
}
}
}
循环结构
1.for循环
for循环的基本定义 for(循环控制变量声明和初始化; 循环控制变量的控制条件; 每次对循环后循环控制变量的操作)
示例如下:
for(int step=1; step<=100; step++){
…
循环体
…
}
当循环控制变量的控制条件为真时继续for循环,反之结束for循环
#include<stdio.h>
//for循环计算1+2+....+100等于多少
int main()
{
int sum=0;
for(int step=1; step<=100; step++)
{
sum = sum + step;
}
printf("sum=%d",sum);
return 0;
}
2.while循环
while循环的基本定义 while(循环控制条件){ 循环体 }
示例如下:
while(step<=100)
{
…
循环体
…
}
当循环控制条件为真时继续while循环,反之结束while循环
#include<stdio.h>
//while循环计算1+2+....+100等于多少
int main()
{
int sum=0;
int step=1;
while(step<=100)
{
sum = sum+step;
step++;
}
printf("sum=%d",sum);
return 0;
}
3.do-while循环
do-while循环的基本定义 do{ 循环体 }while(循环控制条件)
示例如下:
do{
…
循环体
…
}while(循环控制条件);
当循环控条件为真时继续do-while循环,反之结束do-while循环
但是不论循环控制条件的真假 do中的循环体至少先会执行一次 因为do-while是先循环再判断的
#include<stdio.h>
//do-while循环计算1+2+....+100等于多少
int main()
{
int sum=0;
int step=1;
do
{
sum = sum+step;
step++;
}while(step<=100);
printf("sum=%d",sum);
return 0;
}
4.多重循环
循环里面嵌套多重循环 注意使用不同的循环控制变量
#include<stdio.h>
//双重循环计算1!+2!+....+10!等于多少
int main()
{
int sum = 0;
int temp = 1;
for(int step=1; step<=10; step++)
{
for(int now = step; now>0; now--)
{
temp = temp * now;
}
sum = sum + temp;
}
printf("sum=%d",sum);
return 0;
}
5.continue语句
continue语句执行一次只能跳过一次定义在continue之后的循环体
#include<stdio.h>
//for循环计算2+....+100等于多少
//用continue语句跳过1
int main()
{
int sum=0;
for(int step=1; step<=100; step++)
{
if(step==1){
continue;
}
sum = sum+step;
}
printf("sum=%d",sum);
return 0;
}
6.break语句
brake语句执行可以提前结束该层循环
如果两层for循环嵌套 且break语句在内层 则会提前结束内层循环 继续执行外层的循环
#include<stdio.h>
//for循环计算1+2+....+100等于多少
//用brake语句提前结束循环
int main()
{
int sum=0;
for(int step=1; step<=200; step++)
{
if(step>100){
break;
}
sum = sum+step;
}
printf("sum=%d",sum);
return 0;
}
小结
- 三种基本结构分为顺序结构 选择结构和循环结构
- 三种基本结构构成了c语言的可能的程序结构
- 三种基本结构都有各自擅长处理的领域,应该根据问题的定义来选择合适的基本结构