专升本C语言历年考试题及答案
江西财经大学2005年
专升本选拔考试《C语言程序设计》试卷
(考试时间120分钟,总分100分)
一、用C语言描述下列命题(共16分,每小题2分)
1、a、b和c均为整型变量,a和b中有一个大于c。
2、数学公式:
a ac
b
2
4 2-
+
-b的C语言表达式(注:sqrt( )为开方函数)。
3、写出100内的自然数x,能被3或7整除的表达式。
4、写出判断字符变量ch是阿拉伯数字字符的表达式。
5、写出满足x<60或90≤x≤100的C语言表达式。
6、写出平面上的点(x,y)落在单位圆内的表达式。
7、数组p[10]的各元素用于保存指向char型的指针,写出该数组的定义。
8、有名为max的函数,其功能是对两个int型参数x、y进行计算,返回其中的较大者,写出该函数的说明部分。
二、根据要求画出流程图或N-S图(共10分,每小题5分)
1、用流程图或N-S图表示以下算法。
输入x的值,按下列函数计算y的值,并输出y的值。
2、画出打印以下图案的算法流程图或N-S图。
&
& &
& & &
& & & &
三、程序阅读题(共20分,每小题4分)
1、# include <>
void main( ) {
int i,sum=0;
for(i=1;i<=30;i++)
if(i%3!=0) continue;
else sum=sum+i;
printf(“sum=%d\n”,sum);
}
请叙述上面程序的功能,并写出程序的运行结果。
2、void main( ) {
int a,b,x=1,y=1;
scanf("%d%d",&a,&b);
if (a>0) x=x+y;
if (a
else if (a==b) y=5;
else y=x+y;
printf("x=%d,y=%d\n",x,y);
}
假设输入为: 2 -3
3、void main() {
int a[3][3]={2,4,6,8,10,12,14,16,18};
int sum=0, i, j;
for ( i=0; i<3; i++)
for ( j=0; j<3; j++ )
if (i==j) sum+=a[i][j];
printf(“sum=%d\n”,sum) ;
}
请叙述上面程序的功能,并写出程序的运行结果。
4、void main( ){
int i=0;
int x,s1,s2,s3;
s1=s2=s3=0;
while(i++<10){
scanf("%d",&x);
switch(abs(x)%3){
case 0:s1++;break;
case 1:s2++;break;
default:s3++;
}
}
printf("s1=%d,s2=%d,s3=%d",s1,s2,s3);
}
请叙述上面程序的功能。
5、int fun(int n) {
if(n==0) return 0;
else if(n==1) return 1;
return n*n+fun(n-1);
}
void main(){
printf(“Result is:%d”,fun(5));
}
请叙述上面程序中fun函数的功能并写出程序的运行结果。
四、程序填空(共28分,每空2分)
1、以下函数用于求出一个3×4矩阵中的最小元素值。
int min_value(int m[][3]) {
int i, j, min;
min=m[0][0];
for (i=0; ① ; i++)
for (j=0 ; ② ; j++)
if ( ③ return( min ) ; } 2、程序的功能是:从键盘输入一串字符(以回车换行符结束),统计其中大写英文字母的个数,将结果保存在变量count中。 void main( ){ int count=0; char c; ① while(c!='\n'){ if ( ② ) ③ ; c=getchar(); } printf("have typed %d upper letters", count); } 3、以下函数的功能是:在第一个循环中给前n个数组元素依次赋值1~n;在第二个循环中使a数组的n个元素值对称互换,变成n、n-1 ? ? ? 4、3、2、1。 void fun ( int a[ ],int n){ int i; int temp; for(i=1; i<=n; i++) a[i-1]= i; for(i=0; i temp= ① ; a[i]= ② ; ③ =temp; } } 4、以下程序是实现如图1所示图案的打印。 void main() { int i,j,k; char ch; for(i=1,ch= ① ;i<= ② ;i++){ for(j=1;j<=4-i;j++) putchar('□'); /*□表示空格符*/ for(k=1;k<= ③ ;k++) putchar(ch); ④ printf("\n"); } } 五、程序设计题(共26分) 1、设一个三位数可以表示为abc ,若其能满足条件a 3+b 3+c 3=abc ,则称其为水仙花数,编程求出所有的水仙花数。(8分) 2、编程求数列1+(1+2)+(1+2+3)+…+(1+2+...+10)的和并输出。(8分) 3、设有10个学生的信息,包括学号、姓名和三门功课的成绩,试编写学生信息输入函数、学生信息输出函数、打印每一学生平均分函数,最后编写主函数,并在主函数中调用测试这些函数。(10分) 专升本选拔考试《C 语言程序设计》参考答案及评分标准 一、用C语言描述下列命题(共16分,每小题2分) 1、a>c||b>c 2、(-b+sqrt(b*b-4*a*c)/(2*a) 3、(x>=1&&x<=100)&&(x%3==0||x%7!=0) 4、ch>=’0’&&ch<=’9’ 5、x<60||x>=90&&x<=100 6、x*x+y*y<=1 7、char *p[10]; 8、int max(int x,int y) 二、根据要求画出流程图或N-S图(共10分,每小题5分) 1、 2、 4分) 1 23 4、功能:输入10个数,分别求出其中能被1、2、3整除的数的和并打印。 5、输出:Result is:55 fun 函数的功能:求12+22+...+n2 四、程序填空(共28分,每空2分) 1、① i<3 ② j<4 ③ a[i][j] ④ a[i][j] 2、① c=getchar( ) ② c>='A' && c<='Z' ③ count++ 3、① a[i] ② a[n-i-1] ③ a[n-i-1] 4、① 'A' ② 4 ③ 2*i-1 ④ ch++ 五、程序设计题(共26分,8+8+10) 1、 void main() { int a,b,c; A B B B C C C C C D D D D D D D (图1) for(a=1;a<=9;a++) for(b=0;b<=9;b++) for(c=1;c<=9;c++) if(a*a*a+b*b*b+c*c*c==100*a+10*b+c) printf("%5d",100*a+10*b+c); } 2、 #include <> void main(){ int i,s,sum=0; for(i=1,s=0;i<=10;i++){ s=s+i; sum=sum+s; } printf("Result is:%6d",sum); } 3、 #include <> #include <> typedef struct{ /*定义描述学生的结构体类型*/ int num; /*成员变量num表示学号*/ char name[20]; /*姓名*/ float score[3]; /*成绩*/ }stud; void input(stud s[],int n) { int k;char t[10]; for (k=0; k printf("No:");gets(t); s[k].num=atoi(t); printf("name:"); gets(s[k].name); printf("score1=?"); gets(t); s[k].score[1]=atof(t); printf("score2=?"); gets(t); s[k].score[2]=atof(t); printf("score3=?"); gets(t); s[k].score[3]=atof(t); } } void output(stud s[],int n) { int k; printf("%10s%20s%8s%8s%8s\n","no","name","score1","score2","score3"); for (k=0; k printf("%10d",s[k].num); printf("%20s",s[k].name); printf("%",s[k].score[1]); printf("%",s[k].score[2]); printf("%\n",s[k].score[3]); } } void print_average(stud s[],int n) { int k; printf("\n\n%10s%20s%12s\n","no","name","ave_score"); for (k=0; k printf("%10d",s[k].num); printf("%20s",s[k].name); printf("%\n",(s[k].score[1]+s[k].score[2]+s[k].score[3])/3); } } void main(){ stud st[10]; input(st,3); output(st,3); print_average(st,3); } C语言与程序设计试题 一、用C语言描述下列命题(共16分,每小题2分) 1.x为整数,写出x能被3除尽,且被5除余2的判断表达式。 2.写出a、b之差的绝对值大于x、小于y的判断表达式。 3.如图所示电路中A=1表示开关合上(B,C也相同),写出能使得灯亮的表达式。 4.把下列数学表达式转换为C语言表达式: 5.写出判断字符变量ch是阿拉伯数字符号的表达式。 6.定义一个枚举类型season描述一年的四个季节(spring, summer, autumn, winter)。 7.函数fun可以接收字符串的地址作为实际参数,计算后能够返回一个字符指针,写出该函数的声明。 8.有定义FILE fp; 请写出以只读方式打开一个二进制文件的相关语句。 二、根据要求画出NS图(共5分) 求解使得不等式1-(1/2)+(1/3)-…+(1/N) > 3/5成立的最小的N值并输出。 三、单项选择题(共5分,每小题1分) 1.以下说法中正确的是( ) A.C语言程序总是从第一个定义的函数开始执行; B.C语言程序中至少有一个main函数; C.C语言程序总是从main函数开始执行; D.C语言程序中的main函数必须放在程序的开始部分; 语言中,下列正确的叙述是 ( ) A.C程序中的关键字必须小写,其他标识符不区分大小写 B.C程序中的所有字母都不区分大小写 C.C程序中的所有字母都必须小写 D.所有的C语言关键字必须小写 3.已知int i=10;表达式20-5<=i<=9的值是( ) A.0 B. 1 C. 19 D. 20 4.以下不正确的描述是( ) A.break语句不能用于循环语句和switch语句外的其它语句 B.在switch语句中使用break语句或continue语句的作用相同 C.在循环语句中使用continue语句是为了结束本次循环 D.在循环语句中使用break语句是为了使流程跳出循环体 5.对二维数组的正确说明是( ) A.int a[][]={1,2,3,4,5,6}; B.int a[2][]={1,2,3,4,5,6}; C.int a[][3]={1,2,3,4,5,6}; D.int a[2,3]={1,2,3,4,5,6}; 四、程序阅读题(共20分,每小题4分) 1、#include <> void main() { int i=15; while (i>0) if (--i%3!=2) continue; else printf("%d ",i); } 程序运行后的输出结果为: 2、#include <> int func(int n){ if (n==0)return 0; else if (n==1) return 1; else return n*n+func(n-2); } void main(){ printf("%5d%5d\n",func(3),func(5)); } 程序运行后的输出结果为: 3、#include <> void main(){ int a,b,s,t; a=b=s=0, t=1; while(t<=4){ t=t+1; switch(t%3){ case 1: a=a+t; break; case 2: b=b+t; break; default: s=s+3; } printf("a=%d,b=%d,s=%d\n",a,b,s); } } 程序运行后的输出结果为: 4、 #include <> #include <> int f1(int x) { int y=0; static int z=2; y+=1; z++; return(x+y+z); } void main() { int x=1,i; char s1[10]=“Visual”,s2[10]=“C++”,s[10]; for(i=0;i<3;i++) printf("%d ",f1(x)); printf(“\n”); if(strcmp(s1,s2)) { strcpy(s,s1); puts(s);} strcat(s2,s1); printf(“%d,%s\n”,strlen(s2),s2); } 程序运行后的输出结果为: 5、#include <> #define MAX 100 void main() { int f[MAX],i,j,k=2,m=5; for(i=0;i<=m;i++) f[i]=1; f[k-1]=2; for(i=k;i<=m;i++) for(j=i-k;j<=i-1;j++) f[i]+=f[j]; printf("%d%5d%5d\n",k,m,f[m]); } 程序运行后的输出结果为: 五、程序填空(共24分,每小题6分) 1、求10000内的完数,一个数所有因子的和与该数相等即为完数,如6=1+2+3,所以6是完数。 #include <> void main() { int m,k,i,sum; for(m=6;m<=10000;m++) { if(n%10==0) printf("\n"); ①; for(i=2;i<=②;i++) if(m%i==0) ③; if( sum==m ) { printf("%d ",m);n++;} } } ①__________ ②__________ ③ __________ 2、下面的函数sort按照交换排序的思想,实现对n个整型数的非递减排序。 void sort(int p[], int n) { int i, j, t; for (i=1; ① ; i++) for (j=i; ② ; j--) if (p[j]>=p[j-1]) ③ ; else { t=p[j]; p[j]=p[j-1]; p[j-1]=t; } } ①②③ 3、 #include <> void swap(int ① ) { int max, i, *q=p; for(i=1;i<4;i++) if(*q<*(p+i)) q=p+i; max=*q;*q=*(p+3);*(p+3)=max; } void main() { int a[3][4],i,j,*p=a[0]; for( i=0;i<3;i++ ) for(j=0;j<4;j++) scanf(“%d”,p++);