C语言二级考试复习题.docx
《C语言二级考试复习题.docx》由会员分享,可在线阅读,更多相关《C语言二级考试复习题.docx(98页珍藏版)》请在冰豆网上搜索。
C语言二级考试复习题
“C语言程序设计”二级考试复习资料
二级考试大纲………………………………………………………5
模拟试题一…………………………………………………………7
模拟试题二…………………………………………………………13
模拟试题三…………………………………………………………19
模拟试题四…………………………………………………………28
模拟试题五…………………………………………………………36
模拟试题六…………………………………………………………43
补充:
文件…………………………………………………………49
二级考试大纲
(QBASIC、FORTRAN、VB、VF、C、FoxBASE+语言程序设计)
基本要求
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、能熟练使用一种高级语言或一种数据库语言(共有QBASIC、FORTRON、C以及FoxBASE+、VB、VF等六种语言,考生任选其中一种。
各种语言的考试内容附后。
)
三、上机操作
在指定的时间内使用微机完成下述操作:
1、完成指定的计算机基本操作(包括机器启动和操作命令的使用)。
2、按给定要求编写和运行程序。
3、调试程序,包括对给出的不完善的程序进行修改和补充,使之能得到正确的结果。
C语言程序设计考试大纲
(一)C语言的结构
1、程序的构成,MAIN函数和其他函数。
2、头文件、数据说明、函数的开始和结束标志。
3、源程序的书写格式。
4、C语言的风格。
(二)数据类型及其运算
1、C的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法。
2、C运算符的种类、运算优先级和结合性。
3、不同类型数据间的转换与运算。
4、表达式类型(赋值表达式、算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式)和求值规则。
(三)基本语句]
1、表达式语句,空语句,复合语句。
2、数据的输入与输出,输入输出函数的调用。
3、复合语句。
4、GOTO语句和语句标号的使用。
(四)选择结构程序设计
1、用IF语句实现选择结构。
2、用SWITCH语句实现多分支选择结构。
3、选择结构的嵌套
(五)循环结构程序设计
1、FOR循环结构。
2、WHILE和DOWHILE循环结构。
3、CONTINUE语句和BREAK语句。
4、循环的嵌套。
(六)数组的定义和引用
1、一维数据和多维数组的定义、初始化和引用。
2、字符串与字符数组。
(七)函数
1、库函数的正确调用。
2、函数的定义方法。
3、函数的类型和返回值。
4、形式参数与实在参数,参数值的传递。
5、函数的正确调用,嵌套调用,递归调用。
6、局部变量和全局变量。
7、变量的存储类别9自动、静态,寄存器、外部),变量的作用域和生存期。
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,FPRINTE,FSCANF函数),文件的定位(REWIND,FSEEK函数)
模拟试题一18
第一部分软件技术基础
一、是非判断题。
1.数组是一种长度固定的线型表,可以对数组进行插入和删除运算。
(对)
2.白盒测试时,测试者不考虑程序的内部结构和特性。
(错)
3.对线型表中的数组进行二分查找,必须要求数据元素有限且有序。
(对)
4.实存管理技术中,每个分区内的地址是连续的。
(对)
5.文件的目录结构是一种线型结构。
(错)
6.在面向对象的程序设计中,对象的动作取决于发送给该对象的消息。
(对)
7.虚拟设备是指将大容量的共享设备的一部分空间来代替实际的独占设备。
(对)
8.在结构化程序设计中,N-S图是用于详细设计的工具之一。
(对)
9.在操作系统的设备管理中,打印机被看成是一种共享设备。
(错)
10.分时操作系统的主要特征之一是提高计算机系统的实时性。
(错)
二、单项选择题。
1.进程由程序块、(D)和数据块三部分组成。
(A)设备控制块(B)作业控制块(C)文件控制块(D)进程控制块
2.以下哪个不是死锁产生的必要条件(B)
(A)互斥条件(B)全部分配条件C)环路条件(D)不可剥夺条件
3.虚拟存储器的作用是允许程序直拆接访问比内存更大的地址空间,它通常使用(C)作为它的一个主要组成部分。
(A)软盘(B)寄存器(C)硬盘(D)CD-ROM
4.线性链表中的结点一般有3种信息:
直接前趋、数据域和直接后继,属于单向链表所独有的是(C)。
(A)直接前趋和数据域(B)直接前趋和直接后继
(C)数据域和直接后继(D)直接前趋、数据域和直接后继
5.白盒测试是根据程序的( A )来设计测试用例。
(A)内部逻辑(B)内部数据 (C)功能 (D)性能
第二部分C与C++语言程序设计
一、单项选择
1.有下列程序段,请选择(D)。
chara[10]=”3821631”;
char*p=a;
printf(“%c”,p[1]-‘0’);
(A)输出格式错误(B)p[1]语法错误(C)输出8(D)输出ASCII码为8的字符(退格符)
2.下列程序的输出是(D)。
#include”stdio.h”
voidmain()
{inta=-1,b=4,k;
k=(a++<=0)&&(!
(b--<=0));
printf(“%d,%d,%d”,k,a,b);}
(A)0,0,3(B)0,1,2(C)1,1,2(D)1,0,3
3.设x为整型变量,不能正确表达数学关系:
7(A)77&&x<11(D)!
(x<=7)&&(x>=11)
(B)intx=0,y;
switch(x)
{casex>0:
y=1;break;
casex==0:
y=0;break;
casex<0:
y=-1;break;}
4.下列程序段中,正确的是(D)。
(A)intx=0,y=10;
switch(x)
{casey:
x++;break;
casey+2:
x+=10;break;
casey-1:
x=-7;break;}
(D)intx=0,y;
switch(x)
{case3:
case–1:
y=2;break;
case2:
break;
}
(C)#definey20
intx=10,z;
switch(x)
{case12:
z=3;break;
casey+1:
z+=10;break;
casey-8:
y-=3;break;
}
5.定义如下数组s:
chars[81];
若准备将字符串”Thisisastring.”记录下来,(C)是错误的输入语句。
(A)gets(s+2);(B)scanf(“%20s”,s);
(C)for(i=0;i<17;i++)(D)while(c=getchar()!
=’\n’)
s[i]=getchar();s[i++]=c;
6.下述函数aaa的功能是(D)。
intaaa(char*s)
{char*t=s;
while(*t++);
returnt-s;}
(A)求字符串长度(B)比较两个串的大小(C)将串s复制到串t中(D)以上三种说法均不对
7.下述程序的输出结果是(C)。
(A)11,10(B)11,11(C)10,10(D)10,11
intx=10;
inty=x++;
printf(“%d,%d”,(x++,y),y++);
8.若有说明inti,j=2,*p=&i;,则能完成i=j赋值功能的语句是(B)。
(A)i=*p;(B)*p=j;(C)i=*j;(D)i=**p;
9.main()
{uniondata
{inti;charch;
floatf;floatx;
}a;
a.i=1;a.ch=’a’;a.f=1.5;
printf(‘%f,%f\n”,a.f,a.x);}
程序运行结果是(D)。
(A)1.5(B)1.5,1(C)1.5,1.5(D)1,1.5
10.已知结构体:
structperson
{charname[20];intage;};
下列操作正确的是(A)
(A)structpersonperson1={“Tom”,20};
(B)structpersonperson1;person1={“Tom”,20};
(C)structpersonperson1;scanf(“%s%d”,name,&age);
(D)structpersonperson1={“Tom”,20};printf(“%s%d”,person1);
二、读程序回答问题。
1.运行下列程序后,test中的结果为()。
#include“stdio.h”
#include“string.h”
voidfun(char*fname,char*st)
{FILE*myf;
inti;
myf=fopen(fname,”w”);
for(i=0;ifputc(st[i],myf);
fclose(myf);}
voidmain()
{fun(“test”,”newworld”);
fun(“test”,”hello”);}
(A)newworld(B)newworldhello(C)hello(D)hello,world
2.读下列程序,选择正确的输出结果。
#include
voidpoint1(intx,inty)
{intt=1;
x=x+t;y=y+t;
return;}
voidpoint2(int*x,int*y)
{intt=1;
*x=*x+t;*y=*y+t;
return;}
voidpoint3(char*p)
{p+=1;
*p=*p+1;}
voidmain()
{charb[4]={‘a’,’c’,’s’,’f’},*pt=b;
intx=3,y=4;
point1(x,y);
1)printf(“%d,%d\n”,x,y);
point2(&x,&y);
2)printf(“%d,%d\n”,x,y);
point3(pt);
3)printf(“%c\n”,*(pt+1));
}
1)(A)4,5(B)3,4(C)4,3(D)5,4
2)(A)4,5(B)3,4(C)4,3(D)5,4
3)(A)c(B)s(C)acsf(D)d
3.有下列程序
#include
intfunc(intx)
{inty=0;
staticz=3;
x=z++,y++;
return(x);}
voidmain()
{inta=2,i,b;
for(i=0;i<2;i++)
b=func(a++);
printf(“%d\n”,b);}
(1)执行后输出的结果是()。
(A)4(B)5(C)3(D)0
(2)如果将语句L1:
staticz=3;改为L1:
intz=3;程序执行后输出的结果是()。
(A)4(B)5(C)3(D)0
4.#include”stdio.h”
char*cat(char*str1,char*str2)
{char*pt;
for(pt=str1;*pt!
=’\0’;pt++);
while(*str2!
=’\0’)
*pt++=*str2++;
*pt=’\0’;
return(pt);}
voidmain()
{char*p,s1[30]=”210”,s2[30]=”45”;
p=cat(s1,s2);p=cat(s1,s2);
printf(“%d\n”,p-s1);}
(1)该程序运行的结果为()。
(A)5(B)6(C)7(D)8
(2)如果去掉*pt=’\0’;程序运行的结果为()。
(A)5(B)6(C)7(D)8
5.读程序,回答问题。
#include
voidmain()
{char*s=”12134211”;
inta=0,b=0,c=0,d=0;
intk;
for(k=0;s[k];k++)
switch(s[k])
{default:
d++;
case‘1’:
a++;
case‘3’:
c++;
case‘2’:
b++;
}
printf(“a=%d,b=%d,c=%d,d=%d”,a,b,c,d);}
(1)该程序运行结束时,k的值是()。
(A)7(B)8(C)9(D)10
(2)该程序的输出结果是()。
(A)a=4,b=2,c=1,d=1(B)a=4,b=9,c=3,d=1(C)a=5,b=8,c=6,d=1(D)a=8.n=8.c=8,d=8
6.读程序,回答问题。
#include
voidfun(char**m);
voidmain()
{char*s[]={“BASIC”,”FORTRAN”,”C”};
char**p=s;
fun(p);
puts(*p);}
voidfun(char**m)
{++m;
printf(“%s,”,*m);}
(1)语句puts(*p);输出结果是()。
(A)BASIC(B)C(C)SICA(D)FORTRAN
(2)语句printf(“%s,”.*m);输出结果是()。
(A)BASIC,(B)SICA,(C)FORTRAN,(D)BASIC,
7.读程序,回答问题。
#include
voidswap(int*p1,int*p2)
{int*temp;
temp=p1;p1=p2;p2=temp;
4:
printf(“%d,%d\n”,*p1,*p2);
}
voidmain()
{inta=4,b=5,*pointer1,*pointer2;
pointer1=&a;pointer2=&b;
swap(pointer1,pointer2);
10:
printf(“%d,%d\n”,*pointer1,*pointer2);}
(1)读程序swap函数中的printf的输出为()。
(A)4,5(B)6,5(C)5,4(D)5,6
(2)该程序main函数中的printf的输出为()。
(A)4,5(B)6,5(C)5,4(D)5,6
8.读程序,回答问题。
#include”stdio.h”
unionun
{inti;
charc[2];
};
voidmain()
{unionunx;
x.c[0]=10;
x.c[1]=1;
printf(“\n%d”,x.i);}
程序执行后的输出结果为()。
(A)11(B)266(C)265(D)138
三.程序填空
1.下述程序在数组中同时查找最大元素下标和最小元素下标,分别存放在main函数的变量max和min中,请填空。
#include
voidfind(int*a,intn,int*max,int*min)
{inti;
*max=*min=0;
for(i=1;iif(a[i]>a[*max])
__________________;
else
if(a[i]___________________;
return;
}
voidmain()
{inta[]={5,8,7,6,2,7,3};
intmax,min;
find(_______________);
printf(“\n%d,%d”,max,min);}
2.输入6个用户名和密码,用户名为15个字符以内的字符串,密码为5个字符的定长字符串。
新建一个文件,将用户名和密码以结构体的形式存入,要求密码存放时将每个字符的ASCII码加1。
#include
main()
{structperson
{charname[16];
charcode[6];
}per;
intk,j;
________________________;
charfname[20];
scanf(“%s”,fname);
if((fp=fopen(fname,”wb”))==NULL)
{printf(“failcreatfailed!
\n”);
exit(0);
}
for(k=0;k<6;k++)
{scanf(_______________);
for(j=0;j<5;j++)
_____________________;
fwrite(&per,sizeof(structperson),1,fp);
}
fclose(fp);}
3.下面程序的功能是三个字符串中找出最小的。
#include”stdio.h”
#include”string.h”
main()
{chars[20],str[3][20];
inti;
for(i=0;i<3;i++)
________________________;
strcpy(s,(strcmp(str[0],str[1])<0?
str[0]:
str[1]));
if(_____________________<0)
strcpy(s,str[2]);
printf(“%s\n”,______________________);}
4.下述程序通过命令行参数将任意多个文本文件连接到第二个命令行参数所命名的文件中。
文件每行字符的个数小于BUFFSIZE。
请填空。
#include
#defineBUFFSIZE128
voidmain(intargc,char**argv)
{FILE*fp,*fg;
chars[BUFFSIZE];
if(argc<2)
{puts(“Haven’tcatfilename”);
return;}
if(fp=fopen(*++argv,”a+”))==NULL)
{printf(“can\’topenfile%s”,*argv);
return;}
argc=argc-2;
while(argc--)
{if((fg=fopen(________________))==NULL)
{printf(“can\’topenfile%s”,*argv);
return;}
while(_______________________)
fputs(___________________,fp);
fclose(fp);}
fclose(fg);}
5.已知head指向单链表的第一个结点,以下程序调用函数print输出这一单向链表,请填空。
#include“stdlib.h”
#include”stdio.h”
structstudent
{intinfo;
structstudent*link;
};
voidprint(structstudent*head)
{structstudent*p;
pirntf(“\nthelinklistis:
”);
p=head;
if(head!
=NULL)
do{printf(“%d”,___________________);