C语言期末复习题(一)
━━━━━━━━━━━━━━━━━
一、单项选择共10题(共计20分)
━━━━━━━━━━━━━━━━━
第1题(2.0分)
在定义构造数据类型时,不能()。
A:说明变量
B:说明存储类型
C:初始化
D:末尾不写分号
答案:D
第2题(2.0分)
下列运算符中优先级最高的是()。
A:<
B:+
C:&&
D:!=
答案:B
第3题(2.0分)
已知x=43,ch='A',y=0;则表达式(x>=y&&ch<'B'&&!y)的值是()。A:0
B:语法错
C:1
D:"假"
答案:C
第4题(2.0分)
设有说明语句:char a='\72';则变量a()。
A:包含1个字符
B:包含2个字符
C:包含3个字符
D:说明不合法
答案:A
第5题(2.0分)
假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,
则数组x在内存中所占字节数是()。
A:3
B:6
C:10
D:20
答案:D
第6题(2.0分)
执行下列程序后,其输出结果是()。main()
{int a=9;
a+=a-=a+a;
printf("%d\n",a);
}
A:18
B:9
C:-18
D:-9
答案:C
第7题(2.0分)
下列程序运行结果为:
#define P 3
#define S(a) P*a*a
main()
{int ar;
ar=S(3+5);
printf("\n%d",ar);
}
A:192
B:29
C:27
D:25
答案:B
第8题(2.0分)
以下程序段的输出结果为()。
char c[]="abc";
int i=0;
do ;while(c[i++]!='\0');printf("%d",i-1);
A:abc
B:ab
C:2
D:3
答案:D
第9题(2.0分)
以下程序的执行结果是_______.
main()
{ int num = 0;
while( num <= 2 ) { num++; printf( "%d,",num ); } } A:0,1,2
B:1,2,
C:1,2,3,
D:1,2,3,4,
答案:C
第10题(2.0分)
在C语言的函数中,下列正确的说法是()。
A:必须有形参
B:形参必须是变量名
C:可以有也可以没有形参
D:数组名不能作形参
答案:C
━━━━━━━━━━━━━━━━
二、程序填空共5题(共计25分)
━━━━━━━━━━━━━━━━
第1题(5.0分)
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:用冒泡法对数组a 进行由小到大的排序。
-------------------------------------------------------*/
#include
void fun(int a[],int n)
{
int i,j,t;
/***********SPACE***********/
for (j=0; 【?】;j++)
/***********SPACE***********/
for (i=0; 【?】;i++)
/***********SPACE***********/
if(【?】)
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
main()
{
int i,a[10]={3,7,5,1,2,8,6,4,10,9};
/***********SPACE***********/ 【?】;
for(i=0;i<10;i++)
printf("%3d",a[i]);
}
答案:
=======(答案1)=======
j<=n-1
=========或=========
n-1>=j
=========或=========
j<=-1+n
=========或=========
-1+n>=j
=========或=========
j =========或========= n>j =========或========= j =======(答案2)======= i =========或========= n-j-1>i =========或========= i =========或========= n-1-j>i =========或========= i<=n-j-2 =========或========= i<=n-2-j =======(答案3)======= a[i]>a[ i + 1 ] =========或========= a[ i + 1 ] =======(答案4)======= fun(a,10) 第2题(5.0分) /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 功能:从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。 -------------------------------------------------------*/ #include #include void fun (long s, long *t) { long sl=10; s /= 10; /***********SPACE***********/ *t = s 【?】10; while(s>0) { /***********SPACE***********/ s = 【?】; /***********SPACE***********/ *t = s%10*sl【?】; /***********SPACE***********/ sl = sl 【?】10; } main() { long s, t; printf("\nPlease enter s:"); scanf("%ld", &s); fun(s, &t); printf("The result is: %ld\n", t); } 答案: =======(答案1)======= % =======(答案2)======= s/100 =======(答案3)======= + *t =======(答案4)======= * 第3题(5.0分) /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 功能:三角形的面积为:area=sqrt(s*(s-a)*(s-b)*(s-c)).其中,s=(a+b+c)/2,a、b、c为三角形三条边的长。定义两个带 参数的宏,一个用来求s,另一个用来求area。编写程序, 在程序中用带参数的宏求面积area。 -------------------------------------------------------*/ #include #include "math.h" /***********SPACE***********/ #【?】S(x,y,z)(x+y+z)/2 #define AREA(s,x,y,z)sqrt(s*(s-x)*(s-y)*(s-z)) main() double area; float a,b,c,s; printf("a,b,c="); /***********SPACE***********/ scanf("%f,%f,%f",&a,【?】,&c); if(a+b>c&&b+c>a&&c+a>b) { /***********SPACE***********/ s=【?】; /***********SPACE***********/ area=【?】; printf("area=%f\n",area); } } 答案: =======(答案1)======= define =======(答案2)======= &b =======(答案3)======= S(a,b,c) =======(答案4)======= AREA(s,a,b,c) 第4题(5.0分) /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 功能:用二分法求方程2X^3+4X^2+3X-6=0在(-10,10)之间的根,其中X^n代表X的n次方。 -------------------------------------------------------*/ #include # include main() { float x0,x1,x2,fx0,fx1,fx2; do { printf("Enter x1&x2:"); scanf("%f,%f",&x1,&x2); fx1=x1*((2*x1-4)*x1+3)-6; fx2=x2*((2*x2-4)*x2+3)-6; /***********SPACE***********/ }while (fx1*fx2【?】); do { x0=(x1+x2)/2; fx0=x0*((2*x0-4)*x0+3)-6; /***********SPACE***********/ if(fx0*fx1【?】) { x2=x0; fx2=fx0; } else { x1=x0; fx1=fx0; } } /***********SPACE***********/ while(【?】>=1e-5); printf("x=%6.2f\n",x0); } 答案: =======(答案1)======= >0 =======(答案2)======= <0 =======(答案3)======= fabs(fx0) 第5题(5.0分) /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 功能:要求输出如下结果: b=-1 a=65535 a=65534 a=30 b=6 c=5 按要求在空中填入合适的变量完善程序。-------------------------------------------------------*/ #include main() { /***********SPACE***********/ int b=-1,【?】;unsigned a; /***********SPACE***********/ a=【?】; printf("b=%d a=%u\n",b,a); /***********SPACE***********/ 【?】+=b; printf("a=%u\n",a); /***********SPACE***********/ b=(a=30)/【?】; printf("a=%d b=%d c=%d\n",a,b,c); } 答案: =======(答案1)======= c =======(答案2)======= b =======(答案3)======= a =======(答案4)======= (c=5) ━━━━━━━━━━━━━━━━ 三、程序改错共5题(共计25分) ━━━━━━━━━━━━━━━━ 第1题(5.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:编写函数fun计算下列分段函数的值: x*20 x<0且x≠-3 f(x)= sin(x) 0≤x<10且x≠2及x≠3 x*x+x-1 其它 ------------------------------------------------------*/ #include #include double fun(double x) { /**********FOUND**********/ double y /**********FOUND**********/ if (x<0 || x!=-3.0) y=x*20; else if(x>=0 && x<10.0 && x!=2.0 && x!=3.0) y=sin(x); else y=x*x+x-1; /**********FOUND**********/ return x; } main() { double x,f; printf("input x="); scanf("%f",&x); f=fun(x); printf("x=%f,f(x)=%f\n",x,f); } 答案: =======(答案1)======= double y; =======(答案2)======= if (x<0 && x!=-3.0) =======(答案3)======= return y; 第2题(5.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:有一数组内放10个整数,要求找出最小数和它的下标,然后把它和数组中最前面的元素即第一个数对换位置. ------------------------------------------------------*/ #include main( ) { int i,a[10],min,k=0; printf("\n please input array 10 elements\n"); for(i=0;i<10;i++) /***********FOUND***********/ scanf("%d", a[i]); for(i=0;i<10;i++) printf("%d",a[i]); min=a[0]; /***********FOUND***********/ for(i=3;i<10;i++) /***********FOUND***********/ if(a[i]>min) { min=a[i]; k=i; } /***********FOUND***********/ a[k]=a[i]; a[0]=min; printf("\n after eschange:\n"); for(i=0;i<10;i++) printf("%d",a[i]); printf("\nk=%d\nmin=%d\n",k,min); } 答案: =======(答案1)======= scanf("%d",&a[i]); =======(答案2)======= for(i=1;i<10;i++) =========或========= for(i=0;i<10;i++) =========或========= for(i=1;i<=9;i++) =========或========= for(i=0;i<=9;i++) =======(答案3)======= if(a[i] =======(答案4)======= a[k]=a[0]; 第3题(5.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:求1到10的阶乘的和。 ------------------------------------------------------*/ #include main() { int i; float s=0; float fac(int n); /**********FOUND**********/ for(i=1;i<10;i++) /**********FOUND**********/ s=fac(i); printf("%f\n",s); } float fac(int n) { /**********FOUND**********/ int y=1; int i; for(i=1 ;i<=n;i++) y=y*i; /**********FOUND**********/ return; } 答案: =======(答案1)======= for(i=1;i<=10;i++) =========或========= for(i=1;10>=i;i++) =========或========= for(i=1;i<11;i++) =========或========= for(i=1;11>i;i++) =======(答案2)======= s= s + fac(i) ; =========或========= s+=fac(i); =========或========= s=fac(i)+s; =======(答案3)======= float y=1.0; =========或========= float y=1; =======(答案4)======= return y; =========或========= return(y); =========或========= return (y); 第4题(5.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:一个偶数总能表示为两个素数之和。------------------------------------------------------*/ #include #include main() { int a,b,c,d; /**********FOUND**********/ scanf("%d",a); for(b=3;b<=a/2;b+=2) { for(c=2;c<=sqrt(b);c++) if(b%c==0) break; if(c>sqrt(b)) /**********FOUND**********/ d=a+b; else break; for(c=2;c<=sqrt(d);c++) /**********FOUND**********/ if(d%c=0) break; if(c>sqrt(d)) printf("%d=%d+%d\n",a,b,d); } } 答案: =======(答案1)======= scanf("%d",&a); =======(答案2)======= d=a-b; =======(答案3)======= if(d%c==0) 第5题(5.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:读入一个整数k(2≤k≤10000),打印它的所有质因子(即 所有为素数的因子)。 例如:若输入整数:2310,则应输出:2、3、5、7、11。 请改正程序中的语法错误,使程序能得出正确的结果。 ------------------------------------------------------*/ #include "conio.h" #include /**********FOUND**********/ isPrime(integer n ) { int i, m; m = 1; for ( i = 2; i < n; i++ ) /**********FOUND**********/ if ( n%i ) { m = 0; break; } /**********FOUND**********/ return n ; } main( ) { int j, k; printf( "\nPlease enter an integer number between 2 and 10000: " ); scanf( "%d", &k ); printf( "\n\nThe prime factor(s) of %d is( are ):", k ); for( j = 2; j <= k; j++ ) if((!( k%j))&&( IsPrime(j))) printf( "\n %4d", j ); printf("\n"); } 答案: =======(答案1)======= IsPrime(int n) =======(答案2)======= if(!(n%i)) =======(答案3)======= return m ; ━━━━━━━━━━━━━━━━ 四、程序设计共2题(共计30分) ━━━━━━━━━━━━━━━━ 第1题(15.0分) /*------------------------------------------------ 【程序设计】 -------------------------------------------------- 功能:求一个给定字符串中的字母的个数。------------------------------------------------*/ #include void wwjt(); int fun(char s[]) { /**********Program**********/ /********** End **********/ } main() { char str[]="Best wishes for you!"; int k; k=fun(str); printf("k=%d\n",k); wwjt(); } void wwjt() { FILE *IN,*OUT; char sin[80]; int iOUT,i; IN=fopen("in.dat","r"); if(IN==NULL) { printf("Please Verify The Currernt Dir..it May Be Changed"); } OUT=fopen("out.dat","w"); if(OUT==NULL) { printf("Please Verify The Current Dir.. It May Be Changed"); } for(i=0;i<10;i++) { fscanf(IN,"%s",sin); iOUT=fun(sin); } fprintf(OUT,"%d\n",iOUT); fclose(IN); fclose(OUT); } 答案:---------------------- int i,k=0; for(i=0;s[i]!='\0';i++) if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z') k++; return k; ---------------------- 第2题(15.0分) /*------------------------------------------------------- 【程序设计】 --------------------------------------------------------- 题目:C语言编程题实现以下功能: 1) 从键盘输入10个学生的成绩,计算平均成绩ave 2) 统计及格人数pass,计算高于平均分的学生的人数better 3) 将10个学生成绩排名。 -------------------------------------------------------*/ #include "stdio.h" #define N 10 void main() { int i,j,a[N],ave,sum=0,pass=0,better=0,t; /**********Program**********/ /********** End **********/ printf("平均分:%d\n及格人数%d\n高于平均分人数%d\n",ave,pass,better); } 答案:for(i=0;i { scanf("%d",&a[i]); sum+=a[i]; } ave=sum/N; for(i=0;i { if(a[i]>=60) pass++; if(a[i]>ave) better++; } for(i=0;i for(j=i+1;j { if (a[i] { t=a[i]; a[i]=a[j]; a[j]=t; } } for(i=0;i { printf("%d",a[i]); }