19
第第第 顺顺顺顺顺顺 C 第第第第 第第第第 第第第第 第第第第 第第第第

第四章 顺序程序设计

Embed Size (px)

DESCRIPTION

第四章 顺序程序设计. C 语言概述 赋值语句 数据输出 数据输入 程序举例. C 语言无 I/O 语句, I/O 操作由函数实现 # include 4.1 C 语言概述 (C 中语句的种类有多少? ) C 语句概述 C 语句种类 控制语句 函数调用语句 表达式语句 空语句 ; 复合语句. ①if( )~else~ 条件语句 ② for( ) 循环语句 ③ while( ) 循环语句 ④ do~while( ) 循环语句 - PowerPoint PPT Presentation

Citation preview

Page 1: 第四章  顺序程序设计

第四章 顺序程序设计

C 语言概述赋值语句数据输出数据输入程序举例

Page 2: 第四章  顺序程序设计

C 语言无 I/O 语句, I/O 操作由函数实现 #include <stdio.h>

§ 4.1 C 语言概述 (C 中语句的种类有多少? )

C 语句概述C 语句种类

控制语句函数调用语句 表达式语句空语句 ;复合语句

由一次函数调用加一个分号构成一个语句,如 printf(“This is a C statement.”);a=3 i=i+1

a=3 ; i=i+1;任何表达式加上分号就成为语句。

①if( )~else~ 条件语句②for( ) 循环语句③while( ) 循环语句④do~while( ) 循环语句⑤continue 结束本次循环语句⑥break 中止执行 switch 或循环语句⑦switch 多分支选择语句⑧goto 转向语句⑨return 从函数返回语句

用 { } 把一些语句括起来就成为复合语句。如: { z=x+y; t=z/100; printf(“%f”,t);}

Page 3: 第四章  顺序程序设计

§ 4.2 赋值语句赋值语句

特点“=” 是运算符表达式与语句的区别

if (( a=b )>0) t=a;if (( a=b;)>0) t=a;

对错

Page 4: 第四章  顺序程序设计

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

C 语言无 I/O 语句, I/O 操作由函数实现 #include <stdio.h>

§ 4.3 数据输出字符输出函数

Page 5: 第四章  顺序程序设计

/*ch3_1.c*/#include <stdio.h>main(){ int c; char a; c=65; a='B'; putchar(c); putchar('\n'); putchar(a);}

运行结果: A B

Page 6: 第四章  顺序程序设计

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

格式输出函数

输出表:要输出的数据(可以没有,多个时以“ ,” 分隔)格式控制串:包含两种信息

格式说明: %[ 修饰符 ] 格式字符 ,用于指定输出格式。%[-][+][#][ m ][ .n ][ h/l/L ]格式符 普通字符或转义序列:原样输出

格式字符

主要用于确定输出项的输出格式

Page 7: 第四章  顺序程序设计

dx,Xoucs

e,Efg

%%

格式字符:

十六进制无符号整数

不带符号十进制整数

十进制整数

指数形式浮点小数

单一字符字符串

八进制无符号整数

小数形式浮点小数e 和 f 中较短一种百分号本身

int a=567;printf ( “%d”,a);

int a=255;printf(“%x”,a);

int a=65;printf(“%o”,a);

int a=567;printf(“%u”,a);

char a=65;printf(“%c”,a);

printf(“%s”,“ABC”);

float a=567.789;printf(“%e”,a);

float a=567.789;printf(“%f”,a);

float a=567.789;printf(“%g”,a);

printf(“%%”);

567

ff

101

567

A

ABC

5.677890e+02

567.789000

567.789

%

说明格式字符要用小写格式字符与输出项个数应相同,按先后顺序一一对应输出转换 : 格式字符与输出项类型不一致 , 自动按指定格式输出

例 #include <stdio.h> main()

{ unsigned int u=65535; printf(”u=%d\n",u); } 输出结果: u=-1

例 int a=3,b=4; printf(“%d %d\n”,a,b); printf(“a=%d , b=%d\n”,a,b);

例 int a=3,b=4; printf(“%d %d\n”,a,b); printf(“a=%d , b=%d\n”,a,b);输出结果 : 3 4 a=3, b=4

Page 8: 第四章  顺序程序设计

附加格式说明符(修饰符)

.n对实数 , 指定小数点后位数 ( 四舍五入 )对字符串 , 指定实际输出位数

修饰符 功 能m 指定输出数据域宽 , 数据长度 <m, 左补空格 ; 否则按实际输出

输出数据在域内左对齐(缺省右对齐 )

-

指定在有符号数的正数前显示正号(+)

+

输出数值时指定左面不使用的空位置自动填0

0

在八进制和十六进制数前显示前导 0,0x

#

在 d,o,x,u 前,指定输出精度为 long型在 e,f,g 前,指定输出精度为 double型

l

Page 9: 第四章  顺序程序设计

例 m.n

运行 1234,1234���结果: 123.456000,123.456000, 123.5,123.46,1.23e+02 a��

运行结果: Hello,world! Hello,world!��� Hello���� Hello Hel

例 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);

例 static char a[]=“Hello,world!” printf(“%s\n%15s\n%10.5s\n%2.5s\n%.3s\n”,a,a,a,a,a);

Page 10: 第四章  顺序程序设计

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

例 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);

例 -

Page 11: 第四章  顺序程序设计

例 int a=1234; float f=123.456; printf(“%08d\n”,a); printf(“%010.2f\n”,f); printf(“%0+8d\n”,a); printf(“0+10.2f\n”,f);

例 0 、 +

例 int a=123; printf(“%o,%#o,%x,%#x\n”,a,a,a,a);

例 #

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

例 l00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00

//00001234//0000123.46

//000+1234//000+123.56

//173,0173,7b,0x7b

//0, 65536���

Page 12: 第四章  顺序程序设计

§ 4.4 数据输入字符输入函数

/*ch3_4.c*/#include <stdio.h>main(){ int c; printf("Enter a character:"); c=getchar(); printf("%c--->hex%x\n",c,c);}

运行结果:Enter a character:AA--->hex41

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

Page 13: 第四章  顺序程序设计

格式输入函数

地址表:变量的地址,常用取地址运算符 &格式字符 :d,o,x,u,c,s,f,e

例 scanf(“%d”,&a); 输入: 10 则 a=10

例 scanf(“%x”,&a); 输入: 11 则 a=17

格式 : scanf(“ 格式控制串”,地址表)功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中 , 并按回车键结束返值:正常时,返回输入数据个数

Page 14: 第四章  顺序程序设计

例 scanf(“%4d%2d%2d”,&yy,&mm,&dd);

输入 19991015

则 1999yy, 10 mm, 15 dd

l

修饰符 功 能h

m

*

用于 d,o,x 前,指定输入为 short 型整数用于 d,o,x 前,指定输入为 long 型整数用于 e,f 前,指定输入为 double 型实数

指定输入数据宽度,遇空格或不可转换字符则结束抑制符,指定输入项读入后不赋给变量

例 scanf(“%3c%2c”,&c1,&c2);

输入 abcde

则‘ a’c1, ‘d’ c2

例 scanf(“%2d �%*3d �%2d”,&a,&b); 输入 12 �345 �67 则 12a, 67b

例 scanf(“%3d%*4d%f”,&k,&f); 输入 12345678765.43 则 123k, 8765.43f

附加格式说明符(修饰符)

Page 15: 第四章  顺序程序设计

例 scanf(“%d%o%x”,&a,&b,&c);

printf(“a=%d,b=%d,c=%d\n”,a,b,c);

输入 123 123 123

输出 a=123,b=83,c=291

例 scanf(“%d:%d:%d”,&h,&m,&s); 输入 12:30:45 则 12 h, 30 m, 45 s

例 scanf(“%d,%d”,&a,&b) 输入 3,4 则 3a, 4 b

例 scanf(“a=%d,b=%d,c=%d”,&a,&b,&c); 输入 a=12,b=24,c=36

输入分隔符的指定 一般以空格、 TAB 或回车键作为分隔符 其它字符做分隔符:格式串中两个格式符间字符

Page 16: 第四章  顺序程序设计

说明:用“ %c” 格式符时,空格和转义字符作为有效字符输入

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

若输入 a�b�c 则 ac1, � c2, b c3

输入数据时,遇以下情况认为该数据结束:遇空格、 TAB 、或回车遇宽度结束遇非法输入

如 scanf(“%d%c%f”,&a,&b,&c);

若输入 1234a123o.26

则 1234 a, ‘a’ b, 123 c

例 int x; char ch; scanf(“%d”,&x); ch=getchar(); printf(“x=%d,ch=%d\n”,x,ch);执行: 123输出: x=123,ch=10

例 int x; char ch; scanf(“%d”,&x); scanf(“%c”,&ch); printf(“x=%d,ch=%d\n”,x,ch);执行: 123输出: x=123,ch=10

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

例 int x; char ch; scanf(“%d”,&x); scanf(“ %c”,&ch);或 scanf(“%*c%c”,&ch);

返回

Page 17: 第四章  顺序程序设计

§ 4.5 程序举例

/*ch3_12.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);}

例 输入三角形边长,求面积

输入: 346 输出: a= 3.00, b= 4.00, c= 6.00 s= 6.50 area= 5.33

文件包含预处理命令

变量定义输入数据

输出数据

Page 18: 第四章  顺序程序设计

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

/*ch3_13.c*/#include "stdio.h"main(){ char c1,c2; c1=getchar(); printf("%c,%d\n",c1,c1); c2=c1+32; printf("%c,%d\n",c2,c2);}

输入: A 输出: A,65 a,97

Page 19: 第四章  顺序程序设计

040 22 acbcbxax 方程的根,设例求

/*ch3_14.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

a

acbbx

2

42

返回