基本结构介绍
在c语言中存在三种结构:顺序、选择、循环。
1、循序结构:
顺序结构是最基本的一种程序结构,它按照代码的先后顺序执行。在顺序结构中,程序的执行流程是线性的,从头到尾按顺序执行。
示例:
#include<stdio.h>
int main()
{
int i = 0;
printf("%d\n", i);
i = 1;
printf("%d\n", i);
return 0;
}
这里程序会依次打印0 1。
2、选择结构:
选择结构是一种根据条件选择执行不同代码的程序结构。在选择结构中,程序会根据某个条件的结果选择执行不同的代码分支。
示例:
#include<stdio.h>
int main()
{
int x = 0;
scanf("%d", &x);
if (x == 0)
{
printf("摆烂");
}
else
{
printf("好好学习");
}
return 0;
}
输入 0 会打印:摆烂,输入 1 会打印:好好学习。根据条件判断来运行条件语句
3、循环语句:
循环结构是一种重复执行某些操作的程序结构。在循环结构中,程序会反复执行一段代码,直到满足某个条件时停止循环。
示例:
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 5)
{
printf("%d ", i);
i++;
}
return 0;
}
这里会打印:1 2 3 4 5;直到不满足循环条件时终止循环
c语言中的控制语句
条件语句:if,if else,switch
循环语句:for,while,do-while
跳转语句:continue,goto
返回语句:return(在此不详细介绍)
其他:break
if语句介绍
if语句形式:
if(exp)//exp为expression的缩写,意思为表达式。
{
//exp语句为真时执行
}
注:在c语言中 布尔值0表示假,非0表示真
示例:
#include<stdio.h>
int main()
{
int i = 0;
if (i == 0)
{
printf("i = %d", i);
}
return 0;
}
运行结果:
当exp语句为真时执行{}内的语句,打印i 的值。
if else语句介绍
if else语句形式:
if(exp1)
{
//exp1为真时执行
}
else if(exp2)//非必须语句
{
//exp2为真时执行
}
else if(expn)
{
//expn为真时执行
}
else
{
//exp语句全为假时执行
}
示例:
#include<stdio.h>
int main()
{
int i = 1;
if (i == 0)
{
printf("i = %d", i);
}
else
{
printf("i的值非零\n");
printf("i的值为%d", i);
}
return 0;
}
运行结果:
这里i的值不满足if的条件语句,满足了else的条件,运行了else的条件语句。
示例:
#include<stdio.h>
int main()
{
int i = 1;
if (i != 0)
{
printf("i = %d\n", i);
}
else if( i < 2)
{
printf("i的值非零\n");
printf("i的值为%d", i);
}
return 0;
}
运行结果:
注意i 同时满足了if 和 else if 的条件,但只执行的if的条件语句。由此在else if语句中,输入值满足多个条件时,按循序语句来判断优先级。
switch语句介绍
switch语句形式:
switch(exp)
{
case exp1 ://case 后接常量表达式
{
//条件语句1
//break(选择性添加)
}
case exp2 :
{
//条件语句2
}
case expn :
{
//条件语句n
}
default :
{
//其他语句
}
}
示例:
#include<stdio.h>
int main()
{
int i = 1;
switch (i)
{
case 1:
{
printf("a\n");
}
case 2:
{
printf("b\n");
}
default :
{
printf("其他");
}
}
return 0;
}
运行结果:
注意上面运行结果不仅执行了case 1 还执行了 case 2,这是因为switch语句中,语句会按进入语句依次运行,不会直接退出。如果想执行单个语句需要在语句中添加break。
示例:
#include<stdio.h>
int main()
{
int i = 1;
switch (i)
{
case 1:
{
printf("a\n");
break;
}
case 2:
{
printf("b\n");
break;
}
default :
{
printf("其他");
}
}
return 0;
}
运行结果:
程序运行完case1就结束了语句,用break终止switch语句是一种常见的设计需要
for语句介绍
for语句形式:
for(exp1;exp2;exp3)
{
//条件语句
}
运行示意图:
示例:
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
运行结果:
while语句介绍
while语句形式:
while(exp)
{
//条件语句
}
运行示意图:
示例:
#include<stdio.h>
int main()
{
int i = 0;
while (i <= 5)
{
printf("%d ", i);
i++;
}
}
运行结果:
注意while循环开始会进行条件判断,可能不会进入循环。每次循环条件语句要不断趋近与判断语句exp,不然容易导致死循环。
do-while语句介绍
do-while语句形式:
do
{
//条件语句
}
while(exp);
运行示意图:
循环特点:不论输入是否满足条件都会执行一次条件语句,判断在末尾,可以运用在一些需要先执行再判断的场景。
示例:
#include<stdio.h>
int main()
{
int i = 0;
do
{
i++;
printf("%d", i);
} while (i < 1);
return 0;
}
运行结果:
当程序运行到while时已经不满足条件了,但还执行了一次条件语句。
各种语句的嵌套使用
嵌套(nested)是指在一个代码块内部包含另一个代码块的情况。嵌套允许将一个控制结构(如if语句、while循环等)放在另一个控制结构的代码块中。
题目:打印100-200的质数
示例:
#include<stdio.h>
int main()
{
int i = 100;
while (i <= 200)
{
for (int k = 2; k < i; k++)
{
if (i % k == 0)
{
break;
}
if (k == i - 1)
{
printf("%d ", i);
}
}
i++;
}
return 0;
}
上述代码运用了while for if 语句的嵌套使用。控制语句的嵌套使用时编程学习中非常重要的一个环节,需要不断学习。
题目:打印100 - 200 中可以被三整除的数
#include<stdio.h>
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
if (i % 3 == 0)
{
printf("%d ", i);
i += 3;
continue;
}
}
return 0;
}
运行结果:
注意此结果和我们预期的不同,部分三的倍数没有被打印出来。
调试过程中发现continue语句不能跳过for循环中的I++语句。修改后的代码为:
#include<stdio.h>
int main()
{
int i = 0;
for (i = 100; i <= 200; )
{
if (i % 3 == 0)
{
printf("%d ", i);
i += 3;
continue;
}
i++;
}
return 0;
}
此代码就可以满足我们的需求了,但是建议不要在for循环的条件语句内,改变初始值变量的值,容易导致错误。以及for循环的条件为空容易导致错误。
以上为个人学习的部分见解,如有错误和不足,可以提出相关建议。