当前位置:首页 >> 其它课程 >>

第3章(2) 顺序结构程序设计2012


主讲:袁小玲
Email: xlyuan@whut.edu.cn

第三章(2)输入输出与顺序结构程序设计
?3.1

C语句概述 ?3.2 输入输出在C语言中的实现 ?3.3 顺序结构程序设计举例

3.1 C语句概述
?

C语言程序的执行部分是由语句组成的,程序

的功能 也是由执行语句实现的。 C语言程序的语句可分为 以下五种: 1. 控制语句 2. 函数调用语句 3. 表达式语句 4. 复合语句 5. 空语句

1. 控制语句( 9种) : 在C语言中,为了控制计算机 各操作的执行次序,程序设计语言中使用了控制 语句。 if ( ) ~ else ~ 条件语句( 双分支选择语句) switch 多分支选择语句 for ( ) ~ while ( ) ~ 循环语句 do ~ while ( ) continue 结束本次循环语句 break 中止语句 goto 转向语句 return 从函数返回语句

2. 函数调用语句 : 由一个函数调用(函数名+实际参数)加一个 分号构成 如: printf(“very good!”); 3. 表达式语句 : 由表达式加分号构成 如: 赋值表达式 x=12 加 ; ? x=12 ; ( 赋值表达式语句 )
4. 空语句 : 由一个分号构成 , 它什么也不做 5. 复合语句 : 用 { } 括起来的语句序列 如 { int temp ; temp = x ; 注意 : x=y; 1. 复合语句是一个整体, 相当于一个语句 y = temp ; 2. 一个复合语句中可以包含其他的复合语句 } 3. 在复合语句的花括号后不要再加分号 4. 复合语句中可定义变量 , 但此变量只在 该复合语句内有效

3.2 输入输出在C语言中的实现
? 几乎每一个C程序都包含输入输出 ? 输入输出是程序中最基本的操作之一

1.输入输出的概念(I/O) 所谓输入、输出是以计算机主机为主体而言的 : ? 从计算机向外部输出设备(如显示屏、打印机 、磁盘等)输出数据称为“输出”。 ?从外部向输入设备(如键盘、磁盘、光盘、扫 描仪等)输入数据称为“输入”。

输入输出在C语言中的实现

2. C语言本身不提供输入输出语句 ? 输入和输出操作是由函数来实现的 ? 在C标准函数库中提供了一些输入输出函数,例 如,printf函数和scanf函数(f-function) ? printf和scanf不是C语言的关键字(keywords), 而只是库函数的名字 ? putchar、getchar、puts 、gets

3.在使用C语言库函数时,要用预编译命令“#include” 将有关的“头文件”包括到用户源文件中。在调用标准

输入输出库函数时,文件开头应有以下预编译命令:
# include <stdio.h>(系统到存放C库函数头文件所在的目录中寻
找要包含的文件,这称为标准方式)

或# include “stdio.h” (系统先在用户当前目录中寻找要包含的
文件,若找不到,再按标准方式查找)

4.TC允许在使用printf和scanf两个函数时可不加#include

命令。

3.2.1 字符数据的输入和输出
一、 字符输出函数( putchar函数) 格式 : putchar(参数) 功能: 将参数对应的字符输出到显示器上, 参数可以是字 符型的常量和变量或 整型的常量和变量。 例: #include <stdio.h> void main( ) { char ch=?G?; int k=76; putchar(ch); 输出: GIRL putchar(73); putchar(?R?); putchar(k); } 注意: putchar函数只有一个参数

注意: putchar可以输出控制字符,如 putchar(?\n?) 输出一个换行符,也可以输出其他转义字符。 如 putchar(?\??) (输出单引号字符 ’ ) putchar(?\101?) 等价于putchar(65) (输出字符 A)

二、 字符输入函数( getchar函数) 格式 : getchar( ) ( 注意它是无参函数 ) 功能 : 从终端(键盘)输入一个字符 说明 : 调用此函数时, 系统会等待外部的输入 例:#include <stdio.h> 1、假设输入: ABCD↙ void main( ) A 输出: { char ch; B ch=getchar( ); putchar(ch); 2、如果输入: A BC↙ putchar(?\n?); 输出: A putchar(getchar( )) ; }
注意:一般连续输入“可显示字符”时,若中间有:空格,回车等字符, 在输出时是不可见的。

注意: (1)getchar( )只能接收一个字符,getchar函数收到 的字符可以赋给一个字符变量或整型变量。

(2)若在程序中调用getchar、putchar函数,则必须
在程序的开头部分加上“包含命令” #include <stdio.h> 或 #include “stdio.h”

3.2.2 格式输入输出

一、格式化输出函数printf ()

二、格式化输入函数scanf ()

一、PRINTF 函数(格式化输出函数)
1.printf函数的一般格式为 printf(格式控制,输出表列)
括弧内包括两部分: (1) “格式控制”是用双引号括起来的字符串,也称 “转换控制字符串”,它包括两种信息: ①格式说明,由“%”和格式字符组成,如%d, %f等。 它的作用是将输出的数据转换为指定的格式输出。格式 说明总是由“%”字符开始的。 ②普通字符,即需要原样输出的字符。 (2)“输出表列”是需要输出的一些数据,可以是常 量、变量或表达式。

下面是两个例子:

可以是常量、变量或表 达式

printf(“ %d %d ”, a ,b );
格式说明 输出表列

printf(“ a= %d b= %d ”, a ,b);
普通字符 普通字符

2.格式字符 常用的有以下几种格式字符:

(1)d 格式字符。用来输出十进制整数。有以下 3种格式字符: ①%d,按整型数据的实际长度输出。
②%md,m为指定的输出字段的宽度。如果数据 的位数小于m,则左端补以空格,若大于m,则按实 际位数输出。如

printf(“%4d,%4d”, a , b);
若a=123,b=12345,则输出结果为 |__| 123 ,12345
原样输出的普通字符

③%ld,输出长整型数据。如 long a=135790; printf(“%ld”,a); 对long型数据应当用%ld格式输出。对长整型数据也可以 指定字段宽度,如将上面printf函数中的“%ld”改为“%8ld” 则输出为: |__| |__| 135790 (8列) 一个int型数据可以用%d或%ld格式输出。 (2)O格式符,以八进制数形式输出整数。由于是将内存 单元中的各位的值(0或1)按八进制形式输出,因此输出 的数值不带符号,即将符号位也一起作为八进制数的一部 分输出。与d格式符一样,o格式符同样有以下3种形式: ①%o ②%mo ③%lo

例如: int a= -1; printf(“%d,%8o,%lo”,a,a,a); -1在内存单元中的存放形式(以补码形式存放)如下:

1111111111111111 =>001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
输出为 -1 , |__| |__| 177777 , 177777

(3)X格式符,以十六进制数形式输出整数。
同样不会出现负的十六进制数。

例如
int a=-1;

Printf(“%x,%o,%d”,a,a,a);
a在内存单元中的存放形式为:1111 1111 1111 1111

输出结果为: ffff,177777,-1

(4)u 格式符,用来输出unsigned型数据,即无符号整数, 以十进制形式输出。 (5)C 格式符,用来输出一个字符。 如: char c=?a?; printf(“%c”,c); 等价于 putchar(c);输出字符‘a? 请注意: ① “%c”中的 c是格式符,逗号右边的c是变量名,不要搞混。 ② 一个整数,只要它的值在0~255范围内,就可以用字符 形式输出。在输出前,系统会将该整数作为ASCII码转 换成相应的字符;反之,一个字符数据也可以用整数形式 输出。

(6) S 格式符,用来输出一个字符串。有几种用法: ①%s,例如: printf(“%s”, “CHINA” ); 输出“CHINA”字符串(不包括双引号)。 ②%ms,输出的字符串占m列,如字符串本身长度大 于m,则突破m的限制,将字符串全部输出。若串长 小于m,则左补空格。 ③%-ms,如果串长小于m,则在m列范围内, 字符 一律向左靠,右补空格。

④%m.ns,输出占m列,但只取字符串中左端n个字 符。这n个字符输出在m列的右侧,左补空格。 ⑤%-m.ns,其中m、n含义同上,n个字符输出在m 列范围的左侧,右补空格。如果n>m,则m自动取 n值,即保证 n个字符正常输出。

(7)f 格式符,用来输出实数(包括单、双精度),以 小数形式输出。有以下几种用法: ①%f,不指定字段宽度,由系统自动指定,使整数 部分全部如数输出。并输出6位小数。应当注意,并非全 部数字都是有效数字。单精度实数的有效位数一般为7位。

②%m.nf指定输出的数据共占m列,其中有n位小数。 如果数值长度小于m,则左端补空格。 ③% -m.nf与%m.nf基本相同,只是使输出的数值 向左端靠齐,右端补空格。

3.各种数据输出举例
(1)无符号数据的输出

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); }
运行结果为:

a=-1 , 177777 , ffff , 65535

b=-2 , 177776 , fffe , 65534
-1的补码=11…..11,按无符号数计算为216-1=65535 -2的补码=11…..10,按无符号数计算为216-2=65534

(2)字符数据的输出:

main ( ) { char c=?a?; int i=97; printf (“%c , %d\n”, c, c); printf (“%c , %d\n”, i , i); }
运行结果为:

a , 97 a , 97

一个整数可以用字符形式输出。(值在0~255内) 一个字符数据也可以用整数形式输出。

(3) 字符串的输出

main( ) { printf(“%5s, %7.2s,%.4s,%-5.3s\n”, “CHINA”,
“CHINA” , “CHINA”, “CHINA”);

}
运行结果为: CHINA, |__| |__| |__| |__| |__| CH,CHIN,CHI |__| |__| 其中第3个输出项,格式说明为“%.4s”,即只指定n,没指 定m,自动使 m=n= 4,故占4列。

(4)输出实数(此时应注意有效数字是几位)

main( ) { float x,y; x=111111.111; y=222222.222; printf(“%f”,x+y); } 运行结果为: 333333.328125
随机产生,没有实际意义

(5)输出实数时指定小数位数:
main( ) { float f =123.456; printf(“%f |__| %10f |__| %9.2f }

|__|

%.2f |__| %-9.2f\n”,f,f,f,f,f);

运行结果为: 123.456001 |__| 123.456001 |__| |__| |__| |__| 123.46
|__|

123.46 |__| 123.46 |__| |__| |__|

4.格式符小结:一个格式说明符由“%”开头,以格式字符为结
束,中间可以插入附加格式字符(也称修饰符),例如:%8ld。

Printf 格式字符
格式字符 说 明

d

以带符号的十进制形式输出整数(正数 不输出符号)

o x,X

以八进制无符号形式输出整数(不输出 前导符0) 以十六进制无符号形式输出整数(不输 出前导0x),用x则输出十六进制数的 a~f时以小写形式输出。用X时,则以大 写字母输出。 以无符号十进制形式输出整数
以字符形式输出,只输出一个字符

u c

格式字符 s 输出字符串 f e,E

说明

以小数形式输出单、双精度数,隐含 输出6位小数。 以指数形式输出实数,数字部分小数 位数为6位。用e时指数以“e”表示 (如1.2e+02),用E时指数以“E”表 示(如1.2E+02)。 选用%f或%e格式中输出宽度较短的 一种格式,不输出无意义的0。

g,G

printf的附加格式说明字符(格式修饰符)

字符 字母l

说明 用于长整型整数,可加在格式符 d、o、x、u前面 数据最小宽度(域宽)

m (正整数) n 对实数,表示输出n位小数;对 (正整数) 字符串,表示截取的字符个数


输出的数字或字符在域内向左靠

5.使用printf函数时,还需注意以下几点 (1)除了X,E,G外,其他格式字符必须用小写字母,

如%d不能写成%D。 (2)可以在printf函数中的“格式控制”字符串内包含 “转义字符”,如“\n”, “ \t”, “ \b”, “ \r”, “ \f”,“\377”等。 (3)上面介绍的d、o、x、u、c、s、e、g等字符,如果 用在“%”后面就作为格式符号,否则,被当作普通字 符。

printf(“ c=%cf=%fs=%s”,c,f,s);
格式说明 第一个格式说明为“%c”而不包括其后的f, 第二个格式说明为“%f ”,不包括其后的S, 第三个格式说明为“%s ”。其他的字符视作原样输出的 普通字符。 (4)如果想输出字符“%”,则应该在“格式控制” 字符串中用连续两个%表示,如

printf (“%f %%”,1.0/3); 输出:0.333333%

二、scanf 函数(格式化输入函数)
1.一般形式

scanf(格式控制,地址表列)
“格式控制”的含义同 printf函数; “地址表列”是由若干个地址组成的表列, 可以是变量的地址,或字符串的首地址。

2.例子 : 用scanf函数输入数据

main( ) 格式控制 地址表列 {int a,b,c; scanf(“%d%d%d”,&a,&b,&c); printf(“%d,%d,%d\n”,a,b,c); }
运行时按以下方法输入a、b、c的值: 3 |__| 4|__| 5↙ 运行结果为: 3,4,5 &a,&b,&c中的“&”是“地址运算符”,&a指a在内存 中的地址。

说明: “ %d%d%d”表示按十进制整数形式输入数据。 输入数据时,在两个数据之间以一个或多个空格作间隔, 也可以用回车键、跳格健tab作间隔。 注意:若格式控制部分定义为“%d%d%d” ,数据输入 时不能用逗号等其他符号作为两个数据间的分隔符。 3.格式说明 与printf函数中的格式说明类似,以%开始,以一个 格式字符结束,中间可以插入附加字符。

scanf格式字符
格式字符 d u o x,X c s f e,E,g,G 说 明 用来输入有符号的十进制整数 用来输入无符号的十进制整数 用来输入无符号的八进制整数 用来输入无符号的十六进制整数(大小写作用相同) 用来输入单个字符 用来输入字符串,将字符串送到一个字符数组中。 用来输入实数,可以用小数形式和指数形式输入 与f作用相同,e与f,g可以互相替换(大小写作用相同)

scanf的附加格式说明字符
字符 l h 说 明

用于输入长整型数据(可用%ld,%lo,%lx)以及double型数据 (用%lf或%le) 用于输入短整型数据(可用%hd,%ho,%hx)

域宽m 指定输入数据所占宽度(列数),域宽应为正整数
* 表示本输入项在读入后不赋值给相应的变量

说明: (1)对unsigned型变量所需的数据, 可以用%u,%d或%o,%x格式输入。 (2)可以指定输入数据所占列数,系统自动按 它截取所需数据。例如: scanf(“%3d%3d”,&a,&b); 输入123456↙ 系统自动将123赋给a,456 赋给b。

5.使用scanf函数时应注意的问题 (1) scanf函数中的“格式控制”后面应当是变量地址, 而不是变量名。 (2)如果在“格式控制”字符串中除了格式说明以外 还有其他字符,则在输入数据时应原样输入这些字符。 例如 scanf(“%d ,%d”,&a,&b); 输入时应用如下形式: 3 ,4↙
原样输入

如果是

scanf(“%d :%d :%d”,&h,&m,&s);
输入应该用以下形式: 12 :23 :36↙ 如果是

scanf(“%d |__| |__| %d”,&s,&b);
输入时两个数据间应空2个或更多的空格字符。如: 10 |__| |__| 34↙ 或 10 |__| |__| |__| 34↙

(3)在用“%C”格式输入字符时,空格字符和 “转义字符”都作为有效字符输入: scanf(“%c%c%c”,&c1,&c2,&c3); 如输入: a b c↙ 字符‘a?送给c1,字符‘ ?送给c2,字符‘b?送 给c3。 因为%c只要求读入一个字符,后面不需要用空格 作为两个字符的间隔,因此‘ ?作为下一个字符 送给c2。
|__| |__| |__| |__|

(4)输入数据时,遇到以下情况视为某数据输入结束 ① 遇到空格, 或按“回车”键, “跳格”键 ② 按指定的宽度结束 如 scanf(“%d%3d%2d”, &x , &y , &z) ; 输入: 25 |__| 1867490↙ x 为 25 , y 为 186 , z 为 74 ③遇到非法输入 如scanf(“%d%d”, &x , &y ) ; 输入: 25 , 3↙ x 为 25 , y 无正确数据( 因遇到逗号而出错)

3.4 顺序结构程序设计举例
例1:输入三角形三边长,求其面积 公式 area=√s(s-a)(s-b)(s-c) 其中 s=(a+b+c)/2 输入a,b,c三边长 按公式计算s的值 按公式计算area的值 输出area的值

#include <math.h> main( )

注意:要调用数学函数库中的函数,必须在 程序的开头加一条 #include命令,把头文件 “math.h”包含到程序中来。

{
float a,b,c,s,area; scanf(“%f,%f,%f ”,&a,&b,&c);

s=1.0/2*(a+b+c);

sqrt()求平方根的函数

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

例2 从键盘输入一个大写字母,要求改 用小写字母输出。
分析: 已知∶字符变量c1为大写字母。 求解∶在字符变量c2中放入相应的小写字母。 计算公式∶c2=c1+32 (小写改成大写字母)

#include <stdio.h> main( ) { char c1,c2; c1=getchar( ); /*用getchar函数得到从键盘上输入的大写字母 */ printf (“%c,%d\n”,c1,c1); c2=c1+32; printf (“%c,%d\n”,c2,c2); 将c1分别用字符和 整数形式输出 }
运行情况如下: A↙ A,65 a,97

例3:

ax 求? ? bx ? c ? 0方程的根。 a、b、c由键盘输入。 2 设 b ? 4 ac >0
2

? 解题思路:首先要知道求方程式的根的方法。 ? 由数学知识已知:如果 b ? 4 ac ≥0,则 一元二次方程有两个实根:
2

x1 ?

?b?

b ? 4 ac
2

2a

x2 ?

?b?

b ? 4 ac
2

2a

若记

p ?

?b 2a

q ?

b ? 4 ac
2

2a
x2 ? p ? q

x1 ? p ? q

#include <stdio.h> #include <math.h> 程序中调用数学函数sqrt int main ( ) {double a,b,c,disc,x1,x2,p,q; scanf("%lf%lf%lf",&a,&b,&c); 输入a,b,c的值 disc=b*b-4*a*c; p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf("x1=%7.2f\nx2=%7.2f\n",x1,x2); }

#include <stdio.h> #include <math.h> int main ( ) {double a,b,c,disc,x1,x2,p,q; scanf("%lf%lf%lf",&a,&b,&c); disc=b*b-4*a*c; 输入的是双 p=-b/(2.0*a); 精度型实数 q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf("x1=%7.2f\nx2=%7.2f\n",x1,x2); }

#include <stdio.h> #include <math.h> 自动转成实数 int main ( ) 后赋给a,b,c {double a,b,c,disc,x1,x2,p,q; scanf("%lf%lf%lf ",&a,&b,&c); disc=b*b-4*a*c; 要求输入3个实数 p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf("x1=%7.2f\nx2=%7.2f\n",x1,x2); }

#include <stdio.h> #include <math.h> int main ( ) {double a,b,c,disc,x1,x2,p,q; scanf("%lf%lf%lf",&a,&b,&c); disc=b*b-4*a*c; p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf("x1=%7.2f\nx2=%7.2f\n",x1,x2); }
输出数据占7列,其中小数占2列

练一练
2009年3月等级考试二级真题 (15)程序段: int x=12; double y=3.141593;

printf("%d%8.6f",x,y);的输出结果是
A)123.141593 B)12 3.141593 C)12,3.141593 D)123.1415930

A

(23)有以下程序 #include <stdio.h> main() { int a1,a2 ; char c1,c2 ;

scanf("%d%c%d%c",&a1,&c1,&a2,&c2); printf("%d,%c,%d,%c",a1,c1,a2,c2);
} 若通过键盘输入,使得a1的值为12,a2的值为34,c1的 值为字符a,c2的值为字符b,程序输出结果是:12,a,34,b 则正确的输入格式是(以下_代表空格,<CR>代表回车) A A)12a34b<CR> B)12_a_34_b<CR> C)12,a,34,b<CR> D)12_a34_b<CR>

2009年9月等级考试二级真题 (16)有以下程序 #include <stdio.h> main() { int a=1,b=0; printf(“%d,”,b=a+b); printf(“%d\n”,a=2*b); } 程序运行后的输出结果是 D A)0,0 B)1,0 C)3,2

D)1,2

2010年等级考试二级真题 (15)有以下程序 #include<stdio.h> main() { char a,b,c,d; scanf(“%c%c”,&a,&b); c=getchar(); d=getchar(); printf(“%c%c%c%c\n”,a,b,c,d); } 当执行程序时,按下列方式输入数据(从第1列开始, <CR>代表回车,注意:回车也是一个字符) 12<CR> 34<CR> 则输出结果是 C A)1234 B)12 C)12 D)12 3 34

作业和练习

P46~51 一、二、三答案写在书上 四、2,3 写在作业本上


相关文章:
第3章 顺序结构程序设计
cz半度微凉贡献于2012-06-20 0.0分 (0人评价)暂无用户评价 我要评价 ...新_第3章 顺序结构程序设计... 27页 2财富值 第三章 顺序结构程序设计 45...
第3章顺序结构程序设计
举报文档 t7380035贡献于2012-04-14 0.0分 (0人评价)暂无用户评价 我要评价...新_第3章 顺序结构程序设计... 27页 2财富值 第三章 顺序结构程序设计 45...
第三章 顺序结构程序设计
撒哈拉139贡献于2012-10-08 0.0分 (0人评价)暂无用户评价 我要评价 ...C程序设计--第三章顺序结构... 42页 2财富值 第三章 输入输出函数与顺.....
第3章-顺序结构程序设计的题目 2
4.2.3 顺序结构程序设计思考题一、填空题 【1】C 语言的语句可分为五大类,即、、、。【2】 提供的函数以 C 的形式存放在系统中, 使用库函数时, 要用预编...
顺序结构程序设计
第三章 顺序结构程序设计 38页 1财富值 C#第4章 顺序结构程序设计 38页 2财富...2012中考化学方程式全集 7页 5财富值如要投诉违规内容,请到百度文库投诉中心;如...
第三章 顺序结构程序设计
第三章 顺序结构程序设计 3.1 赋值语句 赋值语句是最简单的语句,其一般形式为:...例:关于赋值的例子 program example; var a,b:integer; begin a:=3;b:=2...
第3章 顺序结构程序设计
、讲授内容提要 第 3 章 顺序结构程序设计 3.1 3.2 3.3 3.4 С 语言概述 复制语句 数据的输入输出 程序举例 三、教学重点、难点 重点: 的赋值语句, C...
第3章 顺序结构程序设计
第3章 顺序结构程序设计 在上一章介绍了程序中用到的一些基本要素(常量、变量...(2)附加格式说明符 附加格式说明符出现在%和格式描述符号之间, 主要用于指定...
第三章 顺序结构程序设计
第三章 顺序结构程序设计一、结构化程序设计: 1. 程序是命令的有序集合,命令执行的顺序即程序的结构。 2. 在结构化程序设计中,把所有程序的逻辑结构归纳为三种...
第三章顺序结构程序设计
实验目的: 1、掌握面向过程和面向对象可视化程序设计方法 2、掌握标签、文本框、...结构 C) 选择结构、循环结构和模块结构 D) 顺序结构、选择结构和循环结构 3....
更多相关标签:
顺序结构程序设计 | c语言顺序结构程序 | vb顺序结构程序设计 | 程序的顺序结构 | 顺序结构程序 | 顺序结构程序设计目的 | 顺序结构程序设计教案 | 顺序结构程序举例 |