《程序设计》考试试卷七
班级姓名学号
一、单项选择题(每小题1分,共20分)
(在每小题的4个备选答案中选出一个正确的答案)
1.C语言中,如果对函数类型未加说明,则函数的隐含类型为()
A.duoble
B. void
C.int
D.char
2.union data
{ int i;
char c;
float f;
};
定义了()
A.共用体类型data
B.共用体变量data
C.结构体类型data
D.J结构体变量data
3.设a=3,b=4,表达式a>b?b:a的值是()
A.3
B. 4
C.4:3
D.0
4.下面对枚举类型的叙述,不正确的是()
A.定义枚举类型用enum开头
B.枚举常量的值是一个常数
C.一个整数可以直接赋给一个枚举变量
D.枚举值可以用来作判断比较
5.求0到50的总和,不正确的程序段是()
A. int i,sum;
sum=0;
for(i=0;i<51;i++) sum+=i;
B. int i,sum;
for(i=0,sum=0;i<51;sum+=i++);
C. int i,sum;
i=0;sum=0;
for(i<51) {sum+=i;i++;}
D. int i,sum=0;
for(i=0; ;i++) {if(i>50) break; sum+=i;}
6. 表达式 (int)3.6*3的值为()
A.9 B. 10 C . 10.8 D.18
7.程序的结果为()
main()
{
int a=3,b=4,t=1;
if (a>b)
{t=a;a=b;b=t;}
printf(“%d”,a)
}
A. 3
B.4
C.1
D.0
8.程序main()
{ int a=1;
switch(a)
{ case 1: printf(“1”);
case 2: printf(“2”);
default: printf(“other”);
}
} 的结果为()
A.12other
B.1
C.2
D.Other
9.函数strcmp(“A”, “B”)的值为( )
A.0
B.-1
C.1
D.3
10.下程序的结果为( )
int f(a)
int a;
{ auto int b=0;
static int c=3;
b=b+1;
c=c+1;
return(a+b+c);
}
main()
{ int a=2,i;
for (i=0;i<3;i++)
printf(“%d”,f(a));
}
A.789
B.777
C.8910
D.9 11.合法的C语言标识符是()
A.ab&c
B.2ab
C._a1
D./n
12.若有定义int a=2,b=9,k;k=a+b++/a++;则k的值是()
A.6.5
B.7
C.6
D.8
13.标有/* */语句的输出结果为()
int x=20;
printf(“%d,%o,%x”,x,x,x);/* */
A.20,20,20
B.20,24,14
C.20,14,24
D.20,024,14
14. 将p定义为指向含n个元素的一维数组的指针变量,正确的语句为()
A. int (*p)[n];
B. int *p[n];
C.int p[n];
D. int **p[n];
15. 下面程序执行结果是()
main()
{ char c1,c2;
int i=2;
c1=’a’;c2=’c’;
c1=c1+i; c2=c2-i;
printf(“%c,%d”,c1,c2);/*’a’的ASCII码为97*/
A.语法错误 B.99,97 C.c,a D.c,97
16.请问:071^052的结果是()
A.032
B.016
C.023
D.022
17.下面对函数的叙述,不正确的是()
A.函数的返回值是通过函数中的return语句获得的
B.函数不能嵌套定义
C.一个函数中有且只有一个return语句
D.函数中没有return语句,并不是不带回值
18.下面的叙述,不正确的是()
A.宏名无类型,其参数也无类型
B.宏定义不是C语句,不必在行末加分号
C.宏替换只是字符替换
D.宏替换定义命令必须写在文件开头
19.有定义int a[3][4],输入其3行2列元素的正确语句为()
A.scanf(“%d”,a[3,2]);
B.scanf(“%d”,*(*(a+2)+1))
C.scanf(“%d”,*(a+2)+1);
D.scanf(“%d”,*(a[2]+1));
20.下面对指针变量的叙述,正确的是()
A.指针变量可以加上一个指针变量
B.可以把一个整形数赋给指针变量
C.指针变量的值可以赋给指针变量
D.指针变量不可以有空值,即该指针变量必须指向某一变量
二、阅读程序,写出执行结果(每题5分,共20分)
1、
#include “stdio.h”
main()
{ int i,k,a[10],p[3];
k=5;
for ( i=0;i<10;i++) a[i]=i;
for (i=0;i<3;i++) p[i]=a[i*(i+1)];
for ( i=0;i<3;i++) k+=p[i]*2;
printf(“%d\n”,k);
}
运行结果
2、#include “stdio.h”
main( )
{ int a=2,*p,**pp;
pp=&p;
p=&a;
a++;
printf(“%d,%d,%d\n”,a,*p,**p p);
}
运行结果
3、
main( )
{ union
{ char s[2];
int i;
}g;
g.i=0x4142;
printf(“g.i=%x\n”,g.i);
printf(“g.s[0]=%x\t g.s[1]=%x\n”,g.s[0],g.s[1]);
g.s[0]=1;
g.s[1]=0;
printf(“g.s=%x\n”,g.i);
}
运行结果
4、#include “stdio.h”
main( )
{ int x=1;
void f1( ),f2( );
f1( );
f2(x);
printf(“x=%d\n”,x);
}
void f1(void)
{ int x=3; printf(“x=%d\n”,x);}
void f2(x)
int x;
{ printf(“x=%d\t”,x);}
运行结果
三、程序改错题(每小题5分,共20分)
(下列每小题只有一个错误,请改正。)
1.
str_space(char *str)/*统计字符串中空格数*/ { int num=0;
char ch;
while((ch=*str++)!=’\0’)
if(ch=’’) num++;
return (num);
}
2.
main()
{ int a,b;
float x,y,z;
scanf(“%f%f%f”,&x,&y,&z);
a=b=x+y+z;
c=a+b;
printf(“%d%d%d”,a,b,c);
}
3.
#inc lude “stdio.h”
main()
{ static int a[]={0*5};
int i=0,sum=0;
for(;i<5;i++) sum=sum+*(a+i)+i;
printf(“sum=%d”,sum);
}
4.
#include “stdio.h”
main()
{ char a[20];
int i=0;
scanf(“%s”,&a);
while(a[i]) printf(“%c”,a[i++]);
}
四、程序填空(每空2.5分,共10分)
1、本程序实现判断m是否为素数,请在程序空白处填空
# include “stdio.h”
main( )
{
int m, i, k;
scanf(“%d”,&m);
k=______________;
for (i=2;i<=k;i++)
if(m%i==0) break;
if (__________________)
printf(“%d”is a prime number\n”,m);
else
printf(“%d is not a prime number\n”,m);
}
2、下面invert函数的功能是将一个字符串内容颠倒过来,请填空。
# include “string.h”
void invert(char str[])
{
int i,j,k;
for ( i=0,j=strlen(str)-1;i { k=str[i]; ___________; str[j]=k; } } 五、编程题(请画出N-S图或PAD图,各占一半的分数,每题10分,共30分) 1.编写一个函数以实现库函数中的strcat(str1,str2)函数之功能 2.定义一8个元素的整数数组,读入各元素值后用选择法由小到大排序,之后输出排序结果。 3.编程计算a+aa+aaa+……+aa…a(n个a)的值,要求n和a由用户从键盘输入。(10分) 《程序设计基础》试卷七参考答案与评分标准 一、单项选择题(每小题1分,共20分) 1 C 2 A 3 A 4 C 5 C 6 A 7 A 8 A 9 B 10 A 11 C 12 C 13 B 14 A 15 D 16 A 17 C 18 D 19 C 20 B 二、阅读程序,写出执行结果(每小题5分,共20分。) 1.21 2.3,3,3 3.g.i=4142 g.s[0]=42 g.s[1]=41 g.s=1 4.x=3 x=1 x=1 三、程序改错题(每小题5分,共20分。) 1.if(ch=?…) if(ch==?…) 2.int a,b; int a,b,c; 3.static int a[]={0*5} static int a[5]; 4.scanf(“%s”,&a); scanf(“%s”,a); 四、程序填空(共10分) 1. m-1 i>=m 2. i++(或++i,或i+=1,或i=i+1),j—(或--j,或j-=1,或j=i-1) str[i]=str[j](或*(str+i)=*(str+j)) 五、编程题(每题10分,共30分) 1. comp(char *str1,char *str2) { while(*str1&&*str2) (3分) if(*str1==*str2) { str1++;str2++;} (3分) else break; (2分) return(*str1-*str2); (2分) } 2. #include void main( ) { int a[8], i, j, min,temp; printf(“请输入原数组:\n”); for(i=0;i<8;i++)scanf (“%d”,&a[i]); for(i=0;i<8;i++) { min=i; for(j=i+1;j<8;j++) if(a[min]>a[j])min=j; temp=a[min]; a[min]=a[i]; a[i]=temp; } printf(“排序后为:\n”); for(i=0;i<8;i++)printf(“%d ”,a[i]); } 3. #include main() { long term = 0,sum = 0; (1分) int a , i, n; printf("Input a,n: "); (1分) scanf("%d,%d", &a, &n); /*输入a,n的值*/ (1分) for (i = 1; i <= n; i++) (1分) { term = term * 10 + a; /*求出累加项*/ (2分) sum = sum + term; /*进行累加*/ (2分)} printf("sum=%ld\n",sum); (1分)}