999kao.com
全国计算机等级考试二级C历届上机真题

下面程序的运行结果是 : 【 1 0 】 。

fun(int t[],int n)

{ int i,m;

if(n==1)return t[0];

else

if(n>=2){m=fun(t,n-1); return m; }

}

main()

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

printf(" % d\n",fun(a,10));

}


正确答案:
(10) 【 10 】 11
解析 : 此题涉及函数的调用和 if 语句 。 程序先执行第二个 if 语句 , 然后在执行第一个 if 语句 ,最后用 return 返回数值。


有以下程序

#include <stdio.h>

#include <stdlib.h>

int fun(int n)

{ int *p;

p=(int*)malloc(sizeof(int));

*p=n; return *p;

}

main()

{ int a;

a = fun(10); printf("%d\n",a+fun(10));

}

程序的运行结果是

A)0

B)10

C)20

D) 出错


正确答案:C


如有下程序:includeusing namespace std;long fun(int n){if(n>2)return(fun(n-1)+fu

如有下程序: #include<iostream> using namespace std; long fun(int n) { if(n>2) return(fun(n-1)+fun(n-2)); else return 2; } int main() { cout<<fun(3)<<endl; return 0; } 则该程序的输出结果应该是( )。

A.2

B.3

C.

D.5


正确答案:C
解析: 主函数中调用fun(3),在fun内部当n>2时,递归调用fun(n-1)+fun(n-2),否则返回2。所以当n=3时,调用fun(2)+fun(1),即返回2+2,等于4,


以下程序的输出结果是

long fun( int n)

{ long s;

if(n==1||n==2)s=2;

else s=n-fun(n-1);

return s;}

main()

{ printf("%ld\n",fun(3));}

A.1

B.2

C.3

D.4


正确答案:A
解析:该题考查的是递归函数的调用,题中读fun函数进行了递归调用,第1次调用:fun(3)n=3 s=3-fun(2);第二次调用时:fun(2)n=2 s=2 返回第一次调用后,s=3-2=1。


有如下程序:includeusing namespace std;long fun(int n){if(n>2)return(fun(n-1)+fu

有如下程序: #include<iostream> using namespace std; long fun(int n) { if(n>2) return(fun(n-1)+fun (n-2)); else return 2; } int main() { cout<<fun(3)<<end1; return 0; } 则该程序的输出结果应该是 ( )。

A.2

B.3

C.4

D.5


正确答案:C
解析:主函数中调用fun(3),在fun内部当n>2时,递归调用 fun(n-1)+fun(n-2),否则返回2。所以当n=3时,调用fun(2)+fun(1),即返回2+2,等于4。


全国计算机等级考试二级C历届上机真题第1套填充题请补充fun函数,fun函数的功能是求n 的阶乘。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。关键词:典型算法,递归include long fun(int n)(if(1一)return(n*fun(_2_);return _ 3_;)main()(printf(10!=%ldn”,fun(10);)填充题答案nlK nn-11l lIL填充题+答案#include long fun(int n)(if(n 1)return(n*fun(n-l);return 1;)main()(printf(z/10!=%ldn*,fun(10);)改错题下列给定程序的功能是:读入一个 整 数 k(2=k=10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数2 3 1 0,则应输出:2、3、5、7、11。请改正程序中的错误,使程序能得出正确的结果。注意:不要改动m a i n 函数,不得增行或删行,也不得更改程序的结构。关键词:语法,典型算法#i n c l u d e#i n c l u d e/*o u n d*/I sP ri m e(i n t n);(i n t i,m;m =1;/*f o u n d*/f o r(i=2;i n;i+)i f !(n%i)(m =0;b rea k;)ret u rn(m);m a i n ()(i n t j,k;pri n t f(n pl ea se en t er a n i n t eg er n u m b er b et w een 2 a n d 1 0 0 0 0:);sc a n f (zz%dz/,&k);pri n t f (,zn n T h e pri m e f a c t o r(s)o f%d i s(a re):z,,k);f o r(j=2;j k;j+)i f (!(k%j)&(I sP ri m e(j)pri n t f%4 d,j);pri n t f(n);)改错题答案U sP ri m e(i n t n )2 i f (!(n%i)改错题+答案 i n c l u d e#i n c l u d e/*f o u n d*/I sP ri m e(i n t n)(i n t i,m;m =1;/*f o u n d*/f o r(i=2;i n;i+)i f (!(n%i)m =0;b rea k;)ret u rn(m);)m a i n O(i n t j,k;pri n t f(X n pl ea se en t er a n i n t eg er n u m b er b et w een 2 a n d 1 0 0 0 0:);sc a n f&k);pri n t f (z/n n T h e pri m e f a c t o r(s)o f%d i s(a re):z,,k);f o r(j=2;j 30、40。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。关键词:数组t t i n c l u d e#i n c l u d e#i n c l u d e i n t f u n(i n t sc o re ,i n t m,i n t b el o w )()m a i n 0(i n t i,n,b el o w 9 ;i n t sc o re 9 =1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0);F I L E *o u t;n=f u n (sc o re,9,b el o w);pri n t f (,zn B el o w t h e a v era g e sc o re a re:o u t二f o pen (o u t.d a t,w);f o r(i=0;i n;i+)pri n t f (z/%d /z,b el o w i );f pri n t f(o u t,%d n ,b el o w i );)f c l o se(o u t);编程题答案1 02 03 04 0 i n c l u d e#i n c l u d e#i n c l u d e i n t f u n(i n t sc o re ,i n t m,i n t b el o w口)(i n t i,k=0,a v er=0;f o r(i=0;i m;i+)a v er+=sc o re i ;a v er/=m;f o r(i=0;i m;i+)i f(sc o re i a v er)(b el o w k =sc o re i ;k+;)ret u rn k;)m a i n O(i n t i,n,b el o w 9 ;i n t sc o re 9 =1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0);F I L E *o u t;n=f u n (sc o re,9,b el o w);pri n t f C A n B el o w t h e a v era g e sc o re a re:);o u t=f o pen (o u t.d a t,w);f o r(i=0;i n;i+)(pri n t f (,z%d ”,b el o w i );f pri n t f (o u t,%d n”,b el o w i );)f c l o se(o u t);第2套填充题请在函数f u n 的横线上填写若干表达式,使从键盘上输入一个整数n,输出斐波纳契数列。斐波纳契数列是一种整数数列,其中每数等于前面两数之和,如:0 1 1 2 3 5 8 1 3 注意:部分源程序给出如下。请勿改动主函数m a i n 和其他函数中的任何内容,仅在f u n 函数的横线上填入所编写的若干表达式或语句。关键词:典型算法,递归 i n c l u d e i n t f u n (i n t n);m a i n ()(i n t i,n =0;sc a n f (z,%dz/,&n);f o r(i=0;i n;i+)pri n t f (,z%d ,f u n(i);i n t f u n (i n t n)(i f (1 )ret u rn 0;el se i f (2 )ret u rn 1;el seret u rn _ _3 _ _ _;填充题答案n=0 0=n !nn=l l-nf u n(n-l)+f u n(n-2)f u n (n-2)+f u n (n-1)填充题+答案#i n c l u d e i n t f u n (i n t n);m a i n O(i n t i,n =0;sc a n f (%d ,&n);f o r(i=0;i n;i+)pri n t f (,?%d ,f u n(i);i n t f u n(i n t n)(i f (n=0)ret u rn 0;el se i f (n=l)ret u rn 1;el seret u rn f u n(n-l)+f u n(n-2);j改错题下列给定程序中,函数fun的功能是:逐个比较a、b 两个字符串对应位置中的字符,把 ASCII值大或相等的字符依次存放到c 数组中,形成个新的字符串。例如,若 a 中的字符串为aBCDeFgH,b 中的字符串为:A B cd,则 c 中的字符串应为:aBcdeFgH。清改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。关键词:字符串#i n c l u d e#i n c l u d e v o i d f u n(c h a r*p,c h a r*q,c h a r*c)(/*f o u n d*/i n t k =1;/*f o u n d*/w h i l e(*p!=*q)(i f (*p *q)c k =*q;el sec k =*p;i f (*p)p+;i f (*q)q+;k+;m a i n ()(c h a r a 1 0 =,za B C D eF g Hz,,b 1 0 =A B c d ,c 8 0 =0 ;f u n (a,b,c);pri n t f(,zT h e st ri n g a:);pu t s(a);pri n t f(T h e st ri n g b:);pu t s(b);pri n t f(,zT h e resu l t:);pu t s(c);i.改错题答案l i n t k =0;l w h i l e(*p|*q)改错题+答案#i n c l u d e#i n c l u d e v o i d f u n(c h a r*p,c h a r*q,c h a r*c)(/*f o u n d*/i n t k =0;/*f o u n d*/w h i l e(*p*q)(i f (*p *q)c k =*q;el sec k =*p;i f (*P)p+;i f (*q)q+;k+;m a i n O(c h a r a 1 0 =a B C D eF g H”,b 1 0 =A B c d,c 8 0 =0 ;f u n (a,b,c);pri n t f(T h e st ri n g a:);pu t s(a);pri n t f C T h e st ri n g b:);pu t s(b);pri n t f (z,T h e resu l t:,z);pu t s(c);)编程题请编写函数f u n,它的功能是:求 出1到1 0 0 0之内能被7或1 1整除、但不能同时被7和1 1整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。请勿改动主函数main和其他函数中的任何内容,仅在函数f un的花括号中填入所编写的若干语句。关键词:数组,指针#include#include void f un(int *a,int *n)()mainO(int aa1 0 0 0,n,k;FILE*out;f un(aa,&n);out=f op en(z,out.dat ,w);f or(k=0;k n;k+)if(k+l)%1 0=0)(p r int f(5 dn,aak);f p r int f (out,%dn”,aak);els e(p r int f (舫d,,aak);f p r int f (out,%d,,aak);)f clos e(out);)编程题答案7,1 1,1 4,2 1,2 2,2 、8,33,35,42,4449,5 5,5 6,6 3,6 6,7 0,8 4,8 8,9 1,9 89 9,1 0 5,1 1 0,1 1 2,1 1 9,1 2 1,1 2 6,1 32,1 33,1 401 43,1 47,1 6 1,1 6 5,1 6 8,1 7 5,1 7 6,1 8 2,1 8 7,1 8 91 9 6,1 9 8,2 0 3,2 0 9,2 1 0,2 1 7,2 2 0,2 2 4,2 38,2 422 45,2 5 2,2 5 3,2 5 9,2 6 4,2 6 6,2 7 3,2 7 5,2 8 0,2 8 62 8 7,2 9 4,2 9 7,30 1,31 5,31 9,32 2,32 9,330,336341,343,35 0,35 2,35 7,36 3,36 4,37 1,37 4,37 839 2,39 6,39 9,40 6,40 7,41 3,41 8,42 0,42 7,42 9434,440,441,448,45 1,45 5,46 9,47 3,47 6,48 348 4,49 0,49 5,49 7,5 0 4,5 0 6,

有以下程序: int fun(int n) {if(n==1)return 1; else return(n+fun(n-1)); } main() {int x; scanf("%if",&x);x=fun(x);printf("%d\n",x); } 执行程序时,给变量X输入10,程序的输出结果是( )。

A.55

B.54

C.65

D.45


正确答案:A
解析:函数fun()通过递归调用实现的功能为n+(n-1)+…+1,故程序的输出结果为55。


下列给定程序中,函数fun()的功能是:找出一个大于给定整数m且紧随m的素数,并作为函数值返回。

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

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

试题程序:

include <conio.h>

include <stdio.h>

int fun( int m)

{ int i,k;

for (i=m+1; ;i++)

{ for (k=2;k<i;k++)

/*************found**************/

if (i%k!=0)

break;

/*************found**************/

if (k<i)

return(i);

}

}

main()

{ int n;

clrscr ();

printf("\nPlease enter n: ");

scanf ("%d", &n);

printf ("%d\n",fun(n));

}


正确答案:(1)错误: if(i%k!=0) 正确: if(i%k=0) (2)错误: if(ki) 正确: if(k>=i)
(1)错误: if(i%k!=0) 正确: if(i%k=0) (2)错误: if(ki) 正确: if(k>=i) 解析:也许刚接触C语言的学习者对素数的概念不清楚,在这里说明一下,素数就是质数,本题的任务是随便输入一个整数m,然后在m的后面寻找紧跟m的一个质数,作为函数值返回。
for (i=m+1; ;i++){
是从m后面的一位开始循环,将m后面一位的值赋予i。然后;我们依次判断m后面的一位是否为素数。
for (k=2;ki;k++)
if (i%k==0)
是一个简单的数学判断问题,判断i被赋予的值与k的余数是否为零。


下列程序的输出结果是______。

long fun5(int n)

( long s;

if((n==l)‖(n==2))

s=2;

else

s=n+fun5(n-1);

return(s);

}

main()

{ long x;

x=fun5(4);

printf(%1d\n",x);


正确答案:9
9 解析:考查if else语句,n==4不满足条件,所以fun5(4)=4+fun5(3),n==3也不满足条件,fun5(3)=3+fun5(2),n==2满足条件fun5(2)=2,故x=4+3+2=9。


请补充函数fun(),函数fun()的功能是求7的阶乘。

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

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

试题程序:

include<stdio.h>

long fun(int n)

{

if(【 】)

return(n*fun(【 】);

else if(【 】)

return 1;

}

main()

{

int k=7;

printf("%d!=%ld\n", k, fun(k));

}


正确答案:n>1 n-1 n==1
n>1 n-1 n==1 解析:第一空:求阶乘时采用递归的算法,n>1和n==1这两种情况的处理方法不同,需要分开考虑。第二空:阶乘的算法是,当n>1时,n!=n*(n-1)!,即fun(n)=n*fun(n-1)。第三空:n==1是递归的终止条件,因为1!=1,所以当n=1时,返回1。


以下C程序段的输出结果是(35)。 #include<stdio.h)long fun(int n){ long s; if(n==1 || n==2) s=2; else s=n+fun(n-1); return s; } void main(){ printf("\n%1d",fun(4)); )

A.5

B.7

C.9

D.11


正确答案:C
解析:本试题考查函数的递归调用。程序在n=1或n=2时是出口条件,不再递归,否则一直执行s=n+fun(n-1)的操作。展开此求和公式,有s=n+fun(3)=4+3+fun(2)=4+3+2=9。另外,如果调用函数fun的实参2,则出口条件“n==1”的判定就不需要了。

更多 “全国计算机等级考试二级C历届上机真题” 相关考题
考题 单选题有以下程序:#include int fun(int n){ if(n)return fun(n-1)+n; else return 0;}main(){ printf(%d,fun(3));}程序的运行结果是(  )。A 4B 5C 6D 7正确答案:C解析:fun函数是一个递归函数,调用f(3),参数n=3,返回f(3-1)+3 = f(2)+3 = f(1)+2+3 = f(0)+1+2+3 = 0+6 = 6。答案选择C选项。

考题 有以下程序:include int fun(int n){if(n == 1) return 1;else return( n + fun( n -有以下程序:#include <stdio.h>int fun(int n){ if(n == 1) return 1; else return( n + fun( n - 1 ) );}main( ){ int x; seanf("% d" ,&X) ;x = fun(x) ;pfinff( "% d \n" ,x);} 执行程序时,给变量x输入10,程序的输出结果是( )。A.55B.54C.65D.45正确答案:A解析:函数调用将实参x=10传给形参n,语句n=1不成立,执行else语句,递归调用fun函数。fun函数共被调用8次,即fun(9),fun(8),…,fun(2),由此可得n=10+9+…+1=55,所以x=55。

考题 以下程序的输出结果是______。 long fun(int n) { long s; if(n==1||n==2) s=2; else s=n-fun(n-1); return s;} main() { printf("%1d\n",fun(3)); }A.1B.2C.3D.4正确答案:A解析:本题两次执行fun函数,第一次执行得f(3)=s=n-f(n-1)=3-f(2):第二次执行得s=2,通过传递返回值f(2)=2,所以s=3-2=1,即f(3)=1。

考题 有以下程序: include int fun(int n) { if(n)return fun(n-1)+n; else return 0; } main( ) { printf("%d\n",fun(3));} 程序的运行结果是( )。A.4B.5C.6D.7答案:C解析:fun函数是一个递归函数,调用f(3),参数n=3,返回f(3-1)+3=f(2)+3=f(1)+2+3=f(0)+1+2+3=0+6=6。

考题 阅读下面程序,则执行后的结果为 #include"stdio.h" long fun(int n) { if(n>2) return(fun(n-1)+fun(n-2)); else return(2);} main() { printf("%ld\n",fun(5));}A.10B.15C.20D.以上3个答案都不正确正确答案:A解析:这是使用递归算法求著名的菲波拉奇数列,并要熟悉函数的递归方法的调用。

考题 下列给定程序中,函数fun()的功能是:判断一个整数m是否是素数,若是返回l,否则返回0。在main()函数中,若fun()返回1则输出YES,若fun()返回0则输出NO!请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:include <conio.h>include <stdio.h>int fun(int m){ int k=2;while (k<=m&&(m%k))/*************found*********************/k++/*************found*********************/if(m=k)return 1;else return O;}main ( ){ iht n;clrscr ();printf("\nPlease enter n: ");scanf ("%d", &n);if (fun (n)) printf ("YES\n");else printf ("NO! \n");}正确答案:(1)错误:k++ 正确:k++(2)错误:if(m=k) 正确:if(m==k)(1)错误:k++ 正确:k++(2)错误:if(m=k) 正确:if(m==k) 解析:函数fun()的功能是判断m是否为素数:m从2开始作为除数,并对m取余,若不存在一个数使得余数为0,则m为素数,程序的错误在于if(m=k)语句中的逻辑表达式写成了赋值表达式。

考题 阅读下面程序,则执行后的结果为#include "stdio.h"fun1(){ int k=20; return k; }fun2(){ int a=15; return a; }fun3(int a,int b){ int k; k=(a-b)*(a+b); printf("%d\n",k);}main(){ un3(fun1(),fun2());}A.0 B.184 C.175 D.编译不通过正确答案:C本题主要考查函数的嵌套调用。在本题中,程序首先定义了三个子程序即函数fun1、函数fun2和函数fun3。从程序中可以看出,函数fun1和函数fun2都很简单,分别定义一个整型变量,并赋初值,然后返回这个变量。在函数fun3中,函数带有两个形参,然后定义一个整型变量k来保存(a-b)*(a+b)运算的结果,最后输出k的值。在主函数中,直接调用函数fun3,调用该函数的同时调用函数fun1和fun2,用函数fun1和fun2的返回值作为函数fun3的形参,此时形参a和b的值分别是20和15。执行(a-b)*(a+b);语句结果为5*35=175,将该结构保存至变量k中,因此,本题程序的最终输出结果是175,正确答案选C。

考题 下列给定程序中,函数fun()的功能是::求k!(k<13),所有阶乘的值作为函数值返回。例如:若k=10,则应输出3628800。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:include <conio.h>include <stdio.h>long fun(int k){/*************found**************/if k>0return (k* fun (k-l));/*************found**************/else if (k=0)return 1;}main ( ){int k=10;clrscr ();print, ("%d!=%1d\n ", k, fun (k));}正确答案:(1)错误:if k>0 正确:if(k>0)(2)错误:else if(k=O) 正确:else if(k==O)(1)错误:if k>0 正确:if(k>0)(2)错误:else if(k=O) 正确:else if(k==O) 解析:由数学知识我们可以知道,0和1的阶乘都等于1,if k>O中是一个简单的语法错误,if后面没有“()”说明,在 else if(k=0)中,程序想说明的是“如果k值为0,则函数返回1”,转换成c语言语句就是“else if(k==0)return 1”。

考题 给出以下程序的执行结果【】。 include using namespace std; int n=1; void Fun(); int给出以下程序的执行结果【 】。include <iostream>using namespace std;int n=1;void Fun();int main (){n++;Fun ( );if (n>0){int n=5;cout<<"Block: n="<<n<< ", ";}cout<< "Main: n="<<end1;return 0;}void Fun ( ){int n=10;cout<<"Fun: n="<<n<<",";}正确答案:Fun:n=10Block:n=5Main:n=2Fun:n=10,Block:n=5,Main:n=2 解析:变量的作用域是程序中变量有效的区域,它是变量的一个重要特征。在题中,变量n有3种身份,其一是作为全局变量的n,其二是作为if语句块内局部变量的n,其三是函数内部局部变量的n。程序最后要求输出各个作用域内n的值。

考题 有以下程序int fun(int n) { if(n==1) return 1; else return(n+fun(n-1));}main(){ int x; scanf("%d",&x); x=fun(x); printf("%d\n",x);}执行程序时,给变量x输入10,程序的输出结果是A.55 B.54 C.65 D.45正确答案:A本题主要考查函数的递归调用。在做递归调用函数类型的题目时,我们首先要找到函数的出口和递归结束的条件。在本题中,程序首先定义了一个fun函数,函数的形参是一个整型变量n,从后面的程序可以看出,该函数是一个递归函数。在函数体中,首先执行条件判断语句,如果条件结果为真,说明变量n为1,此时返回1,这是递归函数的出口;否则返回函数的递归调用。在主函数中,定义一个变量x,并试图通过键盘输入的方式为变量x赋初值,然后调用fun函数,并用x作为其形参,用x保存最后的运行结果输出。变量x的初值为10,从上面的分析我们知道,递归调用的出口是n=1,而每递归一次n的值减1,因此,函数fun递归调用了9次,其运算相当于10+9+8+7+6+5+4+3+2+1=55。因此,程序最终的输出结果是55。