在昨天,我们学习了 C 语言中变量的含义,还记得吗,变量有这样四个方面的含义:
我们昨天还布置了一个小练习:
计算 123 * 456 的结果,并输出这个结果,相信你已经做出来了:
#include <stdio.h>
int main() {
int i = 123;
int j = 456;
printf("%d", i * j);
}
输出:56088
或许你已经注意到了,我们的输出语句中,有一个比较特殊的部分:
printf("%d", i * j);
对,就是这个百分号 %
是什么含义,有什么样的作用?
还记得吗,我们在讲 printf 时,说过这是一个“格式化输出函数”,这个 %d
就是格式化字符串的含义:
格式化字符串 format string,是一些程序设计语言在格式化输出 API 函数中用于指定输出参数的格式与相对位置的字符串参数
Wikipedia
简单的说,这些符号,就是指定了我们的数据输出的样式。
上面我们输出了一个整数,所以 d 代表十进制的数值,我们再来看一个例子:
#include <stdio.h>
int main() {
float i = 1.0;
float j = 3.0;
printf("%f", i / j);
}
运行一下,我们发现结果是 0.333333。
float 是什么意思?
昨天我们说到过数据类型,int 是整形,但并不是 C 语言中唯一的类型,而这个 float 就是另外一种很常用的数据类型,叫做浮点型,通俗的说,就是小数的含义。
那么这个符号 / 又是什么含义?
这就是计算机里表示除法的符号。所以这个程序的输出是 0.333333,而格式化字符串 %f 的含义就是完整的输出最终的小数结果。
两个练习题:
这样我们就知道了格式化字符串的含义,也了解了 C 语言中有多种数据类型。
在知道了数据的输出之后,我们自然会想到,数据既然能够输出,能不能输入呢?
答案当然是可以。
输出 output,是程序中的数据在经过各种计算后,为我们返回最后的结果。
输入 input,是向程序中传入我们提供好的数据,交由程序进行各种处理。
输入和输出代表了数据的两个不同的流向:
输入 - 加工 - 输出
那么,在 C 语言中,程序如何接受我们传入的数据?
我们来看一个简单的例子:
#include <stdio.h>
int main() {
int i;
scanf("%d", &i);
printf("%d", i);
return0;
}
在这段程序中,我们先声明了一个整型变量 i,然后使用了一个新的函数 scanf 用以接收向程序中输入的数据,最后又使用 printf 将这个变量的值输出来:
输入和输出
与 printf 类似,scanf 函数就是格式化输入的含义,由英文单词 scan 和 format 组成。
既然是格式化输入,也需要在接收时制定格式化字符串。
另外需要特别注意的是,在程序接收 i 的数据时,我们在 scanf 中写的是 &i,千万不要忘记在 i 的前面写上符号 &。
这个符号涉及到了 C 语言中的一个稍难的知识点,我们会在以后做详细的说明。
在我们掌握了输入和输出的方法以后,我们就可以开启信奥的旅程了!
没有什么能够阻挡, 你对自由的向往。 —— 蓝莲花
在信息学奥林匹克竞赛中,所有的算法题都有着固定的模式:
读入数据 - 计算结果 - 输出数据
这样我们的学习目标就更加明确了:怎样用各种各样的算法来完成对输入数据的处理,以匹配我们希望得到的结果。
下面,我们就来开启第一次信奥的挑战。
既然是第一次,我们从一个简单的题目入手:
【问题描述】 输入整数 i 和 j,输出 i 和 j 的差。
【输入样例】 78 56
【输出样例】 22
这是一个非常简单的题目,但是和信息学奥赛的题目是完全一样的形式。
这是一种解题方法:
#include <stdio.h>
int main() {
int i, j, k;
scanf("%d %d", &i, &j);
k = i - j;
printf("%d", k);
}
这样,当我输入数据 78 56 后,就会输出结果 22。
要注意,因为输入的两个数字中间有一个空格,所以在两个 %d 之间也要保留一个空格。
好啦,这样,我们就完成了信奥的第一次挑战,保留这份信息,我们继续前行!
最后,我们来布置一个稍微复杂一点的例题:
【问题描述】 输入三角形的三条边长,输出这个三角形的面积。
【输入样例】 23.4 56.7 76.5
【输出样例】 408.82
OK!我们今天的课就到这里,明天再见~