2级c语言题库
1. 全国计算机等级考试二级c语言历年试题及答案
2010年9月全国计算机等级考试二级C语言笔试试题及答案
一、选择题((1)-(10)每题2分,(11)-(50)每题1分.共60分))
(1)下列选项中不属于软件生命周期开发阶段任务的是
A)详细设计 B)概要设计 C)软件维护 D)软件测试
(2)树是结点的集合,它的根结点数目是
A)有且只有1 B)1或多于1 C)0或1 D)至少2
(3)在面向对象方法中,实现信息隐蔽是依靠
A)对象的继承 B)对象的多态 C)对象的封装 D)对象的分类
(4)程序设计语言的基本成分是数据成分、运算成分、控制成分和
A)语句成分 B)变量成分 C)对象成分 D)传输成分
(5)冒泡排序在最坏情况下的比较次数是
A)n/2 B)nlog2n C)n(n-1)/2 D)n(n+1)/2
(6)下列叙述中,不属于软件需求规格说明书的作用的是
A)作为确认测试和验收的依据
B)反映出用户问题的结构,可以作为软件开发工作的基础和依据
C)便于用户、开发人员进行理解和交流
D)便于开发人员进行需求分析
(7)下列叙述中错误的是
A)一个C语言程序只能实现一种算法 B)C程序可以由多个程序文件组成
C)C程序可以由一个或多个函数组成 D)一个函数可单独作为一个C程序文件存在
(8)下列不属于软件工程的3个要素的是
A)方法 B)过程 C)工具 D)环境
(9)下列叙述中正确的是
A)数据库系统是一个独立的系统,不需要操作系统的支持
B)数据库技术的根本目标是要解决数据的共享问题
C)数据库管理系统就是数据库系统
D)以上三种说法都不对
(10)下列叙述中正确的是
A)每个C程序文件中都必须有一个main()函数
B)在C程序的函数中不能定义另一个函数
C)C程序可以由一个或多个函数组成
D)在C程序中main()函数的位置是固定的
(11)将E-R图转换到关系模式时,实体与联系都可以表示成
A)属性 B)关系 C)键 D)域
(12)下列定义变量的语句中错误的是
A)double int_; B)int _int; C)char For D)float USS
(13)下列叙述中正确的是
A)C语言编译时不检查语法 B)C语言的子程序有过程和函数两种
C)C语言的函数可以嵌套定义 D)C语言的函数可以嵌套调用
(14)以下选项中,合法的一组C语言数值常量是
A) 0x8A B)12 C).177 D) 028
(15)以下叙述中正确的是
A)构成C程序的基本单位是函数
B)可以在一个函数中定义另一个函数
C)main()函数必须放在其他函数之前
D)所有被调用的函数一定要在调用之前进行定义
(16)若在定义语句:int a,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是
A)scanf("%d",&p); B)scanf("%d%d%d",a,b,c);
C)scanf("%d",p); D) scanf("%d",a,b,c);
(17) 有以下程序
main()
{int x,y,z;
x=y=1;
z=x++,y++,++y;
printf("%d,%d,%d\n",x,y,z);
}
程序运行后的输出结果是
A)2,2,3 B)2,2,2 C)2,3,1 D)2,1,1
(18) 若已定义:int a=25,b=14,c=19;以下三目运算符(?:)所构成语句的执行后a<=25&&b--<=2&&c?printf("***a=%d,b=%d,c=%d\n",a,b,c):printf("###a=%d,b=%d,c=%d\n",a,b,c);程序输出的结果是
A)***a=25,b=13,c=19 B)***a=26,b=14,c=19
C)### a=25,b=13,c=19 D)### a=26,b=14,c=19
(19)下列程序段的输出结果是
int a=1234;
float b=123.456;
double c=12345.54321;
printf("-,%2.1f,%2.1f",a,b,c);
A)无输出 B)12,123.5,12345.5 C)1234,123.5,12345.5 D)1234,123.4,1234.5
(20)有以下程序
main()
{int a=0,b=0;
a=10; /*给a赋值
b=20; 给b赋值 */
printf("a+b=%d\n",a+b); /* 输出计算结果 */
}
程序运行后输出结果是
A)30 B)a+b=30 C)a+b=0 D)出错
(21)若运行以下程序时,从键盘输入 ADescriptor(表示回车),则下面程序的运行结果是
#include
main()
{ char c;
int v0=1,v1=0,v2=0;
do{ switch(c=getchar())
{ case ′a′:case ′A′:
case ′e′:case ′E′:
case ′i′:case ′I′:
case ′o′:case ′O′:
case ′u′:case ′U′:v1+=1;
default:v0+=1;v2+=1;
}
} while(c!=′\n′);
printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);
}
A)v0=11,v1=4,v2=11 B)v0=8,v1=4,v2=8
C)v0=7,v1=4,v2=7 D)v0=13,v1=4,v2=12
(22) 有以下程序
#include
main()
{int y=9;
for( y>0;y--)
if(y%3= =0) printf("%d",--y);
}
程序的运行结果是
A)732 B)433 C)852 D)874
(23) 设有以下程序段
int x=0,s=0;
while(!x!=0)s+=++x;
printf("%d",s);
则
A)运行程序段后输出0 B)运行程序段后输出1
C)程序段中的控制表达式是非法的 D)程序段执行无限次
(24)有以下程序
fun(int x,int y){return(x+y);}
main()
{int a=1,b=2,c=3,sum;
sum=fun((a++,b++b,a+b),c++);
printf("%d\n",sum);
}
执行后的输出结果是
A)5 B)7 C)8 D)3
(25)执行下面的程序段后,变量k中的值为
int k=3, s[2];
s[0]=k; k=s[1]*10;
A)不定值 B)35 C)31 D)20
(26)以下叙述中错误的是
A)改变函数形参的值,不会改变对应实参的值
B)函数可以返回地址值
C)可以给指针变量赋一个整数作为地址值
D)当在程序的开头包含文件stdio.h时,可以给指针变量赋NULL
(27)以下程序段的描述,正确的是
x=-1;
do
{x=x*x;} while(!x);
A)是死循环 B)循环执行两次 C)循环执行一次 D)有语法错误
(28)有以下程序
fun(int x,int y)
{static int m=0,i=2;
i+=m+1;m=i+x+y; return m;
}
main()
{int j=1,m=I,k;
k=fun(j,m); printf("%d",k);
k=fun(j,m); printf("%d\n",k)
}
执行后的输出结果是
A)5,5 B)5,11 C)11,11 D)11,5
(29)有以下程序
fun(int x)
{int p;
if(x==0║x= =1) return(3);
p=x-fun(x=2);
retum p;
}main()
{ prinf("%d\n",fun(7));}
执行后的输出结果是
A)7 B)3 C)3 D)0
(30)在16位编译系统上,右有定义int a[ ]={10,20,30},*p=&a;,当执行p++;后,下列说法错误的是
A)p向高地址移了一个字节 B)p抽高地址移了一个存储单元
C)p向高地址移了两个字节 D)p与a+1等价
(31)有以下程序
main()
{int a=1,b=3,c=5;
int *p1=&a,*p2=&b,*p=&c;
*p=*p1*(*p2);
printf("%d\n",c);
}
执行后的输出结果是
A)1 B)2 C)3 D)4
(32)下列程序执行后的输出结果是
void func1(int i);
void func2(int i);
char st[]="hello,friend!";
void func1(int i)
{ printf("%c",st[i]);
if(i<3){i+=2;func2(i);}
}
void func2(int i)
{ printf("%c",st[i]);
if(i<3){i+=2;func1(i);}
}
main()
{ int i=0; func1(i); printf("\n");}
A)hello B)hel C)hlo D)hlm
(33)在下述程序中,判断i>j共执行的次数是
main()
{ int i=0, j=10, k=2, s=0;
for (;;)
{ i+=k;
if(i>j)
{ printf("%d",s);
break;
} s+=i;
}
}
A)4 B)7 C)5 D)6
(34)以下函数返回a所指数组中最大值所在的下标值
fun(int *a,int n)
{ int i,j=0,p;
p=j;
for(i=j;iif(a[i]>a[p]);
return(p);
}
在下划线处应填入的内容是
A)i=p B)a[p]=a[i] C)p=j D)p=i
(35)下列程序执行后的输出结果是
main()
{ int a[3][3], *p,i;
p=&a[0][0];
for(i=1; i<9; i++)p[i]=i+1;
printf("%d\n",a[1][2]);
}
A)3 B)6 C)9 D)随机数
(36) 有以下程序
#include
void fun(int *a,int n)/*fun函数的功能是将a所指数组元素从大到小排序*/
{int t,i,j;
for(i=0;ifor(j=i+1;jif (a}
main()
{int c[10]={1,2,3,4,5,6,7,8,9,0},i;
fun(c+4,6);
for (i=0;i<10;i++) printf("%d,",c);
printf("\n");
}
程序运行的结果是
A)1,2,3,4,5,6,7,8,9,0, B)0,9,8,7,6,5,1,2,3,4,
C) 0,9,8,7,6,5,4,3,2,1, D)1,2,3,4,9,8,7,6,5,0,
(37)以下程序的输出结果是#include
void prt (int *x, int*y, int*z)
{ printf("%d,%d,%d\n",++*x,++*y,*(z++));}
main()
{ int a=10,b=40,c=20;
prt (&a,&b,&c);
prt (&a,&b,&c);
}
A)11,42, 31
12,22,41
B)11,41,20
12,42,20
C)11,21,40
11,21,21
D)11,41,21
12,42,22
(38) 有以下程序:
#include
void fun(char *t,char *s)
{
while(*t!=0)t++;
while((*t++=*s++)!=0);
}
main()
{
char ss[10]=”acc”,aa[10]=”bbxxyy”;
fun(ss,aa);
printf(“%s,%s\n”,ss,aa);
}
程序运行结果是
A) accxyy , bbxxyy B) acc, bbxxyy
C) accxxyy,bbxxyy D) accbbxxyy,bbxxyy
(39) 有以下程序
#include
main()
{ FILE *fp; int i=20,j=30,k,n;
fp=fopen("d1.dat","w");
fprintf(fp,"%d\n",i);fprintf(fp,"%d\n",j);
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp,"%d%d",&k,&n); printf("%d %d\n",k,n);
fclose(fp);
}
程序运行后的输出结果是
A)20 30 B)20 50 C)30 50 D)30 20
(40) 有以下程序
main()
{int x[3][2]={0},I;
for(I=0;I<3;I++) scanf("%d",x[i]);
printf("%3d%3d%3d\n",x[0][0],x[0][1],x[1][0]);
}
若运行时输入:246,则输出结果为
A)2 0 0 B)2 0 4 C)2 4 0 D)2 4 6
(41)有以下程序
int add(int a,int b){return+b};}
main()
{int k,(*f)(),a=5,b=10;
f=add;
…
}
则以下函数调用语句错误的是
A)k=(*f)(a,b); B)k=add(a,b); C)k=*f(a,b); D)k=f(a,b);
(41)有以下程序
#include
main(int argc,char *argv[])
{int i=1,n=0;
while(i<arge){n=n+strlen(argv[i]);i++;}
printf(“%d\n”,n);
}
该程序生成的可执行文件名为:proc.exe。若运行时输入命令行:
proc 123 45 67
则程序的输出结果是
A)3 B)5 C)7 D)11
(42)有以下程序
void fun2(char a, char b){printi(“%b%c”,a,b);}
char a= ‘A’,b= ‘B’;
void fun1( ){ a= ‘C’l b= ‘D’; }
main( )
{ fun1( )
printf( “%c%c”,a,b);
fun2(‘E’, ‘F’);
}
程序的运行结果是
A)CDEF B)ABEF C)ABCD D)CDAB
(43)有以下程序
#include
#define N 5
#define M N+1
#define f(x) (x*M)
main()
{int i1,i2;
i1=f(2);
i2=f(1+1);
printf(“%d %d\n”,i1,i2);
}
程序的运行结果是
A)12 12 B)11 7 C)11 11 D)12 7
(44)设有以下语句
typedef struct TT
{char c; int a[4];}CIN;
则下面叙述中正确的是
A)可以用TT定义结构体变量 B)TT是struct类型的变量
C)可以用CIN定义结构体变量 D)CIN是struct TT类型的变量
(45)有以下结构体说明、变量定义和赋值语句
struct STD
{char name[10];
int age;
char sex;
}s[5],*ps;
ps=&s[0];
则以下scanf函数调用语句中错误引用结构体变量成员的是
A)scanf(“%s”,s[0].name); B)scanf(“%d”,&s[0].age);
C)scanf(“%c”,&(ps>sex)); D)scanf(“%d”,ps>age);
(46)若有以下定义和语句
union data
{ int i; char c; float f;}x;
int y;
则以下语句正确的是
A)x=10.5; B)x.c=101; C)y=x; D)printf(“%d\n”,x);
(47)若变量已正确定义,则以下语句的输出结果是
s=32; s^=32;printf(“%d”,s);
A)-1 B)0 C)1 D)32
(48) 若程序中有宏定义行:#define N 100 则以下叙述中正确的是
A)宏定义行中定义了标识符N的值为整数100
B)在编译程序对C源程序进行预处理时用100替换标识符N
C) 对C源程序进行编译时用100替换标识符N
D)在运行时用100替换标识符N
(49)以下叙述中正确的是
A)C语言中的文件是流式文件,因此只能顺序存取数据
B)打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖
C)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据
D)当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失
(50)有以下程序
#include
main()
{FILE *fp; int i;
char ch[]=”abcd”,t;
fp=fopen(“abc.dat”,”wb+”);
for(i=0;i<4;i++)fwriter&ch[],1,1fp;
fseek(fp,-2L,SEEK_END);
fread(&t,1,1,fp);
fclose(fp);
printf(“%c\n”,t);
}
程序执行后的输出结果是
A)d B)c C)b D)a
二、填空题(每空2分,共40分)
(1)在面向对象方法中,类之间共享属性和操作的机制称为 【1】 。
(2)一个关系表的行称为 【2】 。
(3)耦合和内聚是评价模块独立性的两个主要标准,其中 【3】 反映了模块内各成分之间的联系。
(4)线性表的存储结构主要分为顺序存储结构和链式存储结构.队列是一种特殊的线性表,循环队列是队列的【4】存储结构.
(5) 【5】 的任务是诊断和改正程序中的错误。
(6) 以下程序的输出结果是【6】.
#include
main()
{ int n=12345,d;
while(n!=0){ d=n%10; printf("%d",d); n/=10;}
}
(7)以下程序运行后的输出结果是 【7】 。
main()
{
int m=011,n=11;
printf("%d %d\n",++m,n++);
}
(8)有以下程序,若运行时从键盘输入:18,11,则程序输出结果是 【8】 。
main()
{ int a,b;
printf("Enter a,b:");scanf("%d,%d",&a,&b);
while(a!=b)
{ while(a>b) a-=b;
while(b>a) b-=a;
}
printf("%3d%3d\n",a,b);
}
(9) 有以下程序段,且变量已正确定义和赋值
for(s=1.0,k=1;k<=n;k++) s=s+1.0/(k*(k+1));
printf("s=%f\n\n",s);
请填空,使下面程序段的功能为完全相同
s=1.0;k=1;
while(_【9】_______){ s=s+1.0/(k*(k+1)); _【10】_______;}
printf("s=%f\n\n",s);
(10)执行以下程序的输出结果是【11】______.
#include
main()
{ int i,n[4]={1};
for(i=1;i<=3;i++)
{ n=n[i-1]*2+1; printf("%d",n); }
}
(11)以下程序中函数f的功能是在数组x的n个数(假定n个数互不相同)中找出最大最小数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换.请填空.
#include
viod f(int x[],int n)
{ int p0,p1,i,j,t,m;
i=j=x[0]; p0=p1=0;
for(m=0;m{ if(x[m]>i) {i=x[m]; p0=m;}
else if(x[m]}
t=x[p0]; x[p0]=x[n-1]; x[n-1]=t;
t=x[p1];x[p1]= _【12】_______; 【13】______=t;
}
main()
{ int a[10],u;
for(u=0;u<10;u++) scanf("%d",&a);
f(a,10);
for(u=0;u<10;u++) printf("%d",a);
printf("\n");
}
(12)下列程序中的函数strcpy2()实现字符串两次复制,即将t所指字符串复制两次到s所指内存空间中,合并形成一个新的字符串。例如,若t所指字符串为efgh,调用strcpy2后,s所指字符串为efghefgh。请填空。
#include
#include
void strcpy2(char *s,char *t)
{ char *p=t;
while(*s++=*t++);
s= 【14】 ;
while( 【15】 =*p++);
}
main()
{ char str1[100]="abcd",str2[]="efgh";
strcpy2(str1 ,str2); printf("%s\n",str1);
}
(13)以下程序统计从终端输入的字符中大写字母的个数,num[0]中统计字母A的个数,num[1]中统计字母B的个数,其它依次类推.用#号结束输入,请填空.
#include
#include
main()
{ int num[26]={0},i; char c;
while((_【16】_______)!='#')
if(isupper(c)) num[c-‘A’]+= 【17】_______;
for(i=0;i<26;i++)
Printf("%c:%d\n",i+'A',num);
}
(14)以下程序中,函数fun的功能是计算x2-2x+6,主函数中将调用fun函数计算:
y1=(x+8)2-2(x+8)+6
y2=sin2(x)-2sin(x)+6
请填空。
#include "math.h"
double fun(double x) { return(x*x-2*x+6); }
main()
{
double x,y1,y2;
printf("Enter x:"); scanf("%lf",&x);
y1=fun( 【18】 );
y2=fun( 【19】 );
printf("y1=%lf,y2=%lf\n",y1,y2);
}
(15) 以下程序的输出结果是_【20】______.
#include
#define M 5
#define N M+M
main()
{ int k;
k=N*N*5; printf("%d\n",k);
}
一、选择题答案:
1-10:CACDC DADBA 11-20:BDDBA CCCCB 21-30:DCBCA CCBCA
31-40:CCDAB DCDAB 41-50:CABCD BBBDB
二、填空题答案:
1.继承 2. 元组 3.内聚 4.顺序 5. 程序调试
6. 54321 7.10 11 8. 1 9.k<=n k++
10. 3 7 5 11.x[0] x[0] 12.s--,*s++ 13.c=getchar() 14. (x+8),sin(x) 15.55
希望对你有所帮助
2. 计算机二级c语言题库及答案
3. 全国计算机等级考试二级C语言历年试题及答案
这里有一份最全的考研历年真题资料分享给你
链接:
通过不断研究和学习历年真题,为考生冲刺阶段复习提分指点迷津,做真题,做历年真题集,对照考纲查缺补漏,提高实战素养,制定做题策略,规划方向;
若资源有问题欢迎追问!
4. 二级c公共基础题库
c语言总复习资料
一 c语言的基本组成单位——函数。1.main();2库函数;3.自定义函数。Abc();
二 函数的组成:1.函数的首部,函数的第一行语句(包括函数的返回值类型、函数名、函数参数类型及函数参数名)。()不可省略,例如:void main() 2.函数体,包括函数的声明部分(声明在该程序中所要用到的函数)、定义部分(定义函数可能要用到的变量)、执行部分(用于实现函数的功能)。
三 函数必不可少的分号。
四 输入输出所使用的函数:scanf、getchar、gets、printf、putchar、puts等。
五 注释:不能嵌套。习题94页18题。
六 大小写区分:printf与Printf之不一样。
七 C语言上机过程:编辑(.c)——>编译(.obj)——>连接(.exe)——>运行得结果。
八 C程序执行是从main()函数开始,到main函数结束处结束。
九 进制转换:着重掌握十、八、十六进制及相互转换,原补码(位运算中要用到)。
十 用户自定义标识符:1.字母、数字、下划线。2第一个字母不能为数字。3.不能与c语言所定义的关键字相同,但可以与预定义标识符同。
十一 常量:
1整形常量 十进制、八进制(以0开头)、十六进制(以0x开头)后两种无负数。
2实型常量 2.78(小数点两边至少有一边要有数字)5.48e-3(e前必有数字,e后必为整数)
3字符型常量 a.一般字符’a’ ;b.转义字符:一般转义字符、八\十六进制转义字符。’\n’,’\\’,’\t’,’\”’,’\64’,’\82’,’\x42’,’\xff’,’a12’.
4字符串常量 “a” vs ’a’
十二 变量 1.必须要先定义后使用;2变量三要素 变量类型 变量名 变量值
例1:下面不是c语言整形常量的是 A. 02 B. 0 C.038 D.0xAL
例2:合法的实型常量是A. 5E2.0 B.E-3 C.2E0 D 1.3E
例3:若有语句char a;并要将字符a赋值给变量a,则下列正确的赋值表达式是
A.a=”a” B.a=’a’ C.a=”97” D.a=’97’
例4:以下合法的定义是:
A. float _a=1.1e-1; B. double b=1+5e2.5; C.long do=0xfdaL; D.float 2_and=1-e-3;
十三.求余原则:1.两边都要为整数;
2.先取绝对值求余,余数与被除数符号相同。特别要注意’%’与’/’ 的区别。 -10/3 10/-3
十四. 赋值运算符及表达式:运算顺序自右致左,左边必须要是一个变量(能够存放东西)。
a=b=c=10(定义处不能这样); x+y=10; x+1=10;
十五. 逗号表达式:a=(b=5,b+10); b=(a=4*9,a*2),a-3; 要考虑优先级。
十六. 类型转换 char a=’a’; int b=32; float c=32.5;double s,d=32; s=a+b+c+d;
十七.强制类型转换 float b=3.5;int a; a=(int)b;
例5:设有int x=11;则表达式(x++*1/3)的值是 A 3 B 4
例6:设有int a=1,b=1,c=1;a=a+++b+++c; 最终a、b、c的值是:a=4;b=2;c=1;
例7:有以下定义和语句组:float x=1;int y=2;y+=++x*++x;则最终y的值为:11
例8:int x=2;printf(“%d”,((x=4*5,x*5),x+25)); 45
例9:若变量已正确定义并赋值,以下符合c语言语法的表达式是
A.a:=b+1 B.a=b=c+2 C. int 18.5%3 D.a=a+7=c+b
十八 输入输出格式ch=getchar(); putchar(ch); scanf(“%d%f%c”,&a,&b,&c); printf(“%d,%d”,a,b);
例10:有以下程序,输出的结果是
main(){int a;char c=10;float f=100.0;double x;
a=f/=c*=(x=6.5);printf(“%d %d %3.1f %3.1f\n”,a,c,f,x);}1 65 1.5 6.5 (习题集2.13)
十九.逻辑运算及其短路现象(对于逻辑与和逻辑或而言)
二十.关系运算符及表达式a>b>c 优先级要清楚(即关>逻辑)
二十一.条件运算符及表达式a>b?a:c>d:c:d等价与a>b?a:(c>d?c:d) 设a=1,b=2,c=3,d=4; 4
例11:以下程序的输出是 A. d=0 c=50 B.d=0 c=2 C.d=1 c=50 D.d=1 c=2
main(){int a=3,b=4,c=2,d; d=a<!b&&(c=50)>b; printf(“d=%d c=%d”,d,s);}
二十二.if语句 例12:以下程序输出结果是
int i=1,j=1,k=2; if((j++||k++)&&i++) printf(“%d,%d,%d\n”,i,j,k); 2,2,2
if-else语句注意:if后只能管一个语句
main(){int a=2,b=-1,c=2; if(a<b) if(b<0) c=0;
else c++; printf(“%d\n”,c);}
二十三.switch 语句 以下程序的输出是: main(){int x=1,a=0,b=0;
switch(x) {case 0:b++;case 1:a++;case 2:a++;b++;} printf(“a=%d,b=%d\n”,a,b)} a=2,b=1
二十四.while vs do-while
main()
{int i=0,n=0;
while(n!=0){i++;++i} printf(“%d”,i);
}
main()
{int i=0,n=0;
do {i++;++i} while(n!=0); printf(“%d”,i);
}
二十五 break vs continue
注意:break语句只能出现在循环体和switch语句中而continue只出现在循体环中。
main()
{int sum,i;sum=0; for(i=10;i>0;i--) {if(i>5) continue;sum=sum+i;} printf("%d\n",sum);}
例13:以下程序的输出是: main(){int a,y;a=5;y=0; a=7 y=7
do{ a+=2;y+=a;printf(“a=%d y=%d\n”,a,y);if(y>10) break; }while(a==7); }a=9 y=16
例14:以下程序的输出是: main(){int k=4,n=0; for(;n<k;){n++;if(n%3!=0) continue;k--;}
printf(“%d,%d\n”,k,n);} 3,3
二十六.一维数组的定义、赋初值、引用。注意:int a[10]={0};中括号例常量表达式 ,下标从0开始 例15:若有定义float y[5]={1,2,3};则下列描述正确的是:( )
A. y并不代表数组元素 B.定义此数组时不指定数组的宽度,定义效果一样
C.数组含有三个元素 D.a[3]的值是3
例16:以下程序的输出是: main(){int z,y[3]={2,3,4};z=y[y[0]];printf(“%d”,z);} 4
例17:以下程序的输出是: main(){int p[7]={11,13,14,15,16,17,18},i=0,k=0;
while(i<7&&p[i]%2) {k=k+p[i];i++}printf(“%d\n”,k);} 24
例18:以下程序的输出是:
main(){int n[5]={0,0,0},i,k=2;for(i=0;i<k;i++) n[i]=n[i]+1;printf(“%d\n”,n[k])} 0
二十七.二维数组的定义、赋初值、引用
例19:main(){int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++)
for(j=0;j<=i;j++) s+=a[i][j];printf(“%d\n”,s)} 18
例20:以下不能正确定义二维数组的是:
A int a[2][2]={{1},{2}};B int a[][2]={1,2,3};C int a[2][2]={{1},2,3}; D int a[2][]={{1,2},{3,4}};
例21:若a是一个m行n列的数组,则a[i][j]是数组的第( )个元素
A i*m+j B i*m+j+1 C i*n+j D i*n+j+1
二十八 字符数组的定义、赋初值、引用
1.char arr[10]={‘h’,’e’,’l’,’l’,’o’}; 2.char arr[]={‘h’,’e’,’l’,’l’,’o’,’\0’};
3.char arr[10]={“hello”}; 4.char arr[10]=”hello”;
二十九 字符串输入输出 若char str[10]=”hello”,arr[10]=”me”;
scanf(“%s”,str); printf(“%s”,str); gets(str); puts(str);
strcpy(arr,str); strcmp(str,arr); strlen(str); strcat(str,arr);
例22:以下程序的输出是:
main(){char st[20]=”hel\0lo\t”;printf(“%d%d\n”,strlen(st),sizeof(st))} 3,20
例23:以下程序的输出是:char s[]=”\\141\141abc\t”;printf(“%d\n”,strlen(s));9
三十 指针与字符串 char *a; a=”hello”; char a[10]; a=”hello”;
例24:以下选项中正确的语句组是:( ) A.char s[8];s={“Beijing”};
B.char *s;s={“Beijing”}; C.char s[8];s=”Beijing”; D.char *s;s=”Beijing”;
三十一 有参函数的声明、定义、与调用。
float add(float x,float y);/*函数的声明*/
mai()
{int a=3.5,b=4.0,d;
d=add(a,b);/*函数的调用*/
}
float add(float x,float y)/*函数的定义*/
{return x+y;}
三十二 函数的嵌套调用与递归调用
double fun1(double a) {return a*=a;}
double fun2(double x,double y)
{ double a=0,b=0;
a=fun1(x);b=fun1(y);
return (int)(a+b);}
main()
{double w;w=fun2(1.1,2.0);
printf("%f\n",w);} /*嵌套调用*/
long fib(int n)
{if(n>2) return (fib(n-1)+fib(n-2));
else return 2;}
main(){printf(“%d\n”,fib(3));}/*递归调用*/
三十三 函数中的值传递与地址传递(不管是传递什么,实质都是传值,只不过一个是传递地址值而已)
func(int a){a=100;} func(int a[]) {a[0]=100;}
main(){int a=10;func(a);printf(“%d”,a);} main(){int a[1];a[0]=10;func(a);printf(“%d”,a[0]);}
三十四 局部变量与全局变量:局部变量的存储类型分为自动型(auto)、寄存器型(register)、静态类型(static),其中auto型和register型的变量的存储空间是动态的,程序一结束,其值就消失。而static类型的变量,程序结束后其值仍然存在。全局变量是静态的变量。
int a=5;
fun(int b) {static int a=10;a+=b++;printf(“%d”,a);}
main(){int c=20;fun(c);a+=c++;printf(“%d\n”,a);} 3025 如果在main中再加一个fun(c)呢?305025
三十五 宏命令与文件包含
#define N 10
#define S(x) x*x/*只要把这三个define语句放到一个文件hong.h里面*/
#define f(x) (x*x)/*再在主函数前加一个#include “hong.h”,程序运行结果一样*/
main(){int i1,i2; i1=1000/S(N); i2=1000/f(N); printf(“%d %d”,i1,i2);}1000 10
三十六 指针变量的定义、初始化、运算
main()
{int n=5,*p=&n;printf(“the address is :%d\n”,p);
printf(“the data is:%d\n”,*p);
printf(“&*p is:%d\n”,&*p);
printf(“*&nis:%d\n”,*&n);}
例24:设有定义int n=0,*p=&n;则正确的赋值语句是:A. p=1; B.*p=&n; A选项不行,因p中应存放一个地址值对于B选项,因p已经指向了n这个存储单元,实际上相当于n=5 。
三十七 指针与一维数组
int a[10],*p;/*a与p是不同的,a是数组名是常量,不能执行a++;a+=1的操作,p则可以*/
p=&a[0];p=a;/*这两个语句等价,都是让p指针指向这个数组*/
执行上述语句后:p[i]等价于a[i];*(p+i)等价于*(a+i)
三十八 指针与二维数组:下面给出了引用二维数组第i行第j列元素的不同方式
1. a[i][j];
2. 因a[i]表示第i行的首地址,a[i]+j表示第i行第j列的地址,所以*(a[i]+j)表示第i行第j列的值。
3. 又因a[i]可以写成*(a+i),所以2中的表达式又可以写成*(*(a+i)+j)。
4. 把1中的a[i]变成*(a+i),后面的不变,故又可写成(*(a+i))[j]。
三十九 通过行指针引用二维数组
int a[4][4],(*p)[4];p=a;
四十 通过指针数组引用二维数组元素
int *p[4],a[4][4]; for(i=0;i<4;i++) p[i]=a[i];
以上两个知识点,像以上这样赋值后,要引用第i行第j列元素时,只需要把a改成p即可。
四十一 函数指针与指针函数
int f(int x) {……} main() {int (*p)(); int a,b=2;p=f;a=(*p)(b); a=f(b);a=p(b);……}
函数指针:返回值是指针(地址)的函数。 int *func(int a,int b);
例25:int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0<=i<=9,下列对数组引用不正确的是:
A. a[p-a] B. *(&a[i]) C. p[i] D.a[10]
例 26:若定义int a[3][2];能正确表示t数组元素的地址的表达式是 A. &a[3][2] B.a[3] C. a[1] D.*a[2]
例28:以下程序输出结果是:A. 69825 B.63825 C.6385 D.693825
main(){char ch[2][5]={“6937”,”8254”},*p[2]; int i,j,s=0; for(i=0;i<2;i++) p[i]=ch[i];
for(i=0;i<2;i++) for(j=0;p[i][j]>’\0’;j+=2) s=10*s+p[i][j]-‘0’; printf(“%d\n”,s); }
四十二 结构体的定义、赋初值
struct student {int num;char name[10];} *p,stu[2]={{123,”zhang”},{124,”li”}};p=stu;
typedef struct student {} STU; 在这个语句后就可以用STU来定义结构体变量了。
例:STU a,*p;等价于 struct student a,*p;
四十三 结构体变量的引用
printf(“%d”,stu[1].num); printf(“%d”,stu[1].name ); printf(“%d”,p[1]->num);
printf(“%d”,p[1]->name); printf(“%d”,stu);则不对
四十四 malloc、calloc、free函数及链表的操作 链表操作见书p120 int *p,*pint; float *q; p=(int*)malloc(sizeof(int)); q=(float*)malloc(sizeof(float)); pint=(int*)calloc(10,sizeof(int)); free(p); 习题集12章16题。
例29:下列赋值语句正确的是 struct worker {int num;char *name;}*p,a;
A. worker.num=1; B.p.num=1; C.*p.num=1; D.a.num=1;
例30:在16位pc环境下,下列程序运行的结果是:(此题大家有印象即可,不必深究)
struct worker {int num;char *name;}a; main(){printf(“%d”,sizeof(a))} 4(若32位则是8)
例31:设有如下定义:struct ss{char name[10]:int age:char sex:}stu[3],*p=std;下面各输入语句错误的是:( )
A. scanf(“%d”,&(*p).age); B.scanf(“%s”,&std.name); C.scanf(“%c”,&std[0].sex); D.scanf(“%c”,&(p->sex));
因为std是表示是地址,而地址表示不应该是这样的,应该是&(std->name);
四十五 位运算 ~、<<、>>、|、& 、^、例5.4
四十六 文件的打开及对文件的操作 FILE *fp;char str[10]=”hello”;int a,b;
1. if((fp=fopen(“in.dat”,”rb”))==NULL) printf(“Unable to open the file!”);/*重点注意打开文件的方式,特别注意以”w”,”r+”,”w+”,”a”方式打开,对文件的影响。*/
2. fclose(fp);/*关闭文件*/ feof(fp);/*测试文件是否结束,如到了则返回1,否则返回0*/
3. fseek(fp,12,SEEK_SET) /*将文件指针移动到文件起始位置后面的第12个字节处*/
4. fseek(fp,12,SEEK_END)/* 将文件指针移动到文件倒数第12个字节处*/
5. fseek(fp,0,SEEK_SET) /*将文件指针移动到文件起始位置同rewind(fp)函数*/
6. fseek(fp,12,SEEK_END)/* 将文件指针移动到文件末尾*/
7. ftell(fp); ch=fgetc(fp); putc(ch,fp); fgets(str,n,fp); fputs(str,fp);
8. fscanf(fp,”%d%d”,&a,&b);/*从fp所指向的文件中取出的两数分别存放在a和b中*/
9. fprintf(fp,”%d%d”,a,b);/*把a和b中所存放的数据输出(存放)到fp所指向的文件中*/
10. fread(str,size,count,fp);/*从fp所指向的文件中取出size*count个字节存放到str数组中*/
11. fwrite(str,size,count,fp);/*把str数组中的size*count个字节存放到fp所指向的文件中*/
你有相关的书吗?这是我当年考试用过的一些资料呀!希望对你有帮助!!
5. c语言计算机二级考试选择题如图
全国计算机二级考试试题题库(附答案)
下列各题 A) 、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项在答题
卡相应位置上涂黑,答在试卷上不得分。
(1) 应用软件是指
A) 所有能够使用的软件 B) 能被各应用单位共同使用的某种软件
C) 所有微机上都应使用的基本软件 D) 专门为某一应用目的而编制的软件
(2) 下列述叙中错误的是
A) 计算机要经常使用不要长期闲置不用
B) 为了延长计算机的寿命,应避免频繁开关计算机
C) 在计算机附近应避免磁场干扰
D) 计算机用几小时后,应关机一会儿再用
(3) 下列字符中,ASCII码值最小的是
A) A B) a C) Z D) x
(4) 用晶体管作为电子器件制成的计算机属于
A) 第一代 B) 第二代 C) 第三代 D) 第四代
(5) 下列各不同进制的四个无符号数中,最小的数是
A) ()2 B) (37)8 C) (75)10 D) (2A)16
(6) 二进制数转换成十六进制数是
A) B) C) D)
(7) 下列各无符号十进制数中,能用八位二进制表示的是
A) 296 B) 333 C) 256 D) 199
(8) 计算机的软件系统可分类为
A) 程序与数据 B) 系统软件与应用软件
D) 操作系统与语言处理程序 D) 程序、数据与文档
(9) 486机中的CPU同时能处理的二进制位数为
A) 8 B) 16 C) 32 D) 64
(10) 在使用计算机的过程中,需要重新启动DOS,则要
A) 按Ctrl+Break键 B) 按^C键 C) 按Ctrl+Alt+Del键 D) 按^H键
(11) 现要从软盘启动DOS(软盘中已存有DOS系统),设有如下一些操作:①打开计算机
电源;②将该软盘插入A驱动器;③关好A驱动器门。则冷启动的操作顺序应为
A) ①→②→③ B) ③→②→① C) ②→①→③ D) ②→③→①
(12) 设当前盘中某一文件路径为\A\C\B\,当前目录为\A。下列命令中错误的是
A) CD.. B) RD \A\C\B
C) TYPE \A\C\B\ D) TYPE C\B\
(13) 设当前盘中的根目录下有一子目录AB,在子目录AB下有一文件。现要查看文件
的内容,应使用命令
A) TYPE \AB B) TYPE \AB\
C) TYPE \ D) DIR \AB\
(14) 自动批处理文件必须放在
A) C盘根目录中 B) A盘根目录中
C) 启动盘的任一个目录中 D) 启动盘的根目录中
(15) 设当前盘当前目录为C:\USER\XY\P,且当前盘当前目录为空,则下列命令中能正
确执行的是
A) RD C:\USER\XY\P B) RD USER\XY\P
C) MD \USER\XY\P\USER D) MD \USER\XY\P\X\Y
(16) 下列DOS命令中,合法的是
A) DISKCOMP B) TYPE >>
C) COMP A: B: D) COMP A: A:
(17) 设当前盘为C盘,所用的所有软盘已格式化,且容量相同,则下列DOS命令中错
误的是
A) DISKCOPY A: A: B) COPY A:*.* C) COPY *.* D) COPY A:*.* C:
(18) 下列DOS命令中错误的是
A) TYPE >PRN B) TYPE PRN
C) COPY *.TXT PRN D) COPY CON PRN
(19) 下列四组DOS命令中,互相等价的一组是
A) COPY A:*.* B:与DISKCOPY A: B:
B) COPY +与TYPE >>
C) COPY + 与COPY +
D) TYPE *.FOR>CON与COPY *.FOR CON
(20) 设C盘目录结构如下:
且C盘根目录下文件的内容为
CD FORTRAN
CD \TC
如果在A驱动器中插入一张根目录中只有扩展名为.C的若干文件(即A盘中无DOS系统
文件)的软盘片,则由C盘启动DOS系统后,第一次键入下列命令中,正确的是
A) COPY A:\*.C B) COPY A:\*.C TC
C) COPY A:\*.C FORTRAN D) CD USER
(21) C语言提供的合法的数据类型关键字是
A) Double B) short C) integer D) Char
(22) 在C语言中,合法的长整型常数是
A) 0L B) 4962710 C) D)
(23) 表达式:10!=9的值是
A) true B) 非零值 C) 0 D) 1
(24) 合法的C语言中,合法的长整型常数是
A) '\t' B) "A" C) 65 D) A
(25) 若有说明和语句:
int a=5;
a++;
此处表达式a++的值是
A) 7 B) 6 C) 5 D) 4
(26) 在下列选项中,不正确的赋值语句是
A) ++t; B) n1=(n2=(n3=0)); C) k=i==j; D) a=b+c=1;
(27) 若有说明:int i,j=7, *p=&i;,则与i=j;等价的语句是
A) I= *P; B) *P=*&J; C) i=&j; D) i=* *p;
(28) 不能把字符串:Hello!赋给数组b的语句是
A) char b[10]={'H','e','l','l','o','!'};
B) char b[10];b="Hello!";
C) char b[10];strcpy(b,"Hello!");
D) char b[10]="Hello!";
(29) 若有以下说明:
int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};
char c='a',d,g;
则数值为4的表达式是
A)a[g-c] B)a[4] C)a['d'-'c'] D)a['d'-c]
(30) 若有以下说明:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为6的表达式是
A) *p+6 B) *(p+6) C) *p+=5 D) p+5
(31) 若有以下说明:
int w[3][4]o={{0,1},{2,4},{5,8}};
int(*p)[4]=w;
则数值为4的表达式是
A) *w[1]+1 B) p++,*(p+1) C) w[2][2] D) p[1][1]
(32) 若程序中有下面的说明和定义
struct abc
{int x;char y;}
struct abc s1,s2;
则会发生的情况是
A) 编译进错 B) 程序将顺利编译`连接`执行
C) 能顺利通过编译`连接`但不能执行 D) 能顺利通过编译`但连接出错
(33) 能正确表示a≥10或a≤0的关系表达式是
A)a>=10 or a<=0 B)a>=10│a<=0
C)a>=10││a<=0 D)a>=10 ││a<=0
(34) 下面程序的输出是
main()
{ int x=3,y=6,a=0;
while(x++!=(y+=o1))
{ a+o=1;
if(y
#include
main()
{ char ss[10]="12345";
strcat(ss,"6789");
gets(ss);printf("%s\n",ss);
}
A) ABC B) ABC9 C) 123456ABC D) ABC456789
(35) 下面程序的输出是
main()
{ char *a="";
int v1=0,v2=0,v3=0,v4=0,k;
for(k=0;s[k];k++)
switch(s[k])
{ default:v4++;
case '1': v1++;
case '3': v3++;
case '2': v2++; }
printf("v1=%d,v2=%d,v3=%d,v4=%d\n",v1,v2,v3,v4); }
A) v1=4,v2=2,v3=1,v4=1 B) v1=4,v2=9,v3=3,v4=1
C) v1=5,v2=8,v3=6,v4=1 D) v1=8,v2=8,v3=8,v4=8
(36) 下面程序的输出是
main()
{int k=11;printf("k=%d,k=%o,k=%x\n",k,k,k);}
A)k=11,k=12,k=11 B)k=11,k=13,k=13 C)k=11,k=013,k=0xb D)k=11,k=13,k=b
(37) 若有以下程序段,w和k都是整型变量:
┆
w=k;
LB: if(w==0) go to LE;
w--;
printf("*");
goto LB;
LE: ┆
则不能与上面程序段等价的循环语句是
A)for(w=k;w!=0;w--) printf("*"); B)for(w=k;w;--w)printf("*");
C)w=k; D)w=k;
while(w--!=0)printf("*");w++; do{ w--;printf("*");}while(w!=0);
(38) 若有说明,double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是
A)*p=&a; scanf("%lf",p); B)p=(double *)malloc(8);scanf("%f",p);
C) p=&a;scanf("%lf",a); D)p=&a; scanf("%le",p);
(39) 当执行下面程序且输入:ABC时,输出的结果是
#include
#include
main()
{ char ss[10]="12345";
gets(ss);printf("%s\n",ss); }
A) ABC B) ABC9 C) 123456ABC D) ABC456789
(40) 若有以下的说明和语句:
main()
{int t[3][2], *pt[3],k;
fpr(k=o; k<3;k++)pt[k]=t[k];
}
则以一选项中能正确表示t数组元素地址的表达式是
A) &t[3][2] B) *pt[0] C) *(pt+1) D) &pt[2]
(41) 下面程序输出数组中的最大值,由s指针指向该元素.
main()
{ int a[10]={6,7,2,9,1,10,5,8,4,3,},*p,*s;
flr(p=a, s=a; p-a<10; p++)
if(---?---)s=p;
printf("The max:%d",*s):
}
则在if语句中的判断表达式应该是
A) p>s B) *p>*s C) a[p]>a[s] D) p-a>p-s
(42) 下面程序的输出是
#include
main()
{ char*a="abcdefgh";
fun(a);puts(a); }
fun (char * s)
{ int x=0,y;char c;
for(y=strlen(s)-1;x
A)abcdefgh B)hgfdecba C)dcbahgfe D)hgfedcba
(43) 若有以下函数调用语句: fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句
中实参的个数是
A)3 B)4 C)5 D)6
(44) 下面程序的输出是
main()
{ int t=1; fun(fun(t));}
fun(int h)
{ static int a[3]={1,2,3};
int k;
for(k=0;k<3;k++) a[k]+=a[k]-h;
for(k=1;k<3;k++) printf("%d",a[k]);
printf("\n"); return(a[h]);}
A)1,2,3, B)1,3,5, C) 1,3,5, D) 1,3,5,
1,5,9, 1,3,5, 0,4,8, -1,3,7,
(45) C语言中,函数的隐含存储类别是
A)auto B)static C)extern D)无存储类别
(46) 下面程序的输出是
int w=3;
main()
{ int w=10; printf("%d\n",fun(5)*w); }
6. 国家计算机二级C语言考试题
一 、选择题
(1)下列数据结构中,按先进后出原则组织数据的是
A)线性链表
B)栈
C)循环链表
D)顺序表
正确答案: B
(2)具有3个结点的二叉树有
A)2种形态
B)4种形态
C)7种形态
D)5种形态
正确答案: D
(3)设有下列二叉树:
对此二叉树前序遍历的结果为
A)ZBTYCPXA
B)ATBZXCYP
C)ZBTACYXP
D)ATBZXCPY
正确答案: B
(4)结构化程序设计主要强调的是
A)程序的规模
B)程序的效率
C)程序设计语言的先进性
D)程序易读性
正确答案: D
(5)程序的3种基本控制结构是
A)过程、子过程和分程序
B)顺序、选择和重复
C)递归、堆栈和队列
D)调用、返回和转移
正确答案: B
(6)下列叙述中,不属于测试的特征的是
A)测试的挑剔性
B)完全测试的不可能性
C)测试的可靠性
D)测试的经济性
正确答案: C
(7)需求分析中开发人员要从用户那里了解
A)软件做什么
B)用户使用界面
C)输入的信息
D)软件的规模
正确答案: A
(8)下列关系模型中,能使经运算后得到的新关系中属性个数多于原来关系中属性个数的是
A)选择
B)连接
C)投影
D)并
正确答案: B
(9)下列叙述中,正确的是
A)用E-R图能够表示实体集间一对一的联系、一对多的联系和多对多的联系
B)用E-R图只能表示实体集之间一对一的联系
C)用E-R图只能表示实体集之间一对多的联系
D)用E-R图表示的概念数据模型只能转换为关系数据模型
正确答案: C
(10)"年龄在18~25之间"这种约束是属于数据库当中的
A)原子性措施
B)一致性措施
C)完整性措施
D)安全性措施
正确答案: C
11)以下说法错误的是
A)高级语言都是用接近人们习惯的自然语言和数学语言作为语言的表达形式
B)计算机只能处理由0和1的代码构成的二进制指令或数据
C)C语言源程序经过C语言编译程序编译之后生成一个后缀为.EXE的二进制文件
D)每一种高级语言都有它对应的编译程序
正确答案: C
(12)算法是指为解决某个特定问题而采取的确定且有限的步骤,下面不属于算法的五个特性的是
A)有零个输入或多个输入
B)高效性
C)有穷性
D)确定性
正确答案: B
(13)已知int a=6; 则执行a+=a-=a*a;语句后,a的值为
A)36
B)0
C)-24
D)-60
正确答案: D
(14)下面各选项中,均是C语言标识符的选项组是
A)forchinato
B)long_123short56_do
C)voinion_342
D)text.txt _023_3ew
正确答案: B
(15)下列表达式中,结果为5的是
A)6*5%6
B)5*-2+15
C)5+75%10
D)6+-2/3
正确答案: B
(16)下列常量中,为不合法的实型常量表示的是
A).0032
B)0.0
C)0.3242E8
D).E3
正确答案: D
(17)关于C语言的主函数描述正确的是
A)C程序可以有多个main函数
B)C程序必有一个而且只能有一个main函数
C)C程序可以没有main函数
D)C程序的执行不一定在main函数开始执行
正确答案: B
(18)已知int a=1,b=-1;则语句printf("%d\n",(a--,++b));的输出结果是
A)-1
B)0
C)1
D)语句错误
正确答案: B
(19)已知int a,b;double c;则以下语句中错误的函数调用是
A)scanf("%d,%x,%lf",&a,&b,&c);
B)scanf("%d,%d,%le",&a,&b,&c);
C)scanf("%o,%x,%o",&a,&b);
D)scanf("%d,%o,%e",&a,&b,&c);
正确答案: D
(20)已知x,y,z均为整型变量,且值均为1,则执行语句++x||++y&&++z;后,表达式x+y的值为
A)1
B)2
C)3
D)4
正确答案: C
7. 计算机二级C语言选择题及答案(2)
}
printf("%d ",num);
}
程序执行后的输m结果是()。
A.35
B.37
C.39
D.3975
32.以下程序的'输出结果是()。
main()
{char st[20]="hello \";
printf("%d%d ",strlen(st).sizeof(st));
}
A.9 9
B.5 20
C.13 20
D.20 20
33.若有以下的定义:‘int t[3][2];”,能正确表示t数组元素地址的表达式是()。
A.&t[3][2]
B.t[3]
C.t[l]
D.t[2][2]
34.函数fseek(pf,OL,SEEK END)中的SEEK ENE 代表的起始点是()。
A.文件开始
B.文件末尾
C.文件当前位置
D.以上都不对
35.下述程序的输出结果是()。
#include
main()
{ int i;
for(i=l;i<=10;i++)
{if(i*i>=20)&&(i*i<=100))
break;
}
printf("%d ",i*i);
}
A.49
B.36
C.25
D.64
36.若有定义“int b[8],*p=b;”,则p+6表示()。
A.数组元素b[6]的值
B.数组元素b[6]的地址
C.数组元素b[7]的地址
D.数组元素b[o]的值加上6
37.设变量已正确定义,则以下能正确计算f=n!的程序是()。
A.f=0:
for(i=1;i<=n;i++)f*=i:
B.F=1:
for(i=l;i<2n;i++)f*=i:
C.f=l:
for(i=n;i>1;i++)f*=i:
D.f=1;
for(i=n;i>=2;i--)f*=i:
38.下述程序执行的输出结果是()。
#include
main()
{ char a[2][4];
strcpy(a,"are");strcpy(a[1],"you");
a[0][3]=’&’;
printf("%s ",a):
}
A.are&you
B.you
C.are
D.&
39.设x=011050,则x=x&01252的值是()。
A.0000001000101000
B.1111110100011001
C.0000001011100010
D.1100000000101000
40.在“文件包含”预处理语句的使用形式中,当#include后面的文件名用(双引号)括起时,寻找被包含文件的方式是()。
A.直接按系统设定的标准方式搜索目录
B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索
C.仅仅搜索源程序所在目录
D.仅仅搜索当前目录
【答案与解析】
1.D。【解析】算法的空间复杂度,是指执行这个算法所需的存储空间。算法所占用的存储空间包括算法程序所占用的空间、输入的初始数据所占用的存储空间、算法执行过程中所需要的额外空间。
2.D。【解析】数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,用的存储结构有顺序和链式结构。用不同的存储结构,其处理的效率是不同的。
3.D。【解析】所谓的交换排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序通过相邻元素的交换,逐步将线性表变成有序是一种最简单的交换排序方法。
4.C。【解析】结构化程序设计的原则和方法之一是限制使用GOT0语句,但不是绝对不允许使用GOT0语句。其他三项为结构化程序设计的原则。
5.D。【解析】文件系统所管理的数据文件基本上是分散、相互独立的。相对于数据库系统,以此为基础的数据处理存在3个缺点:数据冗余大、数据的不一致性、程序与数据的依赖性强。
6.C。【解析】面对象的设计方法的基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。它虽强调模拟现实世界中的概念而不强调算法,但是它鼓励开发者在软件开发的过程中从应用领域的概念角度去思考。
7.D。【解析】所谓的后序遍历是指,首先遍历左子树,然后遍历右子树,最后访问根结点,并且在遍历左、右树时,仍然先遍历左子树,然后遍历右子树,最后访问根点。因此,后序遍历二叉树的过程也是一个递归过程。
8.B。【解析】软件的过程设计是指系统结构部件转换成软件的过程描述。
9.A。【解析】①对软,牛开发的进度和费用估计不准确:②用户对已完成的软件系统不满意的现象时常发生;③软件产品的质量往往靠不住;④软件常常是不可维护的;⑤软件通常没有适当的文档;⑥软件成本在计算机系统总成本中所占的比例逐年上升;⑦软件开发生产率提高的速度远远跟不上计算机应用迅速普能及深入的趋势。
10.C。【解析】对象的封装性是指从外面看只能看到对象的外部特性,而对象的内部,其处理能力的实行和内部状态对外是不可见的,是隐蔽的。
11.C。【解析】数据库系统由如下5个部分组成:数据库(DB)、数据库管理系统fDBMS)、数据库管理员(人员)、系统平台之一——硬件平台(硬件)、系统平台之二——软件平台(软件)。其中 DB(DataBase)即数据库,是统一管理的相关数据的集合;DBMS即数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,为用户或应用完程序提供访问DB的方法。由以上可知,选C为正确答案。
12.A。【解析】标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或者下划线。B选项int不是表达变量类型的标识符,它不能再用做变量名和函数名。C 选项do是C语言的一个关键字。D选项标识符只能以字母或下划线开始。
13.D。【解析】本题考查逻辑运算符的使用。当“&&”的两个运算对象都是逻辑1时,表达式返回值才是1;“||” 的两个运算对象至少有一个是逻辑1时,表达式返回值也是1,x14.C。【解析】第1个printf函数,格式说明的个数是2,而输出项的个数是3,所以对于多余的输出项k不予输出;第2个printf函数,有两个%说明,第1个%后面的字符要原样输出。本题考查printf函数的格式。①“%x”和“%0”分别表示以十六进制和八进制无符合型输出整型数据(不带前导ox或0);②printf函数中格式说明符之前插入的任何字符都原样输出;③格式说明与输出项的个数,也要相等,如果格式说明的个数少于输出项的个数,则对于多余的输出项不予输出。
15.C。【解析】函数fun(int x,int y)的功能是返回x+y的值。在主函数中,变量a,b,c的初始值分别为1,2,3。因此,逗号表达式“a++,b++,aq b”的值等于5,表达式c++的值为3,调用于函数的表达式为“fun(5,3);”,其返回值等于8。
16.D。【解析】在x=2,y=x+3/2中,3/2=1。2+1= 3,因此表达式的值为3,因为x,y为double型变量,故选择D选项。
17.A。【解析】当x为1时,执行case 1,a自加等于1,因为case 1后没有break,接着执行case 2,此时a的值为2,b自加为1,故选择A选项。
18.D。【解析】本题考梦自增运算符“++”、逻辑与运算符“&&”和逻辑或运算符“||”。自增运算符“++”出现在变量之前,表示先使用变量的值加l,再使用变量的值进行运算;出现在变量之后,表示先使用变量的值进行运算,再使用变量的值加l。当逻辑与运算符“&&’’两边的运算对象都为真时,逻辑表达式的值才为真;当逻辑或运算符“||”只要一个值为1,值就为1。根据运算符的优先级,题中应先计算内层括号中的值。++j是先自加后运算,因此运算时j的值等于3,所以表达式++j=3成立,即表达式的值为1;1与任何数都为进行或(||)运算,结果都为1,因此k=3的表达式i++是先运算后自加,因此运算时i为1,所以i++=1成立,自加1后i=2。if语句的条件为真即“1”,所以输出i、j、k的值分别是2,3,3。
19.A。【解析】本题考查switch语句。当i一1时,执行case 1,因为没有遇到break语句,所以依次往下运行,“a=a+ 2=2,a=a+3=5”;当i=2时,执行case 2,因为没有遇到break语句,所以依次往下执行,“a=a+2=7,a=a+3= 10”;当i=3时,执行case 3,a=a+1=11,因为没有遇到break语句,所以依次往下运行,a—a+2—13,a—a+3一l6:当i=4时,执行default,a=a+3=19,结束循环。
20.C。【解析】只有当3个if条件同时成立,即能够同时被2、3、7整除时,才输出i的值,而从0到50能够同时被2、3、7整除的数只有42,故选择C选项。
21.A。【解析】循环的作用是求行下标从1到2列下标从0到i的元素之和,即s=a[1][0]+a[1][1]+a[2][0]+a [2][1]+a[2][2]=3+4+5+6+0=18。
22.A。【解析】在程序语句中,k的初始值为5,进行第l次while循环后,k自减1为4,非0,执行循环体里的printf语句,输出k,此时k的值变为1。程序执行第2次循环时,k 自减1变为0,为假,退出while循环语句。所以程序的最后结果为1。
23.A。【解析】通过地址来引用数组元素的方法有下列5种:
(1)a[i][j];(2)*(a[i]+j);(3)*(*(a+j)+i);(4)* (a[i][j]);(5)(&aE0][0]q-3*i+j)。故A正确。
24.C。【解析】选项A、B的空间不够;字符串存储要有结束符’