二、填空题(每空2分,共40分)
请将每个空的正确答案写在【l】至【20】序号的横线上,答在试卷上不得分。
(1)对于长度为n的顺序存储的线性表,当随机插入和删除一个元素时,需平均移动元素的个数为 【l】 。
答案:【1】n/2
评析:删除一个元素,平均移动的元素个数为(n-l+n-2+……+0)n=(n-1)/2;插入一个元素,平均移动元素个数为(n+n-l+n-2+……+1)n=(n+1)/2;所以总体平均移动元素个数为n/2。
(2)注释说明了程序的功能,它分为 【2】 注释和功能性注释。
答案:【2】序言性
评析:注释一般分为序言性注释和功能性注释。
(3)软件测试中路径覆盖测试是整个测试的基础,它是对软件 【3】 进行测试。
答案:【3】结构
评析:路径测试是白盒测试方法中的一种,它要求对程序中的每条路径最少检查一次,目的是对软件的结构进行测试。
(4)数据库技术的主要特点为数据的集成性、数据的高 【4】 和低冗余性、数据独立性和数据统一管理与控制。
答案:【4】共享性
评析:数据库技术的主要特点有以下几个方面:数据的集成性,数据的高共享性与低冗余性,数据韵独立性,数据统一管理与控制。
(5)数据元素之间 【5】 的整体称为逻辑结构。
答案:【5】逻辑关系
评析:数据元素之间逻辑关系的整体称为逻辑结构。数据的逻辑结构就是数据的组织形式。
(6)若有定义int m=5,y=2,则执行表达式y+=y-=m*=y后,y的值为 【6】 。
答案:【6】.16
评析:将赋值运算符右侧的“表达式”的值赋给左侧的变量,并且赋值运算符按照“白右而左”的结合顺序,本题表达式应先算m的值为10,再运算y的值为8,最后计算y=y+(-8)=-8+(-8)=-16。
(7)若x和y都是double型变量,]ix的初值为3.0,y的初值为2.0,则表达式pow(y,fabs(x))的值为 【7】 。
答案:【7】8.000000
评析: fabs函数功能是求x的绝对值,计算结果为double型。pow功能是计算x的y次方的值,计算结果同样为double型。所以本题表达式相当于2.0的3.0次方,结果为8.000000。
(8)设有char a,b;,若要通过a&b运算屏蔽掉a中的其它位,只保留第2位和第8位(右起为第1位),则b的二进制是 【8】 。
答案:【8】10000010
评析:运算“&”的规则是只有当两个相应的二进制位都为1时,该位的结果才为1。要保留第2、8位,只要将其与二进制数10000010相与。
(9)下列程序执行后输出的结果是 【9】 。
f(int a)
{ static c=0;
C=a+C++:
return(C);
}
main()
{ int a=2,i,k;
for(i=O;i<2;i++)
k=f(a++);
printf(”%d\n”,k);
}
答案:【9】7
评析:在程序执行时,static变量仅初始化一次,下次使用时将使用上次保存的值。
(10)下面程序执行后输出的结果是 【10】 。
int m=13:
int fun(int x,int y)
{ int m=3;
return(x*y-m);
}
main()
{ int a=7,b=5;
printf(”%d\n”,fun(a,b)/m);
}
答案:【10】2
评析:本题变量m既是外部变量(值是13),又是fun函数的局部变量(值为3)。函数fun(x*y-m)的值为7*5-3=32,在main函数中,ftm(a,b)/m中的m应取外部变量的值13,因此输出2。
(11)下列程序执行后输出的结果是 【11】 。
main()
{ nt arr[10],i,k=0;
for(I=0;i<l0;i++)arr[I]=i;
for(I=1;i<4;i++)k+=arr[i]+i;
printf(”%d\n”,k);
}
答案:【11】12
评析:本题的第一个for循环是用于给数组arr赋初值,第二个for循环用于求和运算。由于第二个for循环初始值为1,而循环条件为i<4,所以求的是art[1]到arr[3]及i的和,所以输出结果为12。
(12)下列程序执行后输出的结果是 【12】 。
struct s
{int x,y;}data[2]={10,100,20,200};
main()
{
struct s*p=data;
printf(”%d”,++(p->x));
}
答案:【12】11
评析:程序中结构体数组data首地址(即&data[0])赋值给结构体指针变量p,++(p->x)表示先将p所指向的结构体变量的成员x值加1,然后将此x(即data[01.x]输出。
(13)下面程序有两个printf语句,如果第一个printf语句输出的是194,则第二个print语句的输出结果是 【13】 。
main()
{ int a [10]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;
printf(”%X\n”,p);
printf(”%x\n”,p+9);
}
答案:【13】la6
评析:对于指针变量的运算,就是对于地址的运算。本题中由于指针指向的是整型变量,所以,使指针变量移动9个位置也就是移动18个字节。注意,本题是以16进制输出的。
(14)以下函数的功能是计算s=l+l/2!+l/3!+…+l/n!,请填空.
double fun(int n)
{ double s=O.O,fac=1.O;
int i,k=1;
for(i=l;i<=n;i++)
{ 【14】 ;
fat=fat/k;
s=s+fac;
}
}
答案:【14】k=k*i
评析:本题中通过for循环求s表达式中每一项的和,表达式“fac=fac/k;”求的是每一项的值,所以k的值应为n!,在求n!的时候,可以用上次循环阶乘的值乘i,就可以直接得此次n!,故本题填k=k*i。
(15)下面程序的运行结果是 【15】 。
main()
{ unsigned a=0112,x;
x=a>>3:
printf(”x=%o”,x);
}
答案:【15】x=11
评析:在对无符号数的右移是高位补0。
(16)函数(s,i,n)是作用是从字符串s中删除从第i个字符开始的n个字符,请填空。
void (char s[],int i,int n)
{ int j,k,length=O;
while(s[1ength])
【16】 ;
–i:
j=i;
}
if( 【17】 )
{ k=i+n;
if(i+n<=length)
while(k<length)
s[j++]=s[k++];
s[j]=‘\0’;
}
答案:【16】length++
【17】i<length
评析:第一个循环极有可能是这个计算串的长度,在i<=length时字符才被删除,被删除的是从第i个到第i+n或最后一个间的所有字符。删除前,应判断i<=length。由于已经进行了一i运算,故实际应填入i<length。
(17)下述函数统计一个字符串中的单词个数,单词是指处在空格之间的字符序列,请填空。
int word(char*s)
{ int num=O,flag=O;
while(*s)
{ if( 【18】 ==”)flag=O;
else if( 【19】 ){flag=1;num++}
}
return 【20】 ;
}
答案:【18】*s++
【19】flag==O或*(s-1)==”
【20】num
评析:在统计字符串单词个数的算法中,本题的flag是为了记录一个单词是否结束了。在第18空应填写*s++;如果某个字符不是空格,则必需判断它是否是单词,如果是,则使得flag的标志为1,num的值加1。本题判断方法是:先判断s所指向的字符是否为空格,如果是则使得flag=O,否则判断前一个字符是否是空格,如果是的话,则说明这个字符是一个单词的开始,将flag标志为1,num的值加1,如果不是,则不必记录。故第19空应flag==O或*(s-1)==”;最后一个空格需填写的是返回的单词的个数,即num。
【c语言面试题及答案】相关文章:
1.c语言试题及答案
5.c语言练习试题
6.C语言实训总结
7.c语言学习总结
8.c语言练习试题库
本文来源:http://www.010zaixian.com/shiti/2132049.htm