百科园C语言题库

更新时间:2024-04-04 18:56:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章

1.以下叙述中错误的是( )B.C语言编写的每个函数都可以进行独立编译并执行

2. 计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是( ) A.C语言程序仅可以编译执行

3. C语言规定:在一个源程序中,main的位置( ) A.可以任意

4. 一个C语言程序是由( ) C.函数组成

5. 以下关于结构化程序设计的叙述中正确的是( ) B.c语言中,程序的模块化是利用函数实现的

6. 以下叙述正确的是( ) C.c语言本身没有输入和输出语句

7. 以下叙述中错误的是( ) A.C语言编写的每个函数都可以进行独立编译并执行

8. 以下叙述正确的是( )B.c程序中注释部分可以单独占一行

9. 以下叙述正确的是( )

D.c语言函数可以嵌套调用,如fun(fun(x))

10. 一个C程序的执行是从( )

D.本程序main函数开始,到main函数结束

11. 以下叙述不正确的是( )

A.在c程序中,注释说明只能位于一条语句后面

第二章

单项选择

1以下选项中非法的字符常量是( ) (B ‘/019’)

2设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为( ) (C double)

3判断字符型变量c1是否为数字字符的正确表达式为( ) (A (C1>=‘0’)&&(C1<=‘9’))

4若有定义语句:int k1=10,k2=20;,执行表达式(k1=k1>k2)&&(k2=k2>k1)后,k1和k2的值分

别为 ( )

(B 0和20)

5下面四个选项中,均是不合法的用户标识符的选项是( )。 (B b-a goto int)

6判断字符型变量c1是否为小写字母的正确表达式为( )。 (B (c1>=’a’)&&(c1<=’z’))

7表达式18/4*sqrt(4.0)/8值的数据类型为( )。 (B double)

8下面四个选项中,均是合法的用户标识符的选项是( )。 (A -123 temp INT)

9若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是( ) (D 1)

10假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是( )。 (B 8)

11以下选项中关于C语言常量的叙述错误的是:( )

(D 经常被使用的变量可定义为常量)

12若x,i,j和k都是int型变量,则计算表达式x=(i=4,j=16,k=32)后,x的值为( (B 32)

13下面正确的字符常量是( ) (B ‘w’)

14在C语言中,要求运算数必须是整型的运算符是( )

(A %)

15以下关于C语言数据类型使用的叙述中错误的是( )

(B 若只处理’真’和’假’两种逻辑值,应使用逻辑类型) 16以下选项中,能表示逻辑值\假\的是( ) (B 0)

17C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符( ) (D 必须为字母或下划线)

18在C语言中,char型数据在内存中的存储形式是( )。 (C ASCLL码)

19下列表达式中,不满足\当x的值为偶数时值为真,为奇数时值为假\的要求的是( )(C !(x%==0))

20设:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b) && (n=c>d)后n的值为( )。 (C 2)

3ae21若有数学式bc,则不正确的C语言表达式是( )

(A 3*a*e/b*c)

。 )

第三章 程序改错

1/*下列给定程序中,函数fun的功能是:计算S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…f(n)的

值。

例如,当n为5时,函数值应为10.407143。f(x)函数定义如下:

f(x)= 请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: */

#include #include #include

/**********ERROR**********/ f(double x) {

if(x==0.0||x==2.0) return 0.0; else if(x<0.0)

return(x-1)/(x-2); else

return(x+1)/(x-2); }

double fun(int n) {

int i; double s=0.0,y; for(i=-n; i<=n;i++) { y=f(1.0*i); s+=y;} /**********ERROR**********/ return s }

void main() {

printf(\}

参考答案double f(double x) return s;

?(x?1)?(x?2)??0?(x?1)?(x?2)?x?0x?0或x?2x?02./*下列给定程序中,函数fun的功能是:求三个数的最小公倍数。例如,给变量x1、x2、x3分别

输入15、11、2,则输出结果应当是330。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序: */

#include

int fun(int x,int y,int z) { int j,t,n,m;

/**********ERROR**********/ j=1; t=m=n=1;

/**********ERROR**********/ while (t!=0 && m!=0 && n!=0) {

j=j+1; t=j%x; m=j%y; n=j%z; }

return j; }

void main() {

int x1,x2,x3,j;

printf(\ scanf(\

printf(\ j=fun(x1,x2,x3);

printf(\}

参考答案 j=0; while (t!=0 || m!=0 || n!=0)

3/*下列程序中函数fun的功能是:计算正整数num各位上的数字之积。例如,若输入252,则输出

应该是20。若输入202,则输出应该是0。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:*/

#include #include long fun(long num) {

/**********ERROR**********/ long k; do {

k *=num;

/**********ERROR**********/ num \\=10; }while(num); return(k); }

void main() {

int n;

printf(\ scanf(\

printf(\}

参考答案 long k=1; num/=10;

4/*下列给定程序中,函数fun()的功能是:根据整型形参m的值,计算如下公式的值:

t=1-1/(2?2)?1/(3?3)?...?1/(m?m) 请改正函数fun()中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: */

#include #include double fun(int m) {double y=1.0; int i;

/**********ERROR**********/ for(i=2;i

/**********ERROR**********/ y-=1/(i*i); return(y); }

void main() {int n=5;

printf(\}

参考答案 for(i=2;i<=m;i++) y-=1.0/(i*i);

5/*下列给定的程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然

数之和。

k的值由主函数传入,若k的值为500,则函数的值为4622。 请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:*/

#include #include int fun(int k) { int m=0,mc=0, j;

while((k>=2)&&(mc<10)) {

/**********ERROR**********/ if((k=0)||(k=0)) { m=m+k;mc++;} k--;

}

int n; double s;

printf(\ scanf(\ s=fun(n);

printf(\

参考答案 for(i=1;i<=n;i++) if(i%3==0||i%7==0) sum+=1.0/i;

7/*请补充main函数,该函数的功能是:计算两个自然数n和m(m<10000)之间所有数的和(n和m从

键盘输入)。

例如,当n=1,m=100时,sum=5050;当n=100,m=1000时,sum=495550。 注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。 试题程序:*/

#include #include void main() {

int n,m; long sum;

/**********FILL**********/ [1] ;

printf(\ scanf(\ while(n<=m) {

/**********FILL**********/ [2] ; n++; }

/**********FILL**********/

printf(\}

参考答案 sum=0; sum+=n; ld

8/*请补充函数fun,该函数的功能是:判断某一个年份是否为闰年。 例如,1900年不是闰

年,2004是闰年。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

试题程序:*/

#include #include int fun(int n)

{

int flag=0; if(n%4==0) {

/**********FILL**********/ if ( [1] ) flag=1; }

/**********FILL**********/ if ( [2] ) flag=1;

/**********FILL**********/ return [3] ; }

void main() {

int year;

printf(\ scanf(\ if (fun(year))

printf(\ else

printf(\}

参考答案 if(n0!=0) if (n@0==0) return flag;

程序设计(无答案)

1/*请编写函数fun,它的功能是:计算并输出n(包括n)以内所有能被5或9整除的自然数的倒数

之和。

例如,若主函数从键盘给n输入20后,则输出为s= 0.583333。 注意:n的值要求不大于100。部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */

#include double fun(int n) {

/************Begin*************/

/************End***************/

}

void main() {

int n; double s;

FILE *out,*in;

printf(\ scanf(\ s=fun(n);

printf(\

/******************************/ in=fopen(\ out=fopen(\ fscanf(in,\

fprintf(out,\ fscanf(in,\

fprintf(out,\ fclose(out);

/******************************/

2/*请编写函数fun,该函数的功能是:计算并输出 S=1+(1+2

0.5

0.5

)+(1+2+3)+…+(1+2+3+…

0.50.50.50.5

+n)

例如,若主函数从键盘给n输入20后,则输出为S=534.188884 注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */

#include #include double fun(int n) {

/***********Begin**************/

/**********End***************/ }

void main() {

FILE *wf,*in; int n; double s;

printf(\ scanf(\ s=fun(n);

printf(\

/******************************/ in=fopen(\ wf=fopen(\ fscanf(in,\

fprintf(wf,\ fscanf(in,\

fprintf(wf,\ fclose(in); fclose(wf);

/*****************************/ }

3/*请编写函数fun,其功能是计算并输出如下多项式的值: Sn=l+1/1!+1/2!+1/3!+1/4!+…

+1/n!

例如,若主函数从键盘给n输入15,则输出为S=2.718282。 注意:n的值要求大于1但不大于100。部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */

#include double fun(int n) {

/***********Begin*************/

/***********End****************/ }

void main() {

int n; double s;

FILE *out,*in;

printf(\ scanf(\ s=fun(n);

printf(\

/******************************/ in=fopen(\ out=fopen(\ fscanf(in,\

fprintf(out,\ fscanf(in,\

fprintf(out,\ fclose(in); fclose(out);

/******************************/ }

4/*

编写函数fun,它的功能是:计算和输出下列级数的和。

S=1/(1x2)+1/(2x3)+...1/(nx(n+1)) , 例如,当n=10时,函数值为0.909091。

注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */

#include

#include double fun(int n) {

/*************Begin************/

/*************End*************/ }

void main() {

FILE *wf,*in; int n;

printf(\

/******************************/ wf=fopen(\ in=fopen(\ fscanf(in,\

fprintf(wf,\ fclose(in); fclose(wf);

/*****************************/ }

5/*请编写函数fun,其功能是:计算并输出3到n之间所有素数的平方根之和。

例如,若主函数从键盘给n输入100后,则输出为sum=148.874270。 注意:n的值要大于2但不大于100。部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */

#include #include double fun(int n) {

/*************Begin*************/

/*************End**************/ }

void main() {int n;

double sum; FILE *out,*in;

printf(\ scanf(\ sum=fun(n);

printf(\ /******************************/ in=fopen(\ out=fopen(\ fscanf(in,\

fprintf(out,\ fclose(in); fclose(out);

/******************************/ }

6/*请编写一个函数 unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是n(n>=2)

位的整数,

则函数求出w的后n-1位的数作为函数值返回。 例如,w值为5923,则函数返回923;若w值为923,则函数返回23。

注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */

#include #include

unsigned fun(unsigned w) {

/***********Begin**************/

/***********End****************/ }

void main() {

FILE *wf,*in; unsigned x;

printf(\ scanf (\

printf(\ if(x<10)

printf(\ else

printf (\/******************************/ in=fopen(\ wf=fopen(\ fscanf(in,\

fprintf(wf,\ fscanf(in,\

fprintf(wf,\ fclose(in); fclose(wf);

/*****************************/ }

7/*请编写函数fun,它的功能是:求Fibonacci数列中大于t(t>3)的最小数,结果由函数返回。其

中Fibonacci数列F(n)的定义为: F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2)

假如:当t=1000时,函数值为1597。 注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */

#include #include int fun(int t) {

/**************Begin************/

/**************End*************/ }

void main() {

int n;

FILE *out,*in; n=1000;

printf(\ /******************************/

in=fopen(\ out=fopen(\ while(!feof(in)) {

fscanf(in,\

fprintf(out,\}

fclose(in); fclose(out);

/******************************/ }

8/*请编写函数fun,其功能是:计算并输出下列多项式值。 S=(1-1/2)+(1/3-1/4)+…

+(1/(2n-1)-1/2n)

例如,若主函数从键盘给n输入8后,则输出为S= 0.662872注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */

#include double fun(int n) {

/*************Begin*************/

/*************End*************/ }

void main() {

FILE *wf,*in; int n; double s;

printf(\ scanf(\ s=fun(n);

printf(\

/******************************/ in=fopen(\ wf=fopen(\ fscanf(in,\

fprintf(wf,\ fclose(in); fclose(wf);

/*****************************/

}

9/*请编写一个函数fun,它的功能是:根据以下公式求?的值(要求满足精度0.005,即某项小于

0.005时停止迭代)。

?/2=1+1/3+1*2/(3*5)+1*2*3/(3*5*7)+1*2*3*4/(3*5*7*9)+…+1*2*3*…*n/(3*5*7*…*(2n+1))

程序运行后,如果输入精度0.005,则程序输出3.137130。 注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */

#include #include #include

double fun(double eps) {

/*************Begin************/

/*************End**************/ }

void main() {

double x; FILE *wf,*in;

printf(\ scanf(\

printf(\/******************************/ in=fopen(\ wf=fopen(\ fscanf(in,\

fprintf (wf,\ fclose(in); fclose(wf);

/*****************************/ }

10/*请编写函数fun,它的功能是计算下列级数和,和值由函数值返回。S=1+x+x/2!+x/3!+…

2

3

+x/n!

例如,当n=10,x=0.3时,函数值为1.349859。 注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

n

试题程序: */

#include #include

double fun(double x, int n) {

/************Begin*************/

/************End***************/ }

void main() {

FILE *wf,*in; double x; int n;

printf(\/******************************/ in=fopen(\ wf=fopen(\ fscanf(in,\ fprintf(wf,\ fclose(in); fclose(wf);

/*****************************/ }

第四章

单项选择

1下面的程序片断所表示的数学函数关系是(A)

y = -1;

if(x != 0) y = 1; if(x > 0) y = 1; else y = 0;

2以下程序的执行结果是main() (C.1)

{ int x = 0, s = 0;

while( !x != 0 ) s += ++x; printf( \

3在下述程序中,判断i > j共执行了多少次(C.6)

#include main() {

int i = 0, j = 10, k = 2, s = 0; for( ; ; ) {

4

i += k; if(i > j) {

printf(\ break; }

s += i; } }

以下程序段的输出结果是(C.20)

int i, j, m = 0;

for(i = 1; i <= 15; i += 4) for(j = 3; j <= 19; j += 4) m++;

printf(\

5执行下列语句后的输出为()(C.****)

int j=-1;

if(j<=1) printf(\ else printf(\

6以下for循环的执行次数是 for(x=0,y=0;(y=123)&&(x<4);x++);(A.4次) 7下列程序的输出结果是(A.a=2,b=1)

main() {

int x=1,y=0,a=0,b=0; switch(x) {

case 1:

switch(y) {

case 0:a++;break; case 1:b++;break; }

case 2:a++;b++;break; case 3:a++;b++;break; }

printf(\

8以下程序的执行结果是__(A.1,2,3,)

.

main()

{ int num = 0;

while( num <= 2 ) { num++; printf( \

9 int a=1,b=2,c=3; if(a>b)a=b; if(a>c)a=c; 则a的值为(A.1)。 10有以下程序

main()

{ int i;

for(i=0; i<3; i++) switch(i)

{ case 1: printf(\ case 2: printf(\

default : printf(\ } }

执行后输出结果是(A.011122)

11下列程序的输出结果是()。

main()

{ int x=1,y=0,a=0,b=0; switch(x) {

case 1:switch(y) {

case 0:a++;break; case 1:b++;break; }

case 2:a++;b++;break; case 3:a++;b++;break; }

printf(\

(A.a=2,b=1)

12有以下程序,程序运行后的输出结果是 (D #include int main() {

char b,c; int i; b='a'; c='A'; for(i=0;i<6;i++) {

if(i%2) putchar(i+b); else putchar(i+c); }

printf(\return 0;

13以下程序的输出结果是(A .28 70)

main()

{ int x, i;

for(i = 1; i <= 100; i++) { x = i;

if( ++x % 2 == 0) if( ++x % 3 == 0 ) if( ++x % 7 == 0) printf(“%d “, x); }

printf(“\\n”);

}

AbCdEf)

14有如下程序

main() {

float x=2.0,y; if(x<0.0)y=0.0;

else if(x<10.0)y=1.0/x;

else y=1.0;

printf(\\n\);}

该程序的输出结果是(A. 0.500000)

15有以下程序

main() {

int i=1,j=1,k=2; if((j++||k++)&&i++)

printf(\\n\); }

执行后输出结果是 (A

k1=1; k2=2; k3=3; x=15;

if(!k1) x--;

else if(k2) x=4; else x=3;

2,2,2)

16.假定所有变量均已正确定义,下列程序段运行后x的值是()(D. 4)

17. 以下程序段的输出结果是(B. 1 -2)

int x= 3; do

{ pritnf(“=”, x-=2); } while (!(--x));

18. 有以下程序,若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是 (B. m=123n=456p=789)(中间无空格)

#include int main() {

int m,n,p;

scanf(\

printf(\return 0; }

19以下程序中,while循环的循环次数是( ) (A 死循环不能确定次数)

main() {

int i=0; while(i<10) {

if(i<1) continue; if(i==5) break; i++; } }

20设有定义:int a=1,b=2,c=3;以下语句中执行效果与其它三个不同的是()

(D if(a>b) c=a;a=b;b=c;)

21为了避免在嵌套的条件语句 if-else 中产生二义性,C语言规定: else子句总是与()配对。(B 其之前最近的if) 22以下叙述正确的是:(c)

(用do-while构成循环时,只有在while后的表达式为零时结束循环) 23有如下程序

main() {

int x=1,a=0,b=0; switch(x) {

case 0: b++; case 1: a++; case 2: a++;b++; }

printf(\\\n\); }

(B a=2,b=1)

24运行以下程序后,输出的结果是

main()

{ int k = -3; if(k <= 0)

printf(\;

else printf(\}

(A ****)

25int a=1,b=2,c=3; if(a>c)b=a;a=c;c=b;则c的值为()。 (B 2)

26在C语言中,为了结束由while语句构成的循环,while后一对圆括号

中表达式的值应该为()。

(B 0)

27设a、b和c都是int变量,且a=3,b=4,c=5;则以下的表达式中,值为0的表达式是 {C !((a

28假定所有变量均已正确定义,下面语句段执行后的x的值是

a = b = c = 0; x = 35;

(B 4)

29语句while(!E);中的条件为真等价于()。(B E==0) 30若x是int类型变量,以下程序段的输出结果是

for(x = 3; x < 6; x++)

printf( (x%2)?(\

(D **3##4 **5) 31有以下程序段

int n=0,p; do {

scanf(\ n++;

}while(p!=12345&&n<3);

此处do-while循环的结束条件是______。

32以下程序段的输出结果为()。 for(i=4;i>1;i--)

for(j=1;j

(D p的值等于12345或n的值大于等于3)(A ######) 33以下程序段中,能够正确地执行循环体的是()。 (B int s=6;do s-=2;while(s);) 34执行语句 for(i=1;i++<4;); 后变量 i 的值是()。 (D 5)

35从循环体内某一层跳出,继续执行循环外的语句是 (A break语句)

36int a=3,b=2,c=1; if(a>b>c)a=b; else a=c; 则a的值为()。 (C 1)

37以下描述中正确的是()。

(D 在do-while循环体中,一定要有能使while后表达式的值变为零(“假”)的操作)

38选择结构中的条件与循环结构中循环成立的条件, 在写法上可以是任一表达式,但其值只能被判断为\真\

或\假\。 哪个数作为逻辑\假\值()。

(D 0)

39以下程序的输出结果是

main()

{ int i, sum=0;

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

sum += i;

printf(\}

(A 15)

第四章

一·选择题

1.有以下程序,程序运行后的输出结果是( ) B.6 #include int fun (int x,int y)

{ if (x!=y) return ((x+y)/2); else return (x); }

int main()

{ int a=4,b=5,c=6;

printf(\return 0; }

2. 有以下程序,程序运行的输出结果( ) A.8

#include int f(int x); int main() { int n=1,m;

m=f(f(f(n))); printf(“%d\\n”,m);

return 0 ;

}

int f(int x) { return x*2;}

3. 有以下程序,程序执行后变量w中的值是( ) C.5.0 #include

int funl(double a){return a*=a;} int fun2(double x,double y)

{ double a=0,b=0;

a=funl(x);b=funl(y);return (int)(a+b);

}

int main()

{double w;w=fun2(1.1,2.0);……}

4. 有以下程序,程序运行后的输出结果是( )B.64 #include int fun()

{ static int x=1;

x*=2; return x; }

int main() { int i,s=1;

for(i=1;i<=3;i++) s*=fun(); printf(\}

5. 有以下程序,程序运行后的输出结果是( )D.9 #include int f(int x,int y) {return ((y-x)*x);} int main()

{ int a=3,b=4,c=5,d;

d=f(f(a,b),f(a,c));

printf(\}

6. 有以下程序,程序运行后的输出结果是( )B.21 #include void fun(int p) { int d=2;

p=d++; printf(“%d”,p); int main() { int a=1;

fun(a); printf(“%d\\n”,a);

}

return 0;

7. 有以下程序:程序运行后的输出结果是( )A.21 #include int f()

{ static int x=1; }

int main() { int i,s=1;

for(i=1;i<=5;i++) s+=fun(); printf(\return 0; }

8. 若有代数式 (其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是( )A.sqrt(fabs(pow(n,x)+exp(x)))

9. 以下关于return语句叙述中正确的是( )D.一个自定义函数中可以根据不同情况设置多条return语句

10. 设有如下函数定义,若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是( ) B.3 int fun(int k)

{ if (k<1) return 0;

else if(k==1) return 1; else return fun(k-1)+1; }

11. 在一个C语言源程序文件中所定义的全局变量,其作用域为( )C.由具体定义位置和extern说明来决定范围

x+=1; return x; }

|nx?ex|12. 以下叙述正确的是( )A.C语言函数可以嵌套调用,例如:fun(fun(x))

13. 以下程序的主函数中调用了在其前面定义的fun函数,则以下选项中错误的fun函数首部是 ( ) B.double fun (double a)

14. 以下说法不正确的是( )C.用户可以重新定义标准库函数

15. 下列叙述中正确的是( )A.C语言规定必须用main作为主函数名,程序将从此函数开始执行,到此函数结束

16. 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( ) D.形参只是形式上的存在,在调用之前不占用具体存储单元

17. 在C语言中,只有在使用时才占用内存单元的变量,其存储类型是( )。 B.auto和register

18. 设函数中有整形变量n,为保证其在未赋初值的情况下初值为0,应该选择的存储类别是( ) D.static

19. 以下正确的函数定义形式是:( ) A.double fun(int x;in y){}

20. 在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则 ( ) C.称为函数的间接递归调用

二·程序设计

/*请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。

例如,输入17,则应输出4 6 8 9 10 12 14 15 16。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序: */

#include #include #include

int fun(int m, int xx[]) {

/***************Begin************/

/*************** End ************/

}

int main() {

FILE *wf,*in;

int m, n,k, zz[100];

printf(\ scanf(\ m=fun(n,zz);

printf(\ for(n=0;n

printf(\ in=fopen(\ wf=fopen(\ fscanf(in,\ m=fun(k,zz);

for(n=0;n

fprintf(wf,\ fclose(in); fclose(wf); return 0; }

【参考代码】 int i,k,j=0;

for(i=2;i

for(k=2;k

return j;

三.程序改错

1. /*下列给定程序中,函数fun的功能是:将十进制正整数m转换成k(2?k?9)进制数,并按位输出。

例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。

请改正函数fun中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:*/

#include

#include

/**********ERROR**********/ void fun(int m,int k); { int aa[20], i; for(i=0;m;i++) {

/**********ERROR**********/ aa[i]=m/k; m/=k; }

for(;i;i--)

/**********ERROR**********/ printf(\}

int main() {

int b,n;

printf(\ scanf(\ fun(n,b);

printf(\ return 0; } 【参考答案】

void fun(int m, int k) 【参考答案】 aa[i]=m%k; 【参考答案】

printf(\

2. /*数列中,第一项为3,后一项都比前一项的值增5。下列给定程序中,函数fun的功能是:计算前n(4?n?50)项的累计和。

在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数里。

如当n的值为20时,该数列为3,8,13,18,23,28,…,93,98。符合此条件的累加值应为42,126,366,570,1010。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: */

#include #define N 20

int fun(int n, int a[])

/**********ERROR**********/ { int i,j,k,sum;

sum=0;

for(k=3,i=0;i

/**********ERROR**********/ if(sum%4=2) a[j++]=sum; }

/**********ERROR**********/ return j-1; }

int main() {

int a[N],d,n,i;

printf(\scanf(\ d=fun(n,a);

printf(\

for(i=0;i

printf(\return 0; }

【参考答案】 int i,j=0,k,sum; 【参考答案】 if(sum%4==2) 【参考答案】 return j++;

return j;

3. /*下列给定程序中,函数fun的功能是:计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。 其中x和y不相等,z和y不等。例如,当x的值为9,y的值为11,z的值为15时,函数值为-3.50。 请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:*/

#include #include #include

/**********ERROR**********/ #define FU(m,n) (m/n)

float fun(float a,float b,float c) { float value;

value=FU(a+b,a-b)+FU(c+b,c-b); /**********ERROR**********/ return(Value);

}

void main()

{ float x,y,z,sum;

printf(\ scanf(\

printf(\ if(x==y||y==z)

{ printf(\exit(0);}

sum=fun(x,y,z);

printf(\}

【参考答案】

#define FU(m,n) (m)/(n) #define FU(m,n) ((m)/(n)) 【参考答案】 return(value);

return value;

4. /*下列给定程序中,函数fun的功能是:按如下递归公式求函数值。

?10fun(n)=??fun(n?1)?2(n?1)(n?1)

例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。 请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: */

#include

/**********ERROR**********/ int fun(n) {

int c;

/**********ERROR**********/ if(n=1) c=10; else

c=fun(n-1)+2; return(c); }

void main() {

int n;

printf(\ scanf(\

printf(\}

【参考答案】 int fun(int n) 【参考答案】 if(n==1)

if(1==n)

5. /*下列给定程序中,函数fun的功能是:用递归算法计算斐波拉契级数列中第n项的值。

从第一项起,斐波拉契级数序列为1,1,2,3,5,8,13,21,…例如,若给n输入7,该项的斐波拉契级数值为13。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:*/

#include long fun(int g) {

/**********ERROR**********/ switch(g);

{case 0:return 0;

/**********ERROR**********/ case 1; case 2:return 1; }

return (fun(g-1)+fun(g-2)); }

void main() {

long fib; int n; printf(\ scanf(\ printf(\ fib=fun(n);

printf(\}

【参考答案】 switch(g) 【参考答案】

case 1:case 2:return 1;

三·程序填空

/*请补充函数fun,函数fun的功能是求n的阶乘。注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

试题程序: */

#include long fun(int n) {

/**********FILL**********/ if ( [1] )

/**********FILL**********/

return(n*fun( [2] )); /**********FILL**********/ return [3] ; }

void main() {

printf(\}

【参考答案】 if(n>1) if(1

第五章

1.有以下程序,程序运行后的输出结果是( )B:ABCDIJK #include #include int main() {

char a[20]=”ABCD\\0EFG\\0”,b[]=”IJK”; strcat(a,b); printf(“%s\\n”,a); return 0;

2.有以下程序,程序运行后的输出结果是 ( )D;3 #include int main()

{ char s[]=\

int i, n=0;

for(i=0;s[i]!=0;i++)

if(s[i]>='0'&&s[i]<='9') n++;

printf(\

return 0;

3.下列选项中,能够满足\若字符串s1等于字符串s2,则执行ST\要求的是 ( )A:if(strcmp(s2,s1)==0)ST

4.以下选项中正确的语句组是( )D:char s[]=”BOOK!”

5.以下数组定义中错误的是( )A:int x[2][3]={{1,2},{3,4},{5,6}}

6.若有定义语句:int m[]={5,4,3,2,1},i=4;则下面对m数组元素的引用中错误的是 ()A:m[m[0]]

7.下列选项中,能正确定义数组的语句是( )D:#define N 2008 Int num[N]

8.有以下程序,程序运行时若输入:how are you? I am fine<回车>则输出结果是( ) #include int main()

{ char a[30],b[30];

scanf(\gets(b);

printf(\

return 0; C:how

are you?I am fine.

9.下面是有关C语言字符数组的描述,其中错误的是( )D:字符数组只能存放字符串 10.有以下程序,程序运行后的输出结果是( )C:71 #include #include int main() {

char x[]=\x[0]='0';x[1]='\\0';x[2]=0;

printf(\

return 0;

11.若要定义一个具有5个元素的整型数组,以下错误的定义语句是( )C:int i=5,d[i] 12.有以下程序,程序运行后的输出结果是 ( )C:welcome #include

#include int main()

{ char a[5][10]={“china”,”beijing”,”you”,”tiananmen”,”welcome”}; int i,j; char t[10]; for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(strcmp(a[i],a[j])>0)

{ strcpy(t,a[i]); strcpy(a[i],a[j]); strcpy(a[i],t);} puts(a[3]); return 0;

}

程序设计1./*编写函数int fun(int lim, int aa[MAX]),该函数的功

能是求出小于或等于lim的所有素数并放在aa数组中,

该函数返回所求出的素数的个数。 注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序: */

#include #include #define MAX 100

int fun(int lim, int aa[MAX]) {

/**********Begin**********/

/**********End**********/ }

int main() {

FILE *wf,*in;

int limit,i,k,sum; int aa[MAX];

printf(\输入一个整数\ scanf(\

sum=fun(limit,aa); for(i=0;i

if(i==0&&i!=0) /*每行输出10个数*/ printf(\

printf(\ }

/******************************/ wf=fopen(\ in=fopen(\ fscanf(in,\ sum=fun(k,aa); for(i=0;i

fprintf(wf,\ fclose(wf); fclose(in);

/*****************************/ return 0; }

答案:int i,j,k=0; for(i=2;i<=lim;i++) {

for(j=2;j=i) aa[k++]=i; }

return k;

2./*请编写函数fun,函数的功能是:求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。

例如,若二维数组中的值为 1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 则函数值为61。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:*/

#include #include #define M 4 #define N 5

int fun( int a [M][N]) {

/***************Begin************/

/*************** End ************/

}

void main() {

FILE *wf,*in;

int aa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,10}}; int i, j, y;

printf (\ for(i=0; i

{for (j=0; j

printf(\ printf(\ }

y=fun(aa);

printf(\ printf(\

/******************************/ in=fopen(\ wf=fopen(\ for(i=0;i

fscanf(in,\ y=fun(aa);

fprintf (wf,\ fclose(wf);

/*****************************/ }

答案:int i,j,sum=0; for(i=0;i

if(i==0||i==M-1||j==0||j==N-1) sum=sum+a[i][j];

return sum;

3./*编写一个函数,从传入的num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。 注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序:*/

#include #include #include

void fun(char a[][81], int num, char max[]) {

/***************Begin************/

/*************** End ************/ }

void main() {

FILE *wf,*in;

char ss[10][81],ps[81];

char s[3][81]={\ int i=0,n;

printf(\输入若干个字符串:\ gets(ss[i]); puts(ss[i]);

while(!strcmp(ss[i], \用4个星号作为结束输入的标志*/ { i++;

gets(ss[i]); puts(ss[i]); } n=i;

fun(ss,n,ps);

printf(\

/******************************/ in=fopen(\ wf=fopen(\ fscanf(in,\ for(i=0;i

fscanf(in,\ fun(s,n,p);

fprintf(wf,\ fclose(wf); fclose(in);

/*****************************/ }

答案:int i=0; strcpy(max,a[0]); /*找出最长的一个字符串*/ for(i=0;i

if(strlen(max)

4./*请编写一个函数fun,它的功能是:求出1到m(含m)之内能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。

例如,若传给m的值为50,则程序输出: 7 11 14 21 22 28 33 35 42 44 49 注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */

#include #include #define M 100

int fun(int m, int a[]) {

/***************Begin************/

/*************** End ************/ }

void main() {

FILE *wf,*in; int aa[M],n,k,i; n=fun(50,aa); for(k=0;k

if((k+1) ==0) /*每行输出20个数*/ {printf(\ printf(\ } else

printf(\ printf(\

/******************************/ in=fopen(\ wf=fopen(\ fscanf(in,\ n=fun(k,aa); for(i=0;i

fprintf(wf,\ fclose(wf);

/*****************************/ }

答案:int i,j=0; for(i=1;i<=m;i++) if(i%7==0||i==0) a[j++]=i;

return j; /*返回这些数的个数*/

5./*请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转为整数的函数)。

例如,若输入字符串\则函数把它转换为整数值-1234。 注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序:*/

#include #include long fun(char p[]) {

/***************Begin************/

/*************** End ************/ }

void main() {

FILE *wf,*in; char s[6]; long n;

printf(\ gets(s); n=fun(s);

printf(\

/******************************/ in=fopen(\ wf=fopen(\ fscanf(in,\

fprintf (wf,\ fclose(wf);

/*****************************/ }

答案:long n=0,i=0; int flag=1;

if(p[i]=='-') /*负数时置flag为-1*/ {i++;flag= -1;}

else if(p[i]=='+') /*正数时置flag为1*/ i++; while(p[i]!='\\0')

{ n=n*10+p[i]-'0';/*将字符串转成相应的整数*/ i++; }

return n*flag;

6./*请编写一个函数void fun(char ss[]),其功能是:将字符串ss中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。

例如,若输入abc4EFg,则应输出aBc4EFg。 注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序:*/

#include

#include void fun ( char ss[]) {

/***************Begin************/

/*************** End ************/

}

void main() {

char tt[100]; FILE *out,*in;

printf(\gets(tt);

printf(\fun(tt);

printf(\/******************************/ in=fopen(\out=fopen(\fgets(tt,16,in);

strcat(tt,\fun(tt);

fprintf(out,\fclose(in); fclose(out);

/******************************/ }

答案:int i,n=0; while(ss[i]) {

n++; i++; }

for(i=0;i

if((ss[i]>='a'&&ss[i]<='z')&&i%2!=0) /*将下标为奇数位置的字母转换成大写*/ ss[i]=ss[i]-32; ss[i]='\\0';

7./*编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。 例如,分别输入下面两个字符串: FirstString SecondString

则程序输出:FirstStringSecondString 注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序:*/

#include #include

void fun(char p1[],char p2[]) {

/***************Begin************/

/*************** End ************/

}

void main() {

FILE *wf,*in; char s1[80],s2[40];

char p1[80]=\ printf(\ scanf(\ printf(\ printf(\

printf(\ fun(s1,s2);

printf(\ printf(\

/******************************/ in=fopen(\ wf=fopen(\ fscanf(in,\ fun(p1,p2);

fprintf(wf,\ fclose(in); fclose(wf);

/*****************************/ }

答案:int i,j;

for(i=0;p1[i]!='\\0';i++); for(j=0;p2[j]!= '\\0';j++) p1[i++]=p2[j];

p1[i]= '\\0';

8./*请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。

例如,输入17,则应输出4 6 8 9 10 12 14 15 16。 注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */

#include #include

int fun(int m, int xx[]) {

/***************Begin************/

/*************** End ************/

}

void main() {

FILE *wf,*in;

int m, n, k,zz[100];

printf(\ scanf(\ m=fun(n,zz);

printf(\ for(n=0;n

printf(\

/******************************/ in=fopen(\ wf=fopen(\ fscanf(in,\ m=fun(k,zz); for(n=0;n

fprintf(wf,\ fclose(wf);

/*****************************/ }

答案:int i,j,n=0; for(i=4;i

/*找出大于1小于整数m的非素数*/ {for(j=2;j

if(j

return n; /*返回非素数的个数*/ int i,j,n=0;

for(i=4;i

/*找出大于1小于整数m的非素数*/ {for(j=2;j

return n; /*返回非素数的个数*/

9./*请编写一个函数 void fun(char tt[],int pp[]),统计在tt字符串中\到\个字母各自出现的次数,

并依次放在pp所指数组中。例如,当输入字符串abcdefghabcdeabc后,

程序的输出结果应该是:3 3 3 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序:*/

#include #include

void fun(char tt[],int pp[] ) {

/***************Begin************/

/*************** End ************/

}

void main( ) {

FILE *wf,*in; char aa[1000]; int bb[26], k;

printf(\ scanf(\ fun(aa,bb);

for (k=0 ;k<26 ; k++) printf(\

/******************************/ in=fopen(\ wf=fopen(\ fgets(aa,80,in); fun (aa,bb) ;

for (k=0 ;k<26 ; k++)

fprintf(wf,\ fclose(wf); fclose(in);

/*****************************/ }

答案:int i;

for(i=0;i<26;i++) pp[i]=0; i=0;

for(;tt[i]!='\\0';i++)

if(tt[i]>='a'&&tt[i]<='z') pp[tt[i]-'a']++;

程序改错1. /*下列给定程序中,函数fun的功能是:删除字符串s中所有空

白字符(包括Tab符、回车符及换行符)。输入字符串时用\结束输入。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:*/

#include #include #include fun(char *p)

{ int i, t; char c[80]; for(i=0,t=0;p[i];i++)

if(!isspace(*(p+i))) c[t++]=p[i]; /**********ERROR**********/ c[t]=\ strcpy(p,c); }

void main() {char c,s[80]; int i=0;

printf(\ c=getchar(); while(c!='#')

{ s[i]=c;i++;c=getchar();} s[i]='\\0'; fun(s); puts(s); }

答案:【学生答案】 c[t]=\

【参考答案】 c[t]=0;

c[t]='\\0';

2. /*下列给定程序中,函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和 a[1] 中的数对调。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:*/

#include #define N 20

/**********ERROR**********/ void fun(int a[],int n); {

int i, m, t, k; for(i=0; i

/**********ERROR**********/ m=0;

for(k=i+1; ka[m]) m=k; t=a[i]; a[i]=a[m]; a[m]=t; } }

void main() {

int b[N]={11,5,12,0,3,6,9,7,10,8},n=10,i; for(i=0; i

for(i=0; i

答案:【改错1】 【学生答案】

void fun(int a[],int n); 【参考答案】

void fun(int a[],int n) 【改错2】 【学生答案】 m=0;

【参考答案】 m=i;

3. /*下列给定程序中,函数fun的功能是:先从键盘上输入一个3行、3列的矩阵的各个元素的值,然后输出主对角线元素之和。

请改正函数fun中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:*/

#include void fun() {

int a[3][3],sum; int i,j;

/**********ERROR**********/ sum=1;

for (i=0;i<3;i++)

{ for (j=0;j<3;j++) /**********ERROR**********/ scanf(\ }

for(i=0;i<3;i++) sum=sum+a[i][i]; printf(\}

void main() {

fun(); }

答案:改错1】 【学生答案】 sum=1; 【参考答案】 sum=0; 【改错2】 【学生答案】 scanf(\【参考答案】

scanf(\

4. 例如,数组中元素的值依次为39,-47,21,2,-8,15,0,则程序的运行结果为19.250000。 请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: */

#include

double fun(int x[]) {

/**********ERROR**********/ int sum=0.0; int c=0, I=0; while(x[I]!=0) {

if(x[I]>0) {

sum+=x[I]; c++; } I++; }

/**********ERROR**********/ sum=sum\\c; return sum; }

void main() {

int x[1000]; int i=0;

printf(\ do {

scanf(\ }while(x[i++]!=0); printf(\}

答案:【改错1】 【学生答案】 int sum=0.0; 【参考答案】 double sum=0; double sum=0.0; float sum=0; float sum=0.0; 【改错2】 【学生答案】 sum=sum\\c; 【参考答案】 sum=sum/c;

本文来源:https://www.bwwdw.com/article/26tr.html

Top