全国2010年1月高等教育自学考试
高级语言程序设计(一)试题
课程代码:00342
一、单项选择题(本大题共15小题,每小题2分,共30分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1. 下列不属于保留字的是( )
A. default B. register
C. struct D. unsign
2. 下列不能作为常量的是( )
A. 0582 B. 0xa5
C. ’\\n’ D. 2.5e-2
3. 设typedef long class;,则class是( )
A. 整型变量 B. 长整型变量
C. 长整型数据类型的新标识符 D. 新的而非长整型数据类型的标识符
4. 设char c=’A’;int i=1, j;,执行j=!c&&i++;后,i和j的值分别是( )
A. 1和0 B. 1和1
C. 2和0 D. 2和l
5. 设int a;,执行表达式(a=1,2,3),a+1后,a和表达式的值分别是( )
A. 1和2 B. 2和3
C. 3和4 D. 4和5
6. 下列关于函数定义正确的是 ( )
A. fun(int x,y){int z;return z;}
B. void fun(int x,int y){return x+y;}
C. fun(x,y){int x,y;double z;z=x+y;return z;}
D. double fun(int x,int y) {double z;z=x+y;return z;)
7. 下列用户自定义标识符正确的是( )
A. 4a B. b_1
C. -& D. *p
8. 下列程序段中循环体执行的次数是( )
int x=-1;
do
{
x=x*x;
}while(! x);
A. 0 B. 1 C. 2 D. 无限
9. 实现字符串连接的系统函数名是( )
A. strcat B. strcmp C. strcpy D. strlen
10. 若实参是一个数组名,在调用函数时,实参向形参传递的是( )
A. 数组的长度 B. 数组的首地址
C. 数组每个元素的值 D. 数组每个元素的地址
11. 设int a[ ][4]={l,2,3,4,5,6,7};,则a[1][3]的值是( )
A. 0 B. 3 C. 4 D. 7
12. 若定义一个只限本源文件使用的全局变量,则该变量的存储类别是( )
A. extern B. register C. static D. auto
13. 设chark=’a’;float j=2.0;,执行k+=5/j;printf(“%c”, k);后,输出结果是( )
A. a B. b C. c D. d
14. 下列程序段正确的是( )
A. char s[ ]={‘xyz’}; B. float *p,i;
scanf(‘‘%s”,s); p=*p+i;
C. char s[5]=‘word’; D. int a[5]={0},*p=a;
puts(s); *p=*(p+1);
15. 关于编译预处理命令,叙述正确的是( )
A. 预处理命令都以”#”开头
B. 预处理命令必须位于程序的首部
C. 预处理命令只能实现宏定义和条件编译的功能
D. 每个程序必须在开头使用预处理命令#include 二、填空题(本大题共10小题,每小题2分,共20分) 请在每小题的空格中填上正确答案。错填、不填均无分。 16. 设float a,b,c;,若a、b和c分别为三角形的三条边长,它们”能构成等边三角形”的逻辑表达式是 。 17. 设int i;float f=3.14;,执行i=(int)f;后,变量f的值是 。 l 8. 设char s[]="\\\’Name\\\\Address\\n";,s的长度是 。 19. 执行printf(“%d\\n”,3&&2&5);后的结果是 。 20. 算术运算符的优先级比关系运算符的优先级 。 21. 单目运算符的结合性是 。 22. 设int x=1,y=3,z;,执行z=x>y?++x:y++;后,z的值是 。 23. 设int m=3;float n=12.6;char ch=’a’;,若用输入语句实现上述三个变量的初始化结果且键入数据形式为:3,12.6a<回车换行>,则scanf语句应是 。 24. 若定义函数时类型缺省,则该函数默认的类型是 。 25. 设int a[5]={l,3,5,7,9},*p=&a[2];,则++(*p)的值是 。 三、程序分析题(本大题共4小题,每小题4分,共16分) 阅读下列程序,将输出结果写到各题右侧的空白处。 26. void main() { int color=2; switch(color) { case 1:printf(“red\\n”);break; case 2:printf(“yellow\\n”); case 3:printf(“blue\\n”); } } 27. void main() { int m,n; for(m=1;m<=3;m++) { for(n=1;n<=2*m-1;n++)printf( “*”); printf(“\\n”); } } 28. void main() { float x=3.6; int i; i=x; printf("x=%5.3f, i=%d\\nx,i); } 29. void main() { int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; for(i=0;i<=1;i++) { for (j=0;j<=2;j++) { printf("%5d",a[i][j]); b[j][i]=a[i][j]; } printf("\\n"); } printf(“array b:\\n”); for (i=0;i<=2;i++) for (j=0;j<=1;j++) printf(“%5d”,b[i][j]); } 四、程序填充题(本大题共3小题,每小题6分,共18分) 请将下列程序横线处缺少的部分补上,使其能正确运行。 30. 从键盘输入10个学生的姓名、性别和成绩,计算并输出这些学生的平均成绩。 #define N 10 struct student { char name [20]; char sex; int score; } stu[N]; void main( ) { int i; float aver,sum=0; for(i=0;i sum=sum+ ; /*第二空*/ } aver= ; /*第三空*/ printf(“aver=%6. 2f\\n”,aver); } 31. 从键盘输入一串字符(以”?”作为结束标志),保存到文本文件text. txt中。 #include “stdio.h” void main() { FILE ; /*第一空*/ char ch; if( (fp=fopen (“text. Txt”, ) )==NULL) exit(0); /*第二空*/ while( (ch=getchar( ))!=’?’) fputc (ch, ); /*第三空*/ fclose(fp); } 32. 用递归方法计算学生年龄,已知第一位学生年龄为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。 递归公式如下: age(n)= int age(int n) { if (n==1) return ( ); /*第一空*/ else return( ); /*第二空*/ } void main() { printf(‘‘%d\\n”, ); /*第三空*/ } 五、程序设计题(本大题共2小题,每小题8分,共16分) 33. 从键盘输入三个整数a、b和c,按照由小到大的顺序输出。 34. (1)编写一函数,将指针变量pl和p2所指向的整数值交换。 其中:函数头是void swap (int *pl,int *p2) (2)编写一个主程序,从键盘输入两个整数,调用上述函数实现两个数据的交换并输出。 参 一、单项选择题 1-5 DACAA 6-10 DBBAB 11-15 ACCDA 二、填空题 16、a+b>c && a+c>b && b+c>a 17、3.14 18、16 19、0 20、高 21、自右向左 22、3 23、scanf("%d,%f%c",&m,&n,&ch); 24、int 25、6 三、程序分析题 26、yellow blue 27、* *** ***** 28、x=3.600, i=3 29、 1 2 3 4 5 6 array b: 1 4 2 5 3 6 四、程序填充题 30、第1空:&stu[i].score,&stu[i].sex,stu[i].name 第2空:stu[i].score 第3空:sum/N 31、第1空:*fp 第2空:"w" 第3空:fp 32、第1空:10 第2空:age(n-1)+2 第3空:age(5) 五、程序设计题 33、思路:这是3个数的排序。先让a和b比较,如果a>b则交换a和b,经过这次比较之后a为a、b中小的;接着让a和c比较,如果a>c则交换a和c,经过这次比较之后a为三个数中最小的;最后让b和c比较,如果b>c则交换b和c。经过这3次比较和交换就让a、b、c按照由小到大的顺序排列好了。 #include void main() { int a,b,c,t; scanf("%d%d%d",&a,&b,&c); if(a>b) /*如果a大于b,则交换a和b */ { t=a; a=b; b=t; } if(a>c) /*如果a大于c,则交换a和c */ { t=a; a=c; c=t; } if(b>c) /*如果b大于c,则交换b和c */ { t=b; b=c; c=t; } printf("%d,%d,%d",a,b,c); } 34、思路:本题的函数头已经给出,在函数体中要将p1和p2所指向的整数值交换,其实就是交换(*p1)和(*p2)即可,因为(*p1)表示p1所指的值,(*p2)表示p2所指的值。 在主函数中,要调用swap函数,则传递的参数应该为2个地址,即用来交换它们值的两个变量地址。 #include void swap (int *p1,int *p2) { int t; t=*p1; *p1=*p2; *p2=t; } void main() { int a,b; scanf("%d%d",&a,&b); printf("交换前a=%d,b=%d\\n",a,b); swap(&a,&b); printf("交换后a=%d,b=%d\\n",a,b); }下载本文