C语言最简单的C程序设计顺序结构程序设计_第1页
C语言最简单的C程序设计顺序结构程序设计_第2页
C语言最简单的C程序设计顺序结构程序设计_第3页
C语言最简单的C程序设计顺序结构程序设计_第4页
C语言最简单的C程序设计顺序结构程序设计_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第4 4章章 最简单的最简单的C C程序设计程序设计 -顺序程序设计顺序程序设计 本章主要讨论本章主要讨论C C程序的赋值、输入、输出。程序的赋值、输入、输出。 4.1 C4.1 C语句概述语句概述 C C程序:可由若干源程序文件组成,一个源文件可程序:可由若干源程序文件组成,一个源文件可由若干函数和预处理命令及全局变量声明部分组成。由若干函数和预处理命令及全局变量声明部分组成。 声明部分:指出数据结构,定义数据类型。声明部分:指出数据结构,定义数据类型。 函数函数 执行部分:由语句组成,称数据操作,对提执行部分:由语句组成,称数据操作,对提供的数供的数 据据 进行加工。进行加工。 语句:编

2、译语句:编译 指令,向计算机发布相应的操作命指令,向计算机发布相应的操作命令。令。C程序组成的示意图程序组成的示意图 函数函数 1预处理命令预处理命令函数函数 n全局变量声明全局变量声明函数首部函数首部函数体函数体局部变量声明局部变量声明执行语句执行语句C程序程序源程序文件源程序文件2源程序文件源程序文件 1源程序文件源程序文件 n文件:文件:存储在磁盘上的信息的集合,可以是一段程序,一组存储在磁盘上的信息的集合,可以是一段程序,一组数据数据。 C源程序文件源程序文件:存储在磁盘上的函数的集合,包括程序执行:存储在磁盘上的函数的集合,包括程序执行中用到的数据,中用到的数据, 注:注: (1)所

3、有源程序文件中,只有一个源程序文件中包含一个主)所有源程序文件中,只有一个源程序文件中包含一个主函数函数main( ) , 其余文件中包含的都是被调用函数。其余文件中包含的都是被调用函数。 (2)当各源文件独自存放磁盘上时,运行该程序的方法有:)当各源文件独自存放磁盘上时,运行该程序的方法有: 在主函数前加在主函数前加 #include “文件名文件名.c ”用工程的方法,在工程文件中包含各源程序文件名,按用工程的方法,在工程文件中包含各源程序文件名,按F9生成生成.EXE文件,然后执行即可,将在第七章举例说明。文件,然后执行即可,将在第七章举例说明。 C C语言提供的语句分五大类:语言提供的

4、语句分五大类: (1)控制语句,完成控制功能控制语句,完成控制功能if( ) else 条件条件 for ( ) 循环循环 while ( ) 循环循环 do while ( ) 循环循环 continue 结束本次循环结束本次循环 break 中止中止switch 或循环或循环 switch 多分支选择多分支选择 goto 转向转向 return 从函数返回从函数返回(2)(2)函数调用语句函数调用语句 函数名(参数);函数名(参数); 如:如:printfprintf (“This is a C program.n”); (“This is a C program.n”); max(a,b

5、); max(a,b); (3)(3)表达式语句表达式语句 在表达式后加在表达式后加“ “ ;” ;” 构成构成 a=6 a=6 表达式表达式 ; ; a=5 ;a=5 ;表达式语句表达式语句 如如 i=i+2 i=i+2 表达式表达式 而而 i=i+2 ; i=i+2 ; 表达式语句表达式语句 x+y x+y ; x+y x+y ; (4)(4)空语句空语句 ; ; 无任何操作,但合法,可用于循环中的无任何操作,但合法,可用于循环中的转折转折(5)(5)复合语句复合语句 用用 将若干语句括起来而构成的语句。将若干语句括起来而构成的语句。 如:如:if (xy) 与与 if (xy) 意义不同

6、意义不同 z=x; z=x; x+; x+; y- -; y- -; 4.2 4.2 赋值语句赋值语句由赋值表达式与由赋值表达式与 “ “;” ” 组成。组成。 形式:变量形式:变量= =表达式;表达式; 功能:计算表达式的值,然后赋给左边的变量。功能:计算表达式的值,然后赋给左边的变量。 说明:说明: 1.1.赋值号与数学上的等号意义不同,如赋值号与数学上的等号意义不同,如 x=x+2; x=x+2; 2.2.在在C C语言中,赋值号作为赋值运算符使用,具有计语言中,赋值号作为赋值运算符使用,具有计算的功能。算的功能。 3.3.赋值表达式可以包含在其它表达式之中。赋值表达式可以包含在其它表达

7、式之中。 如:如:if ( (a=b) 0) t=a ; if ( (a=b) 0) t=a ; 但赋值语句不能包含在条件表达式中,如:但赋值语句不能包含在条件表达式中,如:if if (a=b;)0) t=a ; (a=b;)0) t=a ; 4.34.3数据输入输出的概念及在数据输入输出的概念及在C C语言中的实现语言中的实现 (1)(1)输入输出:相对主机而言的输入输出:相对主机而言的 输入设备:键盘、扫描仪、磁盘、光盘等输入设备:键盘、扫描仪、磁盘、光盘等 输出设备:显示器、打印机、磁盘等。输出设备:显示器、打印机、磁盘等。 (2)(2)本身不提供本身不提供I/OI/O语句语句: I/

8、OI/O操作通过函数实现,标准函数库操作通过函数实现,标准函数库中提供了一些中提供了一些I/OI/O函数,如函数,如printf,scanfprintf,scanf等等, ,它们不是的关键字,而是函数名。它们不是的关键字,而是函数名。 好处是:使编译系统简化、通用性强、好处是:使编译系统简化、通用性强、可移植性好。可移植性好。 函数库中的函数以函数库中的函数以. .objobj作扩展名,连接时与源程序作扩展名,连接时与源程序经编译而得到的经编译而得到的. .objobj连接生成连接生成.exe.exe文件,若源程序中文件,若源程序中有有printfprintf,编译时不把它翻译成目标指令,在执

9、行阶,编译时不把它翻译成目标指令,在执行阶段调用已被连接的函数库中的段调用已被连接的函数库中的printfprintf目标文件。目标文件。 C C函数库提供的一些标准函数库提供的一些标准/ / 函数是以终端设备函数是以终端设备为为I / OI / O对象的,如:对象的,如:putchar, getchar, printf, putchar, getchar, printf, scanfscanf, puts, gets, puts, gets。 (3)(3)使用库函数时使用库函数时:用预编译命令:用预编译命令#include#include将有关头文将有关头文件包含到用户源文件中,在头文件中包

10、含了与用到的件包含到用户源文件中,在头文件中包含了与用到的函数有关的信息,如使用输入输出函数时要用到函数有关的信息,如使用输入输出函数时要用到stdiostdio.h.h文件。文件。#include#include放在程序开头放在程序开头 如如 # #include “stdioinclude “stdio.h” .h” 或或 # #include stdioinclude .h4.4 4.4 字符数据的输入输出字符数据的输入输出 在在C C语言中,无语言中,无I/OI/O语句,数据的语句,数据的I/OI/O是通过是通过函数实现的,函数以文件的形式存放在系统的函数实现的,函数以文件的形式存放在

11、系统的 stdiostdio.h .h 库文件中。库文件中。 4.4.1 4.4.1 putcharputchar( (字符输出函数)字符输出函数) 功能:向输出设备输出一个字符。功能:向输出设备输出一个字符。 形式:形式:putcharputchar( (参数参数 ) ) 其中,参数可以是整型或字符型变量或常量。其中,参数可以是整型或字符型变量或常量。例如:例如:putchar(97); putcharputchar(97); putchar(a);(a);都输出字符都输出字符 a, a, char c= b ;putcharchar c= b ;putchar( c );( c );输出字

12、符输出字符 b b。 注意:注意: 在在C C语言中,除语言中,除printf printf 和和 scanf scanf 两个函数两个函数外,使用其它外,使用其它I/OI/O函数时,都必须在源文件的开函数时,都必须在源文件的开始处加上预编译命令:始处加上预编译命令:# #include include “stdio“stdio.h”.h”意义:意义: 将标准将标准I/OI/O函数库中的函数包含到所在文件函数库中的函数包含到所在文件中来。中来。 例例T4-1.c T4-1.c #include “stdio#include “stdio.h”.h”main( ) main( ) char a,

13、b,c; char a,b,c; a=B; a=B; b=O; b=O; c=Y; c=Y; putchar putchar(a); (a); putchar putchar(b); (b); putchar putchar (c); (c); 运行结果:运行结果:BOY BOY 若无文件包含编译预处理,在编译连接时若无文件包含编译预处理,在编译连接时系统将指出:系统将指出: Linking Error:Undefine Linking Error:Undefine symbolsymbol _putchar in _putchar in moduel moduel T4-1.cT4-1.c

14、另:另:putcharputchar( )( )函数还可以输出控制字符函数还可以输出控制字符 如:如: n n 或或012 012 回车回车 aa或或 007 007 字符为响铃字符为响铃 r r 或或 015 015 换行不回车换行不回车 n n 回车换行回车换行例例T4-1-1.c T4-1-1.c #include “stdio#include “stdio.h”.h”main( ) main( ) char a=A char a=A,b=Bb=B,c=007c=007; putchar(a)putchar(a);putchar(b)putchar(b);putchar(n)putcha

15、r(n); putchar (c )putchar (c );sleep(3)sleep(3);putchar( c)putchar( c); putchar(65)putchar(65);putchar(66)putchar(66);putcharputchar(007)(007); sleep(3)sleep(3);putcharputchar(007)(007); 运行结果:运行结果: AB AB 响,延时响,延时3 3秒,响秒,响 ABAB 响,延时响,延时3 3秒,响秒,响 例:例:T4-1-2.c T4-1-2.c #include “stdio#include “stdio.h”

16、.h”main() main() int int i i; for(i=1for(i=1;i=10i=10;i+) i+) putchar putchar(007)(007); 注:注: 007 007 和和 aa效果一样吗?效果一样吗? 结果是什么?结果是什么?答案:答案: 十次响铃。十次响铃。 一样。一样。 4.4.2 4.4.2 getchargetchar函数函数 功能:从键盘输入一个字符功能:从键盘输入一个字符 形式:形式:getchargetchar( ) ( ) 特点:无参数,其值是从输入设备得到的字符。特点:无参数,其值是从输入设备得到的字符。 例例T4-2.c T4-2.c

17、#include “stdio#include “stdio.h”.h”main( ) main( ) char c; char c; c=getchar( ); c=getchar( ); putchar( c); putchar( c); putchar (getchar( ) ); putchar (getchar( ) ); printf (“%c n”,getchar printf (“%c n”,getchar ( ) ); ( ) ); 输入:输入:abc 输出:输出:abc4.54.5格式输入与输出格式输入与输出 4.5.1 4.5.1 printf printf 格式输出函数

18、格式输出函数 功能:向输出设备输出若干个任意类型的数据功能:向输出设备输出若干个任意类型的数据 1 1、printf printf 函数的一般格式函数的一般格式 printfprintf ( (格式控制,输出表列)格式控制,输出表列) (1)(1)格式控制格式控制:由双引号括起来的一串字符(:由双引号括起来的一串字符(格式说明和普通字符)。格式说明和普通字符)。 格式说明:格式说明: 由由% %和格式字符(和格式字符(c, d, u, f, e, o, x, c, d, u, f, e, o, x, s, g)s, g)组成。组成。 普通字符:普通字符: 需要原样输出的字符。需要原样输出的字符

19、。 (2)(2)输出表列输出表列: 需要桉格式说明所指定的格式输出的数据需要桉格式说明所指定的格式输出的数据,可以是常量、变量、表达式。,可以是常量、变量、表达式。 一般形式:一般形式: printfprintf( (参数参数1 1,参数,参数2 2,参数参数n)n) 将参数将参数2n2n按参数的格式输出。按参数的格式输出。 int a=3 ; b=4; printf(“%d %d”, a, b); printf(“ a= %d b= %d”, a , b);格式说明格式说明输出表列输出表列普通字符普通字符输出结果:输出结果: 3 4 A=3 b=42 2、格式字符、格式字符(1)d (1)d

20、 格式符:输出十进制整数格式符:输出十进制整数 %d%d:按十进制数据的实际长度输出。:按十进制数据的实际长度输出。 % %mdmd :m m为指定输出字段的宽度。为指定输出字段的宽度。 m时时 按数据的实际位数输出。按数据的实际位数输出。 例例T4-2-1.c main( ) int a=123,b=12345; printf (“a=%4d,b=%4dn”,a,b); 运行结果:运行结果:a=_123,b=12345 %ld%ld:输出长整型数据:输出长整型数据 对于长整型数据只能按长整型的格式说明符输对于长整型数据只能按长整型的格式说明符输出出, ,否则否则, ,输出的数据有误。输出的数

21、据有误。 在长整型格式说明中在长整型格式说明中, ,还可指出其输出宽度还可指出其输出宽度. . 例例T4-2-2.c T4-2-2.c main( ) main( ) long a=134579; long a=134579; printf printf (“a=%dn”, a); (“a=%dn”, a); 结果:结果:a=3507 a=3507 (134579)10=(406663)80000000000000010 0000110110110011(3507)10( 00001101101100110000110110110011 )2 2= =(35073507)1010例例T4-2-

22、3.c main( ) long a=134579; printf (a=%ldn”,a); 结果:结果:a=134579 例例T4-2-4.c main( ) long a=134579; printf (“a=%10l dn”, a); 结果:结果:a=_ _ _ _134579(2 2)o o格式符,输出八进制数格式符,输出八进制数 特点:无论是正是负,输出的都是不带符号的数特点:无论是正是负,输出的都是不带符号的数 例:例:T4-2-5.c T4-2-5.c main ( ) main ( ) intint a=-1; a=-1; long b=-1; long b=-1; print

23、f (“a=%d, oa printf (“a=%d, oa=%o,lob=%lon”,a,a,b); =%o,lob=%lon”,a,a,b); 结果:结果:a= -1,oaa= -1,oa=0177777, lob=037777777777=0177777, lob=0377777777771 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1ab(3)x(3)x格式符,输出十六进制数格式符,输出十六进制数 特点:无论数据是正是负,输出的都是不带符号的数特点

24、:无论数据是正是负,输出的都是不带符号的数 例:例:T4-2-6.c T4-2-6.c main( ) main( ) int a=-1;long b=-1; int a=-1;long b=-1; printf printf (“xa=%x,oa=%o,a=%d,b=%ld,lxb(“xa=%x,oa=%o,a=%d,b=%ld,lxb=%lxn”,a,a,a,b,=%lxn”,a,a,a,b,b); b); 结果:结果:xa=0 xffff,oa=177777,a=-1,b=-xa=0 xffff,oa=177777,a=-1,b=-1,lxb=oxffffffff 1,lxb=oxfff

25、fffff (4)u(4)u格式符,输出无符号数据格式符,输出无符号数据 无符号类型的数据可用无符号类型的数据可用%d,%u,%o,%x %d,%u,%o,%x 格式输出。格式输出。 带符号的带符号的char char 和和 int int 整型数据可用整型数据可用%u%u格式输出。格式输出。 单、双精度实型数据用单、双精度实型数据用%u%u格式输出时,则得到错误格式输出时,则得到错误的结果。的结果。例例T4-3.c T4-3.c main( ) main( ) unsigned int unsigned int a=65535a=65535; int b=-2int b=-2; printf

26、 (“a=%d,%o,%x,%un”,a,a,a,a)printf (“a=%d,%o,%x,%un”,a,a,a,a); printfprintf (“b=%d,%o,%x,%un”,b,b,b,b) (“b=%d,%o,%x,%un”,b,b,b,b); 运行结果:运行结果: a=-1,177777,ffff,65535 a=-1,177777,ffff,65535 b=-2,177776,fffeb=-2,177776,fffe,65534,65534 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0无符号数的

27、数值位无符号数的数值位带符号数的符号位带符号数的符号位a=65535b=-2例例T4-3-1.c main( ) float a=5; double b=12; printf (“a=%u,b=%un”,a,b); (结果错的原因:无符号数也算整型数据之列结果错的原因:无符号数也算整型数据之列)运算结果:运算结果: a=0,b=0(5)C(5)C格式符,输出一个字符格式符,输出一个字符 字符型数据:占一个字节,数据表示范围字符型数据:占一个字节,数据表示范围:0255 0255 对于整型数据,若用字符格式输出,由于对于整型数据,若用字符格式输出,由于整型数据占两个字节,整型数据占两个字节, 如

28、果整型数据的值在如果整型数据的值在02550255之间时,则输出之间时,则输出对应的字符,对应的字符, 若其值在若其值在2563276725632767之间时,则截取其低之间时,则截取其低8 8位部分,然后输出对应的字符。位部分,然后输出对应的字符。 例例T4-4.c main() char c= a; int i=97,j=355,k=232; printf (%c,%c,%c,%cn”,c,i,j,k);; printf (%d,%d,%d,%dn”,c,i,j,k); 输出结果:输出结果: a,a,c, 97,97,355,2320 0 0 0 0 0 0 1 0 1 1 0 0 0 1

29、 10 1 1 0 0 0 1 1输出输出355的低的低8位位 对应字符对应字符Cj=355j=低位为低位为99(6 6)S S格式符,用来输出一个字符串,有几种格式符,用来输出一个字符串,有几种方法方法% s% s:按实际长度输出字符串。:按实际长度输出字符串。 %ms%ms:m m为列宽为列宽 当串长当串长mm时,按实际长度输出时,按实际长度输出 当串长当串长mmm时,按串实际长度输出,时,按串实际长度输出, 当串长当串长mmnm时,时,m m自动取自动取n n值值, m, m只能是整只能是整常量,而不能不变量或表达式。常量,而不能不变量或表达式。 例例T4-5.c T4-5.c main

30、( ) main( ) printf printf (“%3s,%7.2s,%.4s,%-5.3sn”, (“%3s,%7.2s,%.4s,%-5.3sn”, “CHINA”, “CHINA”, “CHINA”, “CHINA”, “CHINA”, “CHINA”, “CHINA” ); “CHINA” ); 运行结果:运行结果: CHINA, _ _ _ _ _CH, CHIN,CHI_ _ CHINA, _ _ _ _ _CH, CHIN,CHI_ _ (7) f(7) f格式符格式符: :输出单、双精度实数输出单、双精度实数 %f:%f:单精度浮点输出,有效位单精度浮点输出,有效位7 7

31、位,通常小数点后位,通常小数点后有有6 6位数字。位数字。 %lf:%lf:双精度浮点输出,有效位双精度浮点输出,有效位1616位,通常小数点后位,通常小数点后有有6 6位数字。位数字。 例:例:T4-6.cT4-6.c输出单精度有效位输出单精度有效位 main( ) main( ) float x,y float x,y; x=111111.111x=111111.111; y=222222.222y=222222.222; printfprintf (“x+y=%fn”,x1+y1) (“x+y=%fn”,x1+y1); 运算结果:运算结果: x+y=333333.328125x+y=33

32、3333.328125例例T4-7.c输出双精度有效位输出双精度有效位 main( ) float x1,y1; double x2,y2; x1=1111111111111.111111111; y1=2222222222222.222222222; x2=1111111111111.111111111; y2=2222222222222.222222222; printf (“x1+y1=%fnx2+y2=%lfn”,x1+y1,x2+y2); 运行结果:运行结果: x1+y1=3333333319680.000000 x2+y2=3333333333333.333010 % %m. nf

33、m. nf :输出数据共占输出数据共占m m列,其中小数占列,其中小数占n n位,当数据长度位,当数据长度mm时,左补空格。时,左补空格。 (3)%-(3)%-m. nfm. nf:输出数据占输出数据占m m列,其中小数占列,其中小数占n n位,当数据长度位,当数据长度mm时,右补空格。时,右补空格。 例例T4-8.c T4-8.c main( ) main( ) float f=123.456; float f=123.456; printf printf (“%f,_ _%10f_ _%10.2f_ _% .2f_ (“%f,_ _%10f_ _%10.2f_ _% .2f_ _%-10.

34、2fn”,f,f,f,f,f); _%-10.2fn”,f,f,f,f,f); 运行结果运行结果: 123.456001_ _123.456001_ _ _ _ _ 123.456001_ _123.456001_ _ _ _ _ _123.46_ _123.46_ _123.46_ _ _ _123.46_ _123.46_ _123.46_ _ _ _(8)e(8)e格式,以指数形式输出实数格式,以指数形式输出实数 % % e:e:小数点前有一位数字,小数点后有小数点前有一位数字,小数点后有5 5位位数字数字 float : x. xxxxxefloat : x. xxxxxexx xx

35、形式:形式: double: x.xxxxxedouble: x.xxxxxexxx xxx 例例T4-8-1.c T4-8-1.c main( ) main( ) float a=1.23456e38; doubl e float a=1.23456e38; doubl e b=1.23456e308; b=1.23456e308; printfprintf(“a=%e,b=%len”,a,b); (“a=%e,b=%len”,a,b); 运行结果运行结果: :a=1.23456e+38,b=1.23456e+308a=1.23456e+38,b=1.23456e+308% %m.nem.n

36、e:m m为输出数据的列数为输出数据的列数,n,n是小数的位是小数的位数数. . m mm数据长度数据长度, ,数据靠右输出数据靠右输出, ,左端补空格左端补空格 %-%-m.nem.ne:m m为输出数据的列数为输出数据的列数,n,n是小数的位是小数的位数数. . m mm数据长度数据长度, ,数据靠左输出数据靠左输出, ,右端补空格右端补空格 在在TcTc中的中的n n: 指在指在e e左边的数字个数左边的数字个数, ,不包括小数点不包括小数点. . 例例T4-8-2.c main( ) float f=123.456; printf (“%e,%10e,%10.2e,%10.4e,% .

37、2e,% -10.2en”,f,f,f,f,f,f); 运行结果运行结果: 1.23456e+02, 1.23456e+02,_ _ _1.2e+02, _ 1.235e+02,1.2e+02,1.2e+02_ _ _(9)g(9)g格式符,用来输出实数格式符,用来输出实数 根据数据的大小,自动选取根据数据的大小,自动选取e e,f f 格式中占位格式中占位数较少的一种格式输出。数较少的一种格式输出。 例例T4-8-3.c T4-8-3.c main( ) main( ) float f=123.468; float f=123.468; printf printf (“%e,%f,%gn”,

38、f,f,f); (“%e,%f,%gn”,f,f,f); 运行结果:运行结果:1.234681.23468e+02,123.468002,123.468e+02,123.468002,123.468(10)print (10)print 函数的使用说明:函数的使用说明: 格式符用小写字母而不能用大写字母,如格式符用小写字母而不能用大写字母,如%d %d 而而不是不是% %D D。 格式控制的字符串中可包含转义字符,如:格式控制的字符串中可包含转义字符,如: n, n, t, b, r, 377, x41 t, b, r, 377, x41 由由% %和格式字符和格式字符d, f, e, g,

39、u, c, s, o, xd, f, e, g, u, c, s, o, x构成构成格式输出符号格式输出符号 特殊字符:特殊字符:% %和和 的输出,如下所示:的输出,如下所示: T4-8-4.cT4-8-4.c main( ) main( ) printf(“%s=350%s”, “wuhan3507”, printf(“%s=350%s”, “wuhan3507”, “hubei“hubein”); n”); 输出输出: : wuhan=hubeiwuhan=hubei 例例T4-8-5.c main( ) printf (“350 352376 n”); printf (“ ,%, “

40、, n”); printf (“%f, % n”,1.0/3); 输出:输出: ,%, ” 0.333333% 本题不要求本题不要求定义数据类型与格式符说明要一致,否则将输出错定义数据类型与格式符说明要一致,否则将输出错误结果。误结果。 例例T4-8-6.c T4-8-6.c main( ) main( ) int int a=5; float b=3.6; a=5; float b=3.6; char c=a; char c=a; double d=123.456; double d=123.456; printf printf (“a=%fnb=%dnc=%end(“a=%fnb=%dnc

41、=%end=%ldn”,a,b,c,d); =%ldn”,a,b,c,d); 运行结果:运行结果: a=-a=-9.239893754489199790000000000000000000000e+61 9.239893754489199790000000000000000000000e+61 b=16396 b=16396 c=-7.40806e+140 c=-7.40806e+140 d=13582430 d=13582430 出错原因:类型定义与格式说明不一致出错原因:类型定义与格式说明不一致 4.5.2 4.5.2 scanfscanf : :格式输入函数格式输入函数 功能:输入任何类

42、型的数据。功能:输入任何类型的数据。 1 1、一般形式、一般形式 scanfscanf ( (格式控制,地址表列)格式控制,地址表列) (1)(1)格式控制:是字符串,内容有格式控制:是字符串,内容有: 格式说明:由格式说明:由% %和格式字符和格式字符 d, f, e, c, s, d, f, e, c, s, o, xo, x中之一组成。中之一组成。 普通字符:需原样输入的字符普通字符:需原样输入的字符 转义字符:转义字符: n, t n, t 用来实现换行和制表输用来实现换行和制表输入入 (2)(2)地址表列:地址表列: 变量名前加变量名前加& &,表示将输入的数据存入变量所,表示将输入

43、的数据存入变量所指定的存储单元内,字符数组前不加指定的存储单元内,字符数组前不加& &例例T4-9.c main( ) int a,b,c; scanf (“%d %d %d”,&a, &b,&c); printf (“a=%d, b=%d, c=%dn”, a, b, c); 输入方法:输入方法: 3_4_5 3_ _4_ _ _ _5 3 4 5 3 Tab 4 Tab 5 输出输出:a=3,b=4,c=5354abc2 2、格式说明、格式说明 以以% %开始,以一个格式符(开始,以一个格式符(d, f, e(E), g(G),c, d, f, e(E), g(G),c, s, o, x(

44、X)s, o, x(X)结束,中间可插普通字符。结束,中间可插普通字符。 附加格式说明符有:附加格式说明符有: %ld, %lo, %lx :%ld, %lo, %lx :用于输入长整型数据(十、八、十用于输入长整型数据(十、八、十六进制数)六进制数) %lf, %le: %lf, %le: 用于输入双精度类型数据用于输入双精度类型数据 % %hd, %ho, %hxhd, %ho, %hx: :用于输入十、八、十六进制短整用于输入十、八、十六进制短整型数据型数据 域宽域宽n: n: 指出输入数据所占的列数指出输入数据所占的列数n n。 * * : :本输入项读入后不赋给任何变量。本输入项读入

45、后不赋给任何变量。(1)(1)指出输入数据所占列数,系统自动按其指出输入数据所占列数,系统自动按其截取数据。截取数据。 例例T4-9-1.c T4-9-1.c main( ) main( ) int int a,b; a,b; scanf (“%3d %3d”,&a,&b); scanf (“%3d %3d”,&a,&b); printf printf (“a=%d,b=%dn”,a,b); (“a=%d,b=%dn”,a,b); 输入:输入:123456789 输出:输出:a=123,b=456(2)(2)字符型数据若指出字符型数据若指出n n位宽度,则只将第一位宽度,则只将第一个字符赋给变

46、量。个字符赋给变量。 例例T4-9-2.c T4-9-2.c main( ) main( ) char ch char ch; ; scanf (“%3c”,&ch); scanf (“%3c”,&ch); printf (“%cn”,ch printf (“%cn”,ch); ); 输入:输入:abcd 输出:输出:a(3)%(3)%后加后加* *, , 表示跳过相应数据表示跳过相应数据 例例T4-9-3.c T4-9-3.c main( ) main( ) int int a,b; a,b; scanf (“%2d % scanf (“%2d %* *3d %2d”,&a,&b); 3d

47、%2d”,&a,&b); printf printf (“a=%d,b=%dn”,a,b); (“a=%d,b=%dn”,a,b); 输入:输入:12 _ 345 _ 678 输出:输出:a=12,b=67(4)(4)格式说明中不能规定精度,编译虽不指出格式说明中不能规定精度,编译虽不指出错误,但结果不对。错误,但结果不对。 例例T4-9-4.c T4-9-4.c main( ) main( ) float a; float a; scanf (“%6.2f”,&a); scanf (“%6.2f”,&a); printf printf (“a=%fn”,a); (“a=%fn”,a); 输入

48、:系统通过,不让输入数据输入:系统通过,不让输入数据 输出:输出:a=0.000000a=0.000000(5)o, x(5)o, x格式输入格式输入 例例T4-9-5.c T4-9-5.c main ( ) main ( ) int int a,b,c; a,b,c; scanf (“%o%x%c”, &a,&b,&c); scanf (“%o%x%c”, &a,&b,&c); printf printf (“%d, %d, %dn”,a,b,c); (“%d, %d, %dn”,a,b,c); 输入:输入:12 12 12 输出:输出:10,18,493 3、使用、使用sacnf sacn

49、f 函数应注意的问题函数应注意的问题 (1)(1)地址表列地址表列 指的是变量的地址,而不是变量名。指的是变量的地址,而不是变量名。 如:如:scanfscanf (“%d”, &a); (“%d”, &a); (2)(2)格式字符串中除格式说明外,还可有其格式字符串中除格式说明外,还可有其它字符,在输入时,除空格字符外,其它字它字符,在输入时,除空格字符外,其它字符应原样输入。符应原样输入。 (3)(3)用用%c%c格式输入字符时,空格和转义字符格式输入字符时,空格和转义字符都作有效字符输入。都作有效字符输入。例例T4-9-6.c main( ) int a,b; float c,d; ch

50、ar e,f; scanf (“%d %dn”,&a,&b); scanf (“c=%f,d=%fn”,&c,&d); scanf (“%c %c”,&e,&f); printf (“a=%d, b=%d, c=%f, d=%f, e=%cn”,a,b,c,d,e,f); 输入:输入:1_ 2 c=3. 5,d=4.6 ab 输入:输入: 1_2c=3.5,d=4.6ab 或或输出:输出:a=1,b=2,c=3.500000,d=4.600000,e=a,f=b(4)(4)输入数据遇到下列情况时,表示数据结束:输入数据遇到下列情况时,表示数据结束: 遇空格、回车、遇空格、回车、TabTab;

51、遇结束宽度,如遇结束宽度,如%3d,%3d,只取只取3 3列;列; 遇非法输入。遇非法输入。 例例T4-9-7.c T4-9-7.c main( ) main( ) int int a; a; char b; char b; double c; double c; scanf(“%d%c%lf”,&a,&b,&c); scanf(“%d%c%lf”,&a,&b,&c); printf printf (“a=%d,b=%c, c=%lfn”,a,b,c); (“a=%d,b=%c, c=%lfn”,a,b,c); 输入:输入:1234512345a54321.1234a a54321.1234a

52、 输出:输出:a=12345,b=a,c=54321.123400a=12345,b=a,c=54321.123400* *非格式化输入输出函数非格式化输入输出函数 非格式化输入输出函数可以由上面讲述的标准格式化输入输出非格式化输入输出函数可以由上面讲述的标准格式化输入输出函数代替函数代替, , 但这些函数编译后代码少但这些函数编译后代码少, , 相对占用内存也小相对占用内存也小, , 从而提从而提高了速度高了速度, , 同时使用也比较方便。下面分别进行介绍。同时使用也比较方便。下面分别进行介绍。 一、一、puts()puts()和和gets()gets()函数函数1. puts()1. pu

53、ts()函数函数 puts()puts()函数用来向标准输出设备函数用来向标准输出设备( (屏幕屏幕) )写字符串并换行写字符串并换行, , 其调其调用格式为用格式为: : puts(s); puts(s); 其中s为字符串变量(字符串数组名或字符串指针)。 puts()函数的作用与语printf(%sn, s)相同。 例例4: 4: main() main() char s20, char s20, * *f;f; / /* *定义字符串数组和指针变量定义字符串数组和指针变量* */ / strcpystrcpy(s, Hello! Turbo C2.0); /(s, Hello! Turb

54、o C2.0); /* *字符串数组变量赋值字符串数组变量赋值* */ / f=Thank you;f=Thank you; / /* *字符串指针变量赋值字符串指针变量赋值* */ / puts(s); puts(s); puts(f); puts(f); 说明说明: : (1). puts()(1). puts()函数只能输出字符串函数只能输出字符串, , 不能输出数值或进行不能输出数值或进行格式变换。格式变换。 (2). (2). 可以将字符串直接写入可以将字符串直接写入puts()puts()函数中。如函数中。如: : puts(Hello, Turbo C2.0); puts(Hel

55、lo, Turbo C2.0); 2. gets()2. gets()函数函数 gets()gets()函数用来从标准输入设备函数用来从标准输入设备( (键盘键盘) )读取字符串直到读取字符串直到回车结束回车结束, , 但回车符不属于这个字符串。但回车符不属于这个字符串。其调用格式为其调用格式为: : gets(s); gets(s); 其中其中s s为字符串变量为字符串变量( (字符串数组名或字符串指针字符串数组名或字符串指针) )。 gets(s) gets(s)函数与函数与scanfscanf(%s, &s)(%s, &s)相似相似, , 但不完全相同但不完全相同, , 使用使用scan

56、fscanf(%s, &s)(%s, &s)函数输入字符串时存在一个问题函数输入字符串时存在一个问题, , 就就是如果输入了空格会认为输入字符串结束是如果输入了空格会认为输入字符串结束, ,空格后的字符将空格后的字符将作为下一个输入项处理作为下一个输入项处理, , 但但gets() gets() 函数将接收输入的整个函数将接收输入的整个字符串直到回车为止。字符串直到回车为止。 例例5 5 main() main() char s20, char s20, * *f; f; printf printf(Whats your name?n); (Whats your name?n); gets(s

57、); gets(s); / /* *等待输入字符串直到回车等待输入字符串直到回车结束结束* */ / puts(s); puts(s); / /* *将输入的字符串输出将输入的字符串输出* */ / puts(How old are you?); puts(How old are you?); gets(f); gets(f); puts(f); puts(f); 说明说明: : (1). gets(s)(1). gets(s)函数中的变量函数中的变量s s为一字符串。如果为单个字为一字符串。如果为单个字符符, , 编译连接不会有错误编译连接不会有错误, , 但运行后会出现但运行后会出现 Nu

58、ll pointer Null pointer asignmemtasignmemt 的错误。的错误。二、二、putchar()putchar()、getch()getch()、getche()getche()和和getchargetchar()()函数函数 1. 1. putcharputchar()()函数函数 putcharputchar()()函数是向标准输出设备输出一个字符函数是向标准输出设备输出一个字符, , 其调用格式为其调用格式为: : putchar(chputchar(ch);); 其中其中chch为一个字符变量或常量。为一个字符变量或常量。 putcharputchar(

59、)()函数的作用等同于函数的作用等同于printf(%c, chprintf(%c, ch); ); 例例6: 6: # #includestdioinclude .h main() main() char c: char c: / /* *定义字符变量定义字符变量* */ / c=B; c=B; / /* *给字符变量赋值给字符变量赋值* */ / putcharputchar(c);(c); / /* *输出该字符输出该字符* */ / putcharputchar(x42);(x42); / /* *输出字母输出字母B B* */ / putchar putchar(0 x42);(0

60、x42); / /* *直接用直接用ASCIIASCII码值输出字母码值输出字母B B* */ / 从本例中的连续四个字符输出函数语句可以分清字符变量的不从本例中的连续四个字符输出函数语句可以分清字符变量的不同赋值方法。同赋值方法。 2. 2. getch()getch()、getche()getche()和和getchargetchar()()函数函数 (1) (1) getch()getch()和和getchegetche()()函数函数 这两个函数都是从键盘上读入一个字符。其调用格式为这两个函数都是从键盘上读入一个字符。其调用格式为: : getch(); getch(); getche

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论