第二章 自我介绍
小故事:
新生入学,总免不了要进行自我介绍,互相认识一下。一个响亮的名字,总会让人为之一震。话说韩剧《我叫金三顺》的女主人公金三顺总是偷偷摸摸地去改名字,但总不成功。一次回家打的时,她在出租车上哭泣。司机问:“什么事如此伤心?”她说她的名字不好听。司机说:“你的名字不会难听得叫‘三顺’吧?”她哭得更伤心。
逸凡在自我介绍活动中介绍了自己叫什么,多大,来自哪里,有什么爱好等等。
一、初次接触
当用C语言来完成自我介绍任务时,我们需要从键盘上输入一些内容,如姓名、年龄、家庭住址和爱好等等,以便程序根据不同的输入内容输出相应的结果。下面我们具体来学习如何定义一些变量,学会输入函数和输出函数的用法。
例1:自我介绍任务源程序如下:
#include<stdio.h>
void main()
{
char name[8];
int age;
char address[200];
char hobby[200];
printf("输入你的名字:/n");
scanf("%s",name);
printf("输入你的年龄:/n");
scanf("%d",&age);
printf("输入你来自那里:/n");
scanf("%s",address);
printf("输入你的爱好:/n");
scanf("%s",hobby);
printf("我叫%s,今年%d岁,来自%s,我的爱好是%s./n",name,age,address,hobby);
}
运行结果如下:
程序说明:
1.程序中定义了一些变量,如字符数组名为name、 address和hobby的三个字符数组和一个age整型变量,使用了scanf函数和printf函数。
2.通过从键盘输入“逸凡”、28、“江苏常州”、“踢足球,下象棋和斗地主”等内容,最后程序完成自我介绍任务。
二、本章知识点
1.变量
什么是变量?实际就是程序运行时变化着的量。它就象我们小学时解数学应用题,需要设置x等变量。变量的名字要有代表意义,过了若干个月或几年后重读程序时,应该看到名字仍然能想起程序的功能和变量所代表的意义,千万别取个像“金三顺”不好听的变量名。变量有不同的数据类型,就象我们从小学习自然数,整数,小数等等一样。变量在C语言中有基本数据类型,构造数据类型,指针类型,空类型四大类。基本数据类型包括整型、字符型、实型(浮点型)、枚举类型等等。本章先介绍整型、字符型,其余的以后用到时再介绍。变量需要先定义,再使用,否则程序无法识别。
在例1中,定义了一个age整型变量,用来存储从键盘输入的年龄;定义了三个字符数组,数组名分别为name、 address和hobby,其长度为8,200和200,用来存储从键盘输入的姓名、家庭地址和爱好。在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。使用字符数组,其长度由自己估计输入内容多少来定义数组大小。比如,中文名字顶多4个汉字,由于1个汉字占2个字符,所以在这里定义name的大小为8。Address和hobby字符数组大小为200,是虚设的。输入内容必须少于200个字符。特别注意的是,当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符。为了避免这种情况,可多设几个字符数组分段存放含空格的串。对于字符数组的定义方式和具体用法,我们在后面章节再详细介绍。
2.scanf函数
scanf函数是格式输入函数,其关键字最末一个字母f即为“格式”(format)之意,即按用户指定的格式从键盘输入内容到内存中,供程序使用。它实际上是从键盘缓冲区扫描带格式的内容存储到相应变量内。因此,首先需要定义变量,其次需要获取变量在内存中的存储地址。在C语言中,获取内存地址用“&”。一般只有字符数组不用“&”来获取内存地址,因为字符数组名代表了数组首地址,知道首地址,数组内其余元素的内存地址就都知道了。
(1)scanf函数的一般形式
scanf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中,与printf函数相同,C语言也允许在使用scanf函数之前不必包含stdio.h文件。
scanf函数的一般形式为:
scanf(“格式控制字符串”,地址表列);
其中,格式控制字符串用于指定输入格式。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输入数据的类型等,如:“%d”表示按十进制整型输入;“%s”表示按字符数组输入等。非格式字符串在输入函数中不能显示,也就是不能显示提示字符串。地址表列中给出各变量的地址。
例2:从键盘中输入三个整数给变量a,b,c。
int a,b,c;
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
从键盘输入时必须输入下列内容:
a=4,b=5,c=6
具体对应关系如下图1:
图1 格式字符串与输入内容对应关系
(2)常见一些问题
1)常见输入数据的类型,其格式符和意义如下表1所示。
表1 输入数据类型
格式 | 字符意义 |
d | 输入十进制整数 |
o | 输入八进制整数 |
x | 输入十六进制整数 |
u | 输入无符号十进制整数 |
f或e | 输入实型数(用小数形式或指数形式) |
c | 输入单个字符 |
s | 输入字符串 |
2)在scanf语句的格式串中由于没有非格式字符在“%d%d%d”之间作输入时的间隔,因此在输入时要用一个以上的空格或回车键作为每两个输入数之间的间隔。
3.printf函数
还记得第一章刚刚学会的printf函数基本用法吗?我们在这里进一步讲解printf函数用法。
(1)printf函数调用的一般形式
printf函数称为格式输出函数,其关键字最末一个字母f即为“格式”(format)之意。其功能是按用户指定的格式,把指定的数据输出来。在前面的例题中我们已多次使用过这个函数。
printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在使用 printf 函数之前必须包含stdio.h文件。
printf函数调用的一般形式为:
printf(“格式控制字符串”,输出表列);
其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如:“%d”表示按十进制整型输出;“%ld”表示按十进制长整型输出;“%c”表示按字符型输出等。非格式字符串在输出时原样照印,在显示中起提示作用。
输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。
例3:输出例2中a,b,c三个变量。
printf("例2中a=%d,b=%d,c=%d/n",a,b,c);
输出结果如下:
具体对应关系如下图2:
图2 输出函数与格式字符串对应的关系
printf函数实际是将双引号内的内容输出来,当遇到非格式字符串时,将后面对应的变量的值输出来。
三、模仿学习
例4:编写程序介绍一下你几岁上什么小学,几岁上什么中学。
#include<stdio.h>
void main()
{
int PrimaryAge;
char PrimarySchool[200];
int MiddleAge;
char MiddleSchool[200];
printf("输入你上小学的年龄:/n");
scanf("%d",&PrimaryAge);
printf("输入你的小学校名:/n");
scanf("%s",PrimarySchool);
printf("输入你上中学的年龄:/n");
scanf("%d",&MiddleAge);
printf("输入你的中学校名:/n");
scanf("%s",MiddleSchool);
printf("我%d岁上%s,%d上%s./n",PrimaryAge,PrimarySchool, MiddleAge, MiddleSchool);
}
通过上面的模仿学习,相信你已经学会了C语言程序如何定义变量,同时也学会了如何从键盘输入内容(scanf函数)和如何将内容输出到屏幕上(printf函数)。