1 / 26

第四章 C 程序流程设计

第四章 C 程序流程设计. 4.1 C 语句概述 C 语句:以 “ ; ” 作分隔符,编译后产生机器指令. C 语句分类 表达式语句:表达式加分号构成 。. if( )~else~ switch for( )~ while( )~ do~while( ) continue break goto return. 分支. 循环. 辅助控制. PowerPoint 2000. 空语句: ;. 程序控制语句 (9 种 ):. 如 total=total+limit; a=3; func( );

Download Presentation

第四章 C 程序流程设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 C程序流程设计 4.1 C语句概述 C语句:以“;”作分隔符,编译后产生机器指令. C语句分类 表达式语句:表达式加分号构成。 • if( )~else~ • switch • for( )~ • while( )~ • do~while( ) • continue • break • goto • return 分支 循环 辅助控制 PowerPoint 2000 • 空语句: ; • 程序控制语句(9种): 如 total=total+limit; a=3; func( ); printf(“Hello,world!\n”);

  2. 复合语句:用 {…}括起来的一组语句 一般形式:{ [数据说明部分;] 执行语句部分; } 说明: “}”后不加分号 语法上和单一语句相同 复合语句可嵌套 例: {z=x+y; t=z/100; pritnf(“%f”,t);}

  3. 4.2 赋值语句定义:由赋值表达式加上一个分号构成.注意事项(1)“=”是运算符(2)赋值表达式可以包括在其它表达式之中    例if ((a=b)>0) t=a

  4. 4.3数据输入与输出在C中的实现 C语言无I/O语句,I/O操作由函数实现 #include <stdio.h> 数据输出 字符输出函数 • 格式: putchar( c ) • 参数: c为字符常量、变量或表达式 • 功能:把字符c输出到显示器上 • 返值:正常,为显示的代码值;出错,为EOF(-1)

  5. /*ch3_1.c*/ #include <stdio.h> main() { int c; char a; c=65; a='B'; putchar(c); putchar('\n'); putchar(a); } 运行结果:A B 进入TC

  6. 格式输出函数 • 格式:printf(“格式控制串”,输出表) • 功能:按指定格式向显示器输出数据 • 返值:正常,返回输出字节数;出错,返回EOF(-1) • 输出表:要输出的数据(可以没有,多个时以“,”分隔) • 格式控制串:包含两种信息 • 格式说明: %[修饰符]格式字符,用于指定输出格式 • 普通字符或转义序列:原样输出 • 格式字符

  7. 格式字符: 十进制整数 d,i 十六进制无符号整数 x,X 11 11 11 11 11 11 11 11 八进制无符号整数 o 不带符号十进制整数 u 单一字符 c 字符串 s 指数形式浮点小数 e,E 小数形式浮点小数 f e和f中较短一种 g 百分号本身 %% 65535 int a=567;printf ( “%d”,a); 567 int a=255;printf(“%x”,a); ff int a=65;printf(“%o”,a); 101 int a=567;printf(“%u”,a); 567 • 例main() • { unsigned int u=65535; • printf(”u=%d\n",u); • } • 输出结果:u=-1 char a=65;printf(“%c”,a); A 例 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 ABC printf(“%s”,“ABC”); float a=567.789;printf(“%e”,a); 5.677890e+02 567.789000 float a=567.789;printf(“%f”,a); float a=567.789;printf(“%g”,a); 567.789 printf(“%%”); % • 说明 • 格式字符要用小写 • 格式字符与输出项个数应相同,按先后顺序一一对应 • 输出转换:格式字符与输出项类型不一致,自动按指定格式输出 进入TC

  8. 附加格式说明符(修饰符) 修饰符 功 能 m 输出数据域宽,数据长度<m,左补空格;否则按实际输出 对实数,指定小数点后位数(四舍五入) 对字符串,指定实际输出位数 .n 输出数据在域内左对齐(缺省右对齐) - 指定在有符号数的正数前显示正号(+) + 输出数值时指定左面不使用的空位置自动填0 0 # 在八进制和十六进制数前显示前导0,0x 在d,o,x,u前,指定输出精度为long型 在e,f,g前,指定输出精度为double型 l

  9. 例 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 进入TC

  10. 例 - 例 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 进入TC

  11. 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 例 0 、+ 例 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); //00001234 //0000123.46 //000+1234 //000+123.56 例 # 例 int a=123; printf(“%o,%#o,%X,%#X\n”,a,a,a,a); //173,0173,7B,0X7B 例 l 例 long a=65536; printf(“%d,%8ld\n”,a, a); 进入TC //0, 65536

  12. 数据输入 字符输入函数 • 格式:getchar( ) • 功能:从键盘读一字符 • 返值:正常,返回读取的代码值;出错,返回EOF(-1) /*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:A A--->hex41 进入TC

  13. 格式: scanf(“格式控制串”,地址表) • 功能:按指定格式从键盘读入数据,存入地址表指定的 • 存储单元中,并按回车键结束 • 返值:正常,返回输入数据个数 • 格式输入函数 • 地址表:变量的地址,常用取地址运算符& • 格式字符:d,i,o,x,u,c,s,f,e 例 scanf(“%d”,&a); 输入:10  则 a=10 例 scanf(“%x”,&a); 输入:11  则 a=17

  14. 附加格式说明符(修饰符) 修饰符 功 能 h 用于d,o,x前,指定输入为short型整数 用于d,o,x前,指定输入为long型整数 l 用于e,f前,指定输入为double型实数 m 指定输入数据宽度,遇空格或不可转换字符则结束 抑制符,指定输入项读入后不赋给变量 * • 例 scanf(“%4d%2d%2d”,&yy,&mm,&dd); • 输入 19991015  • 则1999yy, 10 mm, 15 dd • 例 scanf(“%3d%*4d%f”,&k,&f); • 输入 12345678765.43 • 则123k, 8765.43f • 例 scanf(“%3c%2c”,&c1,&c2); • 输入 abcde  • 则‘a’c1, ‘d’ c2 • 例 scanf(“%2d%*3d%2d”,&a,&b); • 输入 1234567 • 则12a, 67b 进入TC

  15. 输入分隔符的指定 • 一般以空格、TAB或回车键作为分隔符 • 其它字符做分隔符:格式串中两个格式符间字符 • 例 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  • 则3a, 4 b • 例 scanf(“a=%d,b=%d,c=%d”,&a,&b,&c); • 输入 a=12,b=24,c=36  进入TC

  16. 输入数据时,遇以下情况认为该数据结束: • 遇空格、TAB、或回车 • 遇宽度结束 • 遇非法输入 • 如 scanf(“%c%c%c”,&c1,&c2,&c3); • 若输入abc • 则ac1, c2, b c3 • 说明: • 用“%c”格式符时,空格和转义字符作为有效字符输入 例 int x; char ch; scanf(“%d”,&x); scanf(“ %c”,&ch); 或 scanf(“%*c%c”,&ch); 如 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 解决方法: (1)用getchar()清除 (2)用函数fflush(stdin)清除全部剩余内容 (3) 用格式串中空格或“%*c”来“吃掉” 例 int x; char ch; scanf(“%d”,&x); scanf(“%c”,&ch); printf(“x=%d,ch=%d\n”,x,ch); 执行:123 输出:x=123,ch=10 进入TC

  17. 程序举例 文件包含预处理命令 变量定义 输入数据 输出数据 例 输入三角形边长,求面积 /*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); } 输入:3,4,6  输出:a= 3.00, b= 4.00, c= 6.00 s= 6.50 area= 5.33 进入TC

  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 进入TC

  19. /*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 进入TC

  20. 预备知识 计算机中数的表示及进制转换 数码、基与权 数码:表示数的符号 基:数码的个数 权:每一位所具有的值 数制

  21. 各种进制之间的转换 • 二进制、八进制、十六进制转换成十进制 • 方法:按权相加

  22. 例 把十进制数159转换成八进制数 余 7 余 3 余 2 例 把十进制数59转换成二进制数 0 2 8 59 159 1 余 2 2 2 8 2 8 2 7 19 3 14 29 2 1 (159)10=(237)8 余 1 例 把十进制数459转换成十六进制数 余 0 2 3 7 1 C B 余 1 459 16 余11 余 1 余12 16 28 余 0 1 16 1 余 1 1 1 1 0 1 1 0 (59)10=(111011)2 (459)10=(1CB)16 • 各种进制之间的转换(整数) • 二进制、八进制、十六进制转换成十进制 • 方法:按权相加 • 十进制转换成二进制、八进制、十六进制 • 原理: • 方法:连续除以基,从低到高记录余数,直至商为0

  23. 二进制与八进制之间的转换 • 二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制 • 八进制转换成二进制:用3位二进制数代替每一位八进制数 000 ~ 0 001 ~ 1 010 ~ 2 011 ~ 3 100 ~ 4 101 ~ 5 110 ~ 6 111 ~ 7 例 (1101001)2=(001,101,001)2=(151)8 例 (246)8=(010,100,110)2=(10100110)2

  24. 二进制与十六进制之间的转换 • 二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),转换成十六进制 • 十六进制转换成二进制:用4位二进制数代替每一位十六进制数 0000 ~ 0 0001 ~ 1 0010 ~ 2 0011 ~ 3 0100 ~ 4 0101 ~ 5 0110 ~ 6 0111 ~ 7 1000 ~ 8 1001 ~ 9 1010 ~ A 1011 ~ B 1100 ~ C 1101 ~ D 1110 ~ E 1111 ~ F 例 (11010101111101)2=(0011,0101,0111,1101)2=(357D)16 例 (4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2

  25. 12 1 11 2 10 9 3 8 4 5 7 6 • 数值的表示方法——原码、反码和补码 • 原码:最高位为符号位,其余各位为数值本身的绝对值 • 反码: • 正数:反码与原码相同 • 负数:符号位为1,其余位对原码取反 • 补码: • 正数:原码、反码、补码相同 • 负数:最高位为1,其余位为原码取反,再对整个数加1 9-5=4 9+7=16=(14)12

  26. (用一字节表示数) 原码 反码 补码 +7 00000111 00000111 00000111 -7 10000111 11111000 11111001 +0 00000000 00000000 00000000 -0 10000000 11111111 00000000 01111111~ 10000000 (-128~+127) 01111111~ 10000000 (-127~+127) 01111111~ 11111111 (-127~+127) 数的范围 • 负数补码转换成十进制数:最高位不动,其余位取反加1 例 补码:11111001 取反:10000110 加1: 10000111=-7

More Related