全国计算机等级考试实用应试教程二级C语言_第3章__顺序结构.ppt
第3章 顺序结构本章要点本章要点:3.1 赋值语句3.2 数据输出3.3 数据输入 3.4 复合语句和空语句 3.1 赋值语句在赋值表达式的尾部加上一个“;”号,就构成了赋值语句也称表达式语句。以下是几点说明:1赋值语句必须在最后出现分号,分号是语句中必不可少的部分,如“x+=10”是表达式,“x+=10;”是赋值语句。2任何赋值表达式都可以加上分号而称为赋值语句。3赋值语句是一种可执行语句,应当出现在函数的可执行部分。重点提示重点提示:分号是赋值语句中必不可少的部分,若没有分号,则只是一个赋值表达式而已。3.2 数据输出3.2.1 printf函数的一般调用形式printf函数是标准输出函数,功能是在终端设备上按指定格式进行输出。printf()函数的一般形式为:printf(“格式控制”,输出项序列)例如:printf(”a=%d,b=%c”,a,b)中,”a=%d,b=%c”称为格式控制字符串,a,b是输出项序列中的输出项,都是printf函数的参数。格式控制符的作用有:1为各输出项提供格式转换说明。它总是由“%”符号开始,紧跟其后的是格式描述符。2提供需要原样输出的文字或字符。输出项表中的各输出项要用逗号隔开,输出项可以是合法的常量、变量或表达式。格式转换说明的个数要与输出项的个数相同,使用的格式描述符也要与它们一一对应且类型匹配。3.2.2 printf函数中常用的格式说明“格式控制”部分是用双引号括起来的字符串,也称“转换控制字符串”,它包括三种信息:格式说明符、转义字符和普通字符。1格式字符格式说明符由%和格式字符组成,如%d、%f等。作用是转换输出数据的格式。对于不同类型的数据用不同的格式字符。下面详细介绍几种常用的格式字符。d格式字符。用来输出十进制整数。其用法如下:(a)%d,按型数据的实际长度输出。例如:printf(%d,n,x);如果x=789,则输出结果为:789(b)%1d,输出长整型数据。例如:printf(%1d,n,a);如果a被定义为:long int a=56789;则输出结果为:56789如果用%d格式输出,就会出错,因为整型数据的范围是-3276832767。对超出此范围的long型数据应当用%1d格式输出。(c)%-md,m是指定的输出字符宽度。如果数据的位数小于m,则输出共占m位,数据左靠齐,右边补空格,若省略“-”号,则右靠齐,左边补空格;如果数据的位数大于m,则按实际位数输出。例如:printf(%5d,%5dn,a,b);如果a=7788,b=56789,则输出结果为:7788,56789 f格式字符。用来输出实数(包括单精度、双精度),以小数形式输出。其用法如下:(a)%f,实数的整数部分全部输出,小数部分保留六位。需要指出的是,并非全部数字都是有效数字。单精度实数的有效位数一般是7位,双精度实数的有效位数一般是16位。(b)%mf,输出的实数共占m位,小数部分保留六位。(c)%.nf,输出的实数,总宽度按实际宽度,小数部分占n位。(d)%-m.nf,输出的实数包括小数点在内共占m位,其中小数部分占n位。如果数据的实际宽度小于m,则左靠齐,右边补空格,省略“-”时,右靠齐,左边补空格。如:main()float a=123.45;printf(“%f,%11f,%.2f,%-10.3fn”,a,a,a,a);程序运行结果为:123.449997,123.449997,123.45,123.450说明:a的值应该是123.45,但输出的结果却是123.449997,这是由于实数在内存中的存储误差引起的。c格式字符。用来输出一个字符。例如:char ch=a;printf(%c,ch);则输出一个字符a。也可以指定输出字符的宽度,如:printf(%2c,ch);则输出a,即ch变量输出占2列,第一列补空格。s格式字符。用来输出一个字符串。其用法如下:(a)%s,按原样输出一个字符串。例如:printf(%s,Happy New Year!);则输出字符串:Happy New Year!(b)%-ms,与整数输出格式“%-md”类似。c)%m.ns,输出占m列,但只取字符串中左边n个字符。这n个字符输出在m列的右边,左边补空格。(d)%-m.ns,n个字符输出在m列范围的左边,右边补空格。若nm,则m自动取n值,即保证n个字符正常输出。如:字符串输出示例main()printf(“%3s,%6.3s,%.2s,%-5.4sn”,“Hello”,“Hello”,“Hello”,“Hello”);程序运行结果为:Hello,Hel,He,Hell表3.1 输出格式字符及其功能说明格式字符格式字符说说 明明c输输出一个字符出一个字符d或或i输输出出带带符号的十符号的十进进制整数制整数o以八以八进进制无符号形式制无符号形式输输出整形数(不出整形数(不带带前前导导0)x或或X以十六以十六进进制无符号形式制无符号形式输输出整形数(不出整形数(不带带前前导导),),x输输出小写字母,出小写字母,X输输出大写字母出大写字母u按无符号的十按无符号的十进进制形式制形式输输出整型数出整型数f以以带带小数点的形式小数点的形式输输出出单单精度和双精度数精度和双精度数E或或e以以-m.dde(或或E)xx的指数形式的指数形式输输出浮点数。出浮点数。d的个数由精度指定,精的个数由精度指定,精度度为为0时时小数部分不小数部分不输输出出G或或g由系由系统统决定采用决定采用%f格式格式还还是采用是采用%e格式,以使格式,以使输输出出宽宽度最小度最小s输输出字符串中的字符,直到遇到出字符串中的字符,直到遇到“0”。或者。或者输输出由精度指定的字符数出由精度指定的字符数p输输出出变变量的内存地址量的内存地址%打印一个打印一个%2附加格式字符在%和上述格式字符之间可以插入以下几种附加符号,如下所示。表3.2 输出常用附加格式字符附加字符功能说明m(m为一正整数)规定输出数据的最小宽度为m位.n(n为一正整数)对实数,表示输出的实数保留n位小数,对字符串,表示截取字符串的前n个字符使输出的数据在域内向左靠齐,省略“”时,向右靠齐3长度修饰符长度修饰符加在%和格式字符之间,对于长整型一定要加l(long),h可用于短整型(short)或无符号短整形数的输出。如printf(“%ld,n”,a);4转义字符可以在printf函数中的“格式控制”部分使用“转义字符”,如“n”、“b”、“f”、“t”、“r”、“344”等。重点提示重点提示:如果想输出字符“%”,则应该在“格式控制”字符串中用连续两个%表示。3.2.3 调用printf函数时的注意事项1在格式控制字符串中,格式说明与输出项从左到右在类型上必须一一对应匹配。例如:printf(x=%f,c=%d,x,c);中的x与%f对应,c与%d对应。2在格式控制串中,格式说明与输出项的个数应相同,若格式说明少于输出项,则多余的输出项不输出,相反,对于多余的格式将输出不定值。3在格式控制串中,可以包含任意的合法字符(包括转义字符)。4输出项序列中可以是变量、常量或表达式。如果输出项是表达式时,则printf函数将先对其进行运算,然后输出它的运算结果。如:main()printf(x=%f,3*4.8+9/4-sqrt(2.0);输出结果为:x=32784.4000005printf函数允许没有输出项序列部分。它表示输出一个字符串。此时printf函数成为如下格式:printf(输出字符串);例如:printf(Please input a number:);则输出:Please input a number:6printf函数的返回值通常是本次调用中输出字符的个数。重点提示重点提示:格式说明与输出项从左到右在类型上、个数上都必须一一对应匹配。3.3 数据输入3.3.1 scanf函数的一般调用格式scanf()函数的一般形式为:scanf(“格式控制”,输入项表)“格式控制”的含义同printf函数;“输入项地址序列”是由若干个变量地址(变量前加号)组成的序列,各地址按排次序依次接收转换格式后的读入数据。例如:main()int a,b;scanf(%d%d,&a,&b);printf(%d,%dn,a,b);程序运行结果为:123 456123,456重点提示重点提示:输入项地址序列中的变量前需要加取地址符号”&”。3.3.2 scanf函数中常用的格式说明在格式控制部分一般只包含“格式说明符”这一项内容。和printf函数中的格式说明符相似,以%开始,以一个格式字符结束,中间可以插入附加的字符。1scanf常用的格式字符。表3.3列出scanf函数常用的格式字符及其功能说明。表3.3 scanf格式字符格式字符功能说明d以带符号的十进制形式输入整数正数u以无符号十进制形式输入整数o以八进制无符号形式输入整数x以十六进制无符号形式输入整数f以小数形式或指数形式输入实数c输入单一字符s输入一个字符串2附加格式字符。表3.3列出scanf函数的附加格式字符及其功能说明。表3.4 scanf常用附加字符格式字符功能说明l用于输入长整型数据(用%ld,%lo,%lx)以及double型数据(用%lf或%le)h用于输入短整型数据(用%hd,%ho,%hx)m(m表示一个正整数)用于指定输入数据所占宽度(列数)为m*表示该输入项在读入后不赋给相应的变量3几点说明(1)可以指定输入数据所占列数,系统自动按它截取所需数据。(2)标准C在scanf()函数中不使用u说明符,对unsigned型数据,以%d,%o,%x输入。(3)在输入时若想跳过某个数据,可在%后加一个相应的“*”。(4)输入数据时不能规定精度,如scanf(“%5.2d”,&x)是不合法的。重点提示重点提示:scanf函数输入的数据不能规定精度。3.3.3 通过scanf函数从键盘输入数据通过scanf函数从键盘输入数据时,需要注意以下几点:1scanf函数中的输入项必须是“地址量”,它可以是一个变量的地址,也可以是数组的首地址,但不能是变量名。例如,如果定义了a,b为整型变量,则scanf(“%d,%d”,a,b);是不合法的,应将“a,b”改为“&a,&b”。请读者予以注意,这是初学者易出错的地方。2输入数据时,各个数据之间可以用空格“”或Tab键或回车键作为间隔符。3除了空格、Tab键和回车键外,用户还可以自己指定其他字符作为输入间隔。需要注意的是,如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。例如,对应语句:scanf(“%d,%d,%d”,&a,&b);输入方式应为:1,3注意1后面是逗号,它与scanf函数中的“格式控制”中的逗号对应,若输入时不用逗号,而用空格或回车键等字符就不对。4特别需要注意的是,在使用格式说明符%c输入一个字符时,凡是从键盘输入的字符,包括空格、回车等均被作为有效字符接收。例如对语句:scanf(“%c%c”,&c1,&c2);若输入:a b原意图是把字符a赋给c1,b赋给c2,而结果却是把赋给了c2。因为%c只要求读入一个字符,后面不需要用空格作为两个字符间隔,因此作为下一个字符赋给c2。5在输入数据时,遇以下情况时该数据认为结束:遇空格、Tab键,或回车键。按指定的宽度结束,如“%4d”,只取4列。遇非法输入。重点提示重点提示:scanf函数中的输入项必须是“地址量”,它可以是一个变量的地址,也可以是数组的首地址,但不能是变量名。3.4 复合语句和空语句3.4.1 复合语句在C语言中,可以用一对大括号“”把一些语句括起来构成复合语句,又称分程序。复合语句的形式如下:语句1;语句2;语句n;1在复合语句内,不仅可以有执行语句,还可以有定义部分,定义部分应出现在可执行语句的前面。2复合语句中最后一个语句的最后一个分号不能忽略。3复合语句可以嵌套。即复合语句内部还可以包含其他复合语句。3.4.2 空语句只有一个分号构成的语句称为“空语句”,如;就是一个空语句。空语句在执行时不产生任何动作,但并不表示空语句没有用途。一般空语句可以用在循环体内对程序起“延时”作用。如:for(i=1;i=100;i+);重点提示重点提示:复合语句中最后一个语句的最后一个分号不能忽略。