C语言试题、学习、考试大全、历年真题11

更新时间:2023-10-01 00:58:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言复习提纲

第一章

1.程序设计语言:机器语言、汇编语言、高级语言。

2.高级语言翻译成机器语言的两种方式:编译方式、解释方式。 3.算法+数据结构=程序

4.结构化程序设计的三种基本结构:顺序结构、分支(选择)结构、循环结构 5.算法的表示方法:自然语言、传统的程序流程图、N-S流程图。 6.结构化程序设计的32字原则:

7.C语言的产生及发展:UNIX操作系统 8.C语言的特点P13页:

9.C语言由函数组成,有且仅有一个main函数。 10.函数:说明部分、函数体。

11.一条复杂语句分行书写,用反斜杠(\\)续行。 12.注释用/*??*/ 第二章

1.单字符输入/出:getchar()、putchar(字符变量)。 2.字符串:gets(字符数组名)、puts(数组名)。

3..格式化输入: scanf(“格式控制符”,地址列表);

格式控制符:%c、 %d 、 %o 、 %x、 %s、 %f

? 若输入long型、double型应加l,如%ld、 %lo、 %lf

? 格式%s输入字符串不包含空格,且对应地址表列是字符数组名。 ? 默认分隔符:空格、回车、Tab键(也可按域宽截取)

? 格式控制符间不宜加其它字符,如加入其它字符,输入时应原样输入,否则数据接收

错误。如:scanf(“%d, %d”,&a,&b); 输入数据时两数据间要有逗号;

scanf(“%d %d”,&a,&b); %d间有两个空格,则输入数据时至少有两个空格。 ? 输入函数中%f格式不能带小数,如:scanf(“%7.2f”,&a)是错误的。 ? %c格式输入单字符,空格字符和转义字符都作为有效字符接收。

? %*d表示跳过它对应的输入数据。

4..格式化输出:printf(“格式控制符”,输出列表);

? 格式控制符部分可加入其它字符,原样输出。如:提示语或使输出结果清楚显示 ? 输出列表:可以是变量、常量、表达式、函数调用等。

? 转义字符:P19页,以斜杠(\\)开始,作为一个字符,如求字符串长度:“jk\\\\gk\\bl\\0k\\nlj”,长度为7。

? 注意:输出 long 、double型数据,用%ld、%lf ?

可设定输出宽度,m和n,如:]、%6.2f、%.2f

? 负号表示域内向左对齐,如:%-12d 第三章 1.常量:

? 整型常量:235、0235、-0x235(前可加负号),长整型:-12l、-065l、0x55l等。 ? 实型常量:小数形式、指数形式。

? 字符常量:用单引号,如‘c’(注意转义字符)。

? 字符串常量:用双引号,如“hglhg”、“a”,内存占用为实际长度加1。 ? 符号常量:无参宏(#define)。 2.变量:

? 标识符命名规则:4条(P37页)。 ? 各种类型变量的长度。

? 数据类型转换:自动、强制。

? 注:强制类型转换只得到所需类型的结果值,原变量或表达式的类型仍为原类型。如

(float)(x+y)

3.各种运算符运算规则及其优先级P51页。 4.补充---逻辑表达式的优化运算:

? &&运算:只要算出第一个表达式为0,第二个表达式不再运算。 ? ||运算:只要算出第一个表达式为1,第二个表达式不再运算。

如:int i=0,j=0,a=6; if ((++i>0)||(++j>0)) a++; printf(%d%d%d”,i,j,a); 结果i为1,j为0,a为7。

5.其它运算符:条件运算、逗号运算、长度运算符(形式:sizeof 表达式 或sizeof (数据类型))

第四章

1.if、while、for中的表达式,一般是逻辑或关系表达式,也可以是任意类型表达式。如while(a=5)?.

2.如果有多条语句,必须用大括号括起,构成复合语句。

3.switch语句中case后面只能是常量值;若执行完某case后的语句没遇到break,则继续执行下一个case 语句。

4.循环程序:注意循环变量的初值、修正值、循环条件等,以及循环中用到的某些变量赋初值,如求累加和变量。5.一般是先判断条件,再执行循环体;但do—while语句是先执行一遍循环体,再判断条件。 6.break、continue语句。

7.本章主要是算法构思。(先考虑好需要那些变量,即数据结构,再考虑怎样求解问题) 第五章

1.数组定义:int a[10];或int a[N](N需要事先定义为符号常量:#define N 10 ); 数组长度必须是常量值,不能是变量,可以是在程序开始前定义的符号常量,进行长度定义。

2.下标引用:0~N-1,切记不能引用到N。(int a[5]; a[5]=10;这种引用是错误的) 3.数组初始化时可省略长度定义。

4.数组定义后如没有给任何一个元素赋初值,对于static类型,各元素初值为0;对于auto类型,各元素值不定。

5.数组不能整体赋值。数组中各元素值的输入/出,应使用循环程序逐个输入/出;字符数组例外(gets、puts)。 6.数组中的两种排序方法:

? 冒泡法:外循环为i=0;i

个元素,并互换。(考试内容)

? 选择法:外循环为i=0;i

循环中比较a[min]和a[j]两个元素,不互换,只让min=j;内循环结束后再进行互换,a[i]和a[min]互换。(不做考试内容,但是希望同学们记住这种好的排序方法) 7.二维数组:按行存放;赋初值的5种情况P83页。

8.字符数组:通常定义较长长度,如:char s[50]; 通常用于存放字符串,结束标志为‘\\0’。

可用字符串常量为其初始化,如:char s[]=“sdkhg”; 也可由键盘输入,如gets(s);输出用puts(s);

注意:char s[5]={‘a’,’d’,’f’,’g’,’w’};此种形式不是字符串,无字符串结束标志,仅仅是普通一维字符数组,不能用puts输出,只能用%c格式逐个输出。 字符数组的输入/出还有两种形式:%c、%s。

9.字符串函数:strcpy(s1,s2)、 strcat(s1,s2)、 strcmp(s1,s2)、 strclen(s)、 strupr(s)、 strlwr(s) 第六章

1.函数定义:int func(int a,int y);如定义时没指明函数类型,如:fun(int a);默认是int型,返回值不确定。

2.声明:函数定义在前,使用在后,可省略函数声明,反之需要在使用前声明。函数声明的几种变通形式。

? 函数声明后加分号,而函数定义后没有分号。 3.函数调用:函数名(实参表);

? 实参与形参个数、类型、位置一致。

? 形参与实参占据不同的存储单元;形参只在函数调用时才为其分配存储单元,函数调用

结束后释放。

? 实参与形参之间是传值调用,单向传递关系,形参值改变,不会影响实参值。 ? 补充:函数可嵌套调用,不可嵌套定义。

? 嵌套调用:一个函数内部又调用另外一个函数。 ? 递归调用:一个函数调用它自身。(考试不作要求) 4.数组作为函数参数:void func(int a[],int n);

? 传递的是实参数组的首地址。调用时实参是数组名,如func(a,10);

5.多维数组: void func(int a[][5],int n);(可省略第一维,但不能省略其它高维)。 6.从作用域角度,变量分为:全局变量、局部变量。

? 局部变量:在函数内部定义,只能在该函数中使用,包括函数的形参和复合语句中定义

的变量,main函数中定义的变量也是局部变量,不能被其它函数使用。 ? 不同函数内定义的同名变量,互不影响,因其作用域不同,内存空间独立。

? 全局变量:在函数外部定义,作用域从定义开始到本文件结束。其间的所有函数都可以

使用它,可在各函数间传递值,但容易带来副作用,降低模块独立性。 7.变量的存储类别:auto、static、register、extern。 8.局部变量的存储类别: auto、static、register。

? auto型的生存周期时函数被调期间,两次调用之间不保留值。 ? static型的生存期是整个程序运行期间,保

留上一次调用后的值,且只赋一次初值(在程序运行前初始化,默认初值为0)。如:

void func(int n) 9.全局变量的存储类别: static、extern。

{ static int a=1; ? 全局变量总是存放在静态存储区间,生存期

a+=n; 是整个程序运行期间,只赋一次初值,在程

printf(“%d,”,a); 序运行前初始化,默认初值为0。 } ? 用extern对全局变量加以声明,可以将其作用域扩充到整个文件或其它文件。例:Pmain() 113页、P页。 { int b=2; 114?

定义全局变量时加上static,可将其作用域 func(b); 限制在本文件中,不能被其它文件使用。 func(b); 例:P114页。

} 程序运行结果为3,5, 10.函数的作用域是全局的,可被其它函数调用。

? 函数存储类别:static、extern。默认为extern型。

?

如:static int func(int a);则函数不被其它文件使用,所以两文件中的同名静态函数,互不干扰。

第七章

#define SQR(x) x*x main( ) 1. 预处理命令以“#”开头,末尾不加分号。在

{ int a,k=3; 程序编译之前处理。

2.宏替换:将函数中出现宏名的地方用宏体进行替 a=++SQR(k+1); 换。

printf(\; ? 宏体可以是数字、也可以是组成C表达式或

} 语句的其它字符,还可以引用已定义的其它替换后的表达是为宏名。

a=++k+1*k+1 ? 宏的作用域:定义宏之后到本源文件结束,可用#undef提前结束。 ? 无参宏(符号常量):#define PI 3.14

注意:函数中双引号内的宏名不替换,如 printf(“PI”); ? 有参宏:#define 宏名(形参表) 宏体 ? 引用:宏名(实参表)

? 注意有参宏如果宏体和参数没用括号括起,可能有副作用。 ? 分析有参宏的程序时,必须先将宏替换后的表达式写到纸上,再分析结果。 ? 文件包含:#include <文件名> 搜索系统标准目录 #include “文件名” 先搜索当前目录, 找不到再搜索系统标准目录

第八章

1.指针的基本概念:指针≡地址; 2.指针常量:

某已知变量的地址,或数组名等,:int a,b[5];此时&a和b就是指针常量(固定值)。 3.指针变量:如int a,*p=&a; char s[9],*q=s; ? 赋值:必须赋地址值,如int a,*p; p=&a;

如p=2001;是错误的。

4.间接访问:*p=5;等同于a=5;

5.指针作为函数的参数,传递的是实参变量的地址, 如:void func(int *p)

? 调用时用某变量的地址常量,或指向该变量的指针作为实参,如主调函数中有定义int

a,*q;q=&a;则可用&a或q作为实参进行调用,即func(&a);或func(q); 都是将变量a的地址传递给形参指针p,使指针p指向变量a。函数中使用*p就是对a的间接访问,就可以改变a的值,或者将结果放入a中。但形参变量本身改变,反过来不会影响实参指针值。

6.指针与一维数组:int a[10],*p=a;则a代表数组首地址,是指针常量, ? 元素的表示方法:a[i]、*(a+i)、 p[i]、*(p+i)

? 元素地址:&a[i]、a+i、 &p[i]、p+I

?

区别:a实指针常量,只不能变,而p是指针变量,可进行增减运算;所以常通过p的增减运算来快速访问数组a,如:

while(p

或while(p

? 执行p++后指针拨动的单元数(由元素类型决定)

7.一维数组作为函数形参,实际上就是一个指针变量,如:func(int a[],int n); 等同于func(int *a,int n);

? 函数声明的几种变通形式, P144页。 ?

所以指针a在函数中值可以改变,如*a++,不同于函数内定义的数组如:int b[5];这里b是指针常量。

8.指针与字符串:char *p,s[50]=“fdjfjdfj”; p=s;

? 可用p间接访问字符串,如指针法:for( ;*p!=‘\\0’;p++) 或下表法:for(i=0;

p[i]!=‘\\0’;i++)

9.指针形参在函数间传递字符串:void copy(char *s1,char *s2)

{ while(*s1++=*s2++); }

? 调用时用字符数组名或指向某字符串的指针做实参,

如:char *p=“sdgygkh”; char ss[50]; func(ss,p) ; ? 函数调用的灵活形式:func(ss+2,p)或func(ss,p+2)

? 注意:输入字符串常用gets函数,但参数应是字符数组名,或已指向某字符数组的指

针,如:char s[50],*p; gets(s);是正确的,而gets(p)是错误的,因为p没被赋地址值,无任何指向。改正:p=s; gets(p);

注意:以下的 10、11、12、13节所列内容不作期末考试要求,但是等级考试要考,同学们如果课下有时间最好看看

10.数组指针与多维数组:int a[3][4]; int (*p)[4]; p=a;

? p指向a的一整行,此时*p就代表a[0];如果执行p++,则p指向下一行,即*p代表

a[1],p跳过单元数为2*4=8个字节。 ? 引用元素的两种形式:p[i][j]或(*p)[j]

? 几个等价关系式:由x[i]等价于*(x+i)和&x[i]等价于x+i得出:

a[i][j]等价(*(a+i))[j]等价*(a[i]+j)等价*(*(a+i)+j) &a[i][j]等价*(a+i)+ j等价a[i]+j

? 指针形参在函数间传递多维数组:int func(int (*b)[4],int n); 等价于int

func(int b[][4],int n);

? 调用时用二维数组名做实参,如:func(a,3);11.指针数组:char *s[3];表示数组s有3个元素,每一个元素都是一个指针变量,都可以指向一个字符串。

? 赋初值:char *s[3]={“sdgg”,”ww”,”q”};或单独赋值:s[0]=“sdgg”;

s[1]=“ww”;s[2]=“q”;

? 用于指向多个字符串。

? 也可用字符数组存储多个字符串,只是占用内存空间大。 11.指向指针的指针:二级指针,char **p;

? 用于访问指针数组,或在函数间传递指针数组,通常就是传递多个字符串。 12.char *s[3]={“sdgg”,”ww”,”q”};char **p; p=s;

? p指向数组s的首地址,此时*p代表s[0],即指向第0个字符串,*p和s[0]都是第0

个字符串的首地址,

? 可用gets(*p)或gets(p[i])来输入字符串,用puts(*p) 或puts(p[i])来输出字符串。? 在函数间传递多个字符串的参数形式:func(char **s,int n)或func(char *s[ ],int

n)或func(char s[ ][ ],int n) ? 总结:

1、通常在主调函数中定义指针数组指向多个字符串。

2、函数:func(char **s,int n)或func(char *s[],int n)传递多个字符串首地址; 3、在函数内的使用形式:s[i]或*(s+i),都代表第i个串首地址,或*s++;

4、一般都是整串操作,循环一般使用字符串个数进行控制,如:for(i=0;i

? 字符串操作函数:strlen()、strcpy()、strcmp() 13.返回指针值的函数:char *func(char *s,char ch)

? 切记:返回的是地址,在主调函数中应使用指针类型变量接收函数返回值,

如:char *p,a[]=“asdgg”; p=func(a,’d’);

14.动态内存分配:掌握malloc 函数的使用方法。

第九章

1.结构体:struct ,.定义的几种形式P177页。成员可以是任意类型。

成员引用:结构体变量名.成员名

? 占用内存大小为:各成员占用内存之和。

? 结构体数组:同普通数组一样使用。初始化时注意双重括号。

? 结构体指针:(*p).成员名或p ->成员名只能用结构体变量地址赋值,不能赋某成员的地址,如:p=&stu.name;是错误的。

? 通常定义变量或形参时必须加上struct,如: void func(struct student *p)

{ struct student a[4],temp;??}

2.共用体:union,定义形式同结构体。成员引用:共用体变量名.成员名 ? 占用内存大小为:共用体中较长的成员的长度。

? 某一时刻只有一个成员起作用,最后一个存放的成员值有效。结构体类型与共用体类型

可互相嵌套使用,即结构体成员的类型也可以是共用体类型,反之亦然。 3.枚举类型:如:enum week{sun,mon,tues,wen,thur,fri,sat}day; ? 枚举元素就是枚举变量的可能取值,如:day=mon;

?

枚举元素视为常量,其值就是序号(0 ~ n-1)。也可以在定义时改变其值,如:enum s{a=3,b=1,c=2};

4.类型标识符自定义:typedef如:typedef int INTEGER; typedef struct{?? }STU;

typedef int ARR[10]; 以后可直接使用INTEGER、ARR、STU类型进行变量定义,书写简略。

? 注意:只能为类型另起新名,不能创造新类型,也不能为变量或函数重新命名

(define)。

第十章 文件

1.流式文件:文本文件、二进制文件。

? 文本文件:若干字符序列,较长,可用type命令或记事本查看。

? 二进制文件:若干字节序列,短,存取速度快,不能用type或记事本等查看。 2.文件操作:读操作、写操作。使用有关文件函数来完成,需包含头文件stdio.h

3.操作步骤: ①定义文件类型指针 ②打开文件 ③检测指针 ④读/写 ⑤关闭文件。 4.打开文件时的使用方式各6种,P207页。5.读/写函数:fgetc(fp)、fputc(ch,fp)、fread(*p,size,n,fp)、 fwrite(*p,size,n,fp)、fgets(*str,n,fp)、fputs(*str,fp)

fscanf(fp, “格式控制符” ,地址列表)、fprintf(fp, “格式控制符” ,输

出列表),以上函数是简要书写,具体参考P238页。

6.三个标准设备文件指针:stdin、stdout、stderr

7、有关文件操作函数ferror(fp)、feof(fp)、clearerr(fp); 10.控制循环:while((ch=fgetc(fp)) !=EOF) 或while(!feof(fp))

EOF是在头文件中定义的符号常量,值为-1代表文件结束。

答疑:在信息楼901 办公室 时间安排人员安排以任课教师通知为准

25、year%4==0&&year0!=0,yes=0 26、

28、x:y,u:z 29、445567.0 30、

31、s<110&&s>=100,s<60||s>=110,m=0 32、break;,default:,case 0: 33、s<60||s>109,else m=5 34、3 35、10

36、7 9 11 13 15

37、right,sjhiu,right?

38、c!=’\\n’,c>=’0’&&c<=’9’ 39、3 40、** 41、i<=x

42、2*x+4*y==90 43、1,3

44、t=t*x,t=-t/i

45、0,z<10,100*x+10*y+z 46、I=1,m=0,m+=i 47、####

### ##* #**

48、k!=0,k/10,continue 49、i<=9,j%3!=0 第五章 一、选择题 77 D 78 A 79 A 80 D 81 C 82 A 83 B 84 D 85 B 86 B 87 C 88 D 89 B 90 D 91 B 92 D 93 D 94 C 95 B 96 B 97 A 98 D 99 D 三、 空题 50、按行存储 51、0,4

52、i*m+j 53、0,6

54、gets,gets(s)

55、schoolstudent,6,0

56、strcpy(str1,str2);strcat(str1,str2) 57、j<=2,b[j][i]=a[i][j] 58、j=2,j>=0

59、b[i][j+1]=a[i][j],i=0,i<2,printf(“\\n”) 60、i=j+1,found=1 61、i<=7,j=i+7

62、’\\0’,s1[x]=s2[x] 63、1110

64、strlen(t),t[k]==c 65、y<3,z==3 66、i

67、(strcmp(str[0],str[1])<0?str[0]:str[1]) 69、TEACH 第六章

一、 选择题 100 C 101 D 102 A 103 C 104 B 105 C 106 B 107 B 108 B 109 A 110 A 111 D 112 D 113 C 114 A 115 A 116 A 二、 填空题 69、main()函数

70、说明部分、执行部分 71、300,200,100 72、2

73、’\\0’,str[i],num++ 74、i<2,j<4,arr[i][j] 75、b=m,j%i 76、char ch2,k 77、2*ff,3*ff*ff

78、’\\0’,’\\0’,str[i] 79、min=q 80、54

81、char c,a

第七章

一、 选择题 117 B 118 C 119 B 120 A 121 D 122 D 123 D 124 B 125 C 126 D 127 A 128 D 129 D 二、 填空题 83、160 84、1 85、3 86、9

87、 9 9 11 88、9.0 89、

90、#include 第八章

一、 选择题 133 A 134 B 135 CD 136 CD 137 A 138 C 139 C 140 A 141 C 142 D 143 B 144 C 145 A 146 D 147 B 148 C 149 B 150 A 151 D 152 B 153 B 154 D 155 B 156 A 157 D 158 A 159 D 160 D 161 A 162 C 163 B 164 C 165 C 166 B 167 C 168 A 169 B 170 B 171 D 172 C 173 C 174 A 175 A 176 B 177 D 178 D 179 B 180 D 181 B 182 C 183 D 184 B 185 C 186 187 B 188 A 189 190 B 191 C 192 A 193 B 194 D 195 C 196 CC 197 BBC 198 CAC 199 AC 200 CB 201 BD 202 AC 203 DA 204 ADD 205 DA 206 B 207 A 208 B 209 C 210 D 211 C 212 A 213 D 214 C 215 B 216 C 第九章 一、 选择题 219 C 220 D 221 B 222 B 223 A 224 C 225 C 226 D 227 D 228 A 229 D 230 D 231 B 232 D 233 A 234 A 235 D 236 C 237 C 238 C 239 C 240 B 241 C 242 B 243 C 244 B 245 C 246 A 二、填空题 150、5,t 151、15,7

152、sizeof(ttt) 153、c,e

154、7 15.1 155、9,9 第十章

一、 选择题 260 C 261 A 262 C 263 C 264 C 265 A 266 C 267 A 268 D 二、填空题 167、顺序存取 随机存取 168、ASCII码 二进制代码 169、字符 流式

170、!feof(fp) fgetc(fp) n++ 171、fname (ch=getchar()) fp

172、”exam1.c”,”r” “exam2.c”,”w” fgetc(fp1),fp2 173、fopen(“num.dat”,”r”) fp,”%d”,&temp z++

全国计算机等级考试二级大纲(2002年版 C语言)

基本要求

1、具有计算机的基础知识

2、理解操作系统的基本概念,掌握常用操作系统的使用

3、掌握基本数据结构和常用算法,熟悉算法描述工具——流程图的使用 4、能熟练地使用一种高级语言或数据库语言编写程序、调试程序

考试内容

一、基本知识与基本操作

㈠、基础知识

1、计算机系统的主要技术指标与系统配置

2、计算机系统、硬件、软件及其相互关系

3、微机硬件系统的基本组成。包括:中央处理器(运算器与控制器),内存储器(RAM与ROM),外存储器(硬盘、软盘与光盘),输入设备(键盘与鼠标)输出设备(显示器与打印机)

4、软件系统的组成,系统软件与应用软件;软件的基本概念,文档;程序设计语言与语言处理程序(汇编程序、编译程序、解释程序)

5、计算机的常用数制(二进制、十六进制及其与十进制之间的转换);数据的基本单位(位、字节、字)

6、计算机的安全操作;计算机病毒的防治 7、计算机网络的一般知识 8、多媒体技术的一般知识 ㈡、DOS的基本操作

1、操作系统的基本功能与分类 2、DOS操作系统的基本组成 3、文件、目录、路径的基本概念

4、常用DOS操作,包括: 初始化与启动;

文件操作(TYPE,COPY,DEL,REN,XCOPY,ATTRIB); 目录操作(DIR,MD,CD,RD,TREE,PATH); 磁盘操作(FORMAT,DISKCOPY,CHKDSK);

功能操作(VER,DATE,TIME,CLS,PROMPT,HELP); 输入输出改项

㈢、Windows的基本操作

1、Windows的特点、基本结构及其运行环境

2、Windows用户界面的基本元素。包括:窗口、图标、菜单、对话框、按钮、光标等 3、Windows基本操作。包括:启动与退出、鼠标操作、窗口操作、图标操作、菜单操作、对话框操作

二、程序设计

1、能运用结构化程序设计方法编写程序 2、掌握基本数据结构和常用算法

3、能熟练使用一种高级语言或数据库语言 三、上机操作

在指定的时间内使用微机完成下述操作:

1、完成指定的计算机基本操作(包括微机启动和操作命令的使用) 2、按给定要求编写和运行程序

3、调试程序,包括对给定的不完善的程序进行修改和补充,使之得到正确的结果

C语言程序设计

一、C语言的结构

1、程序的构成、main函数和其它函数

2、头文件、数据说明、函数的开始和结束标志 3、源程序的书写格式 4、C语言的风格

二、数据类型及其运算

1、C的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法 2、C运算符的种类、运算优先级和结合性 3、不同类型数据间的转换和运算

4、C表达式类型(赋值表达式、算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式)和求值规则

三、基本语句

1、表达式语句、空语句、复合语句 2、数据的输入与输出、输入输出函数的调用 3、复合语句

4、goto语句和语句标号的使用 四、选择结构程序设计

1、用if语句实现选择结构

2、用switch语句实现多分支选择结构 3、选择结构的嵌套 五、循环结构程序设计

1、for循环结构

2、while和do?while循环结构 3、continue语句break语句 4、循环的嵌套

六、数组的定义和引用

1、一维数组和多维数组的定义、初始化和引用 2、字符串和字符数组 七、函数

1、库函数的正确调用 2、函数的定义方法

3、函数的类型和返回值

4、形式参数与实在参数、参数值的传递 5、函数的正确调用、嵌套调用、递归调用 6、局部变量和全局变量

7、变量的存储类别(自动、静态、寄存器、外部),变量的作用域和生存期 8、内部函数和外部函数

八、编译预处理

1、宏定义:不带参数的宏定义、带参数的宏定义 2、“文件包含”处理 九、指针

1、指针与指针变量的概念,指针与地址运算符

2、变量、数组、字符串、函数、结构体的指针以及指向变量、数组、字符串、函数、结构体的指针变量;通过指针引用以上个类型的数据 3、用指针做函数参数 4、返回指针值的函数

5、指针数组、指向指针的指针、main函数的命令行参数 十、结构体与共用体

1、结构体和共用体类型数据的定义方法和引用方法

2、用指针和结构体构成链表,单向链表的建立、输出、删除与插入 十一、位运算

1、位运算符的含义及使用 2、简单的位运算 十二、文件操作

只要求缓冲文件系统(即高级磁盘I/O系统), 对非标准缓冲文件系统(即低级磁盘I/O系统)不要求

1、文件类型指针(FILE类型指针)

2、文件的打开与关闭(fopen、fclose)

3、文件的读写函数(fputc、fgetc、fputs、fgets、fread、fwrite、fprintf、fscanf), 文件的定位函数(rewind、fseek)

三级考试大纲(PC技术)2002年版

基本要求

1、具有计算机及其应用的基础知识。

2、熟悉80X86微处理器的结构、原理及其宏汇编语言程序设计。 3、掌握个人计算机的工作原理及逻辑组成和物理结构。

4、掌握Windows操作系统的主要功能、原理、配置及其维护管理。 5、熟悉个人计算机常用外部设备的性能、原理及结构。

考试内容

一、计算机应用的基础知识

1、计算机技术的发展,计算机信息处理的特点,计算机分类,PC机的组成与性能评测。2、数值信息在计算机内的表:整数的表示和运算,实数(浮点数)的表示和运算。 3、文字信息与文本在计算机内的表示:西文字符的编码,汉字的输入码、国标码、机内码,汉字的输出,通用编码字符集与Unicode。

4、多媒体技术基础:数字声音的类型,波形声音与合成声音,图像、图形的特点与区别,图像、图形和视频信息在计算机内的表示。

5、计算机网络的基础知识:计算机网络的功能、分类和组成。数据通信的基本原则,网络体系结构与TCP/IP协议,因特网与IP地址,计算机局域网初步。

二、微处理器与汇编语言程序设计

1、微处理器的一般结构:寄存器组,存储器管理,总线时序,工作模式及典型系统配置。

2、Pentium微处理器的功能与结构:内部结构及工作原理,寄存器组,工作模式及存储器管理,中断管理,总路时序。

3、80X86系列微处理器指令系统:指令格式与编码,寻址方式,指令系统。

4、80X86宏汇编语言的程序设计:顺序、分支及循环程序设计,子程序设计、ROMBIOS中断调用和DOS系统功能调用。

三、PC机组成原理与接口技术

1、PC机的逻辑组成与物理结构:主板与芯片组,超组I/O芯片,主板BIOS等。 2、系统叫线的功能与工作原理,ISA总线和PCI局部总线。

3、主存储器的组成与工作原理:ROM和RAM,内存条与主存储器工作原理,Cache存诸器。

4、输入输出控制:I/O寻址方式与I/O端口地址,程序控制I/O方式,中断控制I/O方式,DMAI/O控制方式。

5、外设接口:串行接口,并行接口,SCSI接口,USB和IEEE-1394。 四、Windows操作系统的功能与原理

1、操作系统的功能,类型和Windows98的体系结构,WindowsAPI与DLL的基本概念。 2、Windows的处理机管理:Windows虚拟机,Windows虚拟机管理程序,Windows的进程调度技术。

3、Windows的存储管理:Windows的内存结构与管理,Windows的虚拟内存。

4、Windows的文件管理:Windows的文件系统结构,磁盘的存储结构,FAT16和FAT32。 5、Windows的设备管理:虚拟设备驱动程序,通过驱动程度与小型驱动程序,即插即用与配置管理,电源管理,打印子系统等。

6、Windows的网络通信功能:Windows的网络组件,程序网络与通信,分布式组件对象模型DCOM,Windows中的Internet组件。

7、Windows的多媒体功能:Windows对多媒体文件与设备的支持,Windows的多媒体组件,Windows的媒体播放器。

8、Windows的配置、管理与维护:安装与启动,注册表,系统配置与管理,系统性能监视和优化,故障诊断。

9、PC机的安全与病毒防范:计算机安全的一般概念,PC机病毒及其防范。 五、PC的常用外围设备

1、输入设备:键盘,鼠标器,笔输入设备,扫描仪,数码相机,声音输入设备及MIDI输入设备。

2、输出设备:CRT显示器,液晶显示器与显示控制卡;针式打印机、激光印字机与喷墨打印机;绘图仪;MIDI音乐合成、3D环绕声生成与音箱;视频输出设备。

3、外存储器;软盘存储器;硬盘存储器的组成、原理与性能指标,活动硬盘,磁盘阵列;磁带存储器;光盘存储器的原理与分类,CD—ROM,CD—R和CD—RW,DVD光盘存储器。

4、PC机连网设备:Modem,ISDN与PC机的接入,ADSL接入,有线电视网与Cable Modem,局域网组网设备(以太网卡与集线器),无线接入技术。

六、上机操作

1、掌握计算机基本操作。

2、熟练掌握80X86宏汇编语言程序设计的基本技术、编程和调试。 3、掌握与考试内容相关的知识的上机应用。

考试方式

一、笔试:120分钟 二、上机考试:60分钟

三级考试大纲(数据库技术)

2002年版 基本要求

1、掌握计算机系统和计算机软件的基本概念、计算机网络的基本知识和应用知识、信息安全的基本概念。

2、掌握数据结构与算法的基本知识并能熟练应用。 3、掌握并能熟练运用操作系统的基本知识。

4、掌握数据库的基本概念,深入理解关系数据模型、关系数据理论和关系数据库系统,掌握关系数据语言。

5、掌握数据库设计方法,具有数据库设计能力。了解数据库技术发展。

6、掌握计算机操作,并具有用C语言编程,开发数据库应用(含上机调试)的能力。

考试内容

一、基础知识

1、计算机系统的组成和应用领域。 2、计算机软件的基础知识。

3、计算机网络的基础知识和应用知识。 4、信息安全的基本概念。 二、数据结构与算法

1、数据结构、算法的基本概念。 2、线性表的定义、存储和运算。

A、15 B、48 C、24 D、无定值

175、设有以下定义:char *ch[2]={\;,则以下正确的叙述是____

A、数组ch的两个元素中分别存放了字符串\和\的首地址

B、数组ch的两个元素分别存放的是含有3个字符的一维字符数组的首地址 C、ch是指针变量,它指向含有两个数组元素的字符型一维数组 D、数组ch的两个元素的值分别是\和\176、下面程序的运行结果是____

main( )

{ int x[5]={1, 2, 3, 4, 5}, *p=x, **q; q=&p;

printf(\; printf(\; }

A、1, 1 B、1, 2 C、2, 2 D、2, 3

177、下面程序的运行结果是____

#include \

fun(int **a, int p[2][3]) { **a=p[1][1]; } main( )

{ int x[2][3]={2, 4, 6, 8, 10, 12}, *p; p=(int *)malloc(sizeof(int)); fun(&p, x);

printf(\; }

A、2 B、6 C、8 D、10

179、若有说明:char *pc[ ]={\;,则以下叙述正确的是____

A、*pc[0]代表的是字符串\B、*pc[0]代表的是字符'a' C、pc[0]代表的是字符串\D、pc[0]代表的是字符'a'

180、以下程序的运行结果是____

void sub(int x, int y, int *z) { *z=y-x; } main( )

{ int a, b, c; sub(10, 15, &a); sub(6, a, &b); sub(a, b, &c);

printf(\; }

A、5, 1, 6 B、-5, -11, -6 C、-5, 11, 6 D、5, -1, -6

181、设有变量定义和函数调用语句:int a=20; print_value(&a);,下面函数的输出结果是____

void print_value(int *x)

{ printf(\; } A、20 B、21 C、变量a的地址 D、随机值

182、语句int (*ptr)( );的含义是____

A、ptr是指向一维数组的指针变量 B、ptr是指向int 型数据的指针变量

C、ptr是指向函数的指针,该函数返回一个int 型数据

D、ptr是一个函数名,该函数的返回值是指向int 型数据的指针

183、 若有函数max (a ,b) ,并且已使函数指针变量p 指向函数 max ,则利用函数指针调

用 max 函数的正确形式是____

A、(*p ) max (a , b) B、*p max(a, b) C、p-> max (a, b) D、 ( *p ) (a, b ) 184、若有定义:int (*p)( );,则指针p___

A、代表函数的返回值 B、指向函数的入口地址 C、表示函数的类型 D、表示函数返回值的类型

185、下面程序的运行结果是____

main( )

{ int b[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int *q=b;

printf(\; }

A、1 B、2 C、3 D、4 187、下面程序的运行结果是____

#include #include main()

{ int a[3][3]={{2},{4},{6}};

int k,*q=&a[0][0];

for(k=0;k<2;k++) { if(k= =0)

a[k][k+1]=*q+1; else ++q;

printf(“%d”,*q); } }

A、26 B、23 C、36 D、33 188、下面程序的运行结果是____

void prt(int *a)

{printf(“%d\\n”,++*a);} main()

{ int b=25; prt(&b); }

A、26 B、24 C、25 D、23 189、下面程序的运行结果是____

main( )

{ int a[3][4]={1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23}; int (*q)[4]=a, i, j, n=0; for (i=0; i<3; i++) for (j=0; j<2; j++) n=n+*(*(q+1)+j); printf(\; }

A、68 B、99 C、60 D、108 190、下面程序的运行结果是____

#include #include main()

{ char a=\; a++; b++;

printf(\; }

A、零 B、正数 C、负数 D、无确定值

191、若运行以下程序时,从键盘上输入OPEN THE DOOR<回车>,则程序的运行结果是____

#include char f(char *ch)

{ if(*ch<='Z'&&*ch>='A')

*ch-='A'-'a'; return *ch; } main()

{ char s1[81],*q=s1; gets(s1); while(*q)

{ *q=f(q); putchar(*q); q++; }

putchar('\\n'); }

A、oPEN tHE dOOR B、OPEN THE DOOR C、open the door D、Open The Door

192、下列程序的运行结果是____

#include

void f (float *q1, float *q2, float *a) { a=(float *)calloc(1, sizeof(float)); *a=*q1+*(q2++); }

main()

{ float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a; f(a, b, s);

printf(\; }

A、1.100000 B、11.100000 C、12.100000 D、21.100000 193、下列程序的运行结果是____

#include #include void f (char *s, int n)

{ char a,*q1,*q2;

q1=s; q2=s+n-1; while (q1

{ a=*q1++; *q1=*q2--; *q2=a; }

}

main()

{ char b[ ]=”ABCDEFG”; f(b, strlen(b) ); puts(b); }

A、GAGGAGA B、AGAAGAG C、GFEDCBA D、AGADAGA 194、以下程序的运行结果是____

main ( )

{ char *q =\;

printf (\; }

A、Is , Is i B、Is , Is it C、Is It , Is it D、Is it , Is

195、下面程序的功能是从输入的十个字符串中找出最长的那个串。请选择正确内容填空。# include # include # define N 10 main ( )

{ char str[N][81], *sp; int i ;

for (i=0 ; i

gets ( str[i] );

sp=__①__;

for ( i=1 ; i

if ( strlen (sp )

sp=__②__;

printf (\; }

① A、str[i] B、&str[i][0]

C、str[0] D、str[N] ② A、str[i] B、str[i][0]

C、str D、str[N] 196、下面程序的功能是将八进制正整数组成的字符串转换为十进制整数。请选择正确内容填空。

# include main ( )

{ char *p , s[6] ; int n ; p=s;

gets (p ) ; n=__①__;

while (__②__!='\\0' )

n=n*8+ *p –'0';

printf (\; }

①、A、0 B、*p

C、*p-'0' D、*p+'0' ②、A、*p B、*p++

C、*(++p) D、p

197、函数count 的功能是统计子串substr 在主串str 中出现的次数。请选择填空。

count(char *str,char *substr) { int i,j,k,num=0; for(i=0;__①__; i++)

for(__②__,k=0;substr[k]= =str[j];k++,j++) if(substr[__③__ ]= ='\\0' ) { num++; break; } return(num); }

① A、str[i]= =substr[i] B、str[i]!='\\0' C、str[i]= ='\\0' D、str[i]>substr[i] ② A、j=i+1 B、j=i C、j=0 D、j=1 ③ A、k B、k++ C、k+1 D、++k

198、下面程序的功能是在字符串str中找出最大的字符并放在第一个位置上,并将该字符前的原字符往后顺序移动,如串“oalne”。请选择填空。

# include main ( )

{ char str[80], *p, max, *q ; p=str ;

gets (p); max=*(p++) ;

while ( *p!='\\0' )

{ if ( max<*p )

{ max=*p ; __①__; }

p++; } p=q ;

while (__②__)

{ *p=*( p-1 ) ; __③__; }

*p=max ; puts ( p ); }

① A、p++ B、p=q C、q=p D、q++ ② A、p>str B、p>=str

C、*p>str[0] D、*p>=str[0] ③ A、p++ B、str-- C、p-- D、i-- 199、函数 DelSpace的功能是删除指针p所指向的字符串中的所有空格(包括TAB符,回车符,换行符),请选择填空。

DelSpace (char *p)

{ int i,t; char c[80]; for(i=0,t=0;__①__;i++) if(! isspace(__②__))

c[t++]=p[i];

c[t]='\\0';

strcpy(p,c); }

① A、p[i] B、!p[i]

C、p[i]='\\0' D、p[i]= ='\\0' ② A、p+i B、*c[i]

C、*(p+i) D、*(c+i)

200、下面程序的功能是利用递归算法将字符串s中的内容按逆序输出,但不改变串中的内容,请选择填空。

# include main ( )

{ char s[10]=\; inverp(s); }

inverp (char *a)

{ if(__①__) return 0; inverp(a+1); printf(\②__); }

① A、*a!='\\0' B、*a!=NULL

C、!*a D、!a*= =0 ② A、*(a-1) B、*a

C、*(a+1) D、*(a--)

201、下面程序的功能是用递归算法将一个整数按逆序存放一个字符数组中。如123存放成“321”,请选择填空。

# include

void convert(char *a,int n) { int i;

if((i=n/10)!=0)

convert(__①__,i); *a=__②__; }

main()

{ int number;

char str[10]=\; scanf(\,&number); convert(str,number); puts(str); }

① A、a++ B、a+1

C、a-- D、a-1

② A、n/10 B、n

C、n/10+'0' D、n+'0'

202、下面程序的功能是用递归法将一个整数转换成字符形式输出。例如输入386,应输出字符串“386”。请选择填空。

# include void convert(int n) { int i;

if((__①__)!=0)

convert(i);

putchar(__②__+'0'); }

main()

{ int number;

scanf(\,&number);

if(number<0)

{ putchar('-');

number= -number;}

convert(number); }

① A、i=n/10 B、i=n

C、i=n-- D、i=--n ② A、n B、n/10

C、n D、i

203、下面程序的功能是:调用函数sss(),按字典顺序比较存放在a、b数组中两个字符串的大小,如果a大于b则i 为正值,a等于b则i为0,a小于b则i为负值。请选择填空。

# include \

sss(char *s,char *t) { for( ;*s= =*t;__①__)

if(*s= ='\\0') return(0); return(*s-*t); }

main()

{ char a[20],b[20]; int i; scanf(\,a,b); i=sss(__②__); printf(\,i); }

① A、s++ B、t++ C、s++;t++ D、t++,s++ ② A、a,b B、*a,*b

C、&a,&b D、a[ ],b[ ]

204、下面程序的功能是从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。请选择填空。

# include # include main()

{ char string[100],*p,*q,*r,c;

printf(\); gets(string);

for(p=string;*p;p++) { for(q=r=p;*q;q++) if(__①__) r=q; if(__②__)

{ c=*r;*r=*p;*p=c;}

}

for(p=string;*p;p++)

{ for(q=p;*p= =*q;q++)

strcpy(__③__,q); }

printf(\:%s\\n\,string); }

① A、*r>*q B、*r>*p

C、r>q D、r>p

② A、r= =q B、r!=q

C、p!=q D、r!=p

③ A、p++ B、p

C、p-1 D、p+1

205、下面程序的功能是将字符串a分段传送到字符串b中。要求在每五个字符后插入一个逗号,以示分段。例如字符串a为\,则字符串b为\,fg123,45\,请选择填空。

# include main()

{ int i,k=0;

char a[80],b[80],*p; p=a;

gets(p); while(*p)

{ for(i=1;__①__;p++,k++,i++) b[k]=*p; if(__②__)

{ b[k]=',' ; k++;}

}

b[k]='\\0'; puts(b); }

① A、i<5 B、i<=5

C、i<5&&*p!='\\0' D、i<=5&&*p ② A、i= =6 B、*P= ='\\0'

C、!*p D、i!=6

206、当运行以下程序时,若从键盘输入Sorry!<回车>,则下面程序的运行结果是____ # include

# include main()

{ char str[10],*p=str; gets(p);

printf(\,stre(p)); }

stre(char str[ ]) { int num=0;

while(*(str+num)!='\\0')

num++;

return(num); }

A、7 B、6 C、5 D、10 207、下面程序的运行结果是____

# include main()

{ static char a[ ]=\

b[ ]=\;

char *p1,*p2; int k;

p1=a; p2=b;

for(k=0;k<=7;k++)

if(*(p1+k)= =*(p2+k) ) printf(\); }

A、gae B、ga C、Language D、有语法错 208、下面程序的运行结果为____

# include # include main ( )

{ char *aa=\,*bb=\; aa+=2; bb+=2;

printf(\,strcmp(aa,bb)); }

A、有语法错 B、大于零 C、等于零 D、小于零 209、下面程序的运行结果是____

# include main()

{ int a=28,b; char s[10],*p; p=s;

do { b= a;

if(b<10) *p= b+48; else *p= b+55; p++; a= a/5;

} while(a>0); *p='\\0'; puts(s); }

A、10 B、C2 C、C51 D、\\0

210、下面程序的运行结果是____

# include void select(char *s)

{ int i,j; char *t; t=s;

for(i=0,j=0;*(t+i)!='\\0';i++) if(*(t+i)>='0'&&*(t+i)<='9') { *(s+j)=*(t+i); j++} *(s+j)='\\0'; }

main()

{ char *str=\; select(str);

printf(\,str); }

A、IBM 486&586 B、IBM C、486&586 D、486586

211、当运行以下程序时,从键盘输My Book <回车>,则下面程序的运行结果是_____

# include

char fun(char *s)

{ if(*s<='Z'&&*s>='A') *s+=1; }

A、计算字符串的长度 return *s; }

main()

{ char c[80],*p=c; gets(c); while(*p)

{ *p=fun(p);

putchar(*p); p++; }

printf(\); }

A、mZ bPPk B、my book C、Ny Cook D、My Book 212、下面程序的运行结果是____

# include # include fun(char *s)

{ char t,*a,*z;

a=s; z=s+strlen(s)-1; while(a++

{ t=*a++; *a=*z--; *z=t}

main()

{ char *p; p=\; fun(p); puts(p); }

A、abdddfg B、afcdebg C、gbedcfa D、gfedcba 213、以下函数Abc的功能是____

int Abc(char *ps) { char *p; p=ps;

while(*p++); return(p-ps); ;} B、比较两个字符串的大小 C、实现字符串的复制 D、以上三种说法都不对 214、以下函数的功能是____

fun(char *s1,char *s2) { int j; char *s=s1; for ( ;*s2!='\\0';s2++)

{ for (j=0, s1=s;*s1!='\\0';s1++) if(*s1!=*s2)

{ s[j]=*s1; j++; }

s[j]='\\0';

} }

A、比较两个字符串的长度是否相等 B、将字符串s2连接到字符串s1后 C、找出字符串s1和s2中不相同的字符 D、找出字符串s1和s2中相同的字符 215、下面程序的运行结果是____

# include main()

{ char *p,s[ ]=\; for(p=s;*p!='\\0'; ) { printf(\,p); p++;

if(*p!='\\0') p++; else break; } } A ABCDEFG B ABCDEFG C A ABCDE CDEFG C ABC EFG E A G G

216、下面程序的运行结果是____

# include # include

main()

{ char *p1,*p2,str[50]=\; p1=\; p2=\;

strcpy(str+1,strcat(p1,p2)); printf(\,str); }

A、abcabcabc B、bcabcabc C、aabcabc D、cabcabc

217、以下与库函数strcmp(char *s,char *t)的功能相等的程序段是____

A、strcmpA(char *s,char *t) { for( ;*s++= =*t++; ) if(!*s) return 0; return(*s-*t); }

B、strcmpB(char *s,char *t) { for( ;*s++= =*t++; ) if(*s= ='\\0') return 0; return(*s-*t); }

C、strcmpC(char *s,char *t)

{ for( ;*s++= =*t;s++,t++) if(!*s) return 0; return(*s-*t); }

D、strcmpD(char *s,char *t) { for( ;*t= =*s; )

{ if(!*t) return 0;

t++; s++; }

return(*s-*t); }

C语言程序设计第9章、第10 章练习题 一、选择题

219、已知学生记录描述如下,下面对结构体成员\的赋值方式正确的是_______

struct student { int num;

char name[8]; struct { float math; float engl; float computer; } mark; } std;

A、student.computer=84; B、mark.computer=84; C、std.mark.computer=84; D、std.computer=84;

220、当定义一个结构体变量时系统分配给它的内存是________

A、结构中第一个成员所需的内存量 B、结构中最后一个成员所需的内存量

C、结构体成员中占内存量最大者所需的容量 D、结构体中各成员所需内存量的总和

221、以下对结构体类型变量rcard的定义中不正确的是________

A、#define REC struct card REC { int id;

float sala;} rcard;

B、struct card { int id;

floar sala;}; card rcard; C、struct card

{ int id; float sala;}; struct card rcard; D、struct

{ int id; float sala;} rcard;

222、设有以下说明语句,则下面的叙述不正确的是________

struct abc

{ int m; float n;} stype; A、struct是结构体类型的关键字 B、abc是用户定义的结构体类型名 C、m和n都是结构体成员名

D、stype是用户定义的结构体变量名

223、以下程序中编译和运行结果均正确的一个是________

A、main() { union

{ int n;

float x; } comm={1};

printf(\,comm.n); }

B、main() { union

{ int n;

float x;} comm={12.5};

printf(\,comm.x); }

C、main() { union

{ float x;

int n;} comm=12.5;

printf(\,comm.x); }

D、main() { union

{ int n;

float x;} comm=5;

printf(\,comm.n); }

224、以下程序的运行结果是________

# include \main()

{ struct date

{ int y,m,d;} today;

printf(\; }

A、2 B、3 C、6 D、出错

225、根据下面的定义,能输出字符串\的语句是________

struct person

{ char name[10]; int age;

} class[10]={\,18, \ \ \ };

A、printf(\,class[2].name); B、printf(\,class[2].name[0]); C、printf(\,class[1].name); D、printf(\,class[1].name[0]); 226、下面程序的运行结果是________

main()

{ struct cmplx { int x; int y;

} cm[2]={1,2,3,4}; printf(\

cm[1].y/cm[0].y);

}

A、5 B、2 C、3 D、4

227、若有以下定义和语句,则以下对结构体成员的引用不正确的是________

struct student

{ int num; int age;};

struct student stu[3]={{1001,20},

{1002,19}, {1003,20}};

main()

{ struct student *p; p=stu; ? }

A、(p++)->num B、p++->age C、(*p).num D、p=&stu.age

228、若有如下定义,则下面在scanf函数调用语句中对结构体成员的引用不正确的是 ________

struct pupil

{ char name[20]; int age; int sex; } pup[5],*p;

A、scanf(\,p->age);

B、scanf(\,pup[0].name); C、scanf(\,&pup[0].age); D、scanf(\,&(p->sex));

229、设有以下定义和语句,则以下表达式值为6的是________

struct ss

{ int a; struct ss *b;}; static struct ss x[3]={5,&x[1],

7,&x[2],

9,'\\0'},*ptr;

ptr=&x[0];

A、ptr->a++ B、ptr++->a C、ptr->a D、++ptr->a

230、设有如下定义,若要使px指向rec中的x域,正确的赋值语句是________

struct aa

{ int x; float y; } rec,*px; A、*px=rec.x; B、px=&rec.x

C、px=(struct aa *)rec.x D、px=(struct aa *)&rec.x;

231、若有以下说明和语句,则对结构体变量std中成员id的引用方式不正确的是_______

struct work { int id; int name; } std,*p; p=&str;

A、std.id B、*p.id C、(*p).id D、p->id

232、若有以下程序段,则下面表达式中值为20的是________

struct com

{ int a; int *b;}; int x=10,y=20,z=30;

struct com s[3]={{1010,&x}, {1020,&y},

{1030,&z}};

main( )

{ struct com *p; p=s; ? }

A、(p++)->b B、*(p++)->b C、(*p).b D、*(++p)->b 233、若有以下说明和语句,则对ttd中lab域的正确引用方式是________

struct example { char lab; int num; } ttd,*p; p=&ttd;

A、(*p).lab B、p->ttd.lab C、(*p).ttd.lab D、p.ttd.lab 234、以下程序的输出结果是________

struct s

{ int n; int *m; } *p;

int d[3]={10,20,30};

struct s arr[3]={100,&d[0],

200,&d[1], 300,&d[2]};

main( ) { p=arr;

printf(\,++p->n); printf(\,(++p)->n); printf(\,++(p->m)); }

A、101,200,21 B、101,20,30 C、200,101,21 D、100,101,10

235、若要使指针变量p指向一个动态开辟的字符型存储单元,则①中应选择填入的是 ________

char *p;

p= ① malloc(sizeof(char)); A、char B、char *

C、(*char) D、(char *)

236、当说明一个共用体变量时系统分配给它的内存是________

A、共用体中第一个成员所需内存量 B、共用体中最后一个成员所需内存量

C、共用体成员中占内存量最大者所需的容量 D、共用体中各成员所需内存量的总和

237、以下对C语言中共用体类型数据的叙述正确的是________

A、可以对共用体变量名直接赋值

B、一个共用体变量中可以同时存放其所有成员 C、一个共用体变量中不能同时存放其所有成员

D、共用体类型定义中不能出现结构体类型的成员

238、若有以下定义和语句,则下面对共用体变量a的引用正确的是________

union data { int i; char c; float f; } a; int n;

A、a=5; B、a={1,'x',5.0}; C、a.i=10;printf(\,a); D、n=a{5};

239、设有以下说明,则下面不正确的叙述是________

union data { int i; char c; float f; } aa,bb;

A、aa所占的内存长度等于成员f的长度 B、aa的地址和它的各成员地址都是同一地址 C、aa可以作为函数参数

D、不能执行诸如aa=bb;的整体赋值操作 240、以下程序的运行结果是________

# include \main( ) { union

{ long a; int b; char c;

struct

{ int x; int y;} ss;

} m;

printf(\,sizeof(m)); }

A、2 B、4 C、6 D、8

241、设有如下定义,若字符型变量占1字节、整型变量占2字节、双精度变量占8字节,则共用体变量b占用内存的字节数是____ ____

union data { int i; char ch; double f;} b; A、14 B、15 C、8 D、11 242、下面对typedef的叙述中不正确的是 ________

A、用typedef不能定义变量名

B、用typedef可以定义新的数据类型

C、用typedef只是将已存在的类型用一个新的标识符来代表 D、使用typedef有利于程序的通用和移植 243、以下程序的运行结果是________

typedef union { long a[2]; int b[4];

char c[8]; } EXAM; main( )

{ printf(\,sizeof(EXAM));} A、32 B、16 C、8 D、报错

244、已知字符0的ASCⅡ码为十六进制的30,下列程序的运行结果是________

main( )

{ union { char ch;

unsigned int k[4]; } x; x.k[0]=0x39; x.k[1]=0x36;

printf(\,x.ch); }

A、6 B、9 C、3 D、0 245、设有如下枚举类型定义:

enum language { English=6,French,Chinese=1,Japanese,Italian};则枚举量Italian的值为________ A、10 B、4 C、3 D、5

246、以下对枚举类型名ee的定义中正确的是________ A、enum ee {A,B,C,D};

B、enum ee {'A','B','C','D'}; C、enum ee = {A,B,C,D};

D、enum ee = {'A','B','C','D'}; 一、选择题

247、表达式(0x63 ∧0x55)>>1值的十六进制表示形式是

A、0x36 B、0x1b C、0x6c D、0x20 248、表达式 x&y= =z|| ~ x|z 的运算顺序是

A、~、= =、&、|、|| B、= =、~、&、|、|| C、~、&、|、= =、|| D、&、~、|、= =、|| 249、运行以下程序后,输出结果是 main() { char z;

z=0x14∧00?0x03 | 0x05 :0x03&0x05; printf(\,z); }

A、14 B、0 C、7 D、1 250、以下表达式不等价的一组是

A、a&=b与a=a&b B、a | b与a=a | b C、a!=b与a=a!b D、a∧=b与a=a∧b 251、运行以下程序后n的值是 main()

{ char x=012; int n=0; while(x)

{ x>>=2;n++;}

printf(\,n); }

A、12 B、8 C、3 D、2 252、执行以下程序断后m和n的值分别是 int m=11,m=22;

m=m∧n; n=n∧m; m=m∧n; A、m=11,n=22 B、m=22,n=22 C、m=22,n=11 D、m=11,n=11

253、设有定义:unsigned op=2,则与语句op=op<<1;等价的语句是 A、op=op*2; B、op=op/2; C、op=op*4 D、op=op/4;

254、设有语句:char x=6,y=10,z; z=x∧y<<2; ,则z的二进制值是 A、00001000 B、00110000

C、00000010 D、00001100

255、设x=01000110,以下能使x的高4位取反,低4位不变的表达式是

二、填空题

150、以下程序的运行结果是________

struct two{ int n; char ch; }; func(struct two ex2) { ex2.n+=10; ex2.ch-=1; }

main( )

{ struct two ex1={5, 't'}; func(ex1);

printf(\; }

151、以下程序的运行结果是________

struct { int a; int b; struct { int x; int y; }ins; }outs; main( )

{ outs.a=11; outs.b=4; outs.ins.x=outs.a+outs.b; outs.ins.y=outs.a-outs.b;

printf(\; }

152、以下程序拟输出结构体变量ttt所占内存单元的字节数,请填空。main( ) { struct

{ int i; double x; char a[10]; }ttt;

printf(\; }

153、以下程序的运行结果是________

main( ) { struct s

{ char c[4], *s;

}s1={\; struct t

{ char *cp;

struct s s1;

}s2={\;

printf(\; }

154、若有以下定义,则表达式:

pn->b/n.a*++pn->b的值是________, 表达式:(*pn).a+pn->f的值是________

struct num { int a; int b; float f;

}n={4, 6, 11.1}; struct num *pn=&n;

155、以下程序的运行结果是________

main( ) { struct

{ int a; int *b; }s[4], *p; int n=5, i;

for (i=0; i<4; i++) { s[i].a=n;

s[i].b=&s[i].a; n=n+2; } p=&s[1];

printf(\; printf(\; }

第十章 文件

一、选择题

260、若执行fopen函数时发生错误,则 函数的返回值是_________

A、随机值 B、1 C、NULL D、EOF

261、若用fopen打开一个新的二进制文件,

要求文件既能读又能写,则应选用的文件方式字符串是____________

A、\、\C、\、\262、当正常执行了文件关闭操作时,fclose函数的返回值是_________ A、-1 B、随机值 C、0 D、1

263、若有以下定义和函数说明,以下不能将文件内容读入数组x中的语句是_______ struct ss { int n;

float x; }x[30]; FILE *fp;

A、for(i=0; i<10; i++)

fread(&x[i], sizeof(struct ss), 1L, fp); B、for(i=0; i<10; i++, i++)

fread(&x[i], sizeof(struct ss), 2L, fp);

C、for(i=0; i<30; i++)

fread(&x[i], sizeof(struct ss), 1L, fp); D、fread(x, sizeof(struct ss), 30L, fp);

264、设有以下结构体类型数组的定义,且数组mini的10个元素都已赋值,若要将这些元素写到文件fp中,以下不正确的形式是________

struct abc

{ int a; char b; float c[4]; } mini[10]; A、fwrite(mini, 10*sizeof(struct abc), 1, fp); B、fwrite(mini, 5*sizeof(struct abc), 2, fp); C、for(i=0; i<10; i++)

fwrite(mini, sizeof(struct abc), 1 ,fp); D、fwrite(mini, sizeof(struct abc), 10, fp);

265、若调用fputc函数输出字符成功,则函数的返回值是________

A、输出的字符 B、-1 C、0 D、EOF

266、函数调用语句:fseek(fp, 10L, 2);的含义是:将文件位置指针________

A、移动到距离文件头10个字节处 B、从当前位置向后移动10个字节 C、从文件尾部前移10个字节 D、移到离当前位置10个字节处

267、函数rewind(fp)的作用是:使文件位置指针________

A、重新返回文件的开头 B、返回到前一个字符的位置 C、指向文件的末尾

D、自动移至下一个字符的位置

268、函数fgets(string,m,fp)的作用是_______

A、从fp所指向的文件中读取长度不超过m的字符串,存入由指针string指向的内存区域

B、从fp所指向的文件中读取长度为m的字符串存入由指针string指向的内存区域 C、从fp所指向的文件中读取m个字符串,存入由指针string指向的内存区域

D、从fp所指向的文件中读取长度不超过m-1的字符串,存入由指针string指向的内存区域 二、填空题

167、在C程序中文件可以用两种方式存取,它们是___________和_____________ 168、在C程序中数据可以用两种代码形式存放,它们是_________和__________ 169、在C语言中,文件的存取是以_____为单位的,这种文件被称做______文件。 170、下面程序用以统计文件中小写字母a的个数。请填空。 #include main( )

{ FILE *fp;

char m; long n=0;

if ( (fp=fopen(\

{printf(\; exit(0); } while(__________________)

{ m=__________;

if (m=='a') ______________; } printf(\; fclose (fp); }

171、下面程序从键盘输入字符存放到文件中,用#结束输入。存放字符的文件名也由键盘输入。请填空。

#include main( )

{FILE *fp;

char ch, fname[10];

printf(\; gets(fname);

if ((fp=fopen(________, \

{ printf(“cannot open\\n”); exit(0); } printf(“Enter character:\\n”); while(______________!='#') fputs(ch, ____________); fclose(fp); }

172、以下程序的功能是将文件exam1.c的内容复制到exam2.c中,请填空。 #include main( )

{ FILE fp1, fp2;

fp1=fopen(______________); fp2=fopen(______________); while (!feof(fp1))

fputs(__________________________); fclosw(fp1); fclose(fp2);}

173、设文件num.dat中存放了一组整数。以下程序实现统计并输出文件中正整数、零、负整数的个数。请填空。 #include main()

{ FILE *fp;

int p=0, n=0, z=0, temp; fp=_______________________; if(fp==NULL)

printf(“file not found\\n); else

{ while(!feof(fp))

{ fscanf(____________________);

if(temp>0) p++;

else if(temp<0) n++;

else __________________; } }

fclose(fp);

printf(\; }

编程题

1、按下面的近似公式计算e的值。误差小于10-5

。试编程:

e?1?11!?12!?13!???1n!

2、设有一个已按从大至小顺序排好的数列存放在一维数组中,现输入一个数,仍按原来的排序规律将其插入到数组中,试编程。

3、设有一行文字,现要求从其中删去某个指定的字符(如:输入a,表示将从该行文字中删去所有是a的字符),要求该行文字和待删的字符均从键盘上输入,请编写程序。

4、设有一行文字,现要求将每一个单词中的第一个字母改成大写字母(原来已经是大写字母的不变)

5、输出能被3整除且至少有一位是5的两位数,要求在函数fun中输出所有这样的数,在主函数中完成相应的输入并打印出这些数的个数。请编程。

6、已有变量说明:double num; int n; 且给出函数调用语句mypow(num, n);,和函数说明double mypow(double x, int y), 函数mypow用来求num的n次方。

7、用递归算法将一个整数x转换成对应的字符串(例如:输入整数123,应输出字符串\)。x可以是位数不超过5 且数值在-32768到32767之间的任意整数。

8、编写一个函数,求出一个正整数的所有因子(例如:72=2*2*2*3*3)。

9、编写程序:动态开辟3个存储单元存放从键盘输入的3个整数,然后找出并输出其中的最大值。

10、编写函数ReadInfo读入10名职工的编号(整型)、姓名(字符串)、联系电话(字符串)放在结构体数组work中;编写函数WriteInfo输出10名职工的记录;在主函数中分别调用上述两个函数,实现程序的功能。

C语言复习题集参考答案

第一二三章

一、 选择题: 1 B 2 C 3 B 4 A 5 B 6 A 7 C 8 C 9 D 10 D 11 ADA 12 D 13 D 14 C 15 A 16 B 17 A 18 B 19 B 20 B 21 D 22 D 23 DA 24 D 25 B 26 D 27 B 28 C 29 B 30 C 31 D 32 B 33 D 34 B 35 A 36 A 37 D 38 B 39 A 40 C 41 B 42 D 43 D 44 D 45 D 46 C 47 ABA 48 D 49 C 50 C 二、 填空题: 1、函数

2、main函数

3、scanf() , printf() 4、1 5、8

6、5.500000

7、63,73,41,171 8、double

9、<空格>30,310,<空格>12,<空格>1e

10、1):a=%d,b=%d,x+y=%4.1f,a,b,x-y 2):x-y=%4.1f a-b=%d,x-y,a-b 3)c1=\\’%c\\’ or %d(ASCII) c2=\\’%c\\’ or %d(ASCII),c1,c1,c2,c2

11、1)456.7804.57e+02-123.4567802) 456.7804.57e+02-123.4573)123456.780 -123e+02 12、8.000000 13、y,y,y

14、scanf(“%d%f%f%c%c”,&m,&n,&k,&ch1,&ch2);3 6.5 12.6aA 15、-12 c 410.34 16、按位与,取地址 17、1,1,13

18、(x*y*z>0)&&(x<0||y<0||z<0) 19、2,1 第四章

一、 选择题: 51 B 52 B 53 B 54 A 55 C 56 D 57 B 58 C 59 A 60 B 61 C 62 C 63 D 64 B 65 B 66 A 67 BD 68 AB 69 A 70 C 71 C 72 C 73 BC 74 C 75 D 76 C 二、 填空题: 20、n2

21、c1=c1+5,c1=c1-21

22、ch1>=’A’&&ch1<=’Z’,ch1-ch1-32 23、x>0且xx

24、a1+a2>a3&&a1+a3>a2&&a2+a3>a1,a1==a2&&a2==a3,a1==a2||a2==a3||a1==a3

本文来源:https://www.bwwdw.com/article/ct2d.html

Top