C-C++语言程序设计单元测试(二)
班级: 学号: 姓名: 得分:
一、选择题
1. 以下能将字符串”good!”正确存放在字符数组s中,或使指针s能指向这个字符串的是( D)。
A. char s[4]={‘g’, ‘o’, ‘o’, ‘d’, ‘!’}; B. char s[5]; s=“good!”; C. int s[5]=“good!”; D. char *s; s=“good!”;
2. 对于程序段int k=3; while(k) k=k-1; 下面描述正确的是( A )。 A. 循环体执行3次 B. 该循环为无穷循环
C. 循环体执行一次 D. 循环体一次也不执行
3. 有下列变量说明:char a; int x; float y; double z; 则表达式a*x+z-y的值的数据类型为( D )。
A.float B.char C.int D.double 4.C语言中允许函数值类型缺省定义,此时该函数值隐含的类型是( D )。
A.float B.double C.void D.int 5. 若有定义:int a[ ]={2,4,6,8,10,12},*p=a;则*(p+1)的值是( B )。
A.2 B.4 C.10 D.12 6. 若有以下说明:int a[ ][3]={1,2,3,4,5,6,7};则数组a的第一维的大小是( B )。 A.4 B.3 C. 2 D.不确定 7. C++中struct和class的描述,错误的是( B)。 A. struct和class都可以包含数据和代码
B. struct不可以包含数据和代码,class可以包含数据和代码 C. struct中成员确实访问权限都是public D. class中成员确实访问权限都是private
8.下列有关类的描述不正确的是( D )。
A. 类是一类具体对象的抽象描述 B. 类的成员函数都拥有this指针 C. 类是数据和代码的复合体 D. 类中不能包含其他类的对象 9. ( D )不是构造函数的特征。
A. 构造函数的函数名与类名相同 B. 构造函数可以重载
C. 构造函数可以设置缺省参数 D. 构造函数必须指定类型说明 10. 公有继承时,子类成员函数可访问父类中的( B)和子类自己的公有成员。 A.非私有成员; B.公有成员; C.私有成员; D.保护成员;
二、程序分析题
1. 以下程序的运行结果 #!,,,* #include
int i;
for (i=1;i<=5;i++) switch(i%5) { case 0: cout<<\ case 1: cout<<\ case 2: cout<<\ default: cout<<\ } return 0; }
2.以下程序的运行结果是____result=1_____________________________________ #include
int k; if(n==0) k=1; else k=f(x,n-1); return(k); }
int main() {
int x=1, n=3;
cout<<\ return 0; }
3. 以下程序的运行结果是( LBLMNP )
int main()
{ char a[80]=\ int i=0; strcat(a,b);
whi1e (a[i++]!='\\0') b[i]=a[i]; puts(b); return 0; }
三、程序填空题
1. 下面程序的功能是将字符串b复制到字符串a。完善程序。 #include
void strcopy(char *s,char *t) { int i=0;
while( s[i] !='\\0' ) s[i++]=t[i] ; *t!=’\\0’ }
main()
{ char a[21],b[21]; scanf(\
strcopy( a,b );
printf(\字符串b是%s\\n\ printf(\字符串a是%s\\n\}
2. 输入一个不包含空格的字符串,判断输入的字符串是否为回文。回文是相对中心左右对称的字符串。例如:level、abccba均是回文串。完善程序。 #include
{ char s[200];
printf(“输入一个字符串:”); scanf(“%s”, s);
if(f(s)) printf(“字符串%s是回文!”,s); else printf(“字符串%s不是回文!”,s); }
int f(char *p) {
char *p1, *p2; p1=p2=p;
while(*p2++); p2-- ; while( p1 { if( *p1!=p2 ) return 0; p1++; p2--; } return 1; } 3. 以下程序分别求出方阵a中两个对角线元素之和。完善程序。 #define N 6 #include int a[N][N],i,j,k,pr1,pr2; for(i=0;i scanf(\ pr1=pr2=0; for(i=0;i pr1= pr1+*(*(a+i)+i); k= 2-i ; pr2=pr2+*(*(a+i)+k); } printf(\} 4.以下程序的功能是删除字符串中的指定字符,其中,字符串和要删除的字符均由键盘输入,请完善代码。 #include char str[80],ch; int i,k=0; gets( str ); ch=getchar(); for(i=0; str[i]!='\\0' ;i++) if(str[i]!=ch) { str[k] =str[i] ; k++; } str[k]='\\0'; puts(str); } 四、程序设计题 1. 编写程序计算并输出下列多项式值。要求设计并调用函数double f(int n),由主函数传入 参数n的值,返回多项式的计算结果。 S=(1+1/2)+(1/3+1/4)+…+(1/(2n-1)+1/2n) #include for(i=1;i<=2*n;i++) sum=sum+(1.0/i); return sum; } int main() { int n; double s; scanf(\ s=f(n); printf(\ } 2. 编程求解“百马百担”问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,求大、中、小马各多少匹? #include 3. 编写函数strcomb实现将一个字符串与另一个字符串相连。并在主函数中调用该函数实现两个字符串的连接。(注:不允许调用标准库函数strcat)。 #include strcomb(char a[],char b[],char s[]) { int i,j; for(i=0;a[i]!='\\0';i++) s[i]=a[i]; for(j=0;b[j]!='\\0';j++) s[i+j]=b[j]; s[i+j]='\\0'; } int main() { char a[50],b[50],s[100]; gets(a); gets(b); strcomb(a,b,s); printf(\