2024年6月15日发(作者:)

一、选择题

1. 以下程序的运行结果是 。

#include

int fun(int n)

{int m=0,f=-1,i;

for(i=1;i<=n;i++)

{m=m+i*f;

f=-f;

}

return m;

}

int main()

{printf("m=%dn",fun(10));

return 0;

}

A.m=5 B.m=-6 C.m=6 D.m=-5

2. C语言规定,简单变量作为实参时,它和对应形参之间的数据传递方式

是 。

A.地址传递

B.单项值传递

C.由实参传给形参,再由形参传回给实参

D.由用户指定传递方式

3. 以下程序有语法性错误,有关错误原因的正确说法是 。

#include

int main()

{int G=5,k;

void prt_char ( );

...

k=prt_char(G);

...

}

A.语句void prt_char( ); 有错,它是函数调用语句,不能用void说明

B.变量名不能使用大写字母

C.函数说明和函数调用语句之间有矛盾

D.函数名不能使用下划线

4. 以下程序的运行结果是 。

#include

int fun(int a,int b)

{if(a>b) return (a+b);

else return (a-b);

}

int main()

{int x=3,y=8,z=6,r;

r=fun(fun(x,y),2*z);

printf("%dn",r);

return 0;

}

A.-16 B.-17 C.17 D.16

5. 以下程序的功能是计算函数F(x,y,z) = (x+y)/(x-y)+(z+y)/(z-y)的值,请选择填

空。

#include

#include

float f(float,float);

int main( )

{float x,y,z,sum;

scanf("%f%f%f",&x,&y,&z);

sum=f( )+f( );

printf("sum=%fn",sum);

return 0;

}

float f(float a,float b)

{float value;

value=a/b;

return value;

}

A.x-y, x+y B.x+y, x-y C.z+y, z-y D.z-y, z+y

A.x-y, x+y B.x+y, x-y C.z+y, z-y D.z-y, z+y

6. 以下程序可选出能被3整除且至少有一位是5的两位数,打印出所有这样的

数及其个数。请选择填空。

#include

int sub(int k,int h)

{int a1,a2;

a2= ;

a1=k - ;

if((k%3==0 && a2==5) || (k%3==0 && a1==5))

{printf("%5d",k);

h++;

return h;

}

else return -1;

}

int main()

{int n=0,k,m;

for(k=10;k<=99;k++)

{m=sub(k,n);

if(m!=-1) n=m;

}

printf("nn=%dn",n);

return 0;

}

A.k*10 B.k%10 C.k/10 D.k*10%10

A.a2*10 B.a2 C.a2/10 D.a2%10

7. 若用数组名作为函数调用的实参,则传递给形参的是 。

A.数组的首地址

B.数组的第一个元素的值

C.数组中全部元素的值

D.数组元素的个数

8. 折半查找法的思路是:先确定待查元素的范围,将其分成两半,然后测试位

于中间点元素的值。如果该待查元素的值大于中间点元素,就缩小待查范围,只

测试中间点之后的元素;反之,测试中间点之前的元素,测试方法同前。函数

binary的作用是应用折半查找法从存有10个有序整数的a数组中对关键字m进

行查找,若找到,返回其下标值;反之,返回-1。请选择填空。

#include

int binary(int a[10],int m)

{int low=0,high=9,mid;

while(low<=high)

{mid=(low+high)/2;

if(m

else if(m>a[mid]) ;

else return (mid);

}

return -1;

}

int main()

{int a[10]={1,2,3,4,5,6,7,8,9,10};

int m,index;

scanf("%d",m);

index=binary(a,m);

printf("%dn",index);

return 0;

}

A.high=mid-1 B.low=mid+1 C.high=mid+1 D.low=mid-1

A.high=mid-1 B.low=mid+1 C.high=mid+1 D.low=mid-1

9. 以下程序的运行结果是 。

#include

void fun(int x)

{if(x/2>0) fun(x/2-2);

printf("%d",x);

}

int main()

{fun(20);

printf("n");

return 0;

}

A.2082-1 B.2820 C.8 D.-12820

答案:

1. A 2. B 3. C 4. B 5. B C 6. C A 7. A 8. A B 9. D

二、填空题

1. 为使以下程序顺利进行,请填空补充完整程序。当输入的数值为5 7时,该

程序的运行结果是 。

#include

int main()

{double x,y;

scanf("%lf%lf",&x,&y);

printf("%lfn",max(y,x));

return 0;

}

double max(double a,double b)

{return (a>b)?b-a:a-b;}

2. 以下函数fun的功能是:将输入的大写字母,先转换为与其对应的小写字母,

然后再转换成该小写字母后的第3个字母,返回后输出。例如,若输入的字母为

E,输出的字母则为h;若输入的字母为Y,输出的字母则为b。请填空。

#include

#include

char fun(char c)

{c= ;

if(c>='a' && c<='w') c=c+3;

else if(c>='x' && c<='z') c= ;

return c;

}

int main()

{char c;

c=getchar();

c=fun(c);

putchar(c);

return 0;

}

3. 若输入的值是-125,则以下程序的运行结果是 。

#include

#include

void fun(int);

int main()

{int n;

scanf("%d",&n);

printf("%d=",n);

if(n<0) printf("-");

n=abs(n);

fun(n);

printf("n");

return 0;

}

void fun(int n)

{int k,r;

for(k=2;k<=sqrt(n);k++)

{ r=n%k;

while(r= =0)

{printf("%d",k);

n=n/k;

if(n>1) printf("*");

r=n%k;

}

}

if(n!=1) printf("%dn",n);

}

4. 下面add函数的功能是求两个参数的和,并将和值返回调用函数。函数中错

误的部分是 ,改正后为 。

void add(float a,float b)

{float c;

c=a+b;

return c;

}

5. 以下函数fun的功能是:统计一个数中位值为0的个数,以及位值为1的个数。

若输入111001,则输出为值为零的个数是2,位置为1的个数是4。请填空。

#include

void fun(long n)

{int coun0=0,coun1=0,m;

do

{m= ;

if(m==0) coun0++;

if(m==1) coun1++;

n= ;

}while(n);

printf("coun0=%d,coun1=%dn",coun0,coun1);

}

int main()

{long n;

printf("ninput n:n");

scanf("%ld",&n);

printf("n=%ldn",n);

fun(n);

return 0;

}

6. 以下函数fun的功能是:将输入的一个偶数写成两个素数之和的形式。例如,

若输入数值8,则输出8=3+5。请填空。

#include

#include

void fun(int a)

{int b,c,d;

for(b=3;b<=a/2;b= )

{for(c=2;c<=sqrt(b);c++) if(b%c==0) break;

if(c>sqrt(b)) d= ;

else break;

for(c=2;c<=sqrt(d);c++) if(d%c==0) break;

if(c>sqrt(d)) printf("%d=%d+%dn",a,b,d);

}

}

int main()

{int a;

printf("ninput a:n");

scanf("%d",&a);

fun(a);

return 0;

}

7. 以下程序的功能是根据输入的y(Y)与n(N),在屏幕上分别显示出This is

YES. 与 This is NO.。请填空。

#include

void YesNo(char ch)

{switch(ch)

{case 'y':

case 'Y': printf("nThis is YES.n"); ;

case 'n':

case 'N': printf("nThis is NO.n");

}

}

int main()

{char ch;

printf("nEnter a char 'y','Y' or 'n','N':");

ch= ;

printf("ch:%c",ch);

YesNo(ch);

return 0;

}

8. 以下Check函数的功能是对value中的值进行四舍五入,若计算后的值与ponse

值相等,则显示WELL DONE!!,否则显示计算后的值。已有函数调用语句

Check(ponse,value);请填空。

#include

void Check(int ponse,float value)

{int val;

val= ;

printf("计算后的值:%d",val);

if( ) printf("nWELL DONE!!n");

else printf("nSorry the correct answer is %dn",val);

}

9. 以下程序的运行结果是“output:153 370 371 407”,该程序的功能

是 。

#include

int f(int n)

{int i,j,k;

i=n/100; j=n/10-i*10;k=n%10;

if(n==i*i*i+j*j*j+k*k*k) return n;

else return 0;

}

int main()

{int n,k;

printf("output: ");

for(n=100;n<1000;n++)

{k=f(n);

if(k!=0) printf("%5d",k);

}

printf("n");

return 0;

}

10. 若输入一个整数10,则以下程序的运行结果是 。

#include

int sub(int a);

int main()

{int a,e[10],c,i=0;

printf("输入一个整数:");

scanf("%d",&a);

while(a!=0)

{c=sub(a);

a=a/2;

e[i]=c;

i++;

}

for(;i>0;i--) printf("%d",e[i-1]);

printf("n");

return 0;

}

int sub(int a)

{int c;

c=a%2;

return c;

}

11. 以下程序的功能是求3个数的最小公倍数。请填空。

#include

int max(int x,int y,int z)

{if(x>y && x>z) return x;

else if( ) return y;

else return z;

}

int main()

{int x1,x2,x3,i=1,j,x0;

printf("Input 3 numbers:");

scanf("%d%d%d",&x1,&x2,&x3);

x0=max(x1,x2,x3);

while(1)

{j=x0*i;

if( ) break;

i++;

}

printf("The zuixiaogongbei of three number %d,%d,%d is: %dn",x1,x2,x3,j);

return 0;

}

12. 函数gongyue的作用是求整数num1和num2的最大公约数,并返回该值。

请填空。

#include

int gongyue(int num1,int num2)

{int temp,a,b;

if(num1 num2)

{temp=num1;num1=num2;num2=temp;}

a=num1;b=num2;

while( )

{temp=a%b; a=b; b=temp;}

return a;

}