白泽的C语言入门(二) 变量、输入与输出

众所周知,小红书使用的编程标准已经太老太老了,很容易在1202年的编译软件/在线网站上生发一些奇奇怪怪的错误。于是乎为了让大伙不要在C语言/程序设计基础课上被谭浩强带出高血压来,白泽决定借着以前带少儿编程班的经验,给大伙写一部同龄人能看的程序设计入门教程~

笔墨愚钝,不知所言,乞谅。

——爱你们的白泽

零.填坑——指令与逻辑块,还有美妙的运算

填一下课时一的坑,我们来讲讲逻辑块与指令的问题。

1.指令,告诉你的程序它该做什么

正如在上一章里所讲的那样,指令的作用是告诉程序他应该做什么。正如我们在上一课时所看见的那样:

1
printf("Hello World!");

以及:

1
return 0;

这就是指令。

指令本身可能有多种多样不同的样子,但是他们一定都是以分号结尾的。分号代表着一条指令的结束。在这一课中,你能看到的指令有:

1
2
3
4
printf("Hello World");
scanf("%d %d",&a,&b);
int a;
return 0;

等等。在以后的代码生涯中,还有更多的指令等着你去认识、去学习,他们甚至会长成这样:

1
2
3
4
struct edge{
int u;
int v;
};

记住,只要你看见了”;”,那它一定是一条指令,一定符合白泽随后讲到的有关指令的通性。

2.逻辑块,包含指令的家伙什

在上一课中,我们认识了最重要的逻辑块——函数,也就是:

1
2
3
int main(){

}

通常情况下,逻辑块就是形如:

1
2
3
xxx(){

}

的东西。xxx代表着他的名称,小括号代表着一定的参数/判断条件,大括号内则是书写指令的地方。有的逻辑块会让你的代码在满足特定条件时执行逻辑块内的指令,有的则会使你的代码执行某些指令特定的次数。记住,一般而言,还有大括号、且结尾不存在;都是逻辑块,大括号内属于逻辑块的内部。通常来说,指令可以被放在逻辑块的大括号内,或整个逻辑块之外,全凭你的喜好。

1
2
3
4
5
printf("对于大多数指令来说,这里是不行的");
int main(printf("当然你不能在逻辑块的内部放置任何指令,就像这个错误示范所做的一样")){
printf("这里就可以");
}
printf("对于大多数指令来说,这里是不行的");

另外值得注意的是,函数属于特殊的逻辑块,这个我们以后会讲到。

3.运算

很幸运,在这里,你需要掌握的运算内容不多,而且大多数都和大伙从幼儿园就开始接触的数学有异曲同工之妙。

1
2
3
4
5
6
7
8
9
1+2//加法
1-2//减法
1*2//乘法
1/2//除法
1%2//求1除以2之后的余数
1>2//判断1和2的大小,若1>2则结果为1,否则结果为0
1<2//同上
1==2//判断1和2是否相等,若相等则结果为1,否则结果为0
1!=2//判断1和2是否不相等,若不相等则结果为1,否则结果为0

当然,无所不知的白泽也知道你正在好奇:为什么判断1和2是否相等用的是==而不是=呢?

往下看看。

一.关于变量,存储数据的箱子

1.定义

为了让变量更容易被理解,我们来开始一个新的游戏——箱子游戏。(我知道这个游戏很无聊但是亲爱的读者我真的没有时间做一个真正的游戏出来给你玩了)

我们先假设一个变量就是一个箱子——对于一个箱子而言,我们先要知道箱子的材质,即箱子是金子做的、银子做的还是纸做的。在C语言中,我们将给箱子(变量)选择材质的过程称作给变量赋予类型。随后,很自然地,我们会想到,我们的箱子需要一个好听的名字,比如衣柜,比如保险箱、比如潘多拉的魔盒之类。在C语言中,我们将这一步称作给变量命名。

事实上,伟大的C语言发明者由于担心冗杂的操作步骤会导致使用人数的减少,他革命性地将给予变量类型、给变量命名这两步合在了一条指令中,即创建变量

1
int GoodName;//在这里,我们创建了一个int类型的、名叫GoodName的变量。显而易见的,这是一个好名字。gold badName;//很遗憾的是,箱子的材质是固定的,只有那么几种,因此你不能用金子来打造这个有着坏名字的箱子。

当然,每个箱子都必须使用它独特的名字,不然蠢蠢的计算机怎么能把同名的箱子区分开呢?每个变量必须有不同的命名。

在开始下一步之前,白泽觉得,或许我应该先给你介绍介绍,我们可以用的箱子材质(变量类型)有哪些。

1
int a;//这是一个整型变量,它可以存储-2147483647~2147483647范围内的一个数float a;//这是一个单精度浮点型变量,这个材质太烂因此我们这些大国工匠早就已经不再使用它了double a;//这是一个双精度浮点型变量,可以存储一个小数long long a;//这是一个长型变量,你可以理解为它是一个占地面积更大的大箱子,因此可以存储正负2的32次方范围内的一个数char a;//这是一个字符型变量,可以存储单个单词、数字、或是符号

2.变量的使用

让我们回到主线来。

在制造出箱子之后,我们的下一步理应是往箱子里放东西了,对吧?(不然造出来干嘛呢?)这里我们就到了填坑环节:

1
int a;a=5;

是的,当我们需要给一个变量一个值(往箱子里装东西)时,我们会用到”=”。在C语言中,我们将这一步称作赋值。当然,赋值操作只能对变量进行。

1
1=5;//这样是没有意义而且浪费时间的,因此计算机会将你红牌罚下

当然,我们可以用更简便的方式来完成一次赋值。

1
double pi=3.1415926;char c='a';//给字符型变量赋值时,需要用到单引号,具体内容我们之后再聊

你当然也可以使用算式!

1
long long a=200/2;a=3.131313*5;//值得一提的是,int类型与longlong类型在面对小数时,会自动向下取整保留整数

关于变量,你暂时只需要知道这么多(白泽说了算!),接下来我们来认识一下以后会经常使用到的两条指令——输入与输出。

二.输入与输出

1.输出

因为在Hello World中,我们已经使用过了输出,因此这里我们先介绍输出。

1
printf("Hello World!");

这是最简单的输出,命令计算机输出一串字符。而事实上,你以后会经常用到的输出长这样:

1
//假设我们现在已经有了a、b、c三个整型变量~printf("%d %d %d",a,b,c);

在这个例子中,实际输出时,会依次输出a、b、c三个变量的值。%d表示在这里输出随后的一个整型变量,具体格式正如上边的示例那样。对于%d,你可以将其视为一个占位符,它的使用方法大概是这个样子:

1
//假设我们已经有了a、b、c三个整型变量~//假设a=1,b=2,c=3;printf("%d",c);//这样你的程序会输出:3printf("%d <-----this is a",a);//这样你的程序会输出:1 <-----this is aprintf("Hello%d%dWorld!",a,b)//这样你的程序会输出:Hello12World!

相信你已经明白了该怎么使用占位符(没有文字描述因为我觉得我讲不清楚)

此外,针对不同类型的变量,我们需要使用不同的占位符:

1
//%d int类型占位符//%ld long long类型占位符//%lf double类型占位符//%xlf x应当为具体的数字,同样是double类型的占位符,不过会使得代码输出时四舍五入保留x为小数//%c char类型占位符

解决了输入问题,我们再来讲讲输出。

2.输入

输出就更简单了:

1
int a;scanf("%d",&a);//这行代码表示将a赋值为你输入的一个数。假设输入的是x,这行代码的效果就等同于a=x;//占位符的使用方式与printf中一模一样。&的含义随后白泽会在指针那一课教给你。

最后我们再来看一点特殊情况:

1
//假设我们输入的是这样: 1,2   应该怎么办呢?scanf("%d,%d",&a,&b);//假设输入是这样呢?   1 2scanf("%d %d",&a,&b);//假设输入是这样呢? 12scanf("%d",a);//dbq,但是如果你想输入1和2,那就必须让他俩分开来。//当然我也可以教你不分开的方法,以后再说叭~

很简单是不是!今天的课就这么结束了!

其实是因为事情有点多所以写得蛮简略的..具体见结语!

补充知识点

我也不知道为啥蔡兴泉出的题会考到这个…

当你要取得某个数的某次方时,这么写:

1
double a;//假设我们要让a的值为3的4次方a=pow(3,4);//注意,pow的值必须使用double类型变量存储//pow(x,y)中,x必须是整型变量,y必须是浮点型变量(整型变量也可以被算作小数部分全是0的浮点型变量)

结语

大二计算机竞赛队最近缺人所以白泽要去打替补…推脱不掉…

后续章节拖更到19号往后叭…得开始集训咯..求求大伙不要怪白泽!!

如果有需要的话下周晚自习白泽可以给大伙讲讲…

当然有问题还是可以来找白泽哦 平常没课的时候应该都在图书馆~

也可以vx联系我!vx设置了禁止通过vx号查找到因此请直接到大群里找我就行啦~头像白泽内个就是!(白泽自己画的好看吗好看吗好看吗好看吗)

好多朋友来加我 说要一起努力,我觉得吧….

“一起努力从来不是一句空话,我会尽我所能,希望你也一样。”