嵌入式全栈开发学习笔记---C语言笔试复习大全6

目录

程序的三种控制结构

顺序结构

表达式语句

空语句

函数调用语句

复合语句

选择结构

(1)if语句

(2)多分支语句switch

循环结构

(1)while语句

笔试题8

强调:Ctrl+C可以停止当前进程

(3)do while语句

(4)for语句

笔试题9

两个关键字

(1)continue

(2)break

循环效率


上一篇C语言的运算符及其优先级,这一篇开始复习C语言的控制结构

说明:我们学过单片机的一般都是有C语言基础的了,网上关于C语言的资料有很多,大家如果对C语言不熟悉的话可以先去详细学一下,再以这篇博文作为复习资料学习。

这篇博文的目的是复习C语言,我们会陆续以30多个编程题作为复习要点,这30多个编程题基本涵盖了C语言所有的内容了,只要你掌握了这30多个编程题,那么你的C语言基本就没什么问题了。

注意:由于本专栏是嵌入式全栈开发专栏,为了我们能熟悉以后实际工作中的开发环境,我们写C语言全部在Linux中的vim编辑器中写,这么做事为了我们能够熟练掌握Linux系统的常用命令以及Linux上的vim编辑器的常用工作命令,以达到对口训练的目的!

vim编辑器的一些工作命令在上一篇博文中已经详细介绍过了,如果不了解可以先去看看。

我们正式开始:

程序的三种控制结构

顺序结构

  1. 表达式语句

  2. 空语句

  3. 函数调用语句

  4. 复合语句

选择结构

(1)if语句

基本语法

if(表达式1)

{

语句1

}

else if(表达式2)

{

语句2

}

……

else if(表达式m)

{

语句m

}

else  

语句n

匹配规则:

else总是与它上面的,最近的,统一复合语句中的,未配对的if语句配对;

当if和else数目不同时,可以加花括号来确定配对关系

思考

数值如何跟零进行比较?

if (a == 0){}(这种写法是对的,也是我们通常的写法,但是有一个缺陷,就是写代码的时候容易忘记其中一个等号,编译器不会报错,很难发现)

if (0 == a){}(推荐这种写法,忘记敲一个等号时编译器会给我们报错)

if (a = 0){}(错)

if (0 = a){}(错)

if语句有时候可以用switch语句替换。

(2)多分支语句switch

switch语句的格式:

switch (表达式)

        case 常量表达式1:语句1; break;

        case 常量表达式2:语句2; break;

        …

        case 常量表达式n:语句n; break;

        default:语句n+1; break;

注意:default千万不要拼写错误,因为即使你写错了编译器也不会报错,可能会对整个程序造成影响。

思考:

exit(1)和break有什么区别?

exit(1)整个程序结束, break只结束循环或者switch语句的case;

return 0和return -1、return -1有什么区别?

这三个都是带有return,都是代表结束整个程序,

但是return 0是正常终止程序,

return -1和return 1是一样的,都是返回一个非零数值,表示非正常终止程序,这个数值我们可以写-128~127。

exit(1)和return -1或者return 1有什么区别?

它们都是表示非正常终止程序,只不过exit(1)要加头文件stdlib.h

循环结构

(1)while语句

while (表达式) 语句

当表达式为非0值时,执行while语句中的内嵌语句。其特点是:先判断表达式,后执行语句。

笔试题8

问:房价200万,每年涨10%;程序员工资年薪40万,不吃不喝存起来,问几年能买房?

解:

编译一下:

程序进入了死循环,为什么进入了死循环,哪里错了?

因为到死都买不起房啊!

其实也不用破防,因为现实中我们可以贷款或者啃老买房啊!

强调:Ctrl+C可以停止当前进程

程序死循环的时候,按Ctrl+C可以停止并退出编译

我们把每年的房价和积蓄慢慢打印出来看看:

结果请看下方视频:

while语句的循环结果

(3)do while语句

(用的比较少,这里复习就不详细讲了)

while语句有时候可以用for语句替换。当我们知道要循环的次数时,可以写成for循环。

(4)for语句

for循环基本语法

for(表达式1;表达式2;表达式3)

{

语句

}

笔试题9

问:以下这段代码的运行结果

for (i = 0, printf("1\n"); i < 5, printf("2\n"); i++,printf("3\n"))

{

printf(“helloworld\n”);

}

答案是它不停的打印:

为什么呢?

前一篇中我们提到逗号表达式,现在就来详细讲一下:

逗号表达式就是将两个表达式用逗号隔开,但是逗号两边的表达式算是一整个逗号表达式,并且只以表达式2的结果作为整个逗号表达式的最终的结果,比如int result=(1+1,2+2); 最后result=4。

所以上面这道笔试题就是:

判断部分i < 5, printf("2\n")的结果就是取了printf("2\n")的结果,因为'2'和'\n'是两个字符,所以printf函数的返回值是2,也就是说判断部分的结果永远是非零,只要是非零就是真,那for循环就是一直循环下去,就一直打印“helloworld”

它一进去for循环就先打印一个1,之后就是打印2,然后打印helloworld,再打印3,然后就是一直是2 helloworld 3 2 helloworld 3......

整个程序1只打印了一次,但是程序执行的太快刷屏了,没看到那个1。

两个关键字

(1)continue

continue结束本次循环,开始下一次循环。

比如下面这段代码如果没有continue的话原本是打印15次helloworld,但是加了continue之后,当j等于1也就是第二次循环的时候,没有打印出helloworld,直接跳到j++,打印第三次循环的helloworld,那么整个程序就只打印了10次helloworld。

(2)break

break结束这一层循环,如果循环有嵌套,不影响其它层的循环。

注意:break语句不能用于循环语句和switch语句之外的任何其他语句中。

我们把上一段代码中的continue换成break又会怎样呢?

当j等于1也就是第二次循环的时候,就直接退出j这层循环,开始i=1即i层循环的第二次循环。那么这段代码就是每层i循环中只执行一次j循环,那么最终只打印出5个helloworld。

循环效率

第一种(效率低,不推荐)

for (i = 0; i < 1000; i++)

{

for (j = 0; j < 2; j++)

{

........

  }

}                                                       

第二种( 效率高,推荐)

for (i =0; i < 2; i++)

{

for (j = 0; j < 1000; j++)

{

........

}

}                  

结论:注意减少跨切循环层的次数,也就是说建议里层的循环次数比外层的循环次数多。

以上就是这篇内容,如想了解更多,欢迎订阅本专栏!

如有问题可评论区或者私信留言,如果想要进交流群请私信!

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vera工程师养成记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值