《第03章 顺序结构程序设计.ppt》由会员分享,可在线阅读,更多相关《第03章 顺序结构程序设计.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第3 3章章 顺序程序设计顺序程序设计教学目标教学目标1.掌握掌握C语言的输入和输出方法语言的输入和输出方法2.重点掌握并灵活运用重点掌握并灵活运用printf()和和scanf()函数函数3.熟练掌握顺序结构的程序设计熟练掌握顺序结构的程序设计3.1C语言的基本语句一个C程序可以由若干个源程序文件组成,一个源文件可以由若干个函数和预处理命令组成以及全局变量声明部分组成,一个函数由数据定义部分和执行语句组成。程序应该包括数据描述(由声明部分来实现)和数据操作(由语句实现)。数据描述主要定义数据结构和定义初值,数据操作的任务是对已提供的数据进行加工。3.1C语言的基本语句1、控制语句,完成一定
2、的控制功能 if()else(条件语句)for()(循环语句)while()(循环语句)dowhile()(循环语句)continue(结束本次循环语句)break(中止执行switch语句或者循环语句)switch(多分支选择语句)goto(转向语句)return(从函数返回语句)括号()表示条件,表示内嵌的执行语句。2、函数调用语句由一次函数调用加上一个分号组成。printf(“hello”);3、表达式语句由一个表达式构成的一个语旬。例a=3;4、空语句表示什么也不做,有时用来作转向点,或循环体。例:;5、复合语句 可以用把一些语句括起来成为复合语句,也叫分程序。例:p=p*I;I+;3
3、.2数据输入和输出5C语言无I/O关键字,I/O操作由库函数实现5#include或#include“stdio.h”3.2.1基本概念3.2.2字符数据的输入与输出u输入格式:int getchar(void)功能:从键盘读一字符返值:正常,返回所输入数据的ASCII的值;出错,返回EOF(-1)#include main()int c;printf(Enter a character:);c=getchar();printf(%c-hex%xn,c,c);运行结果:Enter a character:AA-hex413.2.2字符数据的输入与输出u输出格式:int putchar(c)参数
4、:c为字符常量、变量或表达式功能:把字符c输出到显示器上返值:正常,为显示的代码值;出错,为EOF(-1)#include main()int c;char a;c=65;a=B;putchar(c);putchar(n);putchar(a);运行结果:A B格式:printf(“格式控制串”,输出表)功能:按指定格式向显示器输出数据返值:正常,返回输出字节数;出错,返回EOF(-1)uu格式输出函数输出表:要输出的数据(可以没有,多个时以“,”分隔),可以是变量也可以是常量,也可以是表达式格式控制串:包含两种信息格式说明:%修饰符格式字符,用于指定输出格式普通字符或转义序列:原样输出格式字
5、符d,ix,Xoucse,Efg%格式字符:十六进制无符号整数不带符号十进制整数十进制整型指数形式浮点小数单一字符字符串八进制无符号整数小数形式浮点小数e和f中较短一种百分号本身int a=567;printf(“%d”,a);int a=255;printf(“%x”,a);int a=65;printf(“%o”,a);int a=567;printf(“%u”,a);char a=65;printf(“%c”,a);printf(“%s”,“ABC”);float a=567.789;printf(“%e”,a);float a=567.789;printf(“%f”,a);float
6、a=567.789;printf(“%g”,a);printf(“%”);567ff101567AABC5.67789e+02567.789000567.789%说明格式字符要用小写格式字符与输出项个数应相同,按先后顺序一一对应输出转换:格式字符与输出项类型不一致,自动按指定格式输出对不同类型的数据用不同的格式字符例 main()unsigned int u=65535;printf(”u=%dn,u);输出结果:u=-1例 int a=3,b=4;printf(“%d%dn”,a,b);printf(“a=%d,b=%dn”,a,b);例 int a=3,b=4;printf(“%d%dn”
7、,a,b);printf(“a=%d,b=%dn”,a,b);输出结果:3 4 a=3,b=4111111111111111165535t t附加格式说明符(修饰符)附加格式说明符(修饰符).n对实数,指定小数点后位数(四舍五入)对字符串,指定实际输出位数修饰符功 能m输出数据域宽,数据长度m,左补空格;否则按实际输出输出数据在域内左对齐(缺省右对齐)-指定在有符号数的正数前显示正号(+)+输出数值时指定左面不使用的空位置自动填00在八进制和十六进制数前显示前导0,0 x#在d,o,x,u前,指定输出精度为long型在e,f,g前,指定输出精度为double型l注意:其中的注意:其中的“0 0
8、”的作用在前面出现了的作用在前面出现了“-”标标志或指定了精度(整数),则忽略该标志志或指定了精度(整数),则忽略该标志格式字符应用举例d格式符。用来输出十进制整数。有以下几种用法:(1)d,按整型数据的实际长度输出。(2)md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。(3)ld,输出长整型数据。也可以用m来指定字符宽度例1:a123,d12345;printf(“%4d,%4d”,a,b);例2:longa135790;printf(“%ld”,a);printf(“%8ld”,a);一个一个int型数据可以用型数据可以用d或或ld格式输出
9、,格式输出,一个一个long型数据应当用型数据应当用%ld格式输出。格式输出。O格式符,以8进制数形式输出整数。带符号的数将会以何种形式输出?由于是将内存单元中的各位的值(0或1)按8进制形式输出,因此输出的数值不带符号,即将符号位也一起作为8进制数的一部分输出。例:inta1printf(“d,o”,a,a);输出?1,177777请问:是否会输出带符号的8进制整数。注意:对于长整数(long型)可以用lo格式输出。同样可以指定字符宽度。printf(“8o”,a)输出数据为_177777x格式符,以16进制数形式输出整数。请问:是否会出理负的16进制数?例如:inta1;printf(“x
10、,o,d”,a,a,a);输出结果为ffff,177777,1可以用lx输出长整型数,也可以指定输出字段的宽度。如“12x”。U格式符,用来输出unsigned型数据,即无符号数,以十进制形式输出。注意:一个有符号整数(int型)也可以用u格式输出;一个unsigned型数据也可以用d,o,x格式输出。例:main()unsignedinta65535;intb2;printf(“a=%d,%o,%x,%un”,a,a,a,a);printf(“a=%d,%o,%x,%un”,b,b,b,b);运行结果:a=-1,177777,ffff,65535b=-2,177776,fffe,65534C
11、格式符,用来输出一个字符例:charc=a;printf(“%c”,c)一个整数,只要它的值在0255范围内,也可以用字符形式输出,在输出前,将该整数转换成相应的ASCII字符,反之,一个字符数据也可以用整数形式输出。同样可以指定输出字数宽度。例charc=a;printf(“%3c”,c)输出_aS格式符,用来输出一个字符串。有几种用法:(1)s(2)ms,输出的字符串占m列,如字符串本身长度大于m,则突破m的限制,将字符串全部输出,若串长小于m,则左补空格。(3)ms,如果串长小于m,则在m列范围内,字符串向左靠,右补空格。(4)m.ns,输出m列,但只取字符串中左端n个字符。这个n个字符
12、输出在m列的右侧,左补空格。(5)m.ns,输出m列,但只取字符串中左端n个字符。这个n个字符输出在m列的左侧,右补空格。如果n大于m,则m自动取n值,即保证n个字符正常输出。例:main()Printf(“%3s,%7.2s,%.4s,%-5.3sn”,”CHINA”,”CHINA”,”CHINA”,”CHINA”,”CHINA”)输出:CHINA,_ _ _ _ _CH,CHIN,CHI_ _f格式符,用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:(1)f,不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出6位小数。注意:并非全部数字都是有效数字。单精度实数的
13、有效位数一般为7位。例:main()floatx,y;x=111111.111;y=222222.222;printf(“%f”,x+y)运行结果为:333333.328125只有前7位数字是有效数字。双精度也可以用f格式输出,它的有效位数一般为16位,给出小数6位。(2)m.nf,指定输出数据共占m列,其中有n位小数。如果数值长度小于m,则左端补空格。(3)m.nf与m.nf基本相同,只是使输出的数值向左端靠,右端补空格。例:main()floatf=123.456;Printf(“%f_%10f_%10.2f_%.2f_%-10.2fn”,f,f,f,f,f);输出结果如下:123.455
14、994_123.455994_123.46_123.46_123.46_e格式符,以指数形式输出实数。可用以下形式:(1)e,不指定输出数据所占的宽度和数字部分小数位数,由系统自动指定给出6位小数,指数部分占5位(如e002),其中e占一位,指数符号占一位,指数占三位。数值按标准化指数形式输出。数值按标准化指数形式输出(即小数点前必须有且只有一位非零数字)。例如printf(”e“,123.456);输出?1.234560e002请问:用e格式输出的实数共占多少列宽度?13(2)m.ne和%m.nem、n和字符含义与前相同。此处n指数据的数字部分(又称尾数)的小数位数。例f123.456则pr
15、intf(“%e_%10e_%10.2e_%.2e_%-10.2e”,f,f,f,f,f);运行结果?1.234560e+002_1.234560e+002_1.23e+002_1.23e+002_1.23e+002_g格式符,用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的零。例如:若f123.468,printf(%f_%e_%g”,f,f,f);输出结果:123.468000_1.234680e002_123.468_使用printf函数时的几点说明有些系统要求格式字符要用小写字母。如d不能写成D。可以在printf函数中的”格式控制“
16、字符串内包含转义字符。上面介绍的d、o、x、u、c、s、f、e、g等字符,如用在后面就作为格式符号。一个格式说明以开头,以上述9个格式字符之一为结束,中间可以插入附加格式字符。如果想输出字符”“,则应该在”格式控制“字符串中用连续两个表示。例:printf(”f“,1.0/3);输出0.333333注意:不同的系统在实现格式输出时,输出结果可能会有一些小的差别,例如用e格式符输出实数时,有些系统输出的指数部分为4位,而不是5位,前面的数字部分为5位小数而不是6位等等。格式输入函数格式:scanf(“格式控制串”,地址表)功能:按指定格式从键盘读入数据,存入地址表指定的 存储单元中,并按回车键结
17、束返值:正常,返回输入数据个数地址表:变量的地址,常用取地址运算符&格式字符:d,i,o,x,u,c,s,f,e例 scanf(“%d”,&a);输入:10 则 a=10例 scanf(“%x”,&a);输入:11 则 a=17d,ix,Xoucse,Efg%格式字符:十六进制有符号整数无符号十进制整数十进制整型读入浮点数读入一字符字符串八进制有符号整数读入浮点数读入浮点数百分号本身t t附加格式说明符(修饰符)l修饰符功 能hm*用于d,o,x前,指定输入为short型整数用于d,o,x前,指定输入为long型整数用于e,f前,指定输入为double型实数输入数据宽度,到达最大宽度或遇空格则
18、结束抑制符,指定输入项读入后不赋给变量说明标准C在scanf中不使用u说明符,对unsigned型数据,以d或o、x格式输入。可以指定输入数据所占列数,系统自动按它截取所需数据。例scanf(“%4d%2d%2d”,&yy,&mm,&dd);输入19991015则1999yy,10mm,15dd例scanf(“%3c%2c”,&c1,&c2);输入abcde则ac1,dc2说明后的*附加说明符,用来表示跳过它相应的数据。输入数据时不能规定精度例如:scanf(“%7.2f”,&a);是不合法的。例 scanf(“%2d%*3d%2d”,&a,&b);输入 1234567 则12a,67b例 s
19、canf(“%3d%*4d%f”,&k,&f);输入 12345678765.43 则123k,8765.43fScanf函数中的”格式控制“后面应当是变量地址,而不应是变量名。如果在”格式控制“字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。在用”c“格式输入字符时,空格字符和”转义字符“都作为有效字符输入在输入数据时,遇以下情况时该数据认为结束。遇空格、TAB、或回车遇宽度结束遇非法输入例:scanf(“ccc”,&c1,&c2,&c3);输入a_b_c是否可以?如 scanf(“%d%c%f”,&a,&b,&c);若输入1234a123o.26 则 123
20、4 a,a b,123 c输入分隔符的指定一般以空格、TAB或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字符例scanf(“%d%o%x”,&a,&b,&c);printf(“a=%d,b=%d,c=%dn”,a,b,c);输入123123123输出a=123,b=83,c=291例 scanf(“%d:%d:%d”,&h,&m,&s);输入 12:30:45 则12 h,30 m,45 sn n程序举例/*/#include#include main()float a,b,c,s,area;scanf(%f,%f,%f,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn,a,b,c,s);printf(area=%7.2fn,area);例 输入三角形边长,求面积输入:3,4,6 输出:a=3.00,b=4.00,c=6.00 s=6.50 area=5.33文件包含预处理命令变量定义输入数据输出数据