2019-02-19 计算机二级C语言程序设计之顺序结构

参考资料:高教版《全国计算机等级考试二级教程——C语言程序设计》、《21天学通C语言》。

赋值语句

在赋值表达式的尾部加上一个分号,就构成了赋值语句
注意:变量定义时赋初值和赋值语句不相同。

数据输出

把数据从计算机内部送到计算机外部设备上的操作称为输出,从计算机外部设备将数据送入计算机内部的操作称为输入

printf函数的一般调用形式

printf函数是C语言提供的标准输出函数。

printf函数的调用形式如下:

printf(格式控制,输出项1,输出项2,……)

格式控制是字符串形式。

格式控制可由三部分组成:

  • 字面常量文本:在格式字符串中精确地显示输入。
  • 转义序列:提供特殊的格式控制。转义序列由反斜杠(\)和一个单独的字符组成。一般而言,反斜杠告诉printf函数以特殊的方式解释下一个字符。
  • 格式说明:由百分号(%)和一个转换字符组成。

在printf函数调用后加上分号,则构成输出语句。例如:

printf("a = %d, b = %d", a, b);

printf函数中格式控制有以下两种作用:

  • 给输出项提供输出格式说明。
  • 提供需要原样输出的文字或字符。

程序示例1:

#include <stdio.h>
main()
{
    int i = 2518;
    double a = 3.1415;
    printf("i = %d, a = %f, a * 10 = %e\n", i, a, a*10);
}

运行后输出的结果为:1=2518,a=3.141500,a*10=3.141500e+01。

注意:使用printf()的程序都必须包含stdio.h头文件。

printf函数中常用的格式说明

格式控制中,每个格式说明都必须用“%”开头,以一个格式字符作为结束,在此之前可以根据需要插入“宽度说明”、左对齐符号“-”、前导零符号“0”等。

格式字符

格式字符 说明
c 输出一个字符。
d或i 输出带符号的十进制整型数。
o 以八进制格式输出整型数。%o不带先导0,%#o加先导0。
x 以十六进制格式输出整型数。%x不带先导0x,%#x带先导0x。
u 以无符号十进制形式输出整型数。
f 以带小数点的数学形式输出浮点数(单精度数和双精度数)。
e 以指数形式输出浮点数(单精度数和双精度数)。
g 由系统决定采用%f格式还是采用%e格式输出,以使输出宽度最小。
s 输出一个字符串,直到遇到“\0”。
p 输出变量的内存地址。
% 也就是“%%”的形式,输出一个%。

长度修饰符

在%号和格式字符之间,可以加入长度修饰符,以保证数据输出格式的正确和对齐。

例如,对于短整型数可以加h,即%hd,对于长整型数可以加l,即%ld,对于长长整型可以加ll。

输出数据所占的宽度说明

当使用%d,%c,%f,%e……的格式说明时,输出数据所占的宽度(域宽)由系统决定,通常按照数据本身的实际宽度输出,前后不加空格,并采用右对齐的形式。也可以用以下方式人为控制输出数据所占的宽度:

  • 在%和格式字符之间插入一个整数常数来指定输出宽度n(例如%4d,n代表4)。

  • 对于float和double类型的实数,可以用n1.n2的形式来指定输出宽度(n1和n2分别代表一个整数常数),其中n1指定输出数据的宽度(包括小数点),n2指定小数点后小数位的位数,所以n2也称精度(例如%12.4f,n1代表整数12,n2代表整数4)。

输出数据左对齐

由于输出数据都隐含右对齐,如果想左对齐,可以在%和宽度之间加一个“-”来实现。

使输出数据总带+号或-号

如果要每一个数前面都带正负号,可以在“%”和格式字符间加一个“+”来实现。

使用printf函数时的注意事项

  1. printf的输出格式为自由格式,是否在两个数之间留逗号、空格或回车,完全取决于格式控制,如果不注意,很容易造成数字连在一起,使得输出结果没有意义。
  2. 格式控制中必须含有与输出项一一对应的输出格式说明,类型必须匹配。若格式说明与输出项的类型不一一对应匹配,则不能正确输出,而且编译的时候不会报错。在这种情况下,若格式说明个数少于输出项个数,则多余的项不会输出;若格式说明个数多于输出项个数,则将输出一些毫无意义的数字乱码。
  3. 在格式控制中,除了前面要求的输出格式,还可以包含任意的合法字符,这些字符输出时将原样输出。此外,还可以利用\n(回车)、\r(回行但不回车)等控制输出格式。
  4. printf函数有返回值,返回值是本次调用输出字符的个数,包括回车等控制符。
  5. 尽量不要在输出语句中改变输出变量的值。
  6. 输出数据时的域宽可以改变。

使用puts()显示消息

puts()也可用于在屏幕上显示文本消息,但它不能显示数值变量。

puts()函数只需要一个字符串作为参数,在该字符串的末尾自动地添加换行符,并将其显示在屏幕上,例如:

puts("QNKCDZO");

使用puts()的程序也需要包含stdio.h。

数据输入

scanf函数是C语言提供的标准输入函数。

scanf函数的一般调用形式

scanf函数的一般调用形式如下:

scanf(格式控制,输入项1,输入项2,……)

在scanf函数调用之后加上分号,则构成输入语句

例如,若k为int型变量,a为float型变量,y为double型变量,可通过以下函数调用语句进行输入:

scanf("%d%f%lf", &k, &a, &y);

格式控制的主要作用是指定输入时的数据转换格式,即格式转换说明。scanf的格式转换说明与printf的类似,也是由%开始,其后是格式字符。

输入项之间要用逗号隔开。对于数值型变量,在变量之前必须加&符号作为输入项(&符号是C语言中的求地址运算符)。

scanf函数中常用的格式说明

每个格式说明都必须用“%”开头,以一个“格式字符”作为结束。

格式字符 说明
c 输入一个字符。
d 输入带符号的十进制整型数。
i 输入整型数,可以是带先导0的八进制数也可以是带先导0x的十六进制数。
o 以八进制格式输入整型数,可以带先导0,也可以不带。
x 以十六进制格式输入整型数,可以带先导0x,也可以不带。
u 以无符号十进制形式输入整型数。
f(lf) 以带小数点的数学形式或指数形式输入浮点数(单精度用f,双精度用lf)。
e(le) 同上。
s 输入一个字符串,直到遇到“\0”。

说明:

  • 在格式串中,必须含有与输入项一一对应的格式说明转换符。若格式说明与输入项的类型不一一对应匹配,则不能正确输入,而且编译时不会报错
  • 在VC环境下,输入short型整数,格式控制要求用%hd。要输入double型数据,格式控制必须用%lf(或%le)。
  • 在scanf函数的格式字符前可以加入一个正整数指定输入数据所占的宽度,但不可以对实数指定小数位的宽度。
  • 由于输入是一个字符流,scanf从这个流中按照格式控制指定的格式解析出相应数据,送到指定地址的变量中。当输入的数据多于输入项时,多余的数据等待下一个输入操作语句继续从此输入流读取数据。
  • scanf函数有返回值,其值就是本次scanf调用正确输入的数据项的个数。

通过scanf函数从键盘输入数据

输入数值型数据

在输入整数或实数这类数值型数据时,输入的数据之间必须用空格、回车符、制表符(Tab键)等间隔符隔开,间隔符个数不限。
只要能把数据正确输入,就可以按任何形式添加间隔符。

指定输入数据所占的宽度

可以在格式字符前加入一个正整数指定输入数据所占的宽度,不过不提倡这样做。

跳过某个输入数据

可以在%和格式符之间加入“*****”号,作用是跳过对应的输入数据。例如:

int x, y, z;
scanf("%d%*d%d%d", &x, &y, &z);
printf("%d %d %d\n", x, y, z);

若是输入12 34 56 78,则输出是12 56 78,跳过了34。

在格式控制字符串中插入其他字符

scanf函数中的格式控制字符串是为了输入数据用的,不会将字符输出到屏幕上。因此若想在屏幕上输出提示信息,应该首先使用printf函数输出。

如果在scanf函数中,在每个格式说明之间加一个逗号作为通配符:

scanf("%d,%d,%d", &x, &y, &z);

则输入数据时必须在两个数据后面紧跟一个逗号,否则就不能正确读入数据。

复合语句和空语句

复合语句

在C语言中,一对花括号“{}”不仅可以用作函数体开头和结尾的标志,也可以用作复合语句的开头和结尾的标志。复合语句也可称为,其语句形式如下:

{语句1 语句2 …… 语句n}

用一对花括号把若干语句括起来构成一个语句组。一个复合语句在语法上视为一条语句,在一对花括号内的语句数量不限,如:

{a++; b *= a; printf("b = %d\n", b);}

空语句

如果只有一个分号,那么这个分号也是一条语句,称为“空语句”,程序执行时不产生任何动作。

程序举例

例(《全国计算机等级考试二级教程——C语言程序设计》P32例3.1。稍微改动了一下,注释都是我加的):

#include <stdio.h>
main()
{
    int x, y, t;  //定义x,y,z三个整型变量
    printf("Enter x & y :\n");  //输出提示信息
    scanf("%d%d", &x, &y);  //从键盘输入两个整数
    printf("x = %d y = %d\n", x, y);  //输出原始数据
    //以下三行交换x与y的值
    t = x;
    x = y;
    y = t;
    printf("x = %d y = %d\n", x, y);  //输出交换后的数据
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容