文档库 最新最全的文档下载
当前位置:文档库 › 期末复习题目(1)

期末复习题目(1)

期末复习题目(1)
期末复习题目(1)

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]);

}

相关文档