




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言计算机辅助教学Market Share1 s t Q tr2 n d Q tr02 04 06 08 01 s t Q tr2 n d Q trMarket Share1 s t Q tr2 n d Q tr02 04 06 08 01 s t Q tr2 n d Q tr一、为什么要规定数据类型:一、为什么要规定数据类型: C C语言规定,在程序中用到的每一个变量都要指定它们属于哪一种类语言规定,在程序中用到的每一个变量都要指定它们属于哪一种类型,这是因为:型,这是因为: 1. 1.不同类型的数据在内存中占不同长度的存储区,而且数据在计算机不同类型的数据在内存中占不同长度的存储区,而且
2、数据在计算机内的表示形式也不同内的表示形式也不同. . 例如:一般微机例如:一般微机 2 2bytes bytes 存放一个整型存放一个整型 4 4bytes bytes 存放一个实型存放一个实型2.2.一种数据对应着一个值的范围一种数据对应着一个值的范围intint -32768 -32768 3276732767float 10float 10-38-38 10103838之间之间 例如:整型数据可以进行求余例如:整型数据可以进行求余(5%2=1)(5%2=1),而实数不能进行求余运算。,而实数不能进行求余运算。 数值型数据可以进行四则运算,而结构型数据就不能进行四则数值型数据可以进行四则
3、运算,而结构型数据就不能进行四则运算。运算。 一个变量应有确定的类型,在一个程序中一个变量只能属于一一个变量应有确定的类型,在一个程序中一个变量只能属于一个类型,不能先后被定义为二个或多个不同的类型。个类型,不能先后被定义为二个或多个不同的类型。3.3.一种数据类型对应一组允许的操作一种数据类型对应一组允许的操作二、二、C C的的数据类型:数据类型:数数据据类类型型基本类型基本类型整型整型短整型短整型 (short)整型整型 ( int )长整型长整型 (long)实型实型(浮点型浮点型)单精度型单精度型 ( float )双精度型双精度型 (double)数值类型数值类型字符类型字符类型 (
4、 char )枚举类型枚举类型 ( enum ) 构造类型构造类型(组合类型组合类型)数组类型数组类型结构体类型结构体类型 (struct)共同体类型共同体类型 (union)文件类型文件类型 ( file )指针类型指针类型空类型空类型 (void)不返回任何类型的数据不返回任何类型的数据在程序中,不同类型的数据既可以以常量形式出现,也可以以变量形式在程序中,不同类型的数据既可以以常量形式出现,也可以以变量形式出现出现。所谓常量是指在程序执行期间其值是不能发生变化。变量则其值所谓常量是指在程序执行期间其值是不能发生变化。变量则其值可以变化的。可以变化的。 例如例如:1.21.2,3 3,a
5、a 都是常量,分别代表实型、整型和字符型常量。都是常量,分别代表实型、整型和字符型常量。 它们的特点是从字面上即可判断它们是某一类型的常量,所以又称它们的特点是从字面上即可判断它们是某一类型的常量,所以又称 为为字面常量字面常量或或直接常量直接常量。 符号常量:符号常量:是在一个程序是在一个程序( (或程序的一部分或程序的一部分) )中指定一符号或标识符中指定一符号或标识符代表一个常量。代表一个常量。一、一、( (直接直接) )常量和符号常量:常量和符号常量:例:例: #define PRICE 30 main ( ) int num , total; num=10; total=num*PR
6、ICE; printf(“total=%d”,total); 输出结果:输出结果:total=300total=300说明:说明: (2) (2) 符号常量不同于变量,它符号常量不同于变量,它 的值在其作用域内不能改的值在其作用域内不能改 变,也不能再被赋值变,也不能再被赋值(1) (1) 习惯上符号常量用大写,习惯上符号常量用大写, 变量用小写以示区别变量用小写以示区别PRICE=50 PRICE=50 注意:注意:aa和和“a”a”的区别:的区别:a是单个字符常量,一个字符是单个字符常量,一个字符 “a” 是字符串常量,含有二个字符是字符串常量,含有二个字符a, 0 char c ; c=
7、a; c=“a”; 存储单元所存储的数据称为变量的值,这个存储空间的首存储单元所存储的数据称为变量的值,这个存储空间的首地址就称为该变量的地址。地址就称为该变量的地址。 二、变量:二、变量:变量是其值可以改变的量称为变量变量是其值可以改变的量称为变量。每一个变量都有一个名字,称之为变量名,它代表了某个每一个变量都有一个名字,称之为变量名,它代表了某个存储空间及其所存储的数据。存储空间及其所存储的数据。 标识符是以字母或下划线开头,由字母、数字或下划线标识符是以字母或下划线开头,由字母、数字或下划线组成的字符序列组成的字符序列一、控制语句一、控制语句: : 完成一定的控制功能完成一定的控制功能
8、if ( ) else 条件语句条件语句 for ( ) while ( ) do while ( ) continue 结束本次循环结束本次循环 break 终止循环或终止循环或 switch switch 多路分支语句多路分支语句 goto 转移语句转移语句 return 返回语句返回语句循环语句循环语句上面上面 9 9 种语句中的括号种语句中的括号( )( )表示其中是一个条件,表示其中是一个条件, 表示内嵌的语句表示内嵌的语句如:如:i+; a=3; i=i+1; 都是赋值语句都是赋值语句 二、表达式语句二、表达式语句: : 表达式加分号构成表达式语句表达式加分号构成表达式语句 典型的
9、是:由赋值表达式构成赋值语句典型的是:由赋值表达式构成赋值语句1. 1. i i的初值为的初值为3 3 k=(i+)+(i+)+(i+) k=(i+)+(i+)+(i+) 值为值为9(3+3+3), 9(3+3+3), i i的值为的值为6 6 k=(+i)+(+i)+(+i) k=(+i)+(+i)+(+i) 值为值为18(6+6+6), 18(6+6+6), i i的值为的值为6 6逻辑运算符及优先级:逻辑运算符及优先级: &( &(与与) |() |(或或) !() !(非非) )二元二元一元一元三、逻辑运算符:三、逻辑运算符:一、一维数组的定义:一、一维数组的定义:定义
10、方式定义方式: : 类型说明符类型说明符 数组名数组名 常量表达式常量表达式;例例: : intint a10; a10; float fa100, fb100; float fa100, fb100; char s120, s240; char s120, s240;1.1.常量表达式表示数组元素个数常量表达式表示数组元素个数, ,下标变化范围下标变化范围0 0到到N-1N-1 2.2.C C不允许动态数组不允许动态数组常量表达式中只能有常量和符号常量常量表达式中只能有常量和符号常量, , 不能有变量。不能有变量。二、一维数组的引用:二、一维数组的引用: 数组必须先定义数组必须先定义, ,
11、后使用后使用, , 而且只能逐个引用数组而且只能逐个引用数组元素元素, ,而不能一次引用整个数组。而不能一次引用整个数组。数组的表示形式数组的表示形式: : 数组名数组名 下标下标 下标可以是整型常量或整型表达式下标可以是整型常量或整型表达式int aN; 下标变化范围下标变化范围0到到N-1for(i=0; iN; i+) scanf(“%d”,&ai); printf(“%d”,ai); 一个较大的程序一般应分为若干个程序模块,每一个模块一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个定的功能。所有的高级语言中都有子程序这个概用来实现一个定的功能。所有的高级语言中都有
12、子程序这个概念念, , 用子程序来实现模块功能。在语言中,子程序的作用是用子程序来实现模块功能。在语言中,子程序的作用是由函数来完成的。一个程序可由一个主函数和若干个函数构由函数来完成的。一个程序可由一个主函数和若干个函数构成。由主函数调用其它函数,其它函数也可以互相调用。同一成。由主函数调用其它函数,其它函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。个函数可以被一个或多个函数调用任意多次。在程序设计中,常将一些常用的功能模块编写成函数,放在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于用函数,以减少重复编写程序在函数库中供公共选用。要善于用函数
13、,以减少重复编写程序段的工作量。段的工作量。 C C语言提倡把一个大问题划分成许多个小块,每一小块编制语言提倡把一个大问题划分成许多个小块,每一小块编制一个函数。这样一个函数。这样C C程序是由许多小函数而不是由少量大函数构成。程序是由许多小函数而不是由少量大函数构成。这样作的好处这样作的好处: : 各部分充分独立,任务单一,便于书写和调试。各部分充分独立,任务单一,便于书写和调试。 有些小函数还可以作为构件有些小函数还可以作为构件, , 被别的程序利用。被别的程序利用。先看一个简单的例子先看一个简单的例子例例 7.1 7.1main( )main( ) printstarprintstar(
14、 );( ); / /* * 调用调用prinstarprinstar函数函数 * */ / print_message( );print_message( ); / /* * 调用调用print_messageprint_message函数函数 * */ / printstarprintstar( );( ); / /* * 调用调用printstarprintstar函数函数 * */ / printstarprintstar( )( ) / /* * printstarprintstar函数函数 * */ / printfprintf(“ (“ * * * * * * * * * * *
15、 * * * * * * * * * * * * * * * * * * * * * * * * *n”);n”); print_message( )print_message( ) / /* * printmessageprintmessage函数函数 * */ / printf(“Howprintf(“How do you do!n”); do you do!n”); 运行情况如下:运行情况如下: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *owow do you do! do you do!
16、 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 指针类型是指针类型是C C语言中使用十分普遍的数据类型,它与一般语言中使用十分普遍的数据类型,它与一般的变量不同之处是它包含的不是数据的值,而是另一变量的的变量不同之处是它包含的不是数据的值,而是另一变量的地址。地址。 指针是指针是C C语言中的一个重要概念,也是一个比较难掌握的语言中的一个重要概念,也是一个比较难掌握的概念,正确而熟练地掌握了指针的概念和指针的使用,就能概念,正确而熟练地掌握了指针的概念和指针的使用,就能设计出复杂的数据结构和高效的
17、程序,没有掌握指针就没有设计出复杂的数据结构和高效的程序,没有掌握指针就没有掌握掌握C C语言的精华。语言的精华。 凡是程序中定义的变量,在编译时系统都给他们分配相凡是程序中定义的变量,在编译时系统都给他们分配相应的存贮单元,一般微机应的存贮单元,一般微机C C系统给整型分配系统给整型分配2 2个字节,给实型个字节,给实型分配分配4 4个字节,每个变量所占的存贮单元都有确定的地址,具个字节,每个变量所占的存贮单元都有确定的地址,具体地址在编译时分配。体地址在编译时分配。348.6xy4.5例例: int a=3, b=4; float c=4.5,d=8.6; char e=x,f=y;101
18、010121014a101810221023bcdef 要访问内存中的变量,在程序要访问内存中的变量,在程序中是通过变量名来引用变量的值。中是通过变量名来引用变量的值。但实际上,在编译时将每个变量但实际上,在编译时将每个变量名对应一个地址,在内存中不再名对应一个地址,在内存中不再出现变量名而只有地址。出现变量名而只有地址。 若程序中引用变量若程序中引用变量a a,系统找系统找到对应地址到对应地址10101010,然后从,然后从10101010,10111011两个字节中取出其中的值。两个字节中取出其中的值。直接访问直接访问:通过变量名或地址访问一个变量的方式为:通过变量名或地址访问一个变量的方
19、式为 “ “直接访问直接访问”。间接访问间接访问:把地址存放在一个变量中,然后通过先找出:把地址存放在一个变量中,然后通过先找出 地址变量中的值地址变量中的值( (一个地址一个地址) ),再由此地址找,再由此地址找 到最终要访问的变量的方法称为到最终要访问的变量的方法称为“间接访问间接访问”。 存放地址的变量是一种特殊的变量,它只能用来存放地址存放地址的变量是一种特殊的变量,它只能用来存放地址而不能用来存放其它类型的数据,需要专门加以定义。而不能用来存放其它类型的数据,需要专门加以定义。y101010121014a101810221023bcdef344.58.6x200220042006pa
20、201010141016pbpcpdpepf10101012101410181022102320082012物理关系角度物理关系角度pa3apb4bpcpdpe4.5c8.5dxepfyf逻辑关系角度逻辑关系角度一、指针变量的定义一、指针变量的定义在程序中对于存放地址的变量要专门定义。在程序中对于存放地址的变量要专门定义。如:如: intint * *p;p; 定义了一个指针变量定义了一个指针变量p p,它指向一个整型变量它指向一个整型变量 在定义一个指针变量在定义一个指针变量p p以后,系统为这个指针变量分以后,系统为这个指针变量分配了一个存储单元,用它来存放地址,但此时该指针变量配了一个存
21、储单元,用它来存放地址,但此时该指针变量并未指向一个确定的变量,并未指向一个确定的变量, 因为该指针变量中未输入确因为该指针变量中未输入确定的地址,要使一个指针变量指向整型变量,必须将整型定的地址,要使一个指针变量指向整型变量,必须将整型变量的地址赋给该指针变量。变量的地址赋给该指针变量。例:例:& &k k 取变量取变量k k地址地址 & &c2 c2 取数组元素取数组元素c2c2的地址的地址 &( &() ) 取结构取结构stst变量变量namename项的地址项的地址 &233, &( &
22、233, &(i+233) i+233) int *p, i=3;p= &i;P3i&iP3i& &:( (取地址运算符取地址运算符) )取当前变量的地址取当前变量的地址 运算对象不能是常量表达式或寄存器变量运算对象不能是常量表达式或寄存器变量 指针变量定义的一般形式:指针变量定义的一般形式: 存储类型存储类型 类型标识符类型标识符 *标识符;标识符;注注1. 标识符前面的标识符前面的“*”标示该变量为指针变量。标示该变量为指针变量。2. 一个指针变量只能指向同一类型的变量。一个指针变量只能指向同一类型的变量。请区别:请区别: 指针:就是地址指针:就是地
23、址 变量的指针:就是变量的地址变量的指针:就是变量的地址 指针变量:存放地址的变量指针变量:存放地址的变量intint * *p, a;p, a;printf(“%o”,pprintf(“%o”,p); ); 以八进制形式输出指针变量以八进制形式输出指针变量p p的值的值( (地址地址) )p=&a; p=&a; 将整型变量将整型变量a a的地址赋给指针变量的地址赋给指针变量p p,此时此时p p指向指向a a二、指针变量的引用二、指针变量的引用在定义了指针变量之后,可以对指针变量进行各种操作。在定义了指针变量之后,可以对指针变量进行各种操作。例如:给指针变量赋地址例如:给指针
24、变量赋地址; ; 输出指针变量的值输出指针变量的值; ; 访问指针变量访问指针变量所指的变量等。所指的变量等。scanf(“%d”,pscanf(“%d”,p); ); 向向p p所指的整型变量输入一个整型值所指的整型变量输入一个整型值printf(“%dprintf(“%d”,”,* *p); p); 将指针变量将指针变量p p所指向的变量的值输出所指向的变量的值输出* *p=5;p=5; 将将5 5赋给赋给p p所指的变量所指的变量C C语言中有关指针的运算符语言中有关指针的运算符 & & 运算符运算符: : 取地址运算符取地址运算符 * * 运算符运算符: : 指针运算符
25、或指明运算符,指针运算符或指明运算符,* *p p代表代表p p所指变量所指变量注意:此处的注意:此处的* *p p与定义指针变量时用的与定义指针变量时用的* *p p的含义是不同的。的含义是不同的。v定义定义 intint * *p; p; 中的中的 * * 不是运算符不是运算符, , 它只是表示其后的变量它只是表示其后的变量是一指针变量是一指针变量v程序中的程序中的 * *p p,其中的其中的* *是一个指针运算符,是一个指针运算符,* *p p表示表示p p指向的变指向的变量量如:如:printf(“%dprintf(“%d”,”,* *p);p); printf(“%d”,aprint
26、f(“%d”,a););结果都为结果都为 3P3i&iP3imain( )main( ) intint * *p1,p1,* *p2,i,j,k;p2,i,j,k; i=3; j=5; i=3; j=5; p1=&i; p2=&j; p1=&i; p2=&j; k= k=* *p1; p1; * *p1=p1=* *p2; p2; * *p2=k;p2=k; printf(“iprintf(“i=%d, j=%dn”,i,j);=%d, j=%dn”,i,j); 例例 :交换两指针变量所指向的值:交换两指针变量所指向的值运行情况运行情况: :i=5, j
27、=3&i1P15i&i2P23j* *p1p1* *p2p2三、指针变量的运算三、指针变量的运算当指针指向一个具有基本类型或组合类型中具有当指针指向一个具有基本类型或组合类型中具有基本类型的成分分量时基本类型的成分分量时, , 则它可以象基本变量一则它可以象基本变量一样使用。样使用。intint i, i, * *pi;pi;pi=&i;pi=&i;i=0;i=0;&iPi0i* *pi=0;pi=0;i+=1; i+=1; *pii+;i+;* *pi+=1;pi+=1;( (* *pi)+;pi)+; C语言的函数的参数传递是以语言的函数的参数传递是
28、以“传值传值”方式进行变量参数的信方式进行变量参数的信息传递,被调函数不能直接改变主调函数中参数的值。息传递,被调函数不能直接改变主调函数中参数的值。 当引入指针的概念后,我们可以在主调函数中将要改变内容的当引入指针的概念后,我们可以在主调函数中将要改变内容的变量地址作为参数传递给被调函数,而被调函数执行时,就按这个变量地址作为参数传递给被调函数,而被调函数执行时,就按这个地址去访问变量参数的值,相应的参数要被说明成指针类型。地址去访问变量参数的值,相应的参数要被说明成指针类型。 其中:其中:a是数组名,它表示该数组的起始地址,是个常量。是数组名,它表示该数组的起始地址,是个常量。 a恒等于恒
29、等于&a0, &ai是是ai元素的地址元素的地址, 即即 a+i=&ai 四、一维数组的指针表示法四、一维数组的指针表示法int a10; /* a0,a1,a2,a3,a4 .a9 */在编译系统计算实际地址时,在编译系统计算实际地址时,a+i中中的的 i 要乘上数据元素所占的字节数,要乘上数据元素所占的字节数,即:即:a+i(一个元素所占字节数一个元素所占字节数)例如:若整型数组例如:若整型数组a的起始地址为的起始地址为1010,则则a+1的实际地址是的实际地址是1010+12=1012a数组数组a0a1a2 aia9aa+1 a+ia+9 指针与数组的一致性指针与
30、数组的一致性: int a10, *p; p=a;p=&a0p+1: 指向指向a1p+i: 指向第指向第i个元素个元素p-i: 指向指向p前的第前的第i个元素个元素* *p p所以所以 *(a+i)a0*(p+1)a1*(p+i)ai要引用一个数组元素,要引用一个数组元素,有两种不同的方法:有两种不同的方法: (1) (1)下标法下标法aiai (2) (2)地址法地址法* *( (a+i)a+i)ai &ai而且而且 *(p+i)a+ipi,aia数组数组a0a1a2 aia9p,ap+1,a+1 p+i,a+ip+9,a+9例例: main( ) int a5=1, 3,
31、5, 7, 9, i ,*p; for(i=0; i5; i+) printf(“%d”,ai); printf(“n”); for(i=0; i5; i+) printf(“%d”,*(a+i); printf(“n”); for(p=a; pa+5; p+) printf(“%d”,*p); 注意:不能用以下方法输出注意:不能用以下方法输出a a数组数组的的5 5个元素,因为个元素,因为a a是起始地址,是起始地址,是个常数。是个常数。for(i=0; i5; i+) printf(“%d”,*a+);p=a; for(i=0; i”方式:方式: p=&student1 (*p).
32、age 或或 p-age ,二二者等价者等价2. 可定义指向结构的指针可定义指向结构的指针 struct student *p;struct student int num; char name20; char sex; int age; float score; char addr30;student1;4. 对结构变量可以像普通变量一样进行各种运算对结构变量可以像普通变量一样进行各种运算(根据其类型根据其类型 决定可以进行的运算决定可以进行的运算)如:如: student2.score=student1.score; sum=student1.score+student2.score; s
33、tudent1.age+; +student1.age;printf(“%dn”,student1);scanf(“%d”,&student1);printf(“%d,%s,%c,%d,%f,%s”,student1);printf(“%d,%sn”,student1.num, );scanf(“%d,%sn”,&student1.num, );注意注意1. 1. C C不允许把一个结构体变量作为一个整体进行输入不允许把一个结构体变量作为一个整体进行输入/ /输出输出操作操作2. 如果成员本身又属于一个结构体类型,则要用若干个成如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。员运算符,一级一级地找到最低的一级的成员。 只能对最低级的成员进行赋值或存取以及运算。只能对最低级的成员进行赋值或存取以及运算。如:如:employ.birthday.daystruct date int month; int day; int year; ;struct person char name20; struct date birthday; char sex; long num
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- TD/T 1031.5-2011土地复垦方案编制规程第5部分:石油天然气(含煤层气)项目
- JJF(纺织)108-2023口罩防护效果测试仪校准规范
- JJF(纺织)055-2023标准光源箱校准规范
- JJF(烟草)5.4-2014卷烟主流烟气中相关成分测量不确定度评定指南第4部分:巴豆醛
- 表面活性剂的特性和HLB值的计算11课件
- 考研复习-风景园林基础考研试题带答案详解(a卷)
- 风景园林基础考研资料试题及答案详解【考点梳理】
- 《风景园林招投标与概预算》试题A附参考答案详解【综合题】
- 2025-2026年高校教师资格证之《高等教育法规》通关题库附参考答案详解(典型题)
- 2025年济南四建集团有限责任公司招聘笔试备考题库有答案详解
- 2024年中国海鲜水饺市场调查研究报告
- 肠内外营养护理要点
- 2019版人教版新课标高中英语选择性必修1词汇表带音标单词表+带音标汉译英默写+无音
- 银行运营新员工入职培训
- 机械设备故障应急预案与处理措施
- 一个人与公司合伙协议书范文
- 中国生殖支原体感染诊疗专家共识(2024年版)解读课件
- 气压传动课件 项目五任务三 压印设备气动系统的组装与调试
- 《人工智能技术基础》课件 第5章 注意力机制
- 2024年法律职业资格考试(试卷一)客观题试卷与参考答案
- 户外空调外机清洗的安全协议书
评论
0/150
提交评论