期末复习第一部分:C中的数据首先,从主调函数和被调函数(模块间)要处理的任务数据的角度来总结数据的知识点:C语言中所讲授的数据有基本类型(整型、实型和字符型)和构建类型(数组、结构体、共用体、链表结点)之分。
构建类型是由基本类型构建而成,因此我们有必要对基本类型的数据做以更细致的研究。
一.基本类型的数据程序中的数据无非是以常量和变量两种形式描述。
在这里我们不妨思考两个问题:(1)为什么要用变量?(2)常量经常用在什么地方?(一)常量对于基本类型常量我们要掌握:常量分几类?每类的书写规则是什么?(1)整型常量:有十、八、十六进制三种表示形式。
(3.3.1、3.3.3)(2)实型常量:有小数和指数两种表示形式.(3.4.1、3.4.3)(3)字符型常量:有普通字符(可以是ASCII码表中的任何一个字符)、转义字符(表示控制命令的转义字符和用八进制十六进制描述的转义字符)(3.5.1)(4)字符串常量(3.5.4)(5)符号常量:实际上是不带参数的宏定义(3.2.1 、9.1.1)对于常量部分的考察无非是辨别书写形式,字符类的常量特别注意转义字符的辨认。
这就要求我们熟记书写规则。
例如以下题目:t-1:下面哪个是正确的整型常量表示A)019 B)0X34g C)-123D)o56 E) 12,000t-2: 下面哪个是错误的实型常量表示A).23 B)3.8E-4.5C)45E12 D)92.45t-3: 下面哪个是正确的字符常量表示:A)”b”B)’\\’C)’\34’D)’\0x9’E)’0123’t-4: 下面那个是正确的字符串常量表示:A)’abc’B)“”C)“”D)“\0x120”E)”abRT\0\\”F)”A”t-5: 字符串“ab034\0\\t\v\012”存储需要多少个字节?先组合转义字符,11个字节t-6: puts(“ab034\0\\t\v\012”);的结果是ab034?strlen(“ab034\0\\t\v\012”)的值是5?(二)变量对于基本类型的变量,我们知道要使用变量必须先定义变量,定义的基本格式是:数据类型变量名;要正确定义变量就必须清楚两点(1)什么样的变量名才是合法的?(3.2.2)(2)如何用类型符来描述所要定义的变量,这就涉及到变量所分配的字节数、存储特点、有无符号及各自表示的数值范围等。
变量的三大类:(1)整型变量(3.3.2)分配字节:2字节(int/short) 4字节(long)(TC2.0)存储特点:存储的是数值的补码形式符号标识:signed unsigned表示数值范围:表3-1(2)实型变量(3.4.2)分配字节:4字节(float) 8字节(double) 16字节(long double)存储特点:图3-7表示数值范围:表3-2(3)字符型变量(3.5.2、3.5.3)分配字节:1字节(char)存储特点: 存储字符的ASCII值符号标识:signed unsigned表示数值范围:signed char: -128~+127Unsigned char: 0~255基本类型变量这部分知识主要的考察形式:(1)变量名(标识符)的正确与否鉴别(2)变量类型标识符的识别与应用(3)变量定义语句中对变量进行初始化的形式正确与否鉴别(3.6)例如以下题目:t-7: 以下正确的变量标识符是:A)3sum B)INT C)_3max D)case E)p&sum F)s_m_at-8: 以下正确的变量类型声明是:A)signed int B)int long C)unsigned long D)short longt-9: 下面程序段在tc2.0和cfree3.0运行时的输出各为-1 / 65535?unsigned int a=65535;printf("%d",a);t-10: 以下正确的定义语句是:A)int a=b=5 ; B)char ch=97 ;C)unsigned int x, y=-5; D)int a=3,b=5;E)int c=3(二)建构类型的数据程序给出的任务数据可以是基本类型的,也可以是集合性质的。
集合中的所有数据可以是同类型的即数组(7.1.1~7.1.3、7.2.1~7.2.3、7.3.1~7.3.4),也可以是不同类型的(例如学生记录)即结构体(11.1~11.5)。
在这部分知识中主要考察的形式有:(1)数组及结构体的定义、初始化和引用(2)计算集合(数组、结构体变量)存储所需要的空间(3)数组定义时缺省形式的一些规则:●在定义一维数组时,若给出了所有初始值则一维中括号内的数值可以省略,由初始值的个数来确定其值。
但若没有给出初始值,则不能省略中括号内的值。
例如:int a[]={1,2,3}; int b[]={3};都对。
int a[]; 不对。
●二维数组的第2维列数任何情况下都不能缺省,第1维中的数值若在给出初始值的按情况下可以缺省。
例如int a[2][]={{1,2}{3,4}}不对。
inta[][2]={1,2,3,4,5};正确。
(4)只有在数组定义时可以给数组整体赋值,不能单独用赋值运算“=”给数组整体赋值,特别是字符串数组。
例如int a[3]; a={1,2,3}; char b[10];b=”china”; char c[2][10]; c[0]=”chian”;c[1]=”japan”都不对, 只能是int a[3]={1,2,3};char b[10]=”china”; char c[2][10]={“china”,”japan”};(5)函数体内定义的数组名是地址常量,而由数组名表示的一些表达式也是常量表达式。
如int a[3]={1,2,3}; a,a+i都是常量。
int b[3][3]={..};b,b[0],b+i,*(b+i)也都是常量形式。
常量形式意味着该式只能出现在等号的右边,而不能作为左值。
例如以下题目:t-11: 以下正确的数组定义形式是:A)int n; scanf(“%d”,&n); int a[n];B)#define N 10 int a[N]; C)int b[3][4];D)char b[ ][4];t-12: 以下不正确的数组定义和初始化形式是:A)int a[]={1,2,3}; B) int a[]={0}; C) int a[][3]={1,2,3,4};D)int a[2][2]={{1,1},{2,2},{3,3}} E) char a[10]={“hello”}; F) char a[]=”hello”;G)int a[2][]={{1,1},{2,2}}; H) char a[10]; a=”hello” ;I)char a[2][10]; a[0]=”hello ”;a[1]=”tom”; J) char a[2][10]={“hello”, “tom”};t-15: 若有数组int a[2][2]={1,2,3,4},则能引用数组元素4的形式为:A) a[1][2] B) *(a+1) C) *(*(a+1)+1) D) *(a+3) E) a[1][1] F) *(a[1]+1)t-16: 若有数组int a[3]={1,2,3};则能引用数组元素2的形式为:A) a[1]B) *(a+1) C) &a[1] D) a+1t-11: 以下正确的数组定义形式是:A)int n; scanf(“%d”,&n); int a[n];B)#define N 10 int a[N];C)int b[3][4];D)char b[ ][4];t-17: 若有如下程序段,则对于“TOM”串中首字符T的正确引用形式为:struct A{int age;char name[10];};Struct A t[2]={1,”TOM”,2,”MIKE”},*p=t;A)(*p).name B) t[2].name C)t[1].name[0] D)p->name[0]第二部分:数据的输入输出讨论完C中的数据我们再讨论各种数据的输入与输出。
如果数据输入不当再完美的程序也不可能显示出预期的结果。
这部分作业的输入出现的问题较多,我们要熟记输入规则但不能死记硬背。
下面的这三对函数都包含在文件“stdio.h“中,因他们的输入输出终端是标准设备-键盘和显示器,因此称为标准的IO函数,标准IO函数的使用与缓冲区有密切的联系。
学习本部分时最重要的是要理解输入缓冲区中数据流和输入函数格式匹配的输入机制(参见本章手册中的参考资料)C中的输入输出是调用系统库函数来实现的,常见有三对库函数:(1)s canf()/printf(): 可输入输出任何类型的数据。
一次函数调用可以实现多个数据的IO。
(2)g ets()/puts():只对字符串数据进行输入输出操作。
一次函数调用只可实现一个串的IO。
(3)g etchar()/putchar():只对字符数据进行输入和输出操作。
一次函数调用只可实现一个字符的IO。
对于这几对函数的使用主要考察:(1)s canf、printf的使用规则(4.5,可参考本章教学目标)(2)g etchar和putchar的使用格式(4.4)(3)g ets与scanf的使用区别例如以下题目:t-18:若有程序段int a; float x; char c[10];scanf(“%2d%f%s”,&a,&x,c);当程序执行时从键盘输入 23456.78abcd<CR> ,a=23 x=456.78、和 c=”abcd”t-19:若有定义int a;float b; 则scanf(“a=%d;b=%f”,&a,&b);的输入形式是a=3;b=4.5t-20:若有定义float x;则语句scanf(“%5.2f”,&x)是否正确?不正确t-21:若有定义char a,b;对于scanf(“%c%c”,&a,&b);若输入A B<CR>,则a=A b=空格?t-22:若用getchar()函数输入一个字符存储到字符变量ch中再将其输出,则以下正确的写法是:A)getchar(ch); B) ch=getchar(); C) ch=putchar(); D) putchar(ch);t-23: 若有语句scanf(“%s”,a); 程序运行时若输入hello tom!<CR>,则存储到a中的串是“hello”t-24: 若有int a=97; float x=34.56; char c=’B’;则语句printf(“%c %d %d”,a,x,c)的输出是a 34 66t-25: 若有程序段:char a, b , s[10],t[10];a=getchar();b=getchar();gets(s);gets(t);printf("a=%c,b=%c,s=%s,t=%s",a,b,s,t);程序运行时若输入A<CR>B<CR>Hello<CR>TOM<CR>程序输出是a=A,b=<CR> ,s=B,t=HELLOt-26: 若有如下定义,写出每个变量对应的格式符。