前言
C语言作为编程界的长老级语言,它是许多编程初学者所学习的语言之一,现希望通过本博客对一些初学C语言的同学有一些帮助,后边会持续更新C语言的初阶以及C语言的进阶解析,有需要的同学可以关注一下,我也在学习中,有错误的地方希望大家帮忙指出,一起学习,一起进步!!!!
一、什么是语句?
C语言中由一个分号 ; 隔开的就是一条语句。
printf("hello world");
如上图所示的为一条语句。
二、分支语句(选择结构)
C语言中的选择语句就好像我们生活中的选择一样,拿我们自己作为例子,选择好好学习毕业就能拿一个好offer,选择不学习,毕业即失业。这便是两个简单的分支语句,自身毕业结果与你现在的选择有关!!
1.流程图一览
这便是刚刚的举例,用流程图的样式表现出来,显而易见两个不同的选择,分别引向了不同的结果。这就是我们所要学习的分支语句。
顺便给大家推荐一个流程图软件(免费免费免费的哦!!)
2.if 语句
if语句的语法结构
1 .if 的基本语句
if (表达式)
语句;
else (表达式)
语句;
#include <stdio.h>
void main()
{
printf("上大学你要如何选择->1.好好学习 0.不学习\n");
int choose = 0;
scanf("%d", &choose);
if (1 == choose)
{
printf("好offer\n");
}
else
{
printf("失业\n");
}
}
刚才所举例的代码形式(利用了简单分支语句)
另外在这里穿插一句:希望大家养成良好的编程习惯
1.习惯给变量赋初值
2.判断条件的时候如果有常数,习惯把常数放在左边,防止因为少写一个等号把判断语句变成了赋值语句对程序的结果造成影响
还有很多编程的好习惯以及良好的代码风格就不在里一一列出了
有希望学习了解的可以学习下这本书(网上有电子版):高质量C++/C编程指南(我也在学习中)
2. if 多分支语句(需要判断多条件)
if (表达式)
语句;
else if (表达式)
语句;
else
语句;
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
printf("xixi\n");
}
else if (b == 2)
{
printf("hehe\n");
}
else
{
printf("haha\n");
}
return 0;
}
这是多条件判断的一个简单例子
3.if 条件句的注意事项
a. if 后的条件判断语句若结果为假(0)不进入if语句,若条件为真(非0)即进入 if 语句
这里插入一条
C语言中---->0为假,非0为真。
b. else是和它离的最近的if匹配的。
这样一道题,很多人认为会打印出haha,其实结果什么都没有打印
这便是b中注意事项所提到的知识点
这道题也是让我们看到了代码风格的重要性,平时在写代码时习惯把else与匹配的if对齐
4.对 if 语句我们有了基本的了解
尝试两道练习题
a.判断一个数字是否为奇数
b.输出1-100的奇数
#include <stdio.h>
#pragma warning(disable : 4996)
void main()
{
int num = 0;
printf("请输入一个数字\n");
scanf("%d", &num);
if (1 == num % 2)
{
printf("是奇数\n");
}
else
{
printf("不是奇数\n");
}
}
#include <stdio.h>
void main()
{
int i = 0;
for (i = 1; i <= 100; i++)
{
if (1 == i % 2)//判断是否满足奇数的条件
{
printf("%d是奇数\n", i);//满足就打印
}
}
}
三、switch语句
switch语句也是一种分支语句。 常常用于多分支的情况。
1.switch 语句样式
switch(整型表达式)
{
语句项;
}
2.语句项是什么
//是一些case语句:
//如下:
case 整形常量表达式:
语句;
3.在switch语句中的 break
switch语句中,我们没法直接实现分支,搭配break使用才能实现真正的分支。
#include <stdio.h>
int main()
{
int day = 0;
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;
}
return 0;
}
根据需要我们要对进行的case语句进行打断即在case语句后补上break
若没有break,上图程序输入1会打印出星期一到星期天,但这并不是我们想要的结果,所以加入break语句,进行完case1的判断输出结果即可这就是break语句的用处
4.default子句
上述程序中如果我输入8或者除了1-7的数字 case后边的数字没有匹配就进入到default子句,这就是default子句的作用
5.switch语句注意事项
a.根据需要添加break语句
b.case 语句后为必须是整型变量(int ,long ,short ,long long,char)而浮点型(float,double)是不可以放在case后边的
6.switch语句的一些建议
a.最后一个 case 语句的后面加上一条 break语句。(之所以这么写是可以避免出现在以前的最后 一个 case 语句后面忘了添加 break语句)
b.在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。
四、循环语句
循环流程图(什么是循环)
1.while
C语言中给我们引入了:while语句,可以实现循环。
//while 语法结构
while(表达式)
循环语句;
我们通过一个例子了解while循环
打印1-10
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)//条件判断
{
printf("%d ", i);//需要循环的语句
i = i+1;//循环变量的变化
}
return 0;
}
我们很容易看见while的三要素都有----->循环的条件,循环变量的改变(一定要有否则容易死循环),循环语句
a.while语句中的break和continue
break实例
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i = i+1;
}
return 0;
}
这是程序运行的结果
我们看到break在if条件句的下面所以当 i ==5的时候就执行到了break循环就直接终止(终止的一定是当前循环) (如图的程序由于循环后边没有语句所以程序就直接结束了),如果下面还有代码,程序继续进行下面的代码块,这就是break的作用
官方解释:break在while循环中的作用: 其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。
continue实例
//continue 代码实例1
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
printf("%d ", i);
i = i+1;
}
return 0;
}
同上我们看当循环执行到 i ==5的时候遇到了continue,程序直接回到循环继续下一次的循环,i==5的这次循环直接弃掉,遇见continue后边的程序有什么看都不看,直接下一次的循环
这是程序进行的结果
到 i==5时由于使 i变化和打印i的语句都在continue后边所以 i 一直=5,所以if判断时一直continue,所以 后边的程序舍弃,只能打印1-4
对比两次结果,显然两次结果一样,但是运行得到结果的过程完全不同
break-->是因为 i==5跳出(终止)了循环才打印 1-4
continue-->是因为 i==5时无法进行后边的自增和打印程序,而不是跳出循环,才打印1-4
官方解释: continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接 跳转到while语句的判断部分。进行下一次循环的入口判断。
2.for
for(表达式1;表达式2;表达式3)
循环语句;
表达式1 表达式1为初始化部分,用于初始化循环变量的。
表达式2 表达式2为条件判断部分,用于判断循环时候终止。
表达式3 表达式3为调整部分,用于循环条件的调整。
实例解析
使用for循环 在屏幕上打印1-10的数字。
#include <stdio.h>
int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
i ==1去循环满足 i<=10条件去打印 i==1然后再 i+1(注意:先执行表达式1,表达式2,循环语句最后在进行 i 值的改变操作)这样就可以打出来1-10满足题目的需求
a.for语句中的break与 continue的用法和效果与while基本一致,参考while即可
b.for循环的一些变种
int x, y;
for (x = 0, y = 0; x<2 && y<5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}
可见for循环中有两个变量,其实同一个变量的判别方法一样,只不过又多了一个限制而已
上图程序,看自增条件使哪个变量,先不满足表达式2的条件,终止循环即可
#include <stdio.h>
int main()
{
//变种1
for(;;)
{
printf("hehe\n");
}
可以for循环中什么都没有,这就意味着循环没有任何条件,随意循环,就是所谓的死循环
c.一些建议: 1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
了解了for循环我们来看一道题
//请问循环要循环多少次?
#include <stdio.h>
int main()
{
int i = 0;
int k = 0;
for(i =0,k=0; k=0; i++,k++)
k++;
return 0;
}
如上图程序我们先看循环终止的条件,我们注意到 k 的判断条件是一个等号,注意注意这一定是一个赋值符号,相当于是把0赋值给了k,我们知道0代表假,所以循环条件根本不成立,所以循环一次也不执行
d.对比while循环
可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离 较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹。 for循环使用的频率也最高。
3.do while
a.do语句的特点 循环至少执行一次,使用的场景有限,所以不是经常使用
实例解析
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d\n", i);
}while(i<10);
return 0;
}
我们看到在定义的变量 i ==10(显然不满足while的条件) 后面出现了 do 显而易见do后面没有任何判断条件,所以程序顺序执行就可以,这就是为什么do while循环可以无视条件循环一次的原因。循环到while时才判断下一次循环满不满足条件。
b.do while 语句中的break和continue语句的用法与其他两种循环语句基本一致,请参考while
4.goto语句不常用不过多介绍
总结
这是(初级)循环和分支的一些我个人的理解,不对的地方希望帮助改正
后续会跟进一些循环和分支的练习题和常见题(求最大公约数,九九乘法表,强制关机命令等等……),有兴趣的小伙伴关注一下