今天继续C语言初识部分 ,这部分仅仅是我学习过后的一段总结和在敲代码语法遇到的问题;然后今天的主干就是C语言的结构,还有一些关于函数的部分。
顺序结构
我们知道C语言执行会有自己的执行顺序,一般都是从上而下的来执行,当然这样的顺序执行有很多都有采用。不过也有例外:栈结构就是先进后出、后进先出的倒扣“ 杯子 ”。我们学习计算机,我认为就是了解另一个世界,这个世界很繁荣,但是实现的都是0101.....的二进制既视感,但是很多的逻辑、结构其实都是源于生活,毕竟不能像仙侠小说一样,御剑飞行...夸张

判断结构
顺序结构就是很平常,就像看小说一样的从头往尾看。接下来就是我们的判断结构:
if判断
if判断出来的结果就是 真 或者 假,通俗来说就是 对 或 不对 ,不会存在对不对的情况。在C语言中,前面说到是没有bool类型这个数据类型,不过我们经过库定义出来了一个,而C语言的真假判断依据就是非零都是真、零就是假。
(额外)仔细看我们的main函数函数体中末尾都有一个 return 0,那是不是代表也是假的?毕竟C语言得到判断非0为真吗?其实C语言的函数返回之间是0代表的函数成功无异常,而当我们返回1时就是有异常情况。
因为我们经常在报错信息可以看到下面图的报错大概:
![]()
这里的报错信息就是返回1退出。其实C语言中的异常信息都是有特殊的数字做过标识,所以会看见正常返回0,异常是非0的。
但是到了这里,可能又有疑问?自己定义的函数会怎么样?下面会有函数部分,我的想法,在这里表示一下。
单分支
单分支就是只有一次判断的过程,在if后的判断条件成立就会执行括号里面的执行语句。
if(判断条件){
执行语句;
}
多分支
多分支顾名思义就是在单分支的基础上增加判断分支,有两种形式:
//第一种
if(判断条件){
执行语句;
}else{
执行语句;
}
//第二种
if(判断条件){
执行语句;
}else if(判断条件){
执行语句;
}else if(判断条件){
执行语句;
}else{
}
第一种就是当if的判断是假时,就执行else后面的执行语句;第二种就是if判断是假时,就对后面的else if进行判断,最后没有就执行else里面的执行语句,但只会执行一次。
分支嵌套
分支嵌套就是在分支判断里面进行判断,比较简单。有一种说法就是只要我们的if判断够多,就可以找到我想要的可能性,当然这种就是数学上的穷举法。
if (判断条件){
if(判断条件){
执行语句
}
}
switch判断
switch判断是比较简单的,就像我们输入123等数值,可以跳转到什么界面一样。switch里面的key和v1、v2...数据类型要和定义的要一样,不然会出错。case后面只能是整数,如果你实在要使用字符串,可以用宏定义来写,也可以用枚举来解决。
switch(key){
case v1:
执行语句;
break;
case v2:
执行语句;
break;
................
default:
执行语句;
break;
}
switch的功能就是,将我们输入的key的变量,去case后面的值去找,找到了就执行它后面的执行语句,当然如果都没有就是default后面的语句,它就像一个else一样,这个也是传递一次参数就执行一次。当然前提是你的break;就是跳出关键字,可以理解为,当我执行break后直接就退出switch以后的判断,如果没有的话,有些情况也是能够运行的,但是一些情况会出现它执行过你想要执行语句后还往下执行了其他的语句。 所以最好加上,保证完整性。
循环结构
循环控制语句
循环控制语句这里上面讲到一个,就是break(跳出当前循环)。其他两个就是continue(跳出当次循环),和return(跳出当前函数,函数的返回值)。
break:一个循环可能会执行很多次,break就是当执行到它时就跳出整个循环,即使后面还有都跳过,然后执行整个循环结束后的执行语句。
continue:相比于break就要范围小一点,它的范围就是当次循环,意思是如果这次循环执行到它时就直接进行下一次循环。
return:它的范围就是很广泛的,如果是后面跨文件调用是,它可以将函数的返回值跨文件返回,这个就是直接整个函数都结束,我们常见的就是main函数最后有一个return 0的结束。
do-while
这个循环语句就是,可以看见循环条件在后面,也就是说先不管你成不成立,我先来一次,颇有一股:是好是坏,我先来尝尝咸淡。。。
先执行一次后,成立就继续进行,不成立就结束循环
do{
执行语句;
}while(循环条件);
while
这个就是上面的孪生兄弟,既然你先尝尝咸淡,我就要先看行不行,行我才运行。
while语句就是常规的,先判断以后,看是否成立再进行执行语句。
while(循环条件){
执行语句;
}
for
for循环可以说我这里使用的比较多了,因为上面两种的循环次数相较于for不是很明显,可能要自己单独设置一个。
for(初始化条件A;判断条件B;循环后语句C){
执行语句D;
}
它的执行顺序也就是第一次会给个初始化不太一样,后面都是一样的
go-to
这个像跳跳虎一样的语句,是我这里用得比较少的,因为它写出来的代码少的时候还好,如果多了就会逻辑比较乱,所以我用得很少,不过用得好也是很方便的
它的组成就是再语句后面添加一个goto:标签,而便签使用在goto的上面就是往后跳,因为我们的代码执行顺序是由上到下的,执行到goto语句,而你的标签在它的上面,不就是已经执行过标签的位置了吗,所以就是往后跳;同理的就是往前跳,执行到标签时是不会有任何的异常的,只有触发到goto才会发生跳动。

循环嵌套
循环语句里面的是循环语句,还有循环里面是判断语句
for(int i = 0;i < 10;i++){//这里在判断语句里面定义以下是可以的
for(int j = 0;j < 10;j++){
执行语句
}
}
for(int i = 0;i < 10;i++){
int n = 0;//做好初始化
scanf("%d",&n);
switch(n){
case: 1:
....
break;
case: 2:
....
break;
case: 3:
....
break;
default:
....
break;
}
}
函数
函数的返回值、形参和实参都讲过了,这里再多说一点传递的,值传递和地址传递,还有递归函数。
值传递:就是两个函数之间进行传递,调用方将要传入变量的值,拷贝了一份给被调用方的形参里,让形参可以用实参的数值进行处理,但是这样是影响不了实参里面的信息的。
地址传递:就是调用方将变量的地址给到形参,而形参函数直接对被指向的地址进行处理,从而可以影响到我们的实参变量信息。
函数的递归:就将一个复杂的问题进行分化,变成一个个简单重复的代码就可以实现的。这里递归函数的实现一定是很精简的,不会很复杂。
例如:将一串数字给输出--比较经典

可以看见我们是将这个数分割了
假如输入1234——>123——>12——>1这样的调用,
然后打印就先打印1——>2(12%10)——>3(123%10)——>4(1234%10)
这样就顺序输出了整个数值

今天的C语言就结束了,欢迎来斧正!
&spm=1001.2101.3001.5002&articleId=146324554&d=1&t=3&u=c97765fe3b0742ac96fcb74300c56f6a)
1133

被折叠的 条评论
为什么被折叠?



