




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、14 4 顺序程序设计顺序程序设计24.1 C4.1 C程序结构和语句程序结构和语句一、一、C程序结构程序结构每一个源文件由预编译命令和若干函数组成(对每个文件分别编译,然后连接)一般地, 一个C程序可由多个源文件组成每一个函数由说明部分和语句部分组成3C程序结构:C 程 序源程序文件1源程序文件i源程序文件n预编译命令函 数 1函 数 n说 明 部 分执行部分(语句)4函数调用语句函数调用语句:如: printf ();二、二、C C 程序程序语句1. 表达式语句赋值语句赋值语句: 如: i=i+1; i+; x+y;空语句空语句: 任何事情都不做。C程序语句可分为五大类: 如: ;52.
2、控制语句改变语句的执行顺序 if ( ) else (条件) for ( ) (循环) while ( ) (循环) do while (循环) switch (多分支选择)( )表示条件, 表示语句6 continue (结束本次循环) break (中止整个循环) return ( 函数返回)3. 限定转向(无条件转向)语句5. 终止程序运行语句4.无条件转移语句goto exit76. 复合语句(语句体)用 括起来的一系列语句。 如: z=x+y; t=z/100; printf (%f, t); 8三、结构化程序设计概念 从结构化程序设计角度出发,程序只有三种结构:顺序结构顺序结构选择
3、结构选择结构循环结构循环结构91. 顺序结构顺序结构表示ABAB先执行A, 再执行B.102. 选择结构选择结构表示为ABPTFB TPFA存在某条件P, 若P为真,则执行A, 否则执行B。11 另一种选择结构多分支结构.KK=K1A1A2AiAnK=K2K=Kn123. 循环结构循环结构表示为PFTAAP为T(1) 当型结构 当P条件成立时(T),反复执行A,直到P为“ 假”时才停止循环.有两种结构:当型和直到型13(2) 直到型APTFA直到P为F 先执行A, 再判断P,若为F,再执行A,如此反复,直到P为F. 已证明: 上述三种结构组成的程序可以解决全部的问题,所以任何一种高级语言都具备
4、上述三种结构。14 赋值语句赋值语句是由赋值表达式赋值表达式加上一个分号分号构成。由于赋值语句应用十分普遍,所以专门再讨论一下。 C语言中的赋值号“=”作为赋值运算符;关于赋值表达式与赋值语句的概念。4.2 4.2 赋值语句赋值语句15 作为赋值表达式赋值表达式可以被包括在其它表达式之中,例如 if (ab)0) ta; 其作用是:先进行赋值运算(将b的值赋给a),然后判断a是否大于,如大于是,执行t=a。在if语句中的“a=b”不是赋值语句赋值语句而是赋值表达式赋值表达式,这样写是合法的。 如果写成 if(ab;)0) ta; 就错了,在if的条件中不能包含赋值语句。16 首先说明,C语言本
5、身不提供输入输出语句不提供输入输出语句,输入和输输入和输出操作是由函数来实现的出操作是由函数来实现的。在C的标准函数库中标准函数库中(stdio.h)(stdio.h)提供了一些输入输出函数,例如,printfprintf函函数和数和scanfscanf函数函数。 有两个最基本的输出函数,它们都以终端(即系统隐含指定的输出设备)为对象.它们是字符输出函数和格式输出函数。4.3 4.3 数据输出数据输出174.3.1 putchar函数(字符输出函数)函数(字符输出函数) putchar函数的作用是向终端输出一个字符。 例如 putchar(c); 输出字符变量c的值。c可以是字符型变量或整型变
6、量。 在使用标准IO库函数时,要用预编译命令“include”将“stdio.h文件包括到用户源文件中。即 include “stdio.h”include “stdio.h” stdio.h是standard input & output的缩写,它包含了与标准IO库有关的变量定义和宏定义,但在用printf和scanf函数时,则可以不要(只有printf和scanf例外)。 18 include “stdio.h” main() char a,b,c; a=B;b=O;c=Y; putchar(a);putchar(b);putchar(c); 运行结果:BOY19 也可以输出控制字符,如p
7、utchar(n)输出一个换行符,如果将最后一行改为 putchar(a); putchar(n); putchar(b); putchar(c); putchar(n )。 则输出结果为: 也可以输出其它转义字符,如: putchar(101) (输出字符A) putchar() (输出单引号字符) putchar(015) (使输出回车,不换行) B O Y204.3.2 printf函数(格式输出函数)函数(格式输出函数) 作用是向终端作用是向终端(或系统隐含指定的输出设备)输出若输出若干个任意类型的数据干个任意类型的数据(putchar只能输出字符,而且只能是一个字符,而printf可
8、以输出多个数据,且为任意类型)。 一、 printf函数的一般格式为 printf(格式控制格式控制,输出表列输出表列) “格式控制格式控制”是用双引号括起来的字符串,也称“转转换控制字符串换控制字符串”,它包括两种信息: 1格式说明,由格式说明,由“”,和格式字符组成,和格式字符组成,如d,f等。它的作用是将输出的数据转换为指定的格式输出。格式说明总是由“”字符开始的。212普通字符,即需要原样输出的字符普通字符,即需要原样输出的字符。 “输出表列”是需要输出的一些数据,可以是表达式。例如: printf (”a=d b=d”,a,b); printf (” a+b=d ,a-b=d”,a+
9、b,a-b); 格式说明 输出表列 在上面双引号中的字符除了“d”以外,还有非格式说明的普通字符,它们按原样输出。如果a、b值分别为3、4,则输出为 a=3 b=4 其中有下划线的字符是printf函数中的“格式控制”字符串中的普通字符原样输出的结果。3和4是a和b的值(注意3和4无前导空格和尾随空格),其数字位数由a,b值而定。假如a=12,b=123,则输出结果为 a12 b=12322二、格式字符二、格式字符对不同类型的数据用不同的格式字符。有以下几种格式字符:1d d格式符。用来输出十进制整数格式符。用来输出十进制整数。有以下几种用法: (1)d,按整型数据的实际长度输出。 (2)md
10、,m m为指定的输出字段的宽度为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格左端补以空格,若大于m,则按实际位数输出,如 printf (“4d,4d”,a,b) 若a123,d=12345,则输出结果为: 123,12345 (3)ld,输出长整型数据。如 1ong a=135790; printf(”ld,a); 如果用d输出,就会发生错误,对1ong型数据应当用ld格式输出。对长整型数据也可以指定字段宽度,如将上面printf函数中的“ld”改为“81d”则输出为 135790 8列 一个int型数据可以用d或ld格式输出。232.o o格式符格式符,以以8 8进制数形式输
11、出整数进制数形式输出整数。由于是将内存单元中的各位的值(0或1)按八进制形式输出,因此输出的数值不带符号,即将符号位也一起作为八进制数将符号位也一起作为八进制数的一部分的一部分输出。例如,-在内存单元中(以补码形式存放)如下: a=-1 11 11 11 11 11 11 11 11 int a-1 printf(”d,o”,a,a);输出为 1,177777不会输出带负号的八进制整数。对长整数(1ong型)可以用“lo。”格式输出。同样可以指定字段宽度,如printf(”8o”,a)输出数据为 177777。243. x x格式符,以格式符,以1616进制数形式输出整数进制数形式输出整数,同
12、样不会出现负的十六进制数。例如: int a一1; printf(”x,o,d”,a,a,a);输出结果为 ffff,177777,-1同样可以用“lx”输出长整型数,也可以指定输出字段的宽度,如“12x”4u u格式符格式符,用来输出unsigned型数据,即无符号数,以十进制形式输出。 一个有符号整数(int型)也可以用u格式输出;反之,一个unsigned型数据也可以用d格式输出。unsigned型数据也可用o或x格式输出。25 unsigned int a=65535; int b=-2; printf(”a=%d,%o,%x,%un”,a,a,a,a); printf(”a=%d,%
13、o,%x,%un”,b,b,b,b); 运行结果为: a一1,177777,ffff65535 11 11 11 11 11 11 11 11 a=65535 b一2177776,fffe,65534 11 11 11 11 11 11 11 10 b=-2265 5c c格式符,用来输出一个字符格式符,用来输出一个字符。如: char ca; prinft(”c”,c);输出字符a,请注意:“c”中的c是格式符,逗号右边的c是变量名,不要搞混。例 main ( ) char c=a; int i=97; printf(” c ,dn”,c,c); printf(”c,dn”,i,i); 运行
14、结果为: a,97 a, 97 也可以指定输出字数宽度,如果有 printf (”3c”,c)则输出:” a”,即c变量输出占3列,前2列补空格。276 6s s格式符格式符,用来输出一个字符串。有几种用法: (1)s, 例如 printf(”%s”,”CHINA”)输出“CHINA”字符串(不包括双引号)。 (2)ms,输出的字符串占m列,如字符串本身长度大于m,则突破m的限制,将字符串全部输出。若串长小于m,则左补空格。 (3)-ms,如果串长小于m,则在m列范围内,字符串向左靠,右补空格。 (4)m.ns,输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。 (
15、5)-m.ns,其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果nm,则m自动取n值即保证n个字符正常输出。 例34 main ( ) p r i n t f ( ” % 3 s , % 7 . 2 s , % . 4 s , % - 5 . 3 s n ” , ” CHINA”,”CHINA”,”CHINA”,”CHINA”); 输出如下:CHINA, CH,CHIN,CHI 其中第三个输出项,格式说明为“.4s”,即只指定了n,没指定m,自动使mn=4,故占4列。287f f格式符格式符,用来输出实数(包括单、双精度),以小数形式输出,有以下几种用法: (1)f,不指定字段
16、宽度,由系统自动指定,使整数部分全部如数输出,并输出6位小数。应当注意,并非全部数字都是有效数字.单精度实数的有效位数一般为7位。 【例3.5】 main( ) float x,y; x111111111; y222222222; printf(”f,x十y); 运行结果为 333333328125 显然,只有前7位数字是有效数字。千万不要以为凡是打印出来的数字都是准确的。 双精度数也可用f格式输出,它的有效位数一般为16位,给出小数6位。 29例 main() double x,y; x=11111111111111111111; y2222222222222.22222222; print
17、f(”f”,x十y); 输出结果为 3333333333333.328125显然,双精度数也可用f格式输出,它的有效位数一般为16位,给出小数位。可以看到最后3位小数(超过16位)是无意义的。30(2)m.nf指定输出的数据共占m列,其中有n位小数。如果数值长度小于m,则左端补空格。(3)一m.nf基本相同,只是使输出的数值向左端靠,右端补空格。 例 main ( ) floatf f=123456; printf(”%f,%10f,%10.2f,%.2f,%-10.2fn”,f,f,f,f,f); 输出结果如下: 123.455994, 123.455994, 123.46, 123. 46
18、,123.46 ,f的值应为123456,但输出为123455994,这是由于实数在内存中的存储误差引起的318.e e格式符格式符,以指数形式输出实数。可用以下形式: (1)e不指定输出数据所占的宽度和数字部分小数位数,由系统自动指定给出6(5)位小数,指数部分占5(4)位(如e+002,e+02),其中“e”占一位,指数符号占一位,指数占3(2)位。数值按标准化指数形式输出(即小数点前必须有而且只有一位非零数字)。例如 printf(”%e”,123.456);输出:1.234560e002,(1.23456e+02)。也就是说用e格式输出的实数共占13(11)列宽度。 32(2)m.ne
19、和-m.ne m,n和“-”字符含义与前相同。此处n指数据的数字部分数据的数字部分(与书上讲的不同)。若f123.456,则printf(”%e,%10e,%10.3e,%.3e,%-10.3e,”,f,f,f,f,f);输出如下:1.23456e+02,1.23456e+02, 1.23e02,1.23e02,1.23e十02 第二个输出项按10e输出,即只指定了m=10,未指定n,凡未指定n,自动使n=6,整个数据长11列,超过给定的10列,乃突破10列的限制,按实际长度输出。第三个数据共占10列,小数部分占2列。第四个数据按字“.2e”格式输出,只指定n2,未指定m,自动使m等于数据应占
20、的长度,今为8列。第五个数据应占10列,数值只有8列,由于是“-10.2e”,数值向左靠,右补二个空格。339 9g g格式符格式符,用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的零。例如,若:f=123.456,则 printf(”%f,%e,%g”,f,f,f);输出如下: 123.456001,1.23456e+02,123.456用f格式输出占10列,用e格式输出占11列,用g格式时,自动从上面两种格式中选择短者(今为f格式为短),故占7列,且按%f格式用小数形式输出,最后三个小数位“0”为无意义的0,不输出,g格式用得较少。34以
21、上介绍了9种格式符,归纳如表格式字符 说 明 d 以带符号的十进制形式输出整数(正数不输出符号)。 o 以8进制无符号形式输出整数(不输出前导符0)。 x 以16进制无符号形式输出整数(不输出前导符0 x)。 u 以无符号10进制形式输出整数 c 以字符形式输出,只输出一个字符。 s 输出字符串。 f 以小数形式输出单、双精度数,隐含输出6位小数。 e 以标准指数形式输出单、双精度数,数字部分小数位数为6位。 g 选用f或e格式中输出宽度较短的一种格式,不输出无意义的0。 35在格式说明中,在和上述格式字符间可以插入以下几种附加符号。附加格式说明字符 字符 说 明 l用于长整型整型,可加在格式
22、符d o x.u前面。 m(代表一个正整数)数据最小宽度。 .n(代表一个正整数)对实数,表示输出n位小数;对字符串,表示截取的字符个数。 - 输出的数字或字符在域内向左靠。36 用printf函数输出时,应注意数据类型应与上述格式说明匹配,否则将会出现错误。 在使用printf函数时,还有几点要说明:1有些系统要求格式字符要用小写字母,如d不能写成D。2. 可以在printf函数中的“格式控制”字符串内包含第二章中的“转义字符”,如“n”、“t”、“b”、“r”、“f”、“377”等。3上面介绍的d,o,x,c,s,f,e,g等字符,如用在“”后面就作为格式符号。一个格式说明以“”开头,以上
23、述9个格式字符之一为结束,中间可以插入附加格式字符(也称修饰符)。例如: printf(“c=%cf=%fs=%s”,c,f,s); 第一个格式说明为”c”而不包括其后的f,第二个格式说明为“f,不包括其后的s,第三个格式说明为s。其它的字符为原样输出的普通字符。374如果想输出字符“”,则应该在“格式控制”字符串中用连续两个表示,如 printf(”f”,103); 输出0.3333335不同的系统在实现格式输出时,输出结果可能会有一些小的差别,例如用e格式符输出实数时,有些系统输出的指数部分为4位(如e十02)而不是5位(e002),前面的数字部分为5位小数而不是6位等等。384.4.1
24、getchar函数(字符输入函数)函数(字符输入函数)此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符, getchar函数没有参数,其一般形式为: getchar( )函数的值就是从输入设备得到的字符。例如: 例include “stdio.h” main ( ) char c: cgetchar(); putchar(c); 在运行时,如果从键盘输入字符a; a (输入a后,按“回车”键,字符才送到内存)a (输出变量c的值a) 4.4 4.4 数据输入数据输入39 请注意,getchar( )只能接收一个字符。 getchar函数得到的字符可以赋给一个字符变量或整型变量,也可
25、以下赋给任何变量,作为表达式的一部分。例如, putchar (getchar(); 也可以甩printf函数: printf (”c”,getchar(); 在一个函数中要用getchar函数,应该在函数的前面(或本文件开头)用 include “stdio.h”404.4.2 scanf函数(格式输入函数)函数(格式输入函数) getchar函数只能用来输入一个字符,用scanf函数可以用来输入任何类型的多个数据。 一一般形式一一般形式 scanfscanf(格式控制,地址表列)(格式控制,地址表列) “ “格式控制格式控制”的含义同的含义同printf函数,“地址表列地址表列”是由若干个
26、地址组成的表列,可以是变量的地址,或字符串的首地址。 例 main( ) int a,b,c; scanf(”%d%d%d”,&a,&b,&c); prinrf(“%d,%d,%dn”,a,b,c); 41 运行时按以下方式输入a,b,c的值: 3 4 5 (输入a,b,c的值) 3,4,5 (输出a,b,c的值) &a,&b,&c中的“&”是地址运算符,&a指a在内存中的地址. 用“%d%d%d”格式输入时,不能用逗号(可用空格)作两个数据间的分隔符,如下面输入不合法: 3,4,542二、格式说明二、格式说明 和printf函数中的格式说明相似,以开始,以一个格式字符结束,中间可以插入附加的
27、字符。 scanfscanf格式字符格式字符 d 用来输入十进制整数。 o 用来输入八进制整数。 x 用来输入十六进制整数。 c 用来输入单个字符。 s 用来输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志“0”作为其最后一个字符。 f 用来输入实数,可以用小数形式或指数形式输入。 e 与f作用相同,e与f可以互相替换。43 附加的格式说明字符附加的格式说明字符 l 用于输入长整型数据(可用ld,lo,lr),以及double型数据(用lf或1e)。 h 用于输入短整型数据(可用hd,hO,hx)。 m 域宽(为一正整数)指定输入数据所
28、占宽度(列数)。 * 表示本输入项在读人后不赋给相应的变量。 说明: 1.标准C在scanf中不使用u说明符,对unsigned型数据,以d或o、x格式输入。 2.可以指定输入数据所占列数,系统自动按它截取所需数据。如 scanf(”3d3d”,&a,&b); 输入 123456 系统自动将123赋给a,456赋给b。也可用于字符型 scanf(”3c”,&ch); 输入3个字符,把第一个字符赋给ch,例如输入abc,ch得到字符a。443后的“*”附加说明符,用来表示跳过它相应的数据。例如 scanf(”2d*3d2dn”,&a,&b); 如果输入如下信息: 12 345 67 将12赋给a
29、,67赋给b.第二个数据“345”被跳过不赋给任何变量。在利用现成的一批数据时,有时不需要其中某些数据,可用此法“跳过”它们。4. 输入数据时不能规定精度,例如 scanf(”%7.2f”,&a); 是不合法的,不能企图输入1234567而使a的值为12345.67。 三、scanf函数的执行中应注意的问题 1scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名。例如,如果a,b为整型变量,则 scanf(”d,d”,a,b);是不对的,应为&a,&b。这是C语言与其它高级语言不同的。452如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的
30、字符。例如 scanf(“d,d”,&a,&b);输入时应用如下形式: 3,4注意3后面是逗号,它与scanf函数中的“格式控制”中的逗号对应。如果输入时不用逗号而用空格或其它字符是不对的: 3 4 (不对) 3:4 (不对)如果是 scanf(”%d %d”,&a,&b);输入时两个数据间应空二个或更多的空格字符。 scanf(”d:d:d”,&h,&m,&s);输入应用以下形式: 12:23:36 scanf(”a=%d,b=%d,c=%d”,&a,&b,&c);输入应为以下形式: a=12,b24,c36这种形式为了使用户输入数据时添加必要的信息以帮助理解,不易发生输入数据的错误。 46
31、3在用”c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入: scanf(”ccc”,&c1,c2,c3);如输入 a b c 字符a送给c1,字符 送给c2,字符b送给c3,因为c只要求读人一个字符,后面不需要用空格作为两个字符的间隔,因此 作为下一个字符送给c2。4在输入数据时,遇以下情况时该数据认为结束: 遇空格,或按“回车”或“跳格”(TAB)键。 遇宽度结束,如“3d”,只取3列。 遇非法输入。如 scanf(”dcf”,&a,&b,&c);若输入: 1234al23o.26第一个数据对应d格式输入1234之后遇字母a,因此认为数值1234后己没有数字了,第一个数据到此结束,把1234送给变量a,字符a送给变量b由于c只要求输入一个字符,因此a后面不需要空格,后面的数值应送给变量c,如果由于疏忽把本来应为123026错打成123o26,由于123后面出现字母o就认为此数值结束,将123送给人c.47例输入三角形的三边长,求三角形面积。 为简单起见,设输入的三边长山c能构成三角形。#include math.hmain()float a,b,c,s,area;scanf(%f,%f,%f,&a,&b,&c);s=1.0/2*(a+b+c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年上海高考英语作文深度解析及写作备考指导
- 人胃腺癌细胞株AGS、SGC-7901增殖诱导配体mRNA的表达
- 2025年贵阳市南明区花溪大道旁新开发区域土地使用权出让合同
- 2025年上海工程技术大学岗位聘任合同制管理岗位
- 福建省莆田市2024-2025学年高二下册第一次(3月)月考数学试卷附解析
- 安徽省马鞍山市2024-2025学年高二下册4月期中数学试卷附解析
- 2025届黑龙江齐齐哈尔市龙江县中考二模数学试卷
- 2024年攀枝花市东区定向选聘社会招考社区工作者真题
- 2024年河池市产品质量检验所招聘考试真题
- 石大学前儿童保育学课件4-2手足口病
- 2025年九年级语文中考最后一练口语交际(全国版)(含解析)
- 延迟退休政策驱动中国第二次人口红利的多维度解析与展望
- 2025山东济南属国有企业招聘41人笔试参考题库附带答案详解析
- 2025年广东省深圳市龙岗区中考英语二模试卷
- 江苏扬州中学2024-2025学年数学高二下期末经典试题含解析
- 国际压力性损伤-溃疡预防和治疗临床指南(2025年版)解读课件
- 公司安全事故隐患内部举报、报告奖励制度
- UML网上购物系统课程设计DOC
- 怀化职业技术学院就业工作管理制度汇编 (一)
- 电力的安全系统工器具预防性试验报告材料的
- 人民网删除稿件(帖文)申请登记表【模板】
评论
0/150
提交评论