创作不易,欢迎 关注 点赞 收藏 留言
水平有限,不足之处,望友人指出
博主介绍:一枚不知所措的大学生
博客首页:Gredot
所属专栏《C语言》
目录
前言:
1.顺序结构:
简单介绍:
好吃的栗子:
2.选择语句
简单介绍:
流程图:
if语句:
条件表达式:
switch语句:
3.循环结构:
while循环:
for循环:
do while循环:
4.特别地:
goto语句:
C语言是一门面向过程、结构化的程序设计语言,设计者(丹尼斯·里奇)通过对生活的高度抽象,设计了顺序结构、选择结构、和循环结构三种结构,让代码能够更好的描述生活,膜拜!,接下来从顺序、选择和循环三种结构展开对选择和循环语句的学习。
顺序结构是C语言程序执行的基本顺序,C语言程序从主函数第一行开始向后顺序执行。
#include
int main()
{
int a = 3;//向内存申请4个字节存放整型变量a 并给a赋初值3
int b = 5;//向内存申请4个字节存放整型变量b 并给b赋初值5
int sum = a + b; //向内存申请4个字节存放整型变量 求a+b的和
printf("%d\n",sum);//以十进制格式输出sum的值并换行,n是转义字符中的换行符
return 0; //返回0 return 语句的执行代表了主函数的终止,也是整个程序的结束
}
这段代码就是顺序结构,程序会从主函数的第一行开始顺序执行。
选择结构通过判断条件是否成立,来决定执行哪个分支。选择结构有多种形式,分为:单分支、双分支、多分支。
C语言中提供了if语句,条件表达式,switch语句来实现选择结构,下面我们依次学习:
基本语法:
#include
int main()
{
int n = 0;
printf("请输入一个大于零整数")
scanf("%d",&n);
//判断是否执行【*】语句
if(n<0)//判断条件
{
printf("输入错误");//【*】
//注:if语句在不适用“{}”的情况下,只能控制一条语句
}
//双分支
if( n % 2 == 0)
{
printf("n为偶数");
}
else
{
printf("n为奇数");
}
//多分支
if(n > 0)
{
if(n % 2 == 0)
{
printf("n为偶数");
}
else
{
printf("n为奇数");
}
}
else
{
printf("输入错误");
}
return 0;
}
上述if语句的三种形式都不难理解,就像工业流水线生产一样,满足不同条件的原材料会被输送到不同的地方加工。
当使用级联式分支时,要更加注重代码的风格,以增加代码的可读性。
好吃的栗子:
#include
int main()
{
int m = 1;
int n = 3;
if (m == 0)
if (n == 3) //【*1】
printf("Y\n");
else
printf("N\n");
return 0;
}
这段代码的结果是什么?Y还是N?
答案是什么也不输出,要理解这个问题,我们就需要了解if和else的匹配规则。
else总是和它前面最近的未匹配的if匹配
那么再来看这段代码,else和【*1】式的if匹配,m不等于0,故什么也不输出。
这段代码的风格很不好,那么我们再来看看这段代码的好的写法:
#include
int main()
{
int m = 1;
int n = 3;
if (m == 0)
{
if (n == 3) //【*1】
{
printf("Y\n");
}
else
{
printf("N\n");
}
}
return 0;
}//这样就大大的提高了代码的可读性。
注:讲常量写在等式的左边,是一种良好的代码书写习惯,当把“==”写成“=”是程序会报错:
这样就可以避免一些不必要的问题。
基本语法:exp1?exp2 :exp3 exp1为真执行exp2,否则执行exp3
#include
int main()
{//在某些情况下条件表达式会让代码跟简洁
int m = 0;
int n = 0;
scanf("%d%d",&m,&n);
printf("%d",m>n?m:n);
return 0;
}
switch的基本语法:switch语句通常用来处理多分支的情况
#include
int main()
{
int score = 0;
scanf("%d",&score);
switch(score/10)
{
case 10:
printf("满分!");
break;
case 9:
printf("优秀!");
break;
case 8:
printf("良好!");
break;
default :
break;
}
return 0;
}
switch表示开关表达式的值为多少,就进入相应的case
case :后必须为整型常量表达式
break:在此处用于结束switch语句,否则会顺延执行后面的case语句,break的运用十分灵活根据需求具体分析;
default:多用处理异常情况,若所有case都不满足,则会进入default子句,default可以位于switch中的任意位置。
# 输入1-5 输出 工作日,输入6-7 输出休息日
#include
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("休息日");
break;
}
return 0;
}
基本语法:表达式成立执行代码块。
while(//表达式)
{
//代码块
}
# 输出100以内的偶数
#include
int main()
{
int i = 0;//创建循环变量
while(i<=100)
{
if(i%2 == 0)
{
printf("%d ",i);
}
i++;//调整循环变量
}
return 0;
}
在这里:
continue:用于结束本次循环
break:用于结束循环
好吃的栗子:
#include
int main()
{
int i = 1;
while(i<10)
{
if(5 == i)
{
continue;
}
printf("%d ",i);
i++;'
}
return 0;
}
这段代码死循环了,对你没听错,死循环了。那么 continue 到底做了什么导致程序死循环了呢?i 等于5时 遇到continue结束本次循环,跳过了 ” i++ “ 这就导致循环变量的调整在此处失效了,从而导致了死循环。
只需要把循环变量的调整放在continue的前面,就可以很好的解决这个问题了。
基本语法:
for(exp1;exp2;exp3)
{
//代码块
}
//exp1 循环变量的初始化只执行一次
//exp2 循环变量的判断
//exp3 循环变量的调整
for循环将循环变量的初始化,判断,调整更加直观的展现了出来
for循环中的三个表达式均可省略(初学者不建议省略)
# 输出九九乘法表
#include
int main()
{
int i = 0;
int j = 0;
for (i = 1; i < 10; i++)
{
for (j = 1; j <= i; j++)
{
printf("%dx%d=%d ", j, i, j * i);
}
printf("\n");
}
return 0;
}
基本语法:
do
{
//代码块(循环体)
}while(exp);
由于do while循环先执行在判断,循环至少执行一次,使用场景有限,不是经常使用。
好吃的栗子:
#include
int main()
{
int a = 0;
do
{
printf("%d ", a);
a++;
} while (a < 10);
return 0;
}
#include
int main()
{
for(int i = 0;i < 10;i++)
{
for(int j = 0;j < 10; j++)
{
for(int i = 0;i < 10;i++)
{
printf("%d",i);
if(5 == j)
goto finsh;
}
}
}
finsh:
return 0;
}
goto语句易导致程序失控,简易少使用,在跳出深层迭代时比较方便;
最后:
对昨天的博客进行总结反思:发布地比较潦草,急促,逻辑不是很连贯!!!!!!!!!
留个练习下期公布答案:以下代码循环体要执行多少次?
#include
int main()
{
int i = 0;
int k = 0;
for(i =0,k=0; k=0; i++,k++)
k++;
return 0;
}