Вы находитесь на странице: 1из 28

C



程 第四讲 数据输入与输出

设 §4.0 C 语句 概述

 C 语句的类型
一个 C 程序可以由几个源文件组成,一个源文件可以
由若干个函数和预编译命令组成,函数包括说明部分和函
数体,而函数体一般包括变量定义和执行部分。
C程序的执行部分是由语句组成的,程序的功能也是由执
行语句实现的。 C 语句可分为以下五类:
1 控制语句
2. 函数调用语句

四 3 表达式语句
讲 4. 空语句
数 5. 复合语句



C




设 1. 控制语句:完成一定的控制功能。
计 (1) 条件判断语句
if 语句, switch 语句
(2) 循环执行语句
do while 语句, while 语句, for 语句
(3) 转向语句
break 语句, continue 语句, goto 语句,
return 语句
第 2. 函数调用语句:

讲 a=sort(b); 必须包含有函数定义的头文件

据 ,或自己定义函数。


构成:表达式 + 分号“;”
C
语 执行表达式语句就是计算表达式的值。例如:

程 x=y+z; 赋值语句

设 y+z; 加法运算语句,但计算结果不能


留,无实际意义
i++; 自增 1 语句, i 值增 1
在编译程序时,常常出现:
Warning: Code has no effect in
第 function main

讲 仅说明此语句无实际意义,在连接( Link) 程

据 序时,可以通过。


C












C



序 4. 空语句:只有一个分号的语句,不执行任何操

计 作。
for(i=1;i<10;i++);

while(getchar()!=‘\n’);
本语句的功能是,只要从键盘输入的字符不是回
车则重新输入,这里的循环体为空语句。








C



5. 复合 语句 :

设 用 { } 括起来 的语 句,在 { } 外面 不需要 用
计 “;” 。








C


程 数据输 入输出 的概 念及其 在 C 语言中 的实现



  一个完整的计算机程序,常常要求具备输入输
出功能。C语言本身没有配备完成输入输出的语句
,其输出输入功能是通过调用系统提供的标准函数
实现的。
   C 的库函数存放在文件中,文件称为“头文件
”或“包含文件”,在使用函数时,必须把该文件用

四 编译预处理命令“ #include” 将其包含到用户源文


件中。例如在调用标准输入输出函数时,必须使用
据 以下预编译命令: #include<stdio.h> 或

入 #include“stdio.h” ,头文件通常以 .h 作为扩
C

言 文件包含命令行的一般形式为:

序 #include" 文件名 "

计 例如:
#include"stdio.h"
#include"math.h"
文件包含命令的功能是把包含文件内容插入该命令
行位置取代该命令行,从而把包含文件和当前的源
程序文件连成一个源文件。包含命令中的文件名可
以用双引号括起来,也可以用尖括号括起来。当用

四 尖括号时表示按系统设定的标准目录去查找包含文
讲 件,而用双引号则表示首先在当前的源文件目录中

据 查找,若未找到才到系统设定的标准目录去查找。


C

言 § 4.1 数据输出


字符输出函数

计 格式 : putchar( c )
参数 : c 为字符常量、变量或表达式
功能:把字符 c 输出到显示器上
返值:正常,为显示的代码值;出错,为 EOF(-1)

例 /*ch4_1.c*/
ch4_1.c
#include"stdio.h"
main()
第 { int c;
四 运行结果: A char a;

B c=65; a='B';

据 putchar(c); putchar('\n'); putchar(a);
输 }

C putchar 函数可以输出转义字符和普通字





#include"stdio.h"
设 main() ch4_3.c

{putchar(‘\101’); \* 输出字符 A*\
putchar(‘A’) \* 输出字符 A*\
putchar(‘\x41’); \* 输出字符 A*\
putchar(‘\’’); \* 输出单引号字符
*\



putchar(‘\012’); \* 输出回车换行符 *\
讲 putchar( ) 中的变量可以是字符型变量也可以是整型变量
数 }。
据  对控制字符执行控制功能,不在屏幕上显示,如:

入 putchar(‘\n’); 换行
C

言 格式输出函数



计 格式: printf(“ 格式控制串”,输出表列 )
功能:按指定格式向显示器输出数据
返值:正常,返回输出字节数;出错,返回 EOF(-1)

 格式控制串:是用双引号括起来的字符串,包含三种信息。
1. 格式说 明: %[ 修饰符 ] 格式 字符,用于 指定输出 格式
2. 普通字 符:原样 输出,如逗 号、空格及其 他字符
3. 转义字 符:按照 转义后的含 义输出
格式说 明又称为 格式字符串 ,普通字符和 转义字符又 称为 非格式 字符串
第 。
四  输出表列:要输出的数据,可以是变量、表达式,也可以是
讲 常量。如果格式控制串中没有格式说明部分,则没有输出表


列,反之则有,多个时以“ ,” 分隔,并且要求格式说明和输
输 出表列在数量上和类型上要一致。

C
语 格式字符:
言 int a=567;printf ( “%d”,a); 567
程 d 十进制整数
序 x 十六进制无符号整数 int a=255;printf(“%x”,a); ff
设 int a=65;printf(“%o”,a); 101

o 八进制无符号整数
u 不带符号十进制整数 int 例 a=567;printf(“%u”,a);
main()
567
例 int a=3,b=4;
char a=65;printf(“%c”,a);
c 单一字符 { unsigned int u=65535;
A
printf(“%d %d\n”,a,b);
s 字符串 printf(“%s”,“ABC”); ABC
printf(”u=%d\n",u);
printf(“a=%d , b=%d\n”,a,b);
e 指数形式浮点小数 float a=567.789;printf(“%e”,a); 5.677890e+02
输出结果 : }3 4
f 小数形式浮点小数 a=3, b=4 输出结果: u=-1 567.789000
float a=567.789;printf(“%f”,a);
g e 和 f 中较短一种 float a=567.789;printf(“%g”,a); 567.789
%% 百分号本身 11 11 11 11 11 11 11 11
printf(“%%”); %

四 说明

数 格式字符要用小写
据 格式字符与输出项个数应相同,按先后顺序一一对应


C
语 附加格式说明符(修饰符)

程 修饰符 功 能

设 m 输出数据域宽 , 数据长度 <m, 左补空格 ; 否则按实际输出

对实数 , 指定小数点后位数 ( 四舍五
.n
入)
对字符串 , 指定实际字符输出位数
- 输出数据在域内左对齐(缺省右对齐
)
+ 指定在有符号数的正数前显示正号
(+)
0 输出数值时指定左面不使用的空位置自动填
0
第 # 在八进制和十六进制数前显示前导 0 ,
四 0x
讲 在 d,o,x,u 前,指定输出精度为
l
数 long 型
据 在 e,f,g 前,指定输出精度为

入 double 型
C 例 m.n
语 例 int a=1234;


float f=123.456;
序 char ch=‘a’;
设 printf(“%8d,%2d\n”,a,a);

printf(“%f,%8f,%8.1f,%.2f,%.2e\n”,f,f,f,f,f);
printf(“%3c\n”,ch);
运行 1234,1234
结果: 123.456000,123.456000, 123.5,123.46,1.23e+02
 a

例 static char a[]=“Hello,world!”


printf(“%s\n%15s\n%10.5s\n%2.5s\n%.3s\n”,a,a,a,a,a);

四 运行结果: Hello,world!
讲  Hello,world!

据  Hello
输 Hello
入 Hel
C


程 例 -

设 例 int a=1234;

float f=123.456;
static char c[]=“Hello,world!”;
printf(“%8d,%-8d\n”,a,a);
printf(“%10.2f,%-10.1f\n”,f,f);
printf(“%10.5s,%-10.3s\n”,c,c);

运行结果: 1234,1234
123.46,123.5
第 Hello,Hel






C 例 0 、+

言 例 int a=1234;
程 float f=123.456;

设 printf(“%08d\n”,a); //00001234
计 printf(“%010.2f\n”,f); //0000123.46
printf(“%+08d\n”,a); //+0001234
printf(“%+012f\n”,f); //+0123.456001
例 #
例 int a=123;
printf(“%o,%#o,%x,%#x\n”,a,a,a,a);
//173,0173,7B,0x7B

四 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00
讲 例 l

据 例 long a=65536;
输 printf(“%8ld,%d\n”,a, a);

//65536,0
C


§ 4.2 数据输入
程 字符输入函数


计 格式 :getchar( )
功能:从键盘读一字符
返值:正常,返回读取的代码值;出错 , 返回 EOF(-1)

例 /*ch4_2.c*/
#include "stdio.h "
main() 运行结果:
第 { int c; Enter a character:A↵

printf("Enter a character:"); A--->hex41

数 c=getchar();

输 printf("%c--->hex%x\n",c,c);
ch4_2.c
入 }
C



使用 get cha r 函数应 注意 几个问 题:
序 • ge tc har 函数只 接受单 个字 符,输 入数字 也
设 按字符处 理。输 入多 于一个 字符 时,只 接收

第一个字 符。
• 使用本函 数前必 须包 含文件 “ st dio .h” 。
• 在 TC 屏幕下 运行含 本函 数程序 时, 将退 出 TC
屏幕进入 用户屏 幕等 待用户 输入 ,输入 完毕
再返回 TC 屏幕。

getchar() 函数得到 的字 符代码 值可 以不赋 予任


何变量 , 如: getchar();
第 getchar() 的返回值 可以 作为函 数的 参数, 表达

讲 式的一 部分 。如: putchar(getchar());
数 c=getchar()+32;

输 getchar() 可以接受 回车 等控制 字符 。

C
语 格式输入函数

程 格式 : scanf(“ 格式控制串”,地址列表)


功能:按指定格式从键盘读入数据,存入地址表指定的
计 存储单元中 , 并按回车键结束
返值:正常,返回输入数据个数
1. 格式控制串:作用与 printf() 函数相同,但不能显示非格
式字符串,只能显示格式字符串,即格式说明: % 格式字
符 (d,o,x,c,s,f,e)
2. 地址列表:变量的地址,是由地址运算符“ &” 后跟变量
名组成的 (&a 、 &b)



讲 例 scanf(“%d”,&a); 例 scanf(“%x”,&a);


输入: 10↵ 输入: 11↵
输 则 a=10 则 a=17

C
语 附加格式说明符(修饰符)

程 修饰符 功 能

设 h 用于 d,o,x 前,指定输入为 short 型整数

用于 d,o,x 前,指定输入为 long 型整数
l
用于 e,f 前,指定输入为 double 型实数
m 指定输入数据宽度,遇空格或不可转换字符则结束
* 抑制符,指定输入项读入后不赋给变量

例 scanf(“%4d%2d%2d”,&yy,&mm,&dd);
例 scanf(“%3d%*4d%f”,&k,&f);
第 注意: 输入数据 19991015↵
输入 时不能规定精
输入 度 如: scanf(“
12345678765.43↵
四 %7.2f”,&a);则 1999⇒yy, 10 ⇒mm, 15 ⇒dd
讲 则 123⇒k, 8765.43⇒f




C
语 输入分隔符的指定


一般以空格、 TAB 或回车键作为分隔符
序 其它字符做分隔符:格式控制串中两个格式说明
设 之间的字符

 “ 格式控制串” 中除了格式说明以外的其它所有
字符,在输入数据时应输入与这些字符相同的字
符。

例 scanf(“%d%o%x”,&a,&b,&c);
例 scanf(“%d:%d:%d”,&h,&m,&s);
例 scanf(“%d,%d”,&a,&b)
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
输入 输入 12:30:45↵
3,4↵
输入 123 123 123↵
例 scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);
则 12 ⇒h,则 30 ⇒m,
3⇒a, 4 45 ⇒s
⇒b
输出 a=123,b=83,c=291
输入 a=12,b=24,c=36↵







C 说明:


用“ %c” 格式符时,空格和转义字符作为有
程 效字符输入
序  输入数据时,遇以下情况认为该数据结束

计 : scanf(“%c%c%c”,&c1,&c2,&c3);

若输入 abc↵
1) 遇空格、 TAB 、或回
2) 遇
则宽a⇒c1,
度结束  ⇒c2, b ⇒c3
3) 遇非法输“入
输入函数留下的 垃圾”:
scanf(“%d%c%f”,&a,&b,&c);
如 #include”stdio.h”
main()若输入 1234a123o.26 ↵
{int x;则 1234 ⇒a, ‘a’ ⇒b, 123 ⇒c
char ch;


scanf(“%d”,&x);
讲 scanf(“%c”,&ch); ch4_5.c

数 printf(“x=%d,ch=%d\n”,x,ch);}


执行: 123↵
入 输出: x=123,ch=10
C



序 解决方法:
设 ( 1 )用 getchar() 清除

( 2 )用函数 fflush(stdin) 清除全部剩余内容
(3) 用格式串中空格或“ %*c” 来“吃掉”

Ch4_6.c Ch4_7.c

例 int x;
第 char ch;


scanf(“%d”,&x);
数 scanf(“ %c”,&ch);
据 或 scanf(“%*c%c”,&ch);


C


§ 4.3 程序举例 s=
1
(a + b + c)
2

序 例 输入三角形边长,求面积 area = s × ( s − a ) × ( s − b) × ( s − c)


/*ch4_8.c*/
ch4_8.c
#include"math.h" 文件包含预处理命令
#include"stdio.h"
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.2f\n",a,b,c,s);
四 printf("area=%7.2f\n",area);
讲 }

据 输入: 3,4,6 ↵
输 输出: a=3.00,b=4.00,c=6.00,s=6.50
入 area=5.33
C


程 例 从键盘输入大写字母,用小写字母输出



ch4_9.c
/*ch4_9.c*/
#include "stdio.h"
main() 输入: A ↵
{ char c1,c2; 输出: A,65
c1=getchar(); a,97
printf("%c,%d\n",c1,c1);
c2=c1+32;
第 printf("%c,%d\n",c2,c2);
四 }





C




设 #include"stdio.h"

main()
{putchar(getchar()+32);
}

#include"stdio.h"
main()

四 {printf(“%c”,getchar()+32);


}



C
语 例求ax + bx + c = 0方程的根,设b − 4ac > 0
2 2 − b ± b 2 − 4ac
言 x=
2a

序 /*ch4_10.c*/
设 ch4_10.c #include"stdio.h"

#include"math.h"
main()
{ float a,b,c,disc,x1,x2,p,q;
scanf("a=%f,b=%f,c=%f",&a,&b,&c);
disc=b*b-4*a*c;
p=-b/(2*a); q=sqrt(disc)/(2*a);
x1=p+q; x2=p-q;


printf("\n\nx1=%5.2f\nx2=%5.2f\n",x1,x2);
讲 }


输入: a=1,b=3,c=2 ↵
输 输出: x1=-1.00

x2=-2.00
C

言 作业与 上机

序 1. 写出下面程序运行结果。
设 2) #include“stdio.h”
计 main()
{float x=123.456;
printf(“%f,\n%12f,\n%12.2f,\n%.2f,\n%-
12.2f,\n”,x,x,x,x,x);
}
3) #include“stdio.h”
main()
{printf(“%3s,%7.2s,%.4s,%-5.3s,\n”,“CHINA”,
“CHINA”,“CHINA”,“CHINA”);
第 }
四 2. 设圆的半径 r=1.5 ,求圆球表面积和体积。用 scanf 函数输入数据,输
讲 出计算结果,取小数点后 2 位小数。

据 3. 设直角三角形的直角边长分别为 12 和 16 ,求直角三角形的面积和斜边
输 长。用 scanf 函数输入数据,输出计算结果,取小数点后 2 位小数。

Вам также может понравиться