全国计算机等级考试二级C程序基础培训1课件



《全国计算机等级考试二级C程序基础培训1课件》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C程序基础培训1课件(268页珍藏版)》请在装配图网上搜索。
1、,,,,,,,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,,268,全国计算机等级考试二级C程序根底培训〔2021版〕,,1,,二级C语言考试介绍,考核内容:二级定位为程序员,考核内容包括公共根底知识和程序设计。所有科目对根底知识作统一要求,使用统一的公共根底知识考试大纲和教程。二级公共根底知识在各科笔试中的分值比重为30%〔30分〕。程序设计局部的比重为70%〔70分〕,主要考查考生对程序设计语言使用和编程调试等根本能力。,二级C语言考试介绍,考试形式:二级所有科目的考试包括笔试和上机考试两局部。二级C笔试时间为90分钟,上机时间改为90分钟。,,二
2、级C上机应用软件为 Visual C++6.0,二级C语言考试介绍,考试成绩划分为优秀、良好、及格和不及格四个等第成绩,笔试或上机考试成绩只有一门及格的,下次考试及格的一门可以免考,两局部考试均及格者,由教育部考试中心颁发统一印制的合格证书。,二级C语言培训介绍,,实实在在学知识,顺顺利利过考试,如何学二级C语言,多看书,多实践验证,多读〔背〕程序,,第一章 程序设计根本概念,什么是,C,程序?,高级语言 机器语言,源程序 目标程序,编译程序,第一章 程序设计根本概念,C语言编译“三部曲〞,,C源程序 目标
3、文件 可执行文件,.C .obj .exe,编译,连接,第一章 程序设计根本概念,程序设计过程,确定数据结构〔输入输出〕,确定算法〔解决问题的方法和步骤〕,编码。〔算法代码化〕,调试程序。〔改错和修正〕,整理和写文档。,,第一章 程序设计根本概念,结构化程序的三种结构,顺序结构〔先后顺序执行〕,选择结构〔执行不同分支的语句〕,循环结构〔重复执行屡次或一次不执行〕,,第一章 程序设计根本概念,模块化结构,由一个个功能模块构成的程序结构为模块化结构。,,,第二章 C程序设计的初步知识,C语言例如一,输出一行信息:Wellcome
4、to Sinree!,程序名为sinree_c1.c。,#include /*命令行,表示文件包含*/,main() /*主函数*/,{ printf(“Wellcome to Sinree!\n"); /*输出信息*/,},程序输出结果,,第二章 C程序设计的初步知识,C语言例如二,输入两个整数,输出它们的和。,程序名为sinree_c2.c。,#include /*文件包含*/,main() /*主函数*/,{ int a,b,c; /*声明定义变量a,b和c*/,scanf("%d%d", /*输入变
5、量a和b的值*/,c=a+b; /*计算c等于a与b的和值*/,printf("c=%d\n",c); /*输出变量c的值*/,},运行程序输入:,90,7 ,程序结果:,第二章 C程序设计的初步知识,C语言例如三,输入两个整数,通过调用函数计算它们的和,然后输出和值。,程序名为sinree_c3.c。,#include "stdio.h" /*文件包含*/,int sum(int x,int y) /*定义sum函数*/,{ int z; /*声明定义变量z*/,z=x+y; /*计算z等于x与y的和值*/,return (z); /*将z的值返回,通过sum带回
6、调用处*/,},main() /*主函数*/,{ int a,b,c; /*声明定义变量a,b和c*/,scanf("%d%d", /*输入变量a和b的值*/,c=sum(a,b); /*调用sum函数,将得到的值赋给c*/,printf("c=%d\n",c); /*输出变量c的值*/,},运行程序输入:,90 7 程序结果 C=97,第二章 C程序设计的初步知识,VC++ 6.0,编辑环境,,,编辑区,第二章 C程序设计的初步知识,VC++ 6.0,编辑环境,启动,Visual C++ 6.0,环境,编辑源程序文件,编译,连接,执行,第二章 C程序设计
7、的初步知识,VC++ 6.0,编辑环境,,,,,编译,Ctrl+F7,连接,F7,运行,Ctrl+F5,第二章 C程序设计的初步知识,C,程序的构成和格式,,,,任何函数〔包括主函数main()〕都是由函数说明和函数体两局部组成。其一般结构如下:,[函数类型] 函数名(函数参数表) /*函数说明局部*/,{ 说明语句局部; /*函数体局部*/,执行语句局部;,},第二章 C程序设计的初步知识,C程序的构成和格式,C语言是由函数组成的,一个C源程序可由一个main函数和假设干个其他函数组成,其中必须有一个且只能有一个main函数。 C程序总是从main函数开始执行。
8、,,,第二章 C程序设计的初步知识,C程序的构成和格式,C程序语句和数据定义必须以分号“;〞结束。,C语言中,分号是程序语句的结束标志,也是C语句的必要组成局部。,第二章 C程序设计的初步知识,C,程序的构成和格式,C,语言严格区分大小写。,如变量,a,和变量,A,系统认定为两个不同的变量。,,,第二章 C程序设计的初步知识,C,程序的构成和格式,C,语言数据输入和输出是由,库函数,实现的。,,C,语言本身没有输入输出语句。输入和输入操作是由库函数,scanf,和,printf,等函数来实现的。,所以一般,C,程序都要使用命令行语句 #,include ,,注意:命令行以#开头,行尾不能
9、加 ; 号,,第二章 C程序设计的初步知识,C程序的构成和格式,C语言用/*注释内容*/形式进行程序注释,在“/*〞和“*/〞之间的所有字符都为注释符,C系统不对注释符进行编译。〔另外可以用//用于单行注释〕,注意:注释不能嵌套使用。如/* /*…*/*/,第二章 C程序设计的初步知识,C程序书写格式建议,1. C程序书写格式自由。 对于短语句可以多条语句书写在同一行,也可以将长语句分写在多行。但需要注意,分行时不能将一个单词分开,也不能将双引号引起来的字符串分开。我们提倡一行一条语句的风格。,2.C程序书写采用缩进格式。根据语句的附属关系,程序书写时采用缩进格式,使程序语句的层次结构清晰
10、,提高程序的可读性。同一层次语句要左对齐,不同层次的语句要缩进假设干个字符,这样程序层次清楚,便于阅读和理解。,3.程序中适当使用注释信息。在书写程序时,适当地参加注释同样可增加程序的可读性。,第二章 C程序设计的初步知识,C程序标识符,C语言中 ,符号的命名必须遵守一定的规那么,按此规那么命名的符号称为标识符。合法的标识符命名规那么为: 标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。[提醒:c语言标识符中大写字母和小写字母被认为是两个不同的字符],第二章 C程序设计的初步知识,C程序标识符分类,关键字〔由C语言预先规定的,见附录4〕,如:int,double,预定
11、义标识符〔预先定义且具有特殊含义〕,如printf,define,用户标识符 〔见名知义〕,用来给变量、函数、数组等命名。,,第二章 C程序设计的初步知识,C,程序常量和变量,,关于常量、变量及数据类型说明的程序实例,程序名为,sinree_c3.c。,#include ,main(),{ int a=3; /*,定义整型变量,a,并赋予常量值3 */,,short r=6; /*,定义短整型变量,r,并赋予常量值6*/,,char c='a'; /*,定义字符变量,c,并赋予字符常量值',a' */,float pi=3.14; /*,定义单精度
12、实型变量,pi,并赋予实型常量值3.14 */,,double s; /*,定义双精度实型变量,s */,s=pi*r*r; /*,将,pi*r*r,值赋给,s */,printf("int:%d,short:%d,char:%d,float:%d,double:%d\n",sizeof(a),,sizeof(r),sizeof(c),sizeof(pi),sizeof(s));,/*,输出各变量占内存的字节数 */,,printf("a=%d,r=%d,c=%c,pi=%f,s=%lf\n",a,r,c,pi,s);,/*,输出各变量的值 */,},第二章 C程序设计的初步知识,常
13、量 :在程序运行过程中,其值不能改变的量。,根据数据类型可以分为,数值型〔有正、负之分〕,【 整型常量〔不带小数点〕、实型常量〔必须用小数点〕】、,字符常量(如‘a’、’d’)和字符串(“ncre〞、〞beijing〞)常量。,第二章 C程序设计的初步知识,符号常量,#,include ,main(),{,double r,s,l;,r=5.0;,s=,3.14,*r*r;,l=2*,3.14,*r;,printf("s=%f,l=%f\n",s,l);,},,符号常量,,#include ,#define,PI 3.14,main(),{,double r,s,l;,r=5.0;,s=,P
14、I,*r*r;,l=2*,PI,*r;,printf("s=%f,l=%f\n",s,l);,,},第二章 C程序设计的初步知识,符号常量,用#define命令行〔不是语句,所以后面不能加分号〕定义一个字符〔通常用大写字母〕代表一个常量 。,#define PI 3.14,第二章 C程序设计的初步知识,变量: 在程序运行过程中,值可以改变的量,。,变量实质上代表了内存中的某个存储单元。,变量必须先定义后使用。,,,,第二章 C程序设计的初步知识,整型数,十进制: 0 1 2 3 4 5 6 7 8 9,八进制: 0 1 2 3 4 5 6 7,,c,程序中八进制开头,加0,十六进制:0
15、1 2 3 4 5 6 7 8 9,a b c d e f,c,程序中十六进制开头,加 0,x,,,,第二章 C程序设计的初步知识,整型常量,#include ,main (),{,int a=12;,printf("a=,%d,,a=,%o,,a=,%#o,,a=,%x,,a=,%#x,\n",a,a,a,a,a);,},,,,第二章 C程序设计的初步知识,整型变量,根本型: 用int关键字进行定义,int k;,一个定义语句用一个;结束,多个变量用,隔开,int k,m,n;,〔仅开辟存储单元,不存放初值,此时变量值无意义〕,变量初始化:int m=1,n=2,k=3;,,第二章 C
16、程序设计的初步知识,整型数据分类,短整型:short [int],长整型:int 或 long [int],无符号型:unsigned,在 vc 6.0中整型常量后面加一个字母l或L,在无符号整数常量后加u或U,假设长整型无符号可以加lu或LU,数据类型名,,说明,,Visual C++ 6.0,环境,,Turbo C2.0,环境,,字节,,取值范围,,字节,,取值范围,,short [int],,短整型,,2,,-32768~32767,,2,,-32768~32767,,signed short [int],,带符号短整型,,2,,-32768~32767,,2,,-32768~3276
17、7,,unsigned short [int],,无符号短整型,,2,,0~65535,,2,,0~65535,,int,整型,4,,-2147483648~2147483647,2,,-32768~32767,signed [int],,带符号整型,,4,,-2147483648~2147483647,,2,,-32768~32767,,unsigned [int],,无符号整型,,4,,0~4294967295,,2,,0~65535,,long [int],,长整型,,4,,-2147483648~2147483647,,4,,-2147483648~2147483647,,signed
18、 long [int],,带符号长整型,,4,,-2147483648~2147483647,,4,,-2147483648~2147483647,,unsigned long [int],,无符号长整型,,4,,0~4294967295,,4,,0~4294967295,,,,,第二章 C程序设计的初步知识,整数在内存中的存储形式,一个字节中的最右边一位称为最低位;,一个字节中的最左边一位称为最高位;,对于一个有符号整数,最高位用来存放整数的符号,称为符号位。假设是正整数,最高位放置0,假设是负整数,最高位放置1。,,第二章 C程序设计的初步知识,整数在内存中的存储形式,正整数: 原码表
19、示。,负整数: 补码表示。〔取反加1〕,二进制转十进制 为 取反减1,正整数5在内存中的二进制码为:,0000000000000101〔原码〕,最大正整数0111111111111111,-5 的二进制 10000101,其反码:11111010,补码:11111011,第二章 C程序设计的初步知识,实型数据,小数形式:由数字和小数点组成的一种实数表示形式。〔必须有小数点〕,指数形式:以“e〞或“E〞跟一个整数来表示以10为底的幂, “e〞或“E〞之前必须有数字,且“e〞或“E〞后面的指数必须为整数。〔 “e〞或“E〞 的前后以及数字之间无空格〕,,第二章 C程序设计的初步知识,实型数据,
20、单精度,float 4,个字节,,双精度,double 8,个字节,,,,,第二章 C程序设计的初步知识,算术表达式,根本算术表达式:,+、-、*、/、%〔%运算对象为整型〕,注意:,+、-可以看做单目,也可看做双目运算符号。,双目运算符两边运算数的类型一致,那么所得结果的类型与运算数的类型一致。如:1.0/2.0=0.5 ½=0;,假设不一致,自动进行类型转换,转换的原那么为“就大〞,所有实型数运算都以双精度方式进行。,第二章 C程序设计的初步知识,运算符的优先级,单目运算符“+〞和“-〞的结合性是从右到左。,在算术表达式中,可以使用多层圆括号,但左右括号必须配对。,假设包含不
21、同优先级的运算符,那么按运算符的优先级由高到低进行,假设相同,那么按结合方向进行。,第二章 C程序设计的初步知识,强制类型转换表达式,〔类型名〕〔表达式〕,如 (int)3.234,第二章 C程序设计的初步知识,赋值表达式,“=〞赋值运算符,赋值运算的功能是先求出右边表达式的值,然后把此值赋给 赋值号左边的变量。,注意: 赋值运算符优先级别仅高于逗号运算符;且结合性为自右向左;赋值表达式的值为最左边变量所得的新值。,第二章 C程序设计的初步知识,复合赋值表达式,+=,n+=2 n=n+2,-=,n-=2 n=n-2,*=,n*=2 n=n*2,/=,n/=2
22、 n=n/2,%=,n%=2 n=n%2,,第二章 C程序设计的初步知识,复合运算中的类型转换,,两侧不一致 ,把右侧数值按左侧变量类型进行转换。也可用强类型转换的方式人为的转换。,,第二章 C程序设计的初步知识,自加、自减、逗号运算符,自加 ++ 使运算对象值加1,自减 -- 使运算对象值减1,++,i,,i,++,++,i,;,i,++ ;,,i,的 值都加1 前缀加1,后缀不加1,,--,i,,i --,--,i,;,i,,--,;,,i,的 值都减1 前缀减1,后缀不减1,,第二章 C程序设计的初步知识,#include ,mai
23、n(),{,int i=1,j=1,m=1,n=1,k=1;,printf("i=%d\n",i);,m=i++;,printf("i=%d,m=%d\n",i,m);,printf("j=%d\n",j);,m=++j;,printf("j=%d,m=%d\n",j,m);,printf("n=%d\n",n);,m=n--;,printf("n=%d,m=%d\n",n,m);,printf("k=%d\n",k);,m=--k;,printf("k=%d,m=%d\n",k,m);,,},第二章 C程序设计的初步知识,逗号运算符和逗号表达式,,表达式1,表达式2,…… 表达式,n,结合
24、性:从左到右,最后一个表达式的值就是此逗号表达式的值。逗号运算符的优先级最低。,,第三章 顺序结构,顺序结构:在程序中按语句出现的顺序逐条执行。,赋值语句:在赋值表达式的尾部加上一个“;〞号。应出现在函数的可执行局部。,,第三章 顺序结构,数据输出:把数据从计算机内部送到计算机外部设备上的操作。,在,VC 6.0,环境下,在调用输入和输出的库函数之前要求在源程序中出现包含头文件,stdio.h,的命令行。,,第三章 顺序结构,,printf,函数,,printf(,格式控制,输出项1,输出项2,…),格式控制是字符串形式,作用是将要输出的数据按照指定的格式输出和提供需要原样输出的文
25、字或字符。,如:,d%、f%、e%,,第三章 顺序结构,格式字符,%c %d %o 〔%#o〕 %x (%#x),%u %f %e %s %p %%,长度修饰符,在 %和格式字符之间,可以参加长度修饰符,以保证数据输出格式的正确和对齐。长整%ld 短整 %hd,第三章 顺序结构,宽度说明:,%和格式字符之间插入一个整数常数来指定输出的宽度n,对于float和double的实数,可以用n1.n2的形式来输出,或者用.n2输出。,在 %d 和宽度之间加“-〞实现数据左对齐,加“+〞在每一个数字前面带正负号。,,第三章 顺序结构,本卷须知,一般在多个输出数之间留逗号、空格
26、或者回车。,要输出%符号,在格式控制符中用%%,printf函数有返回值,返回值是本次调用输出字符的个数,包括回车等控制符。,,第三章 顺序结构,scanf函数,scanf〔格式控制,输入项1,输入项2,…〕,主要作用是指定输入时的数据转换格式 ,输入项之间用逗号隔开,对于int,float,double类型变量,在变量之前必须加&符号作为输入项。,,第三章 顺序结构,格式字符,%,c %d %i,%o %x %u %f %e %s,,,,第三章 顺序结构,输入整数或者实数这类数值型数据时,输入的数据之间必须用空格、回车符号等间隔符号隔开。,可以指定输入数据所指定的宽度
27、,一般在使用输入函数前使用输出函数对输入数据进行说明,且尽量不要使用通配符。,,,,第三章 顺序结构,复合语句和空语句,{,语句1;,,语句2;,……,语句,n;,},第三章 顺序结构,空语句,,只有一个分号的语句。,,第三章 顺序结构,例题3.1,,,,A B,提问:,假设A和B桶都装了水(不一定是装满),请问如何将A和B桶中的水调换?(A,B的容积不受限制),第三章 顺序结构,例题3.2,注意:,十进制小数点移位是通过10的,n,次方的乘除来实现.,四舍五入在,c,语言中的操作:可以通过将小数点移动到舍入数位前,加0.5,然后取整来实现,最后再将小
28、数点移回.,强类型转换前要加括号.,,double,类型在使用,scanf,输入变量时,使用%,lf,格式控制符.,,,第四章 选择结构,选择结构:根据判断的结果(逻辑值)决定程序的不同流程.,逻辑值:关系运算和逻辑运算都会得到一个逻辑值, C语言中,0代表逻辑值“假〞,非0(正数或者负数)代表“真〞.,,,第四章 选择结构,关系运算:比较运算,进行两个数的比较,判断比较的结果是否符合指定的条件.,关系运算符:, >= == !=,小于 小与等于 大于 大于等于 等于 不等于,,,第四章 选择结构,注意:,两个字符之间不允许有空格.,关系运算符是双目运算符,具有从
29、左至右的结合性.,、>=优先级相同,但高于 优先级相同的==、!= 如,a==b
30、较,!>算术>关系>&&>||>赋值,如: f=a||b<=!c+d&&e,,第四章 选择结构,逻辑运算规那么,非运算 !0为1 !1为0 是否,与运算 1&&1为1 同时满足条件,0&&1 1&&0 0&&0 为0,或运算 0||0为0 不满足任何一个条件,0||1 1||0 1||1为1,第四章 选择结构,逻辑运算规那么,非运算 !0为1 !1为0 是否,与运算 1&&1为1 同时满足条件,0&&1 1&&0 0&&0 为0,或运算 0||0为0 不满足任何一个条件,0||1 1||0 1||1为1,第四章 选择结构,逻辑运算规
31、那么,关系式 0 32、后的一个语句;否那么,跳过if子句,直接执行if语句后的一个语句;,第四章 选择结构,if 语句,if(表达式) 语句,语句只能为一条语句,可以把多条语句组合成复合语句.,执行过程:计算表达式中的值,如果为真,执行if子句,然后执行if语句后的一个语句;否那么,跳过if子句,直接执行if语句后的一个语句;,第四章 选择结构,,if,语句,,if(,表达式) 语句1,,else,语句2,执行过程:计算表达式的值,如果表达式的值为真,执行,if,子句,然后跳过,else,子句,去执行,if,语句之后的下一条语句;如果表示式的值为假,跳过,if,子句,执行,else,子句,然后去执行,i 33、f,语句之后的下一条语句.,第四章 选择结构,,if,语句,,if(,表达式) 语句1,,else,语句2,执行过程:计算表达式的值,如果表达式的值为真,执行,if,子句,然后跳过,else,子句,去执行,if,语句之后的下一条语句;如果表示式的值为假,跳过,if,子句,执行,else,子句,然后去执行,if,语句之后的下一条语句.,第四章 选择结构,,if,语句的嵌套(一),,if (,表达式1),,if(,表达式2) 语句1,,else,语句2,,else,,语句3,第四章 选择结构,,if,语句的嵌套(二),,if (,表达式1),{,if (,表达式2) 语句1},e 34、lse,语句2,注意:,else,子句总与前面最近不带,else,的,if,相结合.,,第四章 选择结构,,if,语句的嵌套(三),,if (,表达式1) 语句1,else,,if (,表达式2,),语句2,,else,语句3,,,,if (,表达式1) 语句1,else if (,表达式2,),语句2,,else,语句3,,,等价,尽量将内嵌的,if,语句放在,else,子句中.,第四章 选择结构,,if,语句的嵌套(四),,if (,表达式1) 语句1,else,,if (,表达式2,),语句2,,,,,if (,表达式1) 语句1,else if (,表达式2,),语句2 35、,,等价,尽量将内嵌的,if,语句放在,else,子句中.,第四章 选择结构,,if,语句的多层嵌套,if (,表达式1) 语句1,else,,if (,表达式2,),语句2,,else,,,if (,表达式3,),语句3,…,else,语句,n,,,,,,if (,表达式1) 语句1,else if (,表达式2,),语句2,else if (,表达式3,),语句3,…,else,语句,n,,等价,逐一对if后的表达式进行检测,只执行其中的一个表达式为真的子句,假设所有表达式为0,执行最后的else子句;假设无最后的else子句,不执行任何的子句.,第四章 选择结构,条件表达式构 36、成的选择结构,条件运算符: ? :,条件表达式:,表达式1?表达式2:表达式3,运算功能:如果表达式1为真,求表达式2的值,此时表达式2的值就是整个条件表达式的值;,如果表达式1为假,求表达式3的值,此时表达式3的值就是整个条件表达式的值;,,,,,第四章 选择结构,条件表达式构成的选择结构,,条件表达式的优先级别,低于关系运算符和算术运算符,但高于赋值运算符.,如:,y=x>10?100:200,x<0?(-1)*x:x,,,,,第四章 选择结构,switch,表达式构成的选择结构,switch (,表达式),{,case,常量表达式1:语句1,,case,常量表达式2:语句2, 37、…,,case,常量表达式,n:,语句,n,default :,语句,n,},,,,通常和,break,语句联合使用,当执行到,break,时,立即跳出,switch,语句.,第四章 选择结构,语句标号和goto语句,goto stop;,…,stop:printf(“end\n〞);,,,,,,第五章 循环结构,while语句和用while语句构成的循环,while(表达式) 循环体,例如:,k=0;,while (k<10),{,printf(“*〞);,k++;,},,,,,第五章 循环结构,,do-while,语句及其循环,,do,,循环体,,while(,表达式);,例如 38、:,do,{ i++;s+=i;,},While(i<10);,,,,第五章 循环结构,for语句及其循环,for(表达式1;表达式2;表达式3),循环体,例如:,for(k=0;k<10;k++),printf(“*〞);,,,,,表达式1;,While(,表达式2),{,循环体;,表达式3;,},等价形式,第五章 循环结构,,break,语句和,continue,语句,Break,在循环结构中终止本层循环体;,Continue,跳过本次循环体中余下尚为执行的语句,立刻进行下一次的循环条件判定,可以理解为仅结束本次循环.,,,,第六章 字符型数据,字符型常量,,C,语言中,一个字 39、符常量代表,ASCII,字符集(见附录七)中的一个字符,用单引号把一个字符括起来作为字符常量.,例如:,a,为标识符,‘,a’,为字符型常量.,,,,,第六章 字符型数据,字符型常量,注意:,大写字母和小写字母的,ASCII,值不同,因而代表不同的字符常量.,单引号中的空格也是一个字符常量.,字符常量只能包含一个字符.,字符常量只能用单引号括起来,不能用双括号.,字符常量在内存中占一个字节,存放的是字符的,ASCII,代码值.,,,,,第六章 字符型数据,字符型常量,转义字符常量 ‘\特定字符’,\,n,回车 \\ 反斜杠 \‘ 单引号 \“ 双引号,\,ddd,三位八进制代表的 40、一个,ASCII,字符,\,xhh,二位十六进制代表的一个,ASCII,字符,注意:转义字符常量只代表一个字符.,,,,第六章 字符型数据,字符串常量,字符串常量是由双引号括起来的一串字符.在c语言中,系统在每个字符串的最后自动参加一个字符‘\0’作为字符串的结束标志.,注意:“〞称为空串,也是一个字符串常量,占用一个字节的存储空间.,,,,第六章 字符型数据,字符量的运算,在,C,程序中,字符量可参与任何整数运算.,大小写字母的转换:大写字母,ASCII,值=小写字母,ASCII,值-32,可以将数字字符转换成整数值,也可以将整数值转换成数字字符.,字符量可以进行关系运算.,,,, 41、,第六章 字符型数据,字符变量,,用关键字,char,进行定义,,char ch1=‘a’;,,字符变量可以参与整型变量允许的运算,有可以使用与字符处理相关的库函数.,,,,第六章 字符型数据,字符的输入和输出,printf输出字符时使用格式说明符%c,也可以在c前参加整数来指定输出字符时所占的宽度.,用scanf输入字符时也用格式说明符%c,当%c一个接一个时,字符之间不应有间隔符号(如回车,空格).,,,,,,,第六章 字符型数据,,putchar,和,getchar,输入和输出函数,,putchar,输出字符,putchar(ch);,getchar,输入字符,ch=getc 42、har();,,注意:只有在用户敲入,enter,键时,读入才开始执行.,,,,,第七章 函数,一个实用的,c,语言源程序总是由许多函数组成.,这些函数中可以调用,c,提供的库函数,也可以调用由用户或他人编写的函数.,,c,源程序在正常情况下总是从,main,函数开始执行,,main(),结束.,,,,,,第七章 函数,熟悉c语言提供的丰富库函数,应正确调用.,调用c语言标准库函数要求使用include命令行.,include命令行必须以#开头,系统提供的头文件以.h为文件的后缀,文件名用一对双引号“〞或一对尖括号括起来.,标准库函数的调用形式:出现在表达式中或者作为独立的语句完成某种 43、操作。,,,,第七章 函数,函数的定义与返回值,函数定义的语法,函数返回值的类型名 函数名〔类型名 形式参数1,类型名 形式参数2,……〕,{,说明局部,语句局部,},注意:不能在函数的内部定义函数 。,,,,函数名和形式参数都是用户命名的标识符,同一程序中,函数名必须唯一,形式参数名只要在同一函数中唯一即可。,假设在函数的首部省略了函数返回值的类型名,那么默认函数返回值的类型为int类型。除了返回值类型为 int类型的函数外,函数必须先定义〔或说明〕后调用。假设函数只是用于完成某些操作,没有函数值返回,那么必须把函数定义成void类型。,第七章 函数,函数的定义与返回值,如:,,do 44、uble add (double a,double b),{,double s;,s=a+b;,return s;,},,,,函数体中,除形参外,用到的其他变量必须在说明局部进行定义,这些变量〔包括形参 〕,只在函数被调用时才临时开辟存储单元,当退出函数时,这些临时开辟的存储单元全部被释放掉,因此这种变量只在函数体内部起作用,与其他函数体中的变量互不相干,它们可以和其他函数中的变量同名。,第七章 函数,函数的定义与返回值,如:,,double add (double a,double b),{,double s;,s=a+b;,return s;,},,,,函数的值通过return 语句返 45、回,return语句的形式如下:,return 表达式; 或 return(表达式);,return语句中表达式的值就是所求的函数值,此表达式值的类型必须与函数首部所说明的类型一致。假设类型不一致,那么以函数值的类型为准,由系统自动进行转换。,当程序执行到return语句时,程序的流程就返回到调用该函数的地方,并带回函数值。,第七章 函数,函数的定义与返回值,如:,,double add (double a,double b),{,double s;,s=a+b;,return s;,},,,,在同一个函数中,可以根据需要在多处出现return语句,在函数体的不同部位退出函数,但ret 46、urn只可能执行一次,return语句中也可以不含表达式,这时必须定义函数为void类型,函数体内可以没有return语句,这时必须定义函数为void类型,程序的流程就一直执行到函数末尾的“}〞,然后返回调用函数,也没有确定的函数值带回。,第七章 函数,函数的两种调用方式,函数的一般调用形式为:,函数名〔实参表〕,假设函数无形参,调用形式为,函数名(),一般情况下,可用两种方式调用函数:,当所调用的函数用于求出某个值时,函数的调用可作为表达式出现在允许表达式出现的任何地方。,当函数仅进行某些操作而不返回函数值,这时函数的调用可作为一条独立的语句。,,,,当实参个数多于一个时,各实参之间用逗 47、号隔开。,实参的个数必须与所调函数中的形参相同,,类型一一对应匹配。,第七章 函数,函数调用的语法要求,调用函数时,函数名必须与所调用的函数名字完全一致。,实参的个数必须与形参的个数一致。实参可以是表达式,在类型上应按位置与形参一一对应。,函数必须先定义后调用〔函数的返回值类型为int或char时除外〕.,函数可以直接或间接的自己调用自己,称为递归调用。,,,,第七章 函数,函数说明的形式,函数说明的一般形式,类型名 函数名〔参数类型1,参数类型2,……〕,也可以采用下面的形式,类型名 函数名(参数类型1 参数1,参数类型2 参数2,……),函数说明可以是一条独立的说明语句,也可以与普 48、通变量一起出现。,,,,第七章 函数,函数说明的形式,对函数进行说明能使c语言的编译程序在编译时进行有效的类型检查。,当在所有函数的外部、被调用之前说明函数时,在对函数进行说明的语句后面所有位置都可以对函数进行调用。,函数说明也可以放在调用函数内的说明局部。,,,,第七章 函数,调用函数和被调用函数之间的数据传递,三种方式:,1、实参和形参之间进行数据传递,2、通过 return语句把函数值返回。,3、通过全局变量。,在C语言中,数据只能从实参单向传递给形参,称为“按值〞传递,也即是说,当简单变量作为实参时,用户不可能在函数中改变对应实参的值。,,,,第八章 地址和指针,变量的地址 49、和指针,a b,1012 1013 1201 1202 1203 1204,一个变量实质上是代表了“内存中的某个存储单元〞,假设在程序中定义了一个变量,c编译系统就会根据定义中变量的类型,为其分配一定字节数的内存空间。,每个变量的地址是指该变量所占存储单元的第一个字节的地址。,直接存取:直接按变量的地址存取变量值的方式。,,,,第八章 地址和指针,变量的地址和指针,p p a,2002 2002 1012 1 50、013,存放地址的变量称为“指针变量〞。,间接存取:通过指针变量间接存取变量值的的方式。,“指针变量p指向了变量a〞就是指针变量p中存放了变量a的地址。,在c语言中,指针被广泛运用,它和数组、字符串、函数间数据的传递等有着密不可分的联系。,,,,1012,,,1012,,,,,,,,第八章 地址和指针,指针变量的定义和指针变量的基类型,定义指针变量的一般形式如下:,,类型名 *指针变量名1,*指针变量名2,…..;,如,int *pi,*pj;,double *pd;,,我们称,int、 double,是指针变量的基类型。,,,,第八章 地址和指针,指针变量的定义和指针变量的基类型 51、,如:,int **p,*s,k=20;,s=,p=,对于基类型不同的指针变量,其内容〔地址值〕增1、减1所跨越的字节数是不同的,因为指针移动的最小单位。,,,,第八章 地址和指针,给指针变量赋地址值,通过求地址运算符&获得地址值,,int k=1,*p,*q;,q=,通过指针变量获得地址值,,p=q;,通过标准函数获得地址值,,,第八章 地址和指针,给指针变量赋“空〞值,p=NULL;,NULL是在stdio.h头文件中定义的预定义符,因此在使用NULL时,应该在程序的前面出现预定义行 #include ,NULL的代码值为0,因此以上代码等价于,p=‘\0’;或p=0;,,,第八 52、章 地址和指针,对指针变量的操作,通过指针来引用一个存储单元,当变量中存放了一个确切的地址值时,可以用“间接访问运算符〞*通过指针来引用该地址的存储单元。,如 int *p,j=10,m;,p=,m=*p;,,,,,第八章 地址和指针,对指针变量的操作,间接访问运算符*是一个单目运算符,必须出现在运算对象的左边,其运算对象是存储地址的指针变量或者是地址。,注意:,++和*具有相同优先级,结合性为从右到左,++*p *p+=1,(*p)++ *p+=1,*p++ 53、 p+=1,,,第八章 地址和指针,对指针变量的操作,移动指针:对指针变量加上或减去一个整数,或通过赋值运算,使指针变量指向相邻的存储单元。,在对指针进行加、减运算时,数字“1〞不再代表十进制整数“1〞,而是指1个存储单元长度。1个单元长度的字节数,根据指针的基类型而定。,,,第八章 地址和指针,对指针变量的操作,指针比较,在关系表达式中可以对两个指针进行比较,,如:,int *p,*q;,if(p 54、,函数之间地址值的传递,形参为指针变量时实参和形参之间的数据传递,通过传送地址值在被调用函数中直接改变调用函数中的变量的值。,函数返回地址值。,,,,第九章 数组,数组,一组具有同一类型的变量,在内存中占有连续的存储单元,,在c语言中,可以用a[0]、a[1]、a[2]、…这种形式来表示数组中连续的存储单元,我们把它们称为“带下标的变量〞或数组元素。,,,第九章 数组,一维数组的定义,一维数组:数组中每个元素只带有一个下标,形式: 类型名 数组名[整型常量(表达式)],如:,int a[8];,,,,,,,a[0] a[1] a[2] a[3] a[4] 55、 a[5] a[6] a[7],第九章 数组,一维数组的定义,如:,int a[8];,,,,,,,a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7],定义了一个名为a的一维数组。,方括号的8规定了a数组含有8个元素,它们是a[0]、a[1]、……a[7],类型名int规定a数组中每个元素都是整型,只能存放整型数。,每个元素一个下标,c语言规定每个数组第一个元素的下标总是0〔下标的下界〕,最后一个元素的下标应该是7〔下标的上界〕。,可以用存储单元的名字a[0]、a[1]、…a[7]直接 56、引用各存储单元。,第九章 数组,一维数组的定义,多个数组说明符,,double w[22],v[100],u[5];,,和普通变量名一起说明,,char c1,c2,carr[81];,,,,第九章 数组,一维数组元素的引用,引用形式 数组名[下标表达式],如:double x[8];,那么x[0]、a[j]、a[m+n]都是对数组元素的合法引用。,注意:一个数组元素实质上就是一个变量名,代表内存中的一个存储单元,一个数组占有一串连续的存储单元。另外,在c语言中,一个数组不能被整体引用,例如x数组,不能用x代表x[0]到x[7]这8个元素。,,第九章 数组,一维数组的初始化 57、,在定义语句中为所定义数组的各元素赋初值,,int a[8]={0,1,2,3,4,5,6,7};,,当所赋值初值少于所定义数组的元素个数时,将自动给后面的元素补以初值0,如,int a[3]={1};,相当于,int a[3]={1,0,0},,当所赋初值多于所定义数组的元素个数时,在编译时将给出出错信息。,,第九章 数组,通过赋初值定义数组的大小,,int a[]={0,1,2,3},,相当于,int a[4]={0,1,2,3},,数组说明符的一对方括号中可以不指定数组的大小,可以根据赋初值来隐性定义数组元素的个数。,,,第九章 数组,一维数组的定义和数组元素的引用举例,定义,f 58、or (j=0;j 59、,,一维数组和数组元素的地址,,c,语言中,在函数体中或在函数外部定义的数组名可以认为是一个存放地址值的指针变量名,其中的地址值是数组第一个元素的地址,也就是数组所占一串连续存储单元的起始地址,定义数组时的类型就是此指针变量的基类型。,注意:这个指针变量的地址值不可改变,即不可给数组名重新赋值,可以认为数组名是一个地址常量。,,第九章 数组,一维数组和指针,一维数组和数组元素的地址,float a[10],*p,x;,int k;,for(k=0;k<10;k++) p=a+k;,for(k=0;k<10;k++) scanf(“%d〞,a+k);,语句p=都是合法的,功能相同,都使p 60、指向了数组的首部地址。,,第九章 数组,一维数组和指针,一维数组和数组元素的地址,for(p=a,k=0;k<10;k++) {scanf(“%d〞,p); p++;},,for(p=a,k=0;k<10;k++) scanf(“%d〞,p++);,,for(p=a;p-a<10;p++) scanf(“%d〞,p);,,,第九章 数组,一维数组和指针,,通过数组的首地址引用数组元素,,int a[10];,a,是数组元素的首地址,,a,的值等于&,a[0],a+1,的值为&,a[1],a[0],等于 *&,a[0],,即*(,a+0),*a,a[1],等于 *&,a[ 61、1],,即*(,a+1),,,,,第九章 数组,通过指针引用一维数组元素,float a[10],*p,k;,p=a;,可以通过指针变量p来表示数组元素,a[0] *p,a[1] *(p+1),如,for(p=a;p-a<10;p++) printf(“%4d〞,*p);,,,,第九章 数组,通过指针引用一维数组元素,,float s[10],*p,k;,p=s;,,可以用&,s[k],s+k,p+k,来表示,s[k],的地址,可以用,s[k],*(s+k),*(p+k),p[k],来表示,s[k],的值,,但注意:,s,是不变的,而,p,中的地址值是可以改变的,,,,第 62、九章 数组,函数之间对一维数组和数组元素的引用,数组元素作实参,数组名作实参 形参形式,int arrin(int *a),int arrin(int a[]),int arrin(int a[M]),,注意:当数组名为实参时,在被调用函数中,并没有为与数组名对应的形参另外开辟一串连续的存储单元,而只是开辟了一个指针变量的存储单元。,,数组元素地址作为实参,,,,第九章 数组,二维数组,二维数组:数组元素带有两个下标。逻辑上把二维数组看成一个具有行和列的表格。,定义形式:,,类型名 数组名[常量表达式1][常量表达式2,],……;,如:,int a[3][4],,,,第九章 63、数组,二维数组,int a[3][4],的逻辑结构,,,int a[3][4],的实际存储结构,,,第0列,第1列,第2列,第3列,第0行,a[0][0],a[0][1],a[0][2],a[0][3],第1行,a[1][0],a[1][1],a[1][2],a[1][3],第2行,a[2][0],a[2][1],a[2][2],a[2][3],a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][ 64、2] a[2][3],按行存放,第九章 数组,二维数组,在c语言中,可以把一个二维数组看成一个一维数组,每个数组元素又是包含有假设干个元素的一维数组。,例如:int a[3][4]这个a数组可以看成是由,a[0]、a[1]、a[2]三个元素组成的一维数组。其中每个元素又是由四个元素组成的一维数组。,,第九章 数组,二维数组元素的引用,数组名[下标表达式1][下标表达式2],二维数组的初始化,,int a[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};,int a[4][3]={{1,2},{4,5},{7},{10}};,int a[4] 65、[3]={{1,2},{4,5}};,int a[4][3]={1,2,3,4,5};,,,,,第九章 数组,通过赋初值定义二维数组的大小,int a[][3]={{1,2,3},{4,5},{6},{8}};,第一维大小由行数来决定。,int a[][3]={1,2,3,4,5};,第一维大小由以下规那么决定:,a、当初值的个数能被第二维的常量表达式的值整除时,所得商数就是第一维的大小。,b、当初值的个数不能被第二维的常量表达式的值整除时,第一维的大小=所得商数+1,,,第九章 数组,二维数组的定义和数组元素引用举例,int a[M][N] ;,for(i=0;i 66、r (j=0;j
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。