计算机软件技术基础C语言-第1-3章复习.ppt_第1页
计算机软件技术基础C语言-第1-3章复习.ppt_第2页
计算机软件技术基础C语言-第1-3章复习.ppt_第3页
计算机软件技术基础C语言-第1-3章复习.ppt_第4页
计算机软件技术基础C语言-第1-3章复习.ppt_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计 第 一 至 三章 小 结,C语言概述 数据类型、运算符与表达式 最简单的程序设计顺序程序设计 选择结构程序设计 循环控制 数组,计算机中数的表示 数据类型 关于输入输出 程序的流程设计,程序设计的基本知识,计算机中数的表示及进制转换 数码、基与权 数码:表示数的符号 基:数码的个数 权:每一位所具有的值 数制 二进制 八进制 十进制 十六进制,各种进制之间的转换 二进制、八进制、十六进制转换成十进制 方法:按权相加,各种进制之间的转换(整数) 二进制、八进制、十六进制转换成十进制 方法:按权相加,十进制转换成二进制、八进制、十六进制 原理:,方法:连续除以基,从低到高记录余数,直至商为0,二进制与八进制之间的转换 二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制 八进制转换成二进制:用3位二进制数代替每一位八进制数,例 (1101001)2=(001,101,001)2=(151)8,例 (246)8=(010,100,110)2=(10100110)2,000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7,二进制与十六进制之间的转换 二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),转换成十六进制 十六进制转换成二进制:用4位二进制数代替每一位十六进制数,例 (11010101111101)2=(0011,0101,0111,1101)2=(357D)16,例 (4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2,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,字节和位 内存以字节为单元组成 每个字节有一个地址 一个字节一般由8个二进制位组成 每个二进位的值是0或1,数值的表示方法原码、反码和补码 原码:最高位为符号位,其余各位为数值本身的绝对值 反码: 正数:反码与原码相同 负数:符号位为1,其余位对原码取反 补码: 正数:原码、反码、补码相同 负数:最高位为1,其余位为原码取反,再对整个数加1,9-5=4 9+7=16=(4)12,负数补码转换成十进制数:最高位不动,其余位取反加1,例 补码:11111001 取反:10000110 加1: 10000111=-7,数据类型,格式: putchar( c ) 参数: c为字符常量、变量或表达式 功能:把字符c输出到显示器上 返值:正常,为显示的代码值;出错,为EOF(-1),关于输入输出,C语言无I/O语句,I/O操作由函数实现 #include 1、数据输出 字符输出函数,#include main() int c; char a; c=65; a=B; putchar(c); putchar(n); putchar(a); ,运行结果:A B,例,格式:printf(“格式控制串”,输出表) 功能:按指定格式向显示器输出数据 返值:正常,返回输出字节数;出错,返回EOF(-1),格式输出函数,输出表:要输出的数据(可以没有,多个时以“,”分隔) 格式控制串:包含两种信息 格式说明: %修饰符格式字符 ,用于指定输出格式 普通字符或转义序列:原样输出 格式字符,d,i,x,X,o,u,c,s,e,E,f,g,%,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,%,说明 格式字符要用小写 格式字符与输出项个数应相同,按先后顺序一一对应 输出转换:格式字符与输出项类型不一致,自动按指定格式输出,例 main() unsigned int u=65535; printf(”u=%dn“,u); 输出结果:u=-1,例 int a=3,b=4; printf(“%d %dn”,a,b); printf(“a=%d , b=%dn”,a,b);,例 int a=3,b=4; printf(“%d %dn”,a,b); printf(“a=%d , b=%dn”,a,b); 输出结果: 3 4 a=3, b=4,附加格式说明符(修饰符),例 int a=1234; float f=123.456; char ch=a; printf(“%8d,%2dn”,a,a); printf(“%f,%8f,%8.1f,%.2f,%.2en”,f,f,f,f,f); printf(“%3cn”,ch);,运行 1234,1234 结果: 123.456000,123.456000, 123.5,123.46,1.23e+02 a,例 static char a=“Hello,world!” printf(“%sn%15sn%10.5sn%2.5sn%.3sn”,a,a,a,a,a);,运行结果:Hello,world! Hello,world! Hello Hello Hel,例 m.n,例 int a=1234; float f=123.456; static char c=“Hello,world!”; printf(“%8d,%-8dn”,a,a); printf(“%10.2f,%-10.1fn”,f,f); printf(“%10.5s,%-10.3sn”,c,c);,运行结果:1234,1234 123.46,123.5 Hello,Hel,例 -,例 int a=1234; float f=123.456; printf(“%08dn”,a); printf(“%010.2fn”,f); printf(“%0+8dn”,a); printf(“0+10.2fn”,f);,例 0 、+,例 int a=123; printf(“%o,%#o,%X,%#Xn”,a,a,a,a);,例 #,例 long a=65536; printf(“%d,%8ldn”,a, a);,例 l,/00001234,/0000123.46,/000+1234,/000+123.56,/173,0173,7B,0X7B,/0, 65536,格式:getchar( ) 功能:从键盘读一字符 返值:正常,返回读取的代码值;出错,返回EOF(-1),2、数据输入 字符输入函数,例,#include main() int c; printf(“Enter a character:“); c=getchar(); printf(“%c-hex%xn“,c,c); ,运行结果: Enter a character:A A-hex41,格式输入函数,格式: scanf(“格式控制串”,地址表) 功能:按指定格式从键盘读入数据,存入地址表指定的 存储单元中,并按回车键结束 返值:正常,返回输入数据个数,地址表:变量的地址,常用取地址运算符& 格式字符:d,i,o,x,u,c,s,f,e,例 scanf(“%d”, 输入:10 则 a=10,例 scanf(“%x”, 输入:11 则 a=17,附加格式说明符(修饰符),例 scanf(“%4d%2d%2d”, 输入 19991015 则1999yy, 10 mm, 15 dd,例 scanf(“%3d%*4d%f”, 输入 12345678765.43 则123k, 8765.43f,例 scanf(“%2d%*3d%2d”, 输入 1234567 则12a, 67b,例 scanf(“%3c%2c”, 输入 abcde 则ac1, d c2,输入分隔符的指定 一般以空格、TAB或回车键作为分隔符 其它字符做分隔符:格式串中两个格式符间字符,例 scanf(“%d%o%x”, 输入 123 123 123 输出 a=123,b=83,c=291,例 scanf(“%d:%d:%d”, 输入 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=12,b=24,c=36 ,说明: 用“%c”格式符时,空格和转义字符作为有效字符输入,如 scanf(“%c%c%c”, 若输入abc 则ac1, c2, b c3,输入数据时,遇以下情况认为该数据结束: 遇空格、TAB、或回车 遇宽度结束 遇非法输入,如 scanf(“%d%c%f”, 若输入1234a123o.26 则 1234 a, a b, 123 c,输入函数留下的“垃圾”:,例 int x; char ch; scanf(“%d”, 执行:123 输出:x=123,ch=10,例 int x; char ch; scanf(“%d”, 执行:123 输出:x=123,ch=10,解决方法: (1)用getchar()清除 (2)用函数fflush(stdin)清除全部剩余内容 (3) 用格式串中空格或“%*c”来“吃掉”,例 int x; char ch; scanf(“%d”,格式说明符简介,%d以带符号的十进制形式输出整数 %o以无符号的八进制形式输出整数 %x以无符号的十六进制形式输出整数 %u以无符号的十进制形式输出整数 %c以字符形式输出单个字符 %s输出字符串 %f以小数点形式输出单、双精度实数 %e以标准指数形式输出单、双精度实数 %g选用输出宽度较小的格式输出实数,d 格式符,功能 以带符号的十进制形式输出整数。 具体用法 d:按照整型数据的实际长度输出。 md:以m指定的字段宽度输出,右对齐。 ld:输出长整型数据。 mld:输出指定宽度的长整型数据。 程序范例,例执行下面程序,注意输出格式:,main( ) int a=12,b=-3456; long int c=123456; printf(“%5dn“,a); printf(“%dn“,b); printf(“%ldn“,c); printf(“%dn“,c); ,运行结果: 12 -3456 123456 -7616,o 格式符 和 x 格式符,功能: 将内存单元中的二进制数补码直接转换成八进制数或十六进制数输出,不带符号位。 说明: 同“d”类似,可以用“mo”或“mx”指定字段输出宽度。 对长整型数可以用“lo”或“lx”格式输出。,机器数(带符号)的表示,正数: 原码、反码及补码一样,即:符号位绝对值 负数: 原码:符号位绝对值 反码:符号位对原码取反 补码:符号位:对原码取反1 举例:设有 int a=1,b=-1; a的表示: 0000 0000 0000 0001(原、反、补) b的表示: 1000 0000 0000 0001(原码) 1111 1111 1111 1110(反码) 1111 1111 1111 1111(补码),例,main() int a=1,b=-1; printf(“a:%8d,%8o,%8xn“,a,a,a); printf(”b:%8d,%8o,%8xn“,b,b,b); ,运行结果: a: 1, 1, 1 b: -1, 177777, ffff,u 格式符,功能:以无符号的十进制形式输出整数。 说明: 有符号数可用“u”格式输出; 无符号数可用“d”、“o”、“x”格式输出。 举例: int i=-1; printf(“%d,%u”,i,i);,输出结果: -1,65535,c 格式符,功能: 输出单个ASCII码字符。 说明: c格式也可用于输出一个范围在0255之间的整数,其值必然对应某个ASCII字符。,例4.5 main() char c=M; int i; i=c+32; printf(“%c,%dn“,c,c); printf(“%c,%dn“,i,i); ,M,77 m,109,s 格式符,分类: s:直接输出指定字符串。 ms:输出字符串占m列,右对齐。 -ms:输出字符串占m列,左对齐。 m.ns:输出字符串前n个字符,占m列,右对齐。 -m.ns:输出字符串前n个字符,占m列,左对齐。,例s格式符使用。 main() printf(“%3s,%7.2s,%.4s,%-5.3sn“, “China“,“China“,“China“,“China“); ,运行结果,China, Ch,Chin,Chi,f 格式符,功能:以小数点形式输出单、双精度实数。 分类: f:数据的整数部分全部输出,小数部分输出6位。 m.nf:输出数据共占m列,小数占n位,右对齐。 -m.nf:输出数据共占m列,小数占n位,左对齐。 注意:单精度实数的有效位数一般为7位;双精度实数的有效位数为16位。,例f 格式符使用。,main() float x,y; x=111111.111; y=222222.222; printf(“%fn“,x+y); ,运行结果:333333.328125,e 格式符,功能:以指数形式输出单、双精度实数。 “e”输出数据共占13位: 例: printf(“%e”,12.3); 12.3 1.23101 1.230000 e+001,整数 1,指数 1,小数点 1,指数符号 1,小数 6,e 1,g 格式符,功能:根据数值自动选择f格式或e格式中宽度较小的一种输出实数。 举例: float f=12.345; printf(“%f,%e,%g”,x,x,x); 结果: 12.345000,1.23450e+01,12.345,printf函数说明:,格式字符要用小写字母。 如若输出字符“”,在“格式控制”中用连续两个“”即可。 当“格式控制”中格式符个数少于输出表中的输出项时,多余的输出项不予输出。 当“格式符”多于输出项时,结果为意外值。,字符输入函数getchar,一般形式:getchar() 功能:要求用户从终端(键盘)输入单个字符。 返回值:从输入设备上得到的字符。 说明: 该函数为无参函数。 使用该函数,必须在程序开头用预编译命令: #include ,例getchar函数使用。,#include main() char c; printf(“Input an uppercase letter:n“); c=getchar(); putchar(c+32); ,运行程序时,系统等待用户 输入,注意回车也是一个合 法字符。,格式输入函数scanf,一般形式:scanf(格式控制,地址表); 功能:要求用户从键盘上输入指定类型的任意多数据。 说明: “格式控制” 部分同sprintf函数。 “地址表”由地址组成,表明每个输入项应在存储单元的首地址,如&a。 执行输入操作时,用户应使用空格或回车等相应分隔符间隔不同数据。,例scanf函数使用。,main() int a,b; scanf(“%d%d“, 运行情况: 23 45 1035,如果引号部分变为“d ,d”,在输入数据时也必须写成“23,45”,scanf函数说明:,scanf函数中不使用“u”。 格式说明中指定输入数据的宽度时,系统自动按需要截取所需数据。 scanf函数不能规定输入数据的精度。 在程序执行过程中输入数据时,以下情况认为数据结束: 遇“Space”,或遇“Enter”,或遇“Tab” 达到指定的字段宽度 有非法输入,C程序流程设计,C语句概述 C语句:以“;”作分隔符,编译后产生机器指令. C语句分类 表达式语句:表达式加分号构成。,空语句: ;,程序控制语句(9种):,如 total=total+limit; a=3; func( ); printf(“Hello,world!n”);,复合语句:用 括起来的一组语句 一般形式: 数据说明部分; 执行语句部分; 说明: “”后不加分号 语法上和单一语句相同 复合语句可嵌套,程序的三种基本结构 结构化程序设计 基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto) 结构化程序:由三种基本结构反复嵌套构成的程序叫 优点:结构清晰,易读,提高程序设计质量和效率 三种基本结构 顺序结构,选择结构,二分支选择结构,多分支选择结构,循环结构,当型循环结构,直到型循环结构,注:A,B,A1.An可以是一个简单语句,也可以是一个基本结构,选择型程序设计 if语句(条件选择语句) if语句的三种形式 形式一: 格式:if (expression) statement 执行过程:,例:if (xy) printf(“%d”,x);,形式二: 格式:if (expression) statement1 else statement2 执行过程:,例:if (xy) max=x; else max=y;,形式三: 格式:,if ( expr1 ) statement1 else if (expr2 ) statement2 else if (expr3 ) statement3 . else statementn ,执行过程:,例:if (salary1000) index=0.4; else if (salary800) index=0.3; else if (salary600) index=0.2; else if (salary400) index=0.1; else index=0;,如:if(a=b,说明: if后面的表达式类型任意,语句可以是复合语句 if(x) if(x!=0) if(!x) if(x=0),例 考虑下面程序的输出结果: #include main() int x,y; scanf(“%d,%d”, ,Compile Error!,#include main() int x,y; printf(“Enter an integer:“); scanf(“%d“, ,例 求一个数的绝对值,运行:Enter an integer:-12 integer:-12-absolute value :12,#include main() int a,b; printf(“Enter integer a:“); scanf(“%d“, ,例 输入两个数并判断两数相等否,运行:Enter integer a:12 Enter integer b:12 a=b,运行:Enter integer a:12 Enter integer b:9 a!=b,#include main() char c; printf(“Enter a character:“); c=getchar(); if(c=0 ,例 判断输入字符种类,运行:Enter a character: The character is a control character,运行:Enter a character:8 The character is a digit,运行: Enter a character: D The character is a capital letter,运行: Enter a character: h The character is a lower letter,运行: Enter a character:F1 The character is other character,if语句嵌套: 一般形式:,例 输入两数并判断其大小关系,#include main() int x,y; printf(“Enter integer x,y:“); scanf(“%d,%d“, ,运行:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Y,if else 配对原则:缺省 时,else总是和它上面离它最近的未配对的if配对,例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,实现if else 正确配对方法:加 ,例 考虑下面程序输出结果: main() int x=100,a=10,b=20; int v1=5,v2=0; if(ab) if(b!=15) if(!v1) x=1; else if(v2) x=10; x=-1; printf(“%d”,x); ,结果:-1,switch语句(开关分支语句) 一般形式:,switch( 表达式) case E1: 语句组 1; break; case E2: 语句组 2; break; . case En: 语句组 n; break; default: 语句组 ; break; ,执行过程:,说明: E1,E2,En是常量表达式,且值必须互不相同 语句标号作用,必须用break跳出 case后可包含多个可执行语句,且不必加 switch可嵌套 多个case可共用一组执行语句,如: case A: case B: case C: printf(“score60n”); break; ,例 switch(score) case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf(“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); ,运行结果:score为5时,输出: Very good! Good! Pass! Fail! data error!,例 void main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(“na=%d,b=%d”,a,b); ,运行结果:a=2,b=1,#include main() int c; printf(“Enter m or n or h or other:“); c=getchar(); switch(c) case m: printf(“nGood morning!n“);break; case n: printf(“nGood night!n“); break; case h: printf(“nHello!n“); break; default : printf(“n?n“); break; ,例 根据输入字母输出字符串,循环型程序设计 概述 C语言可实现循环的语句: 用goto 和 if 构成循环 while 语句 do while 语句 for 语句 goto语句及用goto构成循环 goto语句一般格式:,goto 语句标号; . 标号:语句;,功能:无条件转移语句 说明: 不能用整数作标号 只能出现在goto所在函数内,且唯一 只能加在可执行语句前面 限制使用goto语句,例 用if 和goto语句构成循环,求,#include main() int i,sum=0; i=1; loop: if(i=100) sum+=i; i+; goto loop; printf(“%d“,sum); ,sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 sum=4950+100=5050,例 从键盘输入一组数据,以0结束输入,求数据和,#include main() int number,sum=0; read_loop: scanf(“%d“, ,while语句 一般形式:,while(表达式) 循环体语句;,执行流程:,特点:先判断表达式,后执行循环体 说明: 循环体有可能一次也不执行 循环体可为任意类型语句 下列情况,退出while循环 条件表达式不成立(为零) 循环体内遇break,return,goto 无限循环: while(1) 循环体;,例 用while循环求,#include main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(“%d“,sum); ,例 显示110的平方,#include main() int i=1; while(i=10) printf(“%d*%d=%dn“,i,i,i*i); i+; ,运行结果: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=100,dowhile语句 一般形式:,do 循环体语句; while(表达式);,执行流程:,特点:先执行循环体,后判断表达式 说明: 至少执行一次循环体 dowhile可转化成while结构,例 用dowhile循环求,#include main() int i,sum=0; i=1; do sum+=i; i+; while(i=100); printf(“%d“,sum); ,例 while和dowhile比较,#include main() int i,sum=0; scanf(

温馨提示

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

评论

0/150

提交评论