1 / 47

教学内容: 5.1 顺序结构程序 5.2 字符输入输出函数 5.3 格式输入输出函数 5.4 顺序结构程序设计应用实例 教学要求: 1. 掌握编写顺序结构程序的基本方法。

第 5 章 顺序结构程序设计. 教学内容: 5.1 顺序结构程序 5.2 字符输入输出函数 5.3 格式输入输出函数 5.4 顺序结构程序设计应用实例 教学要求: 1. 掌握编写顺序结构程序的基本方法。 2. 掌握字符输入输出函数的使用。 3. 掌握 scanf 和 printf 函数的使用。. 在顺序结构程序中,各语句是按照位置的先后次序,顺序执行的,且每个语句都会被执行到。 一、简单顺序结构程序组成 1 .程序头部分 ( 1 )程序功能的注释。 ( 2 )编译预处理命令,一般包括文件包含编译预处理命令,以及宏定义命令。

Télécharger la présentation

教学内容: 5.1 顺序结构程序 5.2 字符输入输出函数 5.3 格式输入输出函数 5.4 顺序结构程序设计应用实例 教学要求: 1. 掌握编写顺序结构程序的基本方法。

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5章 顺序结构程序设计 教学内容: 5.1 顺序结构程序 5.2 字符输入输出函数 5.3 格式输入输出函数 5.4 顺序结构程序设计应用实例 教学要求: 1.掌握编写顺序结构程序的基本方法。 2.掌握字符输入输出函数的使用。 3.掌握scanf和printf函数的使用。

  2. 在顺序结构程序中,各语句是按照位置的先后次序,顺序执行的,且每个语句都会被执行到。在顺序结构程序中,各语句是按照位置的先后次序,顺序执行的,且每个语句都会被执行到。 一、简单顺序结构程序组成 1.程序头部分 (1)程序功能的注释。 (2)编译预处理命令,一般包括文件包含编译预处理命令,以及宏定义命令。 2.顺序结构程序函数主体 函数体内主要包括以下一些成分。 (1)变量的说明部分。 (2)数据输入部分。 (3)运算部分。 (4)运算结果输出部分。 5.1 顺 序 结 构 程 序

  3. 例5.1从键盘输入圆的半径,求圆的周长和面积。程序如下:例5.1从键盘输入圆的半径,求圆的周长和面积。程序如下: /*求圆的周长和面积*/ #include <stdio.h> # define PI 3.14159 main() { int r; /*算法步骤①*/ float s, area; /*算法步骤②*/ scanf("%d",&r); s=PI*2*r; /*算法步骤③*/ area = PI*r*r; printf(" s=%f",s); /*算法步骤④*/ printf("area =%f", area ); } 程序算法: ① 定义圆半径、圆周长、面积的变量; ② 从键盘输入圆半径数值; ③ 按照计算公式计算求出圆的周长和面积; ④ 输出圆的周长和面积的数值;

  4. 5.2 字 符 输 入 输 出 函 数 一、单个字符的输入函数 1.getchar()函数的格式:getchar(); 2.getchar()函数的作用: 从系统隐含的输入设备(如键盘)输入一个字符。 3.说明: (1)getchar()函数只能用于单个字符的输入,一次输入一个字符。 (2)程序中要使用getchar()函数,必须在程序(或文件)的开头加上编译预处理命令: # include "stdio.h"

  5. 例5.2 getchar()函数的使用。 #include "stdio.h" /*文件包含*/ main() { char ch; printf("Please input a character: "); ch=getchar(); /*输入1个字符并赋给ch */ printf("%c", ch ); /*输出一个字符*/ printf('\n'); } 程序运行情况如下: Please input a characters: b↙ b

  6. 二、单个字符的输出函数 1.putchar()函数的格式: putchar(ch); 其中ch可以是一个字符变量或常量,也可以是一个转义字符。 2.putchar()函数的作用:向终端输出一个字符。 3 .说明: (1)putchar()函数只能用于单个字符的输出,且一次只能输出一个字符。 (2)在程序中使用putchar()函数,务必牢记:在程序(或文件)的开头加上编译预处理命令(也称文件包含命令):#include "stdio.h" 表示要使用的函数,包含在标准输入输出(stdio .h )头文件中。

  7. 例5.3putchar()函数的格式和使用方法。 #include "stdio.h" /*文件包含命令*/ main() { char ch1='N', ch2='E', ch3='W'; putchar(ch1); putchar(ch2); putchar(ch3); putchar('\n'); putchar(ch1); putchar('\n'); putchar('E'); putchar('\n'); putchar(ch3); putchar('\n'); } 程序运行结果如下: NEW N E W

  8. 5.3 格 式 输 入 输 出 函 数 一、printf()函数 1.printf() 函数的一般格式 printf("格式字符串" [,输出项表]); 2.函数的作用:输出一个或多个任意类型的数据。 3.格式字符串 “格式字符串”也称“转换控制字符串”,可以包含三种字符:格式指示符、转义字符、普通字符 (1)格式指示符 一般形式如下: %[标志符][宽度][.小数宽度][类型修饰符]

  9. (2)转义字符 printf()函数中的‘\n’就是转义字符,输出时产生一个“换行”操作。 还有:\t、 \r、 \b等。 (3)普通字符 除格式指示符和转义字符之外的其它字符。 普通字符原样输出。 4.输出项表 输出项表内容:常量,变量,表达式 。 输出项表是可选的。若输出的数据不止1个,相邻2个之间用逗号分开。

  10. 下面的printf()函数都是合法的: (1)printf("I am a student.\n"); 普通字符转义字符 (2)printf("%d",3+2); 格式指示符表达式 (3)printf("a=%f b=%5d\n", a, b+3); (4) printf(“%d,%c\n”, 56,56); 2个输出项之间用逗号分开 此处逗号也是普通字符

  11. 5.格式指示符 %d以十进制输出整数。 %md以十进制输出整数,数据最小宽度占m位。 若数值长度<m,则 靠右输出,左边补空格。 若数值长度>m,输出原整数。 % _ md以十进制输出整数,数据最小宽度占m位。 若数值长度<m,则 靠左输出,右边补空格。 若数值长度>m,输出原整数。 例如: printf(“%5d,%-5d\n”,456,567); 输出结果: □□456,567□□ %ld以十进制形式输出长整型数据。

  12. %o以八进制无符号形式输出整数,不输出前导符0。%o以八进制无符号形式输出整数,不输出前导符0。 printf("%o \n",128); 输出结果:200 %lo以八进制无符号形式输出长整型数 不输出前导符0。 %x以十六进制无符号形式输出整数, 不输出前导符0x。 %lx以十六进制无符号形式输出长整型数, 不输出前导符 0x。 %u以无符号十进制形式输出整数。 printf(“%u\n”,-2); 输出结果:65534 %lu以无符号十进制形式输出长整型数。

  13. %c 用来输出1个字符。 %s用来输出一个字符串。 %ms按m宽度输出字符串。 若串长 >m,则照字符串原样输出; 若串长<m,则左边补空格。 %- ms类似%ms, 若串长<m,则字符串向左靠,右边补空格。 %m.ns靠右输出字符串左边的n个字符,左补空格。 (n  m) %-m.ns靠左输出字符串左边的n个字符,右补空格。 (n  m)

  14. %f以小数形式输出实数。 %m.nf输出宽度为m,其中小数为n位。 若数值长度<m,则 靠右输出,左边补空格。 %-m.nf同类似,“ - ”表示靠左输出,右边补空格。 %e以指数形式输出实数。 %m.ne此处m、n、 同f格式。 %-m.ne此处m、n、- 同f格式。 %g根据数值大小自动选择 f 格式或 e 格式中占用宽 度小的一种

  15. 6.使用说明 (1)格式控制中的格式说明符,必须按从左到右的顺序,与输出项表中的每个数据一一对应,否则出错。 例如:下面使用格式是错误的。 printf("str=%s, f=%d, i=%f\n", "Internet", 1.0 / 2.0, 3 + 5, "CHINA"); (2)格式字符x、e、g可以用小写字母,也可以用大写字母。使用大写字母时,输出数据中包含的字母也大写。 除了x、e、g格式字符外,其它格式字符必须用小写字母。 例如,%f不能写成%F。

  16. (3)格式字符紧跟在“%”后面就作为格式字符,否则将作为普通字符使用(原样输出)。(3)格式字符紧跟在“%”后面就作为格式字符,否则将作为普通字符使用(原样输出)。 例如, printf(”c=%c, f=%f\n“, c, f); 中的第一个 c 和 f,都是普通字符 (4)所谓无符号形式是指,不论正数还是负数,系统一律当作无符号整数来输出。 unsigned int a=65535 printf(“a=%u\n”,a); 输出结果: 65535

  17. 7. 格式字符使用实例 (1)%d ─以带符号的十进制整数形式输出。 main() { int n1=123; long int n2=123456; printf("%d,%5d,%-5d,%2d\n",n1,n1,n1,n1); printf("%ld,%8ld,%5ld\n",n2,n2,n2); printf("n1=%ld\n",n1); } 程序运行结果:123,□□123,123□□,123 123456,□□123456,123456 n1=16908411

  18. (2)%d %o %x %u 形式输出整数。 main( ) { unsigned int a=65535; int b=-2; printf(“a=%d,%o,%x,%u\n”,a,a,a,a); printf(“b=%d,%o,%x,%u\n”,b,b,b,b); }

  19. (3)%f─以小数形式、按系统默认的宽度, 输出单精度和双精度实数。 main( ) { float f=123.456; double d1, d2; d1=1111111111111.111111111; d2=2222222222222.222222222; printf("%f,%12f,%12.2f\n",f,f,f); printf("%-12.2f,%.2f\n",f,f); printf("d1+d2=%f\n",d1+d2); }

  20. 程序运行结果如下: 123.456001,□□123.456001,□□□□□□123.46 123.46□□□□□□,123.46 d1+d2=3333333333333.333010 本程序的输出结果中,超出了有效数字的范围的数据是无意义。例如: 数据123.456001中的001是无意义的 数据3333333333333.333010中的010是无意义, 因为它们超出了有效数字的范围。

  21. (4)%e --以标准指数形式输出实数 指数形式尾数中的整数部分大于等于1、小于10, 小数点占一位,尾数中的小数部分占6位; 指数部分占5位(如e-003),其中e占一位,指数符号占一位,指数占3位, 标准指数形式共计13位。 (5)%g --让系统根据数值的大小,自动选择%f或%e格式、且不输出无意义的零。 例如: float a=123.468; printf( “ %f,%e,%g\n”,a,a,a ); 输出结果: 123.468000,1.234680e+002,123.468

  22. (6)%c─输出一个字符(只占一列宽度)。 main() { char c='A'; int i=65; printf("c=%c,%5c,%d\n",c,c,c); printf("i=%d,%c",i,i); } 程序运行结果如下: c=A,□□□□A,65 i=65,A C语言中,整数以字符形式输出时,系统首先求该数与256的余数,然后将余数作为ASCII码,转换成相应的字符输出。字符数据也可以整数形式输出。

  23. (7)%s ─输出一个字符串。 main() { printf("%s,%5s","Internet","Internet"); printf("%-10s\n","Internet"); printf("%10.5s,”,"Internet"); printf("%%-10.5s,”,"Internet"); printf(“%4.5s\n","Internet"); } 程序运行结果如下: Internet,Internet,Internet□□, □□□□□Inter,Inter□□□□□,Inter 说明: 系统输出字符和字符串时,不输出单引号和双引号。

  24. 例5.4输出格式控制符的作用 #include <stdio.h> main() { int a =3102; long int b =74228; short int c =625; printf("a1=%d\n",a); printf("a2=%o\n",a); printf("a3=%x\n",a); printf("b=%ld\n",b); printf("c=%d\n",c); } 运行结果: a1=3102 a2=6036 a3=c1e b=74228 c=625

  25. 例5.5输出格式控制符的作用 #include <stdio.h> main() { unsigned int d =65433; float f =2.34679865858988; double g =2.34679865858988; printf("d=%u\n",d); printf(“f1=%e\n",f); printf("f2=%f\n",f); printf("g=%f\n",g); printf("\n"); getch(); } 运行结果:d=65433 f1=2.34680e+00 f2=2.346799 g=2.346799

  26. 二、格式化输入函数 例5.6已知圆柱体的底半径(radius) 1.5,高(high)2.0,求其体积。main() { float r=1.5, h=2.0, vol; vol= 3.14159 * r * r * h; /*求体积*/ printf(“vol=%7.2f\n”,vol); } 在程序中给计算机提供数据,可以用赋值语句,也可以用输入函数。在C语言中,可使用 scanf()函数,通过键盘输入,给计算机主机同时输入多个、任意的数据

  27. 1. scanf()函数的一般格式 scanf("格式字符串",输入项首地址表); (1)格式字符串 格式字符串可以包含3种类型的字符: 格式指示符、空白字符(空格、Tab键和回车键)和非空白字符(又称普通字符)。 格式指示符与 printf() 函数的相似, 空白字符作为相邻2个输入数据的缺省分隔符, 非空白字符(又称普通字符)在输入有效数据时,必须原样一起输入。

  28. (2)输入项首地址表 输入项首地址表由若干个输入项首地址组成,相邻2个输入项首地址之间,用逗号分开。 变量首地址的表示方法: &变量名 其中“&”是地址运算符。 例如, “&r”是指变量r在内存中的首地址 输入项首地址表中的地址,可以是变量的首地址,也可以是字符数组名或指针变量。 int a1, a2; scanf("%d%d",&a1,&a2); 输入项首地址表

  29. 2. 格式指示符 (1)格式指示符的形式为: % [*] [宽度] [h|l]类型字符 类型字符有: d、 u、 o、 x、 c、 s、 f、 e、 g 以上类型字符代表的数据类型与printf()中的相同。 例如,格式字符串 “ %f %f ”。 (2)类型修饰符 类型修饰符:h、l 其含义与printf()中的一样, h 短整型 l 为长整型。

  30. (3)宽度n 指定该项输入数据所占列数为 n,读取输入数据中相应的n位,但按需要的位数赋给相应的变量,多余部分被舍弃。 例如,scanf("%3c%3c",&ch1,&ch2); 设输入:“abcdefg”, 则系统将读取的“abc”中的“a”赋给变量ch1; 将读取的“def”中的“d”赋给变量ch2, 则: printf("ch1=%c,ch2=%c\n",ch1,ch2); 输出结果为:ch1=a,ch2=d。

  31. (4)赋值抑制字符* 赋值抑制字符*,表示本输入项对应的数据读入后,不赋给相应的变量(该变量由下一个格式指示符输入)。 例如, scanf("%2d%*2d%3d",&n1,&n2); 设输入 123456789 则系统将读取“12”并赋值给n1; 读取“34”、但舍弃掉(“*”的作用); 读取“567”并赋值给n2。 则: printf("n1=%d,n2=%d\n",n1,n2); 输出结果为:n1=12,n2=567

  32. 3. 数据输入操作 (1)如果相邻2个格式指示符之间,不指定数据分隔符(如逗号、冒号等),则相应的2个输入数据之间,至少用一个空格分开,或者用Tab键分开,或者输入1个数据后,按回车,然后再输入下1个数据。 设给n1输入12,给n2输入36;则执行以下命令, scanf("%d%d",&n1,&n2);正确的输入操作为: ① 12□36↙ ② 12 Tab 36↙ ③ 12↙ 36↙ 注:使用“↙”符号表示按回车键操作,在输入数据操作中的作用是,通知系统输入操作结束。

  33. (2)“格式字符串”中出现的普通字符(包括转义字符形式的字符),务必原样输入。(2)“格式字符串”中出现的普通字符(包括转义字符形式的字符),务必原样输入。 例如,scanf("%d,%d",&n1,&n2); 设给n1输入12,给n2输入36, 正确的输入操作为: 12,36↙ 另外,scanf()函数中、格式字符串内的转义字符(如\n),系统并不把它当转义字符来解释,从而产生一个控制操作,而是将其视为普通字符,所以也要原样输入。 例如:scanf("n1=%d,n2=%d\n",&n1,&n2); 正确的输入操作为: n1=12,n2=36\n↙ 一般不使用转义字符

  34. 在设计输入操作时,为了改善人机交互性,使得输入操作简单明了,可以在用scanf()函数进行数据输入时,一般先用printf()函数输出一个提示信息,再用scanf()函数进行数据输入。在设计输入操作时,为了改善人机交互性,使得输入操作简单明了,可以在用scanf()函数进行数据输入时,一般先用printf()函数输出一个提示信息,再用scanf()函数进行数据输入。 例如, scanf("n1=%d,n2=%d\n",&n1,&n2); 改为: printf("n1="); scanf("%d",&n1); printf("n2="); scanf("%d",&n2);

  35. (3)用scanf()函数进行数据输入时,输入数据遇到以下情况,系统认为该数据结束:(3)用scanf()函数进行数据输入时,输入数据遇到以下情况,系统认为该数据结束: ①遇到空格,或者回车键,或者Tab键。 ② 遇到输入域宽度结束。 例如: scanf(“%3d %3d”,&a1,&a2); “%3d”,只取3列,第3列结束,第4列以后无效。 ③遇到非法输入。 例如,在输入数值数据时,遇到字母等非数值符号(数值符号仅由数字字符0-9、小数点和正负号构成)。 scanf(“%d”,&a); 输入数值: 234a12 ↙ 变量a的数值为 234

  36. 4.使用格式说明符“%c”输入单个字符时,空格和转义字符均作为有效字符被输入。 例如,scanf("%c%c%c",&ch1,&ch2,&ch3); 设输入:A□BC ↙,则系统将 字母'A'赋值给ch1 空格'□'赋值给ch2 字母'B'赋值给ch3 执行: printf("%c %c %c\n ",ch1 ,ch2 , ch3); 运行结果: A□B

  37. 表达式的应用 例5.7 从键盘输入两个整型数,输出其中的一个大数的程序也可以写成如下程序: int max(int x, int y) { return( x>y ? x : y ); } main( ) { int a, b c ; printf(“Input the first integer number: ”); scanf( “%d”, &a ); printf(“Input the second integer number: ”); scanf( “%d”, &b ); c= max( a, b ); printf(“max=%d\n”, c ); } 输出提示信息

  38. 第一次运行程序情况及结果 运行窗口及程序运行情况: 第二次运行程序,进入运行窗口,先显示第一个提示信息,光标停在提示信息后,等待用户从键盘输入一个整数,再显示第二个提示信息,输入一个整数,返回程序窗口。

  39. 运行上述程序,一次输入两个整型数,输出其中的一个大数;运行上述程序,一次输入两个整型数,输出其中的一个大数; 若要进行几组两个整型数的比较,并输出其中的一个大数,那么就要多次运行上述程序。 若要在一个程序中完成几组两个整型数的比较,并输出其中的一个大数,就要编写一个循环程序。

  40. 5.4 顺序结构程序设计应用实例 例5.8从键盘输入梯形的上下底和高的实数值,求梯形的面积。 算法: ① 定义存放梯形的上、下底和高,以及梯形的面积的变量; ② 从键盘输入梯形的上下底和高的实数值; ③ 按照计算公式 0.5 * (a+b) * h 求出梯形的面积; ④ 输出梯形的上、下底和高的实数值; ⑤ 输出梯形的面积。

  41. 程序如下: main() { float a,b,h,s; ① printf("please input a,b,h:\n"); scanf("%f%f%f",&a,&b,&h); s=0.5 * (a+b) * h; ③ printf("a=%5.2f b=%5.2f h=%5.2f",a,b,h); ④ printf("s=%7.4f",s); ⑤ } ②

  42. 例5.9 输入任意三个整数,求它们的和及平均值 main(){ int n1, n2, n3, sum; float aver; printf("Please input three nbers:"); scanf("%d,%d,%d",&n1,&n2,&n3); sum=n1+n2+n3; /*求累计和*/ aver=sum/3.0; /*求平均值*/ printf("%d, %d, %d\n",n1,n2,n3); printf("sum=%d,aver=%7.2f\n",sum,aver);}

  43. 例5.10 从键盘输入一个小写字母,要求用大小写字母形式输出该字母及对应的ASCII码值 #include "stdio.h" main() {char c1,c2; printf("Input a lowercase letter: "); c1=getchar(); putchar(c1); printf(",%d\n",c1); c2=c1-32; /*小写字母转换为大写字母*/ printf("%c,%d\n",c2, c2); } 程序运行情况如下: Input a lowercase letter: a↙ a,97 A,65

  44. 例5.11求方程ax2+bx+c=0的实数根。a,b,c由键盘输入,a≠0且b2-4ac>0。例5.11求方程ax2+bx+c=0的实数根。a,b,c由键盘输入,a≠0且b2-4ac>0。 #include “math.h”/*函数 sqrt()包含于math.h头文件 */ main() { float a, b, c, disc, x1, x2; printf("Input a, b, c: "); scanf("%f,%f,%f",&a,&b,&c); disc=b*b-4*a*c; /*求判别式的值赋给disc*/ x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("\nx1=%6.2f\nx2=%6.2f\n",x1,x2); }

  45. 例5.12 复数减法运算 #include <stdio.h> main() { float a1, b1, a2, b2; char ch; printf("please input the first complex:\n"); printf("realpart:"); scanf("%f",&a1); printf("virtualpart:"); scanf("%f",&b1); printf("first complex is:%5.2f +i %5.2f\n",a1,b1);

  46. printf("\n please input the second complex:\n"); printf("realpart:"); scanf("%f",&a2); printf("virtualpart :"); scanf("%f",&b2); printf("second complex is:%5.2f +i %5.2f\n",a2,b2); printf("\n The result is :"); printf("%6.3f +i %6.3f\n",a1-a2,b1-b2); ch=getchar(); }

  47. 同 学 们 再 见

More Related