2010年《高级语言程序设计》期末考试A卷
贵州大学2010-2011学年第一学期考试试卷 A
高级语言程序设计
注意事项:
1. 请考生按要求在试卷装订线内填写姓名、学号和年级专业。
2. 请仔细阅读各种题目的回答要求,在规定的位置填写答案。
3. 不要在试卷上乱写乱画,不要在装订线内填写无关的内容。
4. 满分100分,考试时间为120分钟。
一、选择题(共30分,每小题2分)
1. 程序经过编译生成的是( B )。
A、源文件
B、目标文件
C、可执行文件
D、编译文件
2. 在一个C程序中( C )。
A、main函数出现在所有函数之前。C程序不一定都有main函数。
B、main函数必须出现在所有函数之后。一个C程序必须有且仅有一个main函数。
C、main函数可以在任何地方出现。一个C程序必须有且仅有一个main函数。
D、main函数出现在固定位置。一个C程序可以有多个main函数。
3. 已知三角形的底为a,高为b,用C语言书写正确的面积公式为( B )。
A、 1/2*a*b
B、 1.0/2*a*b
C、 1.0/2.0ab
D、 1.0/2*ab
4.可用作用户标识符的一组标识是( C )。
A、void define
B、a3-3 _123
C、For _abc
D、2a sizeof
5. 已知int i=3,j=5; float x=2.5; double y=5.0;则y+=i-=j*=++x;的值为( C )。
A、 -9.5
B、 -9
C、 -9.0
D、-7.0
6.设 x=011; 执行printf (“%d”, x); 的输出是( B )。
A、11
B、9
C、8
D、7
7. 语句if (!i ) i++; 中的条件表达式 !i 等价于()。
A、i=0
B、i!=1
C、i!=0
D、-i
8. 设int a=4;则表达式a<1&&--a>1的运算结果和a的值分别是( B )。
A、0和3
B、0和4
C、1和3
D、1和4
9. 若有以下语句
int x = 3;
do {
printf("%d\n", x -= 2);
} while (!(--x));
运行后输出( B )。
A、1
B、1和-2
C、3和0
D、死循环,无限输出
10.以下4个关于C语言的结论中,错误的是( D )。
A、用while语句实现的循环一定可用for语句实现;
B、用for语句实现的循环一定可用while语句实现;
C、用do-while语句实现的循环一定可用while语句实现;
D、do-while语句与while语句的区别仅是关键字“while”出现的位置不同;
11. 有语句int a[][3] = {1,2,3,4,5,6}; 则a[1][1]的值是( D )。
A、 1
B、2
C、4
D、5
12. 判断字符串是否相等,下面语句中正确的( D )。
A、 if(str1=str2)
B、 if(str1= =str2)
C、 if(strcpy(str1,str2))
D、 if(strcmp(str1,str2)= =0)
13.有一个如下定义的函数
f(double x)
{
printf("%f", x);
}
则该函数的返回类型是( A )。
A、 int
B、double
C、void
D、无法确定
14. C语言中共用体类型变量在程序执行期间( B )。
A、所有成员一直驻留在内存中
B、只有一个成员驻留在内存中
C、部分成员驻留在内存中
D、没有成员驻留在内存中
15. 假设有int a[3][5]; 下列选项中,指向元素a[2][3]的指针是( C )。
A、*(a[2]+3)
B、(*a+2)+3
C、*(a+2)+3
D、*(*(a+2)+3)
二、填空题(共10分,每空1分)
1.C语言中普通整型变量的类型说明符为 int ,在内存中占 2 字节,有符号普通整型的数据范围是-32768—32767。
2.若有定义:enum xx
{ a, b, c=8,d };
则b的值为 1 ,d的值为 9 。
3.利用scanf语句读入一个长整型变量的值,需要用到的格式控制符为。4.若有定义:int x[][3]= {20, 40, 60, 80, 100, 120}, *p=x; 则数组元素*(p+4) 的值为,*p+4的值为。
5.已知union data{int i; char c; float f;}a;
则变量a占用的存储空间大小为字节。
6. 有定义:static int a[][3]={1,2,3,4,0,5,8,9,10};,则printf(”%d”,*(*(a+1)+2));
语句的输出结果为。
三、程序阅读题(共12分,每小题3分)
1. 读下列程序,写出程序的输出结果。
main( )
{ int a=0,b=4,c
c=(++a>1)&&(b++>=3);
printf("%d,%d,%d",a,b,c);
}
输出结果为:
2.读下列程序,写出程序的输出结果。
main()
{ int a;
for ( a=0; a<3; a++ )
switch (a)
{case 1: printf ("aa\n");
case 2: printf ("bb");
default: printf ("cc");
}
}
输出结果为:
3.读下列程序,写出程序的输出结果。
#include
void main (){
int x[12]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int *p;
for (p=&x[3];p if (*p%3==0 ) printf ("%d\n", *p); } 输出结果为: 4.运行以下程序,若输入:5 7<回车>时,写出程序的输出结果。 #include void fun1(int *p1, int *p2) { int t; t=*p1; *p1=*p2; *p2=t; } void fun2(int x,int y) { int t; t=x; x=y; y=t; } void main() { int x,y; int *p1,*p2; scanf("%d%d",&x,&y); p1=&x; p2=&y; if(x printf("x=%d,y=%d\n",x,y); if(x>y) fun2(x,y); printf("x=%d,y=%d",x,y); } 输出结果为: 四、程序填空题(共18分,每空2分) 1. 将输入的字符串按逆序打印出来,例如输入abcd,则按dcba顺序打印出来。 #include main( ) { char *str,s[20]; int n; str= (1) ; scanf(“%s”,(2) ); n=strlen( str); while(--n>=0) { str=&s[(3) ]; Printf(“%c”,*str); } } 2.以下程序完成的功能是:将一个字符数组中存储的字符串复制到另一个字符数组中然后输出,不使用strcpy函数,请将程序中的空白填写完整。 #include #include #define MAX 20 void main(){ char s[MAX]="Hello World!", t[MAX]; (1) for(i=0; (2) ;i++) (3) printf("%s\n%s\n",s,t); } 3.下面是一个统计已经建好的链表的结点个数的程序,head是链表的头指针,统计结果存放在c变量中。请填空。 struct link { char data; struct link *next; }*head; void main() { struct link *p; (1) p=head; while ((2) ) { p= (3) c++; } printf (“c=%d”,c); } 五、编程题(共30分,每小题10分) 1. 已知abc+bca=1123,其中a、b、c均为0 ~ 9中的一位数,编写程序求出a、b、c分别为什么数字。 2.有一分段函数,y=f(x),当x<6时,y=x-12;当x大于等于6且小于15时,y=3x-1;当x大于等于15时,y=5x+9;任意输入一个x的值,根据情况输出y的值。 3.一个猴子它每天吃的桃子数是上一天的两倍再多一个,已知他第一天吃的桃子数是一个,编程求他第五天吃了多少个桃子,用递归方法实现。