如何让零编程基础的初中生听懂C语言?——C语言基本概念习题讲解

前言

  在经过了前一天谢小白精彩的讲解后,谢小白在那天布置了一些作业,今天他的目标是带领他的初中生表弟去收拾那些题。
  

 &emsp所以,一大早谢小白便按时到了表弟家。

习题讲解

谢小白:题写的怎么样。

初中生:还行吧,蒙一半,猜一半。

谢小白:
在这里插入图片描述
初中生:没有没有,选择题还是对了一些 ,就是编程题有点惨。

谢小白:看我今天带你杀穿他们。

初中生:期待你的表演。
上次布置的选择题

谢小白:那我们先看看选择题。

选择题

1

在这里插入图片描述
谢小白:这个题你应该选对了吧,选的是A和C。

初中生:嗯,选对了,这个A和C你还特地给我强调了一遍呢。

谢小白:是啊,这个A选项我昨天就很强调,main函数只能有一个,他是主函数。

谢小白:这个C选项我在最后的常见错误里也提到了,容易把main写成mian。

谢小白:这个B选项和D选项都是正确的。

初中生:这个第一题还是挺简单的。

2

在这里插入图片描述
谢小白:这个题也应该没什么问题吧,基本概念题。

初中生:嗯,简单,没什么可说的,肯定正确的。

3

在这里插入图片描述
谢小白:这个题选对了没?

初中生:刚看到这个题的时候当时很懵,因为确实没记住头文件具体长啥样。

初中生:最后查了一下…但至少我刚开始知道肯定是以.h结尾,所以后两个排除。

谢小白:嗯,了解了,答案是C,等后面你敲的代码多了,就很自然就记住对应的头文件了。

谢小白:这个也没什么可说的,记住之后多敲就行了。

初中生:嗯。

4

在这里插入图片描述
谢小白:这个肯定没毛病吧。

初中生:嗯,上课时原话,正确的。

5

在这里插入图片描述
谢小白:这个选的是最后一个,你选对了吗。

初中生:说实话,刚开始做的时候,我只有int char float 和 void这几个数据类型的印象。

初中生:看到A选项时,又想到了unsigned和 signed 这个有无符号类型,所以A和B选项都肯定是内置类型。

初中生:因为我记得你说过,那天讲的都是内置类型。

初中生:最后还是查了一下昨天你给我写的板书,我才知道double和long long也是内置类型,一个是双精度浮点型,一个长长整形,所以选E。

谢小白:可以可以,虽然是查的,但是你条理很清晰,这些数据类型多用多敲代码就很好记住了,问题不大。

6

在这里插入图片描述
谢小白:这个题怎么样?
在这里插入图片描述
初中生:这题是真恶心,我觉得四个都是错的!

初中生:我记得标识符只能由字母、下划线和数字组成,且数字不能放在开头,而且也不可以和关键字重名。

初中生:所以A选项的第二个不对,他把数字放在开头了,A排除。

初中生:B选项一眼就看到char,char是数据类型,所以直接排除B。

初中生:C选项就不多说了,汉字和这个int都不行,所以排除C。

初中生:这个D选项return是关键字,所以也不可以作为变量的名字,所以四个选项全部排除!?

谢小白:这个A、B、D选项你都说的没毛病,就是这个C选项有些不对。

谢小白:其实汉字也可以做变量的名字的,昨天不讲的原因是因为强烈不建议用中文做变量的名字,所有标识符一定要用英文。

谢小白:还有一点你刚才也有问题,就是C选项的Int它的i是大写的,所以是可以作为变量的名字的。

初中生:真细,真考察眼睛。

谢小白:细节决定成败嘛。

7

在这里插入图片描述
初中生:这个题肯定选D吧,但是这个源程序指的是什么?

谢小白:C语言是一个高级编程语言,我们把用这些语言写的代码叫做源代码。

谢小白:而源程序你可以暂时理解成就是源代码。

谢小白:其实这些东西等你越往后学,你就会不自然的就熟悉了。

谢小白:当然你也可以没事就上网查查这些东西,比我说的要全面多了。

初中生:那这题应该就是选D吧。

谢小白:嗯,没错,main函数想在哪里就在哪儿。

8

在这里插入图片描述
谢小白:这个题你当时怎么想的。

初中生:当时一眼先把D选项排除了。

初中生:然后觉得这个B选项看起来很合理的样子,就选了B

初中生:然后看了答案之后知道了选C。

谢小白:嗯没事,这个题记住就好了。

9

在这里插入图片描述
初中生:这个题我很有印象,虽然这个答案很明显是D选项,但是这个A选项里的编译器是啥。

编译器

谢小白:你知道CPU是什么吧?

初中生:就是i5、i7、i9什么的吧。

谢小白:…这些是生产它们的厂商给他们定的名字,代表版本,它的功能是处理计算信息,就像我们人类的大脑一样。

谢小白:然而CPU只能处理二进制的代码。

谢小白:在之前我们说过计算机的存储其实都是以二进制来存储的。

谢小白:这是因为计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用二进制数的0和1表示。

谢小白:然而我们用C语言写的代码总不是用0和1在写代码吧。

谢小白:所以编译的过程就是把我们写的高级语言代码转换成本机代码,也就是由二进制组成的代码。

谢小白:而编译器是一个可以进行编译的东西物品。

谢小白:今天的说法只是让你暂时初步了解一下编译大概是什么,更细节具体的你有兴趣可以看看相关书籍。

谢小白:咱们继续来看题目。

10

在这里插入图片描述
初中生:这题一看就选B,A和B是对立选项。

谢小白:嗯,没错,这题很简单。

11

在这里插入图片描述
谢小白:这题应该也简单吧。

初中生:这题一眼C,这个我印象很深刻,后面跟的是八进制数字,八进制数字里只有0~7。

谢小白:嗯,所以C选项就不算是转义字符了。

谢小白:下面这题可是重量级。

12

在这里插入图片描述
初中生:这题我直接看到就跳过了,看着就很难,你直接讲吧。

谢小白:其实也没有很难,你分开看看他们。
在这里插入图片描述
谢小白:这道题首先创建了三个叫a ,b ,c的变量。
在这里插入图片描述
谢小白:我们看到的这个printf函数,它的功能是打印信息到屏幕上,也就是输出结果。

谢小白:我们仔细看printf里的内容。

谢小白:其中双引号里的三个占位符分别对应了变量 a, b, c的值。

谢小白:也就是说,只需要通过中间这一坨东西算出a b c的值就行。
在这里插入图片描述
谢小白:所以我们来看看这个计算过程。

谢小白:首先a = 5,由于b和c未初始化,所以b和c是随机值

在这里插入图片描述
谢小白:然后c = ++a;

谢小白:之前我们讲过这个++单目操作符。
在这里插入图片描述
谢小白:在前置++中,是先自增后使用。

谢小白:所以是自增1,然后再把a赋值给c。

谢小白: a = a + 1;
在这里插入图片描述

谢小白:c = a;
在这里插入图片描述

在这里插入图片描述
谢小白:我们继续来看方框中的第三行。

谢小白:这里的逗号你可以暂时理解为跟分号一样是用来隔开一个个语句的。

谢小白:首先是b = ++c; 这个跟刚才 c = ++a; 一样
在这里插入图片描述
谢小白:所以c先自增1。

在这里插入图片描述

谢小白:然后再把 c 赋值给 b。

在这里插入图片描述

谢小白:然后剩下的c++,++a,a++;就简单了。

谢小白:由于是单独的++,所以直接每个自增1就行了。

谢小白:c++;
在这里插入图片描述

谢小白:++a;
在这里插入图片描述

谢小白:a++;
在这里插入图片描述


在这里插入图片描述

谢小白:你现在还记得 += 这个符号吗?

初中生:是复合的符号,有点印象,+=几就是自增几的意思吧。

谢小白:嗯相当于这个。
在这里插入图片描述
谢小白:最后我们再看方框中的最后一行。

谢小白:根据我们前面说的,我们来一步一步拆解它。
在这里插入图片描述
谢小白:首先由于是后置++,所以是先使用a这个值在自增1。

谢小白:所以就可以先拆解成这样。

谢小白:然后再根据 += ,我们还可以拆解成这样子。

在这里插入图片描述
谢小白:我们刚才算的值是这个
在这里插入图片描述
谢小白:接下来就是算就行了。

谢小白:b = b + a + c;
在这里插入图片描述

谢小白:a = a + 1;
在这里插入图片描述
谢小白:所以这道题选B。
在这里插入图片描述

谢小白:怎么样,这么一说不难了吧。

初中生:看来是纸老虎。

13

在这里插入图片描述
谢小白:这题你肯定做对了吧。

初中生:嗯没问题。

谢小白:这题只是这个 / 除号要格外注意,两边只有至少一边是小数才会得到小数。

谢小白:这个c是单精度浮点型,所以得出来是小数。

谢小白:再加上 %f 默认是打印六位小数,所以选A选项。

14

在这里插入图片描述
谢小白:直接再来看这个概念题。

谢小白:这个A选项刚才咱也提到了,除号两边至少有一个就可以了,所以A选项错误。

谢小白:这个B选项就是胡说八道,%的两边只能放整数。

谢小白:C选项也在胡说,%是用来取余数的,不是商。

谢小白:只有D选项是正确的,所以选D选项。

15

在这里插入图片描述
谢小白:这个题考查printf函数中占位符的用法。

谢小白:%5d的意思就是当你需要打印的值不足五个格子的时候,需要用空格补齐。

谢小白:但是题目中123456占了6个格子,所以该打印还打印什么。

谢小白:所以选择B选项。

16

在这里插入图片描述
谢小白:首先这个题选D选项。

谢小白:在所有的函数中,参数需要用逗号隔开。

谢小白:所以你有几个占位符,后面就需要几个插入的值。

在这里插入图片描述
谢小白:再加上你前面的双引号这些内容,他也是一个参数。

谢小白:所以如果有n个占位符,printf()的参数就应该有n+1个。

谢小白:至于其他的选项,记住就好了。

17

在这里插入图片描述
谢小白:终于到了最后一个选择题。

谢小白:这个D选项很明显是错误的,库函数需要包含对应的头文件。

谢小白:对于scanf函数来说,它和printf函数都需要写以下代码。
在这里插入图片描述

谢小白:再来看A选项,在之前我们讲scanf函数的时候,提到了一个&(取地址)符号。

谢小白:在用scanf函数输入值时,就是因为每个占位符需要的是地址,所以才需要在变量前加上&(取地址)符号,所以A选项正确。

谢小白:对于B选项,我们之前讲过,对于%d来说,它会跳过所有的空白字符(空格、制表符、换行符)

谢小白:但是唯有一个类型的占位符不满足此条件,它就是%c。%c读取的是字符类型,所以对于起首的空白字符,它也会读取。

谢小白:最后的C选项涉及到了我们没有讲过的占位符类型%s,%s表示读取一个字符串,这个占位符在我们现在这个阶段用的不多,在我们了解了数组之后再去深入。

谢小白:对于题目中的这个说法是不正确的,%s在遇到空白字符时会停止读取。
在这里插入图片描述
谢小白:由于我们还没有学习数组,所以会有点超纲,暂时不懂也是没关系的,讲到数组的时候就好理解了。

初中生:%s不是遇到空白字符就停止读取吗,那刚才的B选项说只有%c一个不会忽略起首的空白字符,也就是说%s会跳过起首的空白字符吧。

谢小白:嗯是的,我刚才说的有问题,%s会跳过起首的空白字符,但是后来再遇到空白字符时就会停止读取。
在这里插入图片描述
在这里插入图片描述
谢小白:再说明一下,这里输入的数字是字符。例如 ‘0’ 和 0,这两个是完全不同的,用单引号括起来的是字符0,没有括起来的是数字0。

谢小白:你还记得ASCII码表这个东西不。

初中生:有点,但不多。

谢小白:字符型的背后其实是整型,ASCII码表就是用来规定字符所对应的整数,以便统一。

谢小白:‘0’ 的十进制ASCII码值是48,所以自然跟数字0不一样。

谢小白:所以在输入数字时,它是字符还是数字取决于占位符需要什么类型的。

编程题1

编程题2

编程题3

编程题4

编程题5

编程题6

编程题7

编程题8

编程题

谢小白:选择题终于是说完了,我们来看编程题。

谢小白:编程题可是直接上战场了,前面都是纸上谈兵。

谢小白:盲猜一波做的不太理想吧。

初中生:的确,写的很难受。

谢小白:正常情况,第一次写很正常,咱来看第一道题。

1

在这里插入图片描述
谢小白:这个题让我们输出一句话。

谢小白:由于我们写的是C语言,刚开始的模板你还记得是啥不。

初中生:。。。不记得了。

谢小白;需要写main函数,它是我们的主函数,是程序的入口。

在这里插入图片描述
谢小白:写完了这个模板后,然后我们才能看题目的要求再去写代码。

谢小白:打印出来其实就是输出,所以我们需要用到我们之前讲过的printf函数。
在这里插入图片描述
谢小白:但是使用库函数有个前提,就是得包含对应的头文件。

谢小白:所以我们需要在整个C语言代码的开头加上以下代码。
在这里插入图片描述

谢小白:题目让我们打印 Hello Nowcoder! ,所以我们写在双引号里就行了。
在这里插入图片描述

谢小白:所以这就是第一道题的答案。

谢小白:还有一个值得注意的点就是每次写完一个操作一定要加分号。

谢小白:毕竟是第一次写代码,不习惯很正常,写的多就好了。

谢小白:咱们继续来看第二题。

2

在这里插入图片描述
谢小白:首先还是刚才那个模板,写C语言前都要记得去写。
在这里插入图片描述
谢小白:在这道题中,在有输出的基础上,增加了输入。

谢小白:所以我们在这道题中要用到printf函数和scanf函数。

谢小白:由于是库函数,所以还是老样子,包含上对应的头文件

在这里插入图片描述
谢小白:在做编程题时,我们需要仔细看我们的输入描述和输出描述,以及我们的题目。

谢小白:输入描述里说到我们需要输入一个整数。

谢小白:所以我们也需要一个变量去存储输入的这个整数。

谢小白:所以我们需要创建一个整型变量。
在这里插入图片描述
谢小白:在这里我们创建了一个名为n的整型变量,并且把它初始化为0。

谢小白:然后我们就可以用scanf函数了。

在这里插入图片描述
谢小白:在scanf函数括号中,双引号里的%d表示需要一个整形,然后再把这个值存到变量n里面去,记得一定要在n前面加上&(取地址)符号。

谢小白:现在我们已经完成了输入操作。

谢小白:接下来我们需要使用printf函数来完成输出操作。

谢小白:我们需要用printf函数来打印变量n的值。
在这里插入图片描述
谢小白:由于打印的是一个变量,我们需要使用我们的占位符。

谢小白:现在我们就已经完成这个题目了,我们来验证一下。
在这里插入图片描述
谢小白:输入666,打印了666,所以表示我们输入成功了。

初中生:是不是只有初始化才能输入值?我记得之前说过没有初始化的变量是个随机值,是不是不能用scanf函数呢。

谢小白:不是的,无论有没有初始化,都可以通过scanf函数对变量进行输入。

谢小白:只不过在创建变量的时候,初始化是一个很好的习惯,因为可以防止不小心使用了没有赋值的变量。

谢小白:例如下面的printf函数中,就错误的使用了未初始化的n。
在这里插入图片描述
谢小白:所以在每次创建变量时,能初始化就初始化。

初中生:我还有一个问题。

初中生:就是这个输入描述里,说的 输入的整数 范围 在32位有符号整数范围内 是啥意思?

谢小白:这里的32位 指的是 二进制位。

谢小白:在之前我们讲过,整型(一种数据类型)存储的是整数,它占4个字节,一个字节是八个比特位。

谢小白:所以4个字节就是32个比特位。

谢小白:有符号整数对应的是 signed int类型,相反的无符号整数对应的是 unsigned int

谢小白:有无符号的差别是有符号会有一个比特位专门存储符号,0代表是整数,1则代表负数。

谢小白:在十进制中,一个两位数最多表示0 ~ 99。

谢小白:相同的,在二进制中,32位,其中一个用于表示符号,剩下的31位就最多表示二进制数 0 ~ 31个1(1111111…)。

谢小白:也就是说当输入大于这个最大值的数字时,数据就存不下了,所以题目说了这条件是因为防止数据溢出了,从而导致结果不对。

初中生:很严谨的题目啊。

3

在这里插入图片描述
谢小白:再来看看第三道编程题,这道题与刚才第二题考查的都是输入和输出。

谢小白:只不过一个输入的是整数,一个是小数罢了。

谢小白:还是老样子,写C语言前先写main函数,你来写一下,刚才都是我写的。

初中生:
在这里插入图片描述
初中生:还不错吧。

谢小白:很不错了,多敲敲就熟练了。

谢小白:上一道题输入的是整数,所以创建了一个整形变量。

谢小白:那么输入的是浮点数,所以自然就得创建一个浮点型变量。
在这里插入图片描述
谢小白:创建好浮点型变量后,我们就可以用scanf函数进行输入了。

谢小白:由于输入的是单精度浮点型,所以我们scanf函数里的占位符应该是%f。
在这里插入图片描述
谢小白:这样我们输入的小数就会 输入到变量n里面了,还是得记住一定要加&(取地址)符号。

谢小白:然后接着老样子,用printf函数打印n的值就行了。

谢小白:但是需要注意的是,在打印小数时,%f会默认打印六位小数。

谢小白:而在题目的输出描述中,要求打印三位小数,所以我们得在%f中的%后加个.3(点3)。
在这里插入图片描述
谢小白:在加上我们老熟悉的包含头文件操作,这就是本题的正确答案。

4

在这里插入图片描述
谢小白:有了前面这两道题的讲解,这道题也是考查输入和输出,只不过对象编程了字符型罢了。

谢小白:这道题你应该没问题吧,你先来做做看,并试着讲一下。

初中生:嗯,没问题。

初中生:首先写C语言,先写main函数。
在这里插入图片描述
初中生:然后输入需要有变量存储。

初中生:由于输入的是字符型,所以得创建一个字符型变量,字符是char。
在这里插入图片描述

初中生:这里创建了一个叫做n的变量。

初中生:然后就可以使用scanf函数进行输入操作了。
在这里插入图片描述
初中生:输入字符的话,占位符应该是%c。

初中生:最后再用printf函数打印字符就行了,同样使用%c占位符。
在这里插入图片描述
谢小白:你是不是少了点什么东西,使用库函数需要咋样。

初中生:哦,包含头文件,给忘了!
在这里插入图片描述

谢小白:很不错,这个就是最后的答案了,之后敲的多了会越来越熟练度的。

谢小白:这道题中的输入描述中 描述的在ASCII范围内,意思是输入的字符都是ASCII码表那里面收录的字符。

5

在这里插入图片描述
谢小白:接下来的这道题还是考查输入和输出,只不过刚才输入的个数是一个,这次变成了三个。

谢小白:这道题得我来帮你顺顺思路,首先老样子main函数。
在这里插入图片描述
谢小白:既然是输入三个整数,所以就得创建三个整型变量。
在这里插入图片描述
谢小白:然后就可以使用scanf函数进行输入了,当然不能忘了要包含头文件。
在这里插入图片描述
谢小白:在用scanf函数输入时,也要按照输入描述中的要求。

谢小白:输入描述中说到一行输入三个整数,并且用空格隔开。
在这里插入图片描述
谢小白:所以我们双引号里的三个占位符也要用空格隔开。

谢小白:接下来就剩下输出了。

谢小白:题目让我们输出第二个整数的值。

谢小白:所以我们就得知道输入的第二个整数会存到那个变量里面。

在这里插入图片描述
谢小白:由于我们在第二个占位符,对应写的是&b,所以输出b的值就可以了。
在这里插入图片描述
谢小白:我们最后来验证一下。
在这里插入图片描述

6

在这里插入图片描述
谢小白:从这个题开始,不光有输入输出,还需要对输入的值进行操作。

谢小白:还是老样子,写C语言先写main函数,希望你能把这个刻在脑子里。

谢小白:需要输入两个整数,所以创建两个整型变量。
在这里插入图片描述
谢小白:当创建的变量的类型是一样的时候,就可以中间使用逗号 一次性创建多个变量了。

谢小白:接下来用scanf函数输入,还是老样子记得包含头文件。
在这里插入图片描述
谢小白:输入完了,接下来是计算环节。

谢小白:题目要求我们输入这两个整数的和,所以我们就得计算出这两个整数的和。

谢小白:所以我们可以再创建一个整型变量去存储这两个整数的和。
在这里插入图片描述
谢小白:然后打印变量c就可以了,由于a + b是整数,所以用%d打印。
在这里插入图片描述
谢小白:这样写是正确的,只不过还可以再优化一下。

谢小白:在昨天我们讲过,printf函数双引号后面的“插队者”是可以直接写表达式的。

谢小白:也就是说,可以不用创建c这个变量,直接用printf函数打印a + b 的值就行了。
在这里插入图片描述
谢小白:这样写会更加简便。

7

在这里插入图片描述
谢小白:这个题和刚才第六题一样,只不过换成 /(除号)了,这个题你来写写吧。

初中生:应该问题不大,我来试试。

初中生:main函数!这个我现在是绝对忘不掉的。
在这里插入图片描述
初中生:输入两个整数,所以需要创建两个整型变量。

在这里插入图片描述
初中生:然后用scanf函数输入,输入两个整数所以要用两个占位符%d。

初中生:两个%d中间要有空格,因为输入的时候也会输入空格,所以要匹配。
在这里插入图片描述
初中生:然后用printf函数打印 a / b就行了。

初中生:对了,还有包含头文件。

在这里插入图片描述
谢小白:完美,思路很OK的。

谢小白:看你进步很快,我再补充一点。

谢小白:在scanf函数中两个%d中的空格不是必须要写的,因为%d遇到空格也会跳过的

在这里插入图片描述
谢小白:我们假设要输入 (1空格2)。

谢小白:scanf函数里写的就是需要在输入框里的“拿”的值。

在这里插入图片描述
谢小白:下边的scanf由于没有空格,所以他不要空格,而且%d会跳过空格去拿整数
在这里插入图片描述
谢小白:所以这两种写法在我们目前写过的题目都是一样的,因为都是整型。

谢小白:所以一旦牵扯多个字符的输入的时候,就要格外的敏感,写的空格就有可能会成为错误的原因。

8

在这里插入图片描述
谢小白:经过刚才两道题,这道题也应该很好写了吧,就是换成了取余数,用%这个符号就行了。

谢小白:我就直接写答案了。
在这里插入图片描述
谢小白:终于讲完了。

初中生:今天真是收获满满。

谢小白:记得多敲代码,明天见!

初中生:bye~.


  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值