300 likes | 433 Views
第 3 章 输入输出. 3.1 C 语句的概述 3.2 常用输出与输入函数 3.3 顺序结构程序设计. 3.1 C 语句的概述. 表达式语句 C 语言允许在任何一个表达式后面加一个分号 “ ; ” ,构成表达式语句。表达式语句的一般形式为: 表达式; 执行表达式语句就是计算表达式的值。表达式语句常用来描述算术运算、逻辑运算或产生某种特定动作的语句。 C 程序中,最常用的表达式语句是赋值语句,由赋值表达式加上一个分号构成的。一般形式为: 变量 赋值运算符 表达式; 例如: sum=0.0;
E N D
第3章 输入输出 3.1 C语句的概述 3.2 常用输出与输入函数 3.3顺序结构程序设计
3.1 C语句的概述 • 表达式语句 • C语言允许在任何一个表达式后面加一个分号“;”,构成表达式语句。表达式语句的一般形式为: 表达式; • 执行表达式语句就是计算表达式的值。表达式语句常用来描述算术运算、逻辑运算或产生某种特定动作的语句。 • C程序中,最常用的表达式语句是赋值语句,由赋值表达式加上一个分号构成的。一般形式为: 变量 赋值运算符 表达式; 例如:sum=0.0; circuit=2*3.14*radius; s+=6;
3.1 C语句的概述 • 赋值语句有计算的功能:赋值号左边必须是变量名,右边可以是常量、变量、运算符、函数以及由常量、变量、运算符、函数构成的表达式。赋值语句是将右边表达式的值赋给左边的变量中去。 • 赋值表达式和赋值语句有区别: • 赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。 • 给变量赋初值是变量声明的一部分,赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。 • 在变量声明中,不允许连续给多个变量赋初值,而赋值语句允许连续赋值。
3.1 C语句的概述 • 控制语句 • 条件语句 • if ( )~else~(分支语句) • switch ( )~(多路分支选择语句) • 循环语句 • for ( )~(循环结构语句) • while ( )~(循环结构语句) • do~while ( ) (循环结构语句) • 转向语句 • goto (转向语句) • continue (结束本次循环语句) • break (中止执行switch或循环语句) • return (函数返回语句)
3.1 C语句的概述 • 函数调用语句 • 函数调用语句是由一次函数调用加一个分号构成的一个语句。其一般形式为:函数名(实际参数表); • 执行函数语句就是调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句,求取函数值。 例如:printf("this is a C program."); • 空语句 • 空语句仅由一个分号(;)构成。 • 程序执行空语句时不产生任何动作。空语句有时用来做转折点或延时,如循环语句中的循环体为空语句可起到延时的作用。
3.1 C语句的概述 • 复合语句 • 复合语句是由一对花括号{ }括起来的一组语句。复合语句内的各条语句都必须以分号结束,在括号“}”外不能加分号。 例如,实现a,b两个变量值的交换* : {t=a; a=b; b=t; }
3.2 常用输出与输入函数 在使用标准库函数时,要在进行调用这类函数的源程序的开始位置,包含一条编译预预处理指令: #include "stdio.h" • 格式输出函数 • printf函数的格式 printf函数的功能是按指定格式向终端(通常是显示器)输出若干个任意类型的数据。printf函数的一般调用形式为: printf(格式控制字符串,输出表列); 例如:printf("Hello,World!"); printf("The sum is :%f\n",sum);
3.2 常用输出与输入函数 说明: • 格式控制字符串 • 格式控制字符串(简称格式串)必须用引号括起来,包括: • 普通字符:也就是需要原样输出的的字符信息。 • 格式说明符:简称格式符,由%开头、后面紧跟一个格式描述符构成。格式符的作用是指定要输出的数据的输出形式。 • 转义字符:以“\”开头的字符序列。转义字符在输出时按其含义完成相应的控制功能。 • 输出表列 • 输出表列是需要输出的数据,可以是变量、常量或表达式。输出表列可以是零项、一项或多项,若多于一项则各项之间用逗号分隔。 • 输出表列和格式说明符在个数与类型上应相匹配。 例如,printf("\n x = %d , y = %f ", x , y+1);
3.2 常用输出与输入函数 • printf的格式说明符
3.2 常用输出与输入函数 【例3.1】分析下列程序的输出情况。 main( ) { int a,b; float f1,f2,sum; char ch; a=66; b= 1; f1=3.1415; f2=11.88; sum=f1+f2; ch='X'; printf("\n%d ,%c ,%d,%o ,%f ,%c, %d ",a,a,b,b,sum,ch,ch); printf("%s","Very good!"); }
附加格式说明符 说 明 字母l 用于长整型整数和double类型实数,可以加在格式字 符d,o,x,u,f,e,g前面 m (代表一个正整数) 数据的输出宽度 .n(代表一个正整数) 对实数,表示输出n位小数;对字符串,表示截取的字符个数 输出的数字或字符向左靠齐 3.2 常用输出与输入函数 输出结果为: 66, B ,–1 ,177777, 15.021500 ,X ,88 ,Very good! • 整型变量可以字符的形式输出,而字符型变量也可以整数的形式输出,ASCII码是它们之间的桥梁; • 使用格式说明符%f输出时,整数部分全部如数输出,小数部分按系统默认宽度(6位小数)输出。 • printf函数的附加格式说明符
3.2 常用输出与输入函数 • 在%与格式符之间插入一个整数表示指定输出的宽度。若指定的输出宽度大于实际数据的宽度,那么数据向右靠齐,左边补空格;若指定的宽度小于实际数据的宽度,那么按实际数据的宽度输出。 • 可以采用“m.n”的格式修饰格式符来输出一个实数,这里m和n是两个整数。 • 对于字符串,采用“m.n”的附加格式符来修饰格式符表示指定字符串的总宽度为m,不足m则向右靠齐,左补空格。n表示指定截取实际字符串的前n个字符输出。也可以省略m,不指定总宽度。 • 可以在宽度之前加一个“”来指定输出的数据向左靠齐。 【例3.2】分析下列程序的输出情况。 main( ) { int a=5,b=7; float x=67.8564,y=-789.124; char c='A'; long n=1234567;
3.2 常用输出与输入函数 unsigned long u=65535; printf("\n %d%d ",a,b); printf("\n %3d%3d ",a,b); printf("\n %f,%f ",x,y); printf("\n %-10f,%-10f ",x,y); printf("\n %8.2f,%8.2f,%.4f,%.4f,%3f,%3f ",x,y,x,y,x,y); printf("\n %e,%10.2e ",x,y); printf("\n %c,%d,%o,%x ",c,c,c,c); printf("\n %ld,%lo,%x ",n,n,n); printf("\n %u,%o,%x,%d ",u,u,u,u); printf("\n %s,%5.3s ","COMPUTER","COMPUTER"); }
3.2 常用输出与输入函数 程序的运行结果是: 57 5 7 67.856400,-789.124023 67.856400,-789.124023 67.86,-789.12,67.856400,-789.124023,67.856400,-789.124023 6.785640e+01,-7.9e+02 A,65,101,41 1234567,4553207,d687 65535,177777,ffff,-1 COMPUTER,COM
3.2 常用输出与输入函数 printf函数在使用时的注意事项 • printf函数可以输出常量、变量和表达式的值。但格式控制中的格式符必须按从左到右的顺序,与输出项表中每个数据在类型上一一匹配,否则将导致数据输出错误。 • 类型转换字符x,e,g可以用小写字母,也可以用大写字母。使用大写字母时,输出数据中包含的字母也要大写。除x,e,g外,其他类型转换字符必须用小写字母,例如%f不能写成%F。 • 在输入long整型数据时,一定要使用格式%ld。如果只用了%d,将输出错误数据。 • 若需要输出百分号“%”,则应在格式串中用连续的两个百分号“%%”表示。 • 类型转换字符紧跟在“%”后面时作为类型转换字符,否则将作为普通字符处理。 • printf函数的返回值通常是本次调用中输出字符的个数。
3.2 常用输出与输入函数 • 格式输入函数 • scanf函数的格式 • 格式输入函数scanf的功能是用来从外部输入设备(通常是键盘),向程序中的变量输入一个或多个任意类型数据。 • scanf( )函数的一般调用形式为: scanf(“格式控制”,地址表列); 例如:scanf("%d%f",&n,&u); • 说明: • 格式控制字符串 • 普通字符:普通字符在输入数据时,必须在对应位置上原样输入这些字符。 • 格式说明符:用%开头后面跟一个字母(也可以在其中间增加附加字符),它规定了输入项对应的输入数据格式。同样格式说明符要在个数和类型上与输入项相匹配。
3.2 常用输出与输入函数 • 地址表列 • 地址表列中是要输入数据的变量的存储单元地址。 • “&”是地址运算符 【例3.4】用scanf函数输入数据。 main( ) { int x,y,z; scanf("%d,%d,%d",&x,&y,&z); printf("x=%d,y=%d,z=%d",x, y, z); } 程序运行时输入:1,2,3↙ 输出:x=1,y=2,z=3 • scanf函数的格式说明符 • scanf函数常用的格式说明符 • scanf函数常用的附加格式说明符
3.2 常用输出与输入函数 scanf函数常用的格式说明符
3.2 常用输出与输入函数 scanf函数常用的附加格式说明符 • scanf函数在使用时的注意事项 • scanf函数没有计算功能,因此输入的数据只能是常量,而不能是表达式。 • 输入常整型和double类型的数据时必须在scanf函数的格式符中加l,否则输入的数据不能被正确的接收。 • 在输入多个整型数据或实型数据时,可以用一个或若干个空格、回车键或制表符(Tab)作为间隔。但在输入多个字符型数据时,数据之间不可以使用分隔符。
3.2 常用输出与输入函数 • 输入格式中,除格式说明符之外的普通字符应原样输入。 • 如果指定了输入数据的宽度,系统则自动按它截取所需的数据。在输入实数时,不能规定小数位。 例如:scanf(“%4d%4d%4d”,&x,&y,&z);输入:123434565678 则系统自动将1234 赋予x,将3456赋予y,将5678赋予z。 • %后面使用“*”附加符,表示跳过它相应的数据。 例如:scanf(“%4d,%*4d,%4d”,&x,&y); 输入:1234,3456,5678 则系统将1234赋给x,将5678赋给y,而第二个数据“3456”被跳过不赋给任何变量。 • 由于scanf( )函数本身不具有显示提示信息功能,为改善人机交互性,在设计输入操作时,一般先用printf( )函数输出提示信息,然后再用scanf( )函数进行数据输入。
3.2 常用输出与输入函数 • 字符输出函数 • putchar( )函数的功能是将给定的一个字符常量、或一个字符变量、或者是一个字符型的表达式输出到终端,一般情况下终端可以看成是显示器屏幕。 • putchar( )函数的一般调用形式为: putchar(c); 即把c的值输出到显示器上,这里的c可以是字符型变量或常量,可以是普通字符,也可以是转义字符。 • putchar( )函数只能用于单个字符的输出,并且一次只能输出一个字符; • putchar( )函数在使用时,必须在程序(或文件)的开头加上编译预处理命令,即: #include “stdio.h”
3.2 常用输出与输入函数 【例3.5】putchar( )函数应用举例。 #include "stdio.h" main( ) { char a,b,c,d; a='g'; b='o'; c=111; /*“111”是字母“o”的十进制ASCII码*/ d='d'; putchar('\n'); putchar(a); putchar(b); putchar(c); putchar(d); } 输出结果为: good
3.2 常用输出与输入函数 • 字符输入函数 • getchar( )函数的功能是从键盘取得一个用户输入的字符。并将此字符的ASCII码值作为函数返回值。应用时在程序中一般用另一个变量接收读入的字符。 • getchar( )函数的一般调用形式为: c=getchar( ); 执行上面的调用时,变量c将得到用户从键盘输入的一个字符值,这里的c可以是字符型或整型变量。 • getchar( )函数只能用于单个字符的输入,且一次只能输入一个字符; • getchar( )函数在使用时,必须在程序(或文件)的开头加上编译预处理命令,即: #include “stdio.h”
3.2 常用输出与输入函数 【例3.7】字符型数据的输入举例。 #include"stdio.h" main( ) { char c1,c2; printf("\nplease input No.1: "); c1=getchar(); putchar(c1); flushall(); printf("\nplease input No.2: "); c2=getchar(); putchar(c2); printf("\nend!"); }
3.2 常用输出与输入函数 则程序的运行情况为: please input No.1: a a please input No.2: b b end! • 顺序结构程序设计思想 顺序结构的程序通常由三部分组成: • 输入数据 • 进行处理 • 输出结果
开始 结束 输入长方体的长、宽和高 输出长方体的体积 利用公式计算体积 3.3顺序结构程序设计 【例3.8】已知长方体的长、宽和高,计算长方体的体积。
3.3顺序结构程序设计 main( ) {float x, y,h,v; printf("\ninput x, y, h:"); scanf("%f,%f,%f",&x,&y,&h); /*输入长方体的长、宽和高*/ v=x*y*h; /*计算长方体的体积*/ printf("\n The volume is:",v); /*输出长方体的体积*/ }
3.3顺序结构程序设计 • 顺序结构程序设计举例 【例3.9】已知某个三角形的底和高,计算其面积。 main( ) { float width,height,area; printf("\nEnter width and height:"); /*输出提示信息*/ scanf("%f,%f",&width,&height); /*输入底和高*/ area=(width*height)/2.0; /*计算面积*/ printf("\nThe arae is :%f ",area); /*输出面积的值*/ } 运行情况如下: Enter width and height:2.5,4 The area is :5.000000
3.3顺序结构程序设计 【例3.10】从键盘输入一个大写字母,将其转换成小写字母输出。 #include "stdio.h" main( ) { char ch1,ch2; printf("\nPlease put into ch1:"); ch1=getchar( ); printf("\n%c,%d",ch1,ch1); /*输出大写字母及对应的ASCII码的十进制数*/ ch2=ch1+32; /*将大写字母转换成小写字母*/ printf("\n%c,%d",ch2,ch2);/*输出小写字母及对应的ASCII码的十进制数*/ } 运行情况如下: Please put into ch1:A↙ A,65 a,97
3.3顺序结构程序设计 【例3.11】某商场营业员工资的计算方法是:每月300元的基本工资加该月总销售额的8.5%提成。要求编一程序,输入某营业员的月总销售额,计算并输出该营业员的月收入。 问题分析:设总销售额为m,月收入为salary, 则:salary=300+m*8.5% main( ) { float m,salary; printf("\nEnter total sales: "); /*输出提示信息*/ scanf("%f",&m); /*输入月总销售额*/ salary=300+m*0.085; /*计算月收入*/ printf("\nsalary is :%5.2f ",salary); } 运行情况: Enter total sales :3500 ↙ Salary is :597.50