好文档 - 专业文书写作范文服务资料分享网站

2014年三月全国计算机二级C语言上机考试题库

天下 分享 时间: 加入收藏 我要投稿 点赞

输出正确的结果。

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

给定源程序: #include int fun( int k )

{ int m=0, mc=0, j ;

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

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

return m; ____ main ( ) {

printf(\ }

解题思路:

第一处:判断相等的条件是==,而不是=,所以只能在比较处再添加一个=。

第二处:经过编译可知,\和\没有配对,所以在横线处加上\。 ***************************************************

编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。

例如若n为1000时,程序输出应为:s = 153.909064。

注意: 部分源程序在文件PROG1.C文件中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: #include #include double fun( int n) { }

main() /* 主函数 */ {

printf(\ NONO(); }

解题思路:

本题是求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。 参考答案:

double fun( int n) {

double sum=0.0;

int i;

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

if((i % 3==0) && (i % 7==0)) sum+=i;

return sqrt(sum) ; }

※※※※※※※※※※※※※※※※※※※※※※※※※ 第49套:

给定程序中,函数fun的功能是:将形参s所指字符串中所有ASCII码值小于97 的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数 作为函数值返回。

例如,形参s所指的字符串为:Abc@1x56*,程序执行后t所指字符数组中的字符串应为:A@156*。

请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构! 给定源程序: #include int fun(char *s, char *t) { int n=0; while(*s) { if(*s < 97) {

*(t+n)= __1__ ; n++; } __2__ ; }

*(t+n)=0; return __3__ ; }

main()

{ char s[81],t[81]; int n;

printf(\n=fun(s,t);

printf(\ASCII code is less than 97: %s\\n\ }

解题思路:

本题是根据条件组成新的字符串并统计出符合条件的个数n。 第一处:把符合条件的当前字符存放到t字符串中,所以应填:*s。 第二处:到字符串下一个位置,所以应填:s++。

第三处:返回符合条件的字符个数n,所以应填:n。

***************************************************

给定程序MODI1.C中函数 fun 的

功能是:由形参给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数个数。

例如,n=8时,输入:193.199,195.673,195.757,196.051,196.092,196.596,

196.579,196.763 所得平均值为:195.838745,在平均值以上的实数个数应为:5

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

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

给定源程序: #include int fun(float x[], int n) {

int j, c=0, float xa=0.0; for (j=0; j

printf(\ for (j=0; j

if (x[j] => xa) c++; return c; }

main ( )

{ float x[100] = {193.199, 195.673, 195.757, 196.051, 196.092, 196.596, 196.579, 196.763};

printf(\ }

解题思路:

第一处:两种类型变量定义之间应该用分号,所以应改为:int j, c=0; float xa=0.;。

第二处:在C语言中,大于等于应表达为>=。

***************************************************

编写函数fun,其功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m > n。 m!

P = ─── n!(m-n)!

例如:m=12,n=8时,运行结果为495.000000。

注意: 部分源程序在文件PROG1.C文件中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 给定源程序:

#include float fun(int m, int n) { }

main() /* 主函数 */ {

printf(\ NONO(); }

解题思路:

本题是计算阶乘。 参考答案:

#include long jc(int m) {

long s=1; int i ;

for(i=1;i<=m;i++) s=s*i ; return s; }

float fun(int m, int n) {

float p;

p=1.0*jc(m)/jc(n)/jc(m-n) ; return p; }

※※※※※※※※※※※※※※※※※※※※※※※※※ 第50套:

给定程序中,函数fun的功能是:有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。例如,若N=3,有下列矩阵: 1 2 3 4 5 6 7 8 9

计算结果为 1 0 0 6 5 0 10 14 9

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 4

void fun(int (*t)___1___ ) { int i, j;

for(i=1; i

___2___ =t[i][j]+t[j][i]; ___3___ =0;

} } }

main() { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j; printf(\ for(i=0; i

{ for(j=0; j

fun(t);

printf(\ for(i=0; i

{ for(j=0; j

解题思路:

第一处:形参t的定义,整数数组其宽度为N,所以应填:[N]。 第二处:对称元素相加,其结果仍存放在左下三角元素中,所以应填:t[i][j]。

第三处:右上三角元素置为0,所以应填:t[j][i]。

***************************************************

给定程序MODI1.C中函数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 #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); Return(Value); }

main()

{ float x,y,z,sum; printf(\

scanf(\

printf(\ if (x==y||y==z){printf(\error!\\n\

sum=fun(x,y,z); printf(\result is : %5.2f\\n\ }

解题思路:

第一处:define定义错误,所以应改为:#define FU(m,n) ((m)/(n))。 第二处:return错写成Return,变量value错写成Value。

***************************************************

规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。 例如,字符串中的内容为:*******A*BC*DEF*G****,删除后,字符串中的内容应当是:A*BC*DEF*G****。在编写函数时,不得使用C语言提供的字符串函数。

注意: 部分源程序在文件PROG1.C中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: #include void fun( char *a ) { }

main()

{ char s[81];

printf(\ fun( s ); printf(\string after deleted:\\n\ NONO(); }

解题思路:

本题是考察字符串的操作。 1. 利用循环扫描出字符串左边第1个字符不是'*'的字符。

2. 再利用循环把以后的字符依次移动原字符串首地址开始存放。 3. 最后给字符串a加上结束符。 参考答案:

void fun( char *a ) { int j=0;

char *p = a ;

while(*p == '*') p++ ; while(*p) { a[j++] = *p ; p++; }

a[j]=0 ;

}

※※※※※※※※※※※※※※※※※※※※※※※※※ 第51套:

给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数, 作为函数值返回。为便于统计,规定各单词之间用空格隔开。 例如,形参s所指的字符串为:This is a C language program.,函数 的返回值为6。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构! 给定源程序: #include int fun(char *s) { int n=0, flag=0; while(*s!='\\0')

{ if(*s!=' ' && flag==0) { __1__ ; flag=1;}

if (*s==' ') flag= __2__ ; __3__ ; }

return n; }

main()

{ char str[81]; int n;

printf(\a line text:\\n\gets(str); n=fun(str);

printf(\are %d words in this text.\\n\\n\ }

解题思路:

本题是统计字符串中包含的单词个数。

第一处:单词个数用变量n来统计,当当前字母不是空格且flag状态标志为0时,则单词数就加1,将状态标志flag置为1,所以应填:n++。

第二处:当当前字符是空格时,flag状态标志置0,所以应填:0。 第三处:到字符串下一个位置,所以应填:s++。

***************************************************

给定程序MODI1.C中函数 fun 的功能是:从n(形参)个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元

中。

例如,若输入 8 名学生的成绩:80.5 60 72 90.5 98 51.5 88 64 则低于平均分的学生人数为: 4 (平均分为:75.5625 )。

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

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

给定源程序: #include #define N 20

int fun ( float *s, int n, float *aver ) { float ave, t = 0.0 ; int count = 0, k, i ;

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

t = s[k] ; ave = t / n ;

for ( i = 0 ; i < n ; i++ ) if ( s[ i ] < ave ) count++ ; *aver = Ave ; return count ; }

main()

{ float s[30], aver ; int m, i ;

printf ( \enter m: \) ; scanf (\

printf ( \\

for( i = 0 ; i < m ; i++ ) scanf ( \

printf( \number of students : %d \\n\, fun ( s, m, &aver ) );

printf( \ }

解题思路:

第一处:应求累加和,而不赋值,所以应改为t+=s[k];。

第二处:ave不需要取地址,直接赋给*aver就可以了。

***************************************************

请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。 例如, 输入如下整数: 876 675 896 101 301 401 980 431 451 777 则输出结果为: 6, 980

注意: 部分源程序在文件PROG1.C文件中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: #include

int fun(int *s, int t, int *k) { }

main( ) { int

a[10]={876,675,896,101,301,401,980,431,451,777}, k ; fun(a, 10, &k) ;

printf(\ NONO( ) ; }

解题思路:

本题是考察考生如何在指定的数组找出最大元素值的下标,通过形参*k返回到主程序中。给出的程序是使用for循环语句进行处理的,在循环之前,首先把数组的第一个元素值赋给最大值变量max,位置pos为0,然后通过循环依次判断下一元素值是否大于最大值max,如果大于,那么把这个数重新赋给max,位置i赋给pos,循环结果,即可得到最大值的位置pos,最后执行语句*k=pos就可以实现返回了。 参考答案:

int fun(int *s, int t, int *k) {

int i, pos = 0, max = *s ; for(i = 1 ; i < t ; i++) { if(max < *(s + i)) { max = *(s + i) ; pos = i ; } }

*k = pos ; }

※※※※※※※※※※※※※※※※※※※※※※※※※ 第52套:

给定程序中,函数fun的功能是:将N×N矩阵中元素的值按列右移1个位置, 右边被移出矩阵的元素绕回左边。例如,N=3,有下列矩阵 1 2 3 4 5 6 7 8 9

计算结果为 3 1 2 6 4 5 9 7 8

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 4

void fun(int (*t)[N]) { int i, j, x;

for(i=0; i<___1___; i++) {

x=t[i][___2___] ; for(j=N-1; j>=1; j--) t[i][j]=t[i][j-1]; t[i][___3___]=x; } }

main() { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j; printf(\ for(i=0; i

{ for(j=0; j

fun(t);

printf(\ for(i=0; i

{ for(j=0; j

解题思路: 第一处:函数fun是对N×N矩阵进行操作,for循环的终止值为N。 第二处:把最后一列的元素值赋值给临时变量x保存用来交换,所以应填:N-1。

第三处:第1列元素值使用x替换,由于C语言的下标是从0开始的,所以应填:0。

***************************************************

例如,若q的值为: 50.0,则函数值为: 49.394948。

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

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

给定源程序: #include double fun( double q ) { int n; double s,t; n = 2; s = 2.0;

while (s<=q) { t=s;

s=s+(n+1)/n; n++; }

printf(\ return s; }

main ( ) {

printf(\ }

解题思路:

第一处:如果两个整数类型相除,结果仍为整数,所以必须转换其中一个数的类型,所以应改为:s+=(float)(n+1)/n;。

第二处:返回结果错误,应改为:return t;。

***************************************************

编写函数fun,它的功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为: F(0)=0,F(1)=1

F(n)=F(n-1)+F(n-2)

例如:当t = 1000时,函数值为:1597。

注意: 部分源程序在文件PROG1.C中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: #include #include int fun( int t) { }

main() /* 主函数 */ { int n; n=1000;

printf(\= %d, f = %d\\n\fun(n)); NONO(); }

解题思路:

本题是考察考生用递推算法来求出斐波那契数列中每项的值。给出的程序就是用变量f、f0 和f1来表示递推的过程,给变量f0和f1最初分别置数列中第1项和第2项的值0和1,然后进入循环,执行语句f=f0+f1;将所得和值存入f中,这就是数列的第3项,把f1的值移入f0中,将f的值移入f1中,为求数列的下一列作好准备;接着进入下一次循环,通过语句f=f0+f1求得数列的第4项,不断重复以上

步骤,每重复一次就依次求得数列的下一项,直至某项满足要为止。

参考答案: int fun( int t) {

int f0 = 0, f1 = 1, f ; do {

f = f0 + f1 ; f0 = f1 ; f1 = f ;

} while(f < t) ; return f ; }

※※※※※※※※※※※※※※※※※※※※※※※※※ 第53套:

函数fun的功能是:计算请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include double fun(double x) { double f, t; int n; f = 1.0 + x; t = ___1___; n = 1; do { n++;

t *= (-1.0)*x/___2___; f += t; }

while (___3___ >= 1e-6); return f; }

main()

{ double x, y; x=2.5; y = fun(x);

printf(\

printf(\y); }

解题思路:

第一处:根据公式可知,变量t的值为x。

第二处:根据公式可知,此处应该除以n,所以应填:n。

第三处:根据试题中条件的要求,所以应填:fabs(t)。

***************************************************

给定程序MODI1.C中函数fun的功

能是: 求整数x的y次方的低3位值。例如,整数5的6次方为15625, 此值的低3位值为625。

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

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

给定源程序: #include

long fun(int x,int y,long *p ) { int i; long t=1;

for(i=1; i

main()

{ long t,r; int x,y;

printf(\x and y: \scanf(\ t=fun(x,y,&r);

printf(\y=%d, r=%ld, last=%ld\\n\\n\ }

解题思路:

第一处:错误在for循环语句上,根据试题要求,终止条件应该是i<=y。

第二处:要取低3位的值时,应模1000取余数,而不是整除1000取商。

***************************************************

例如, 在主函数中从键盘给x输入0.21后,输出为:s=1.100000。 注意: 部分源程序在文件PROG1.C中。

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

给定源程序: #include #include double fun(double x) { }

main()

{ double x,s; printf(\x: \scanf(\ s=fun(x);

printf(\ NONO(); }

解题思路:

本题是根据给定的公式进行计算。具体操作请看答案程序中的说明。 参考答案:

double fun(double x) {

int n=1; /* 循环计数*/ double sn=1; /* 累计数*/

double xn=1,xn1=0; /*x的n值,以及x的n-1值;*/

while(fabs(xn-xn1)>=0.000001)/*绝对值是否满足条件*/ {

xn=xn*x*(0.5-n+1)/n; /*表达式分解以后xn=(xn-1)*x*(0.5-n+1)/n*/ n+=1;

sn+=xn; /*sn累加上xn*/ }

return(sn); }

※※※※※※※※※※※※※※※※※※※※※※※※※ 第54套:

给定程序中,函数fun的功能是:计算出带有头结点的单向链表中各结点数据域中值之和作为函数值返回。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 8

typedef struct list { int data;

struct list *next; } SLIST;

SLIST *creatlist(int *); void outlist(SLIST *); int fun( SLIST *h) { SLIST *p; int s=0; p=h->next; while(p) {

s+= p->___1___; p=p->___2___; }

return s; }

main()

{ SLIST *head; int

a[N]={12,87,45,32,91,16,20,48}; head=creatlist(a); outlist(head);

/

printf(\fun(___3___)); }

SLIST *creatlist(int a[]) { SLIST *h,*p,*q; int i; h=p=(SLIST

*)malloc(sizeof(SLIST)); for(i=0; idata=a[i]; p->next=q; p=q; }

p->next=0; return h; }

void outlist(SLIST *h) { SLIST *p; p=h->next;

if (p==NULL) printf(\list is NULL!\\n\ else

{ printf(\ do { printf(\p->data); p=p->next; }

while(p!=NULL); printf(\ } }

解题思路:

本题是计算出带有头结点的单向链表中各结点数据域中值之和。 第一处:累加数据域中的值,所以应填:data。

第二处:指定p的下一个指针,所以应填:next。

第三处:函数调用,在主函数中已经给出了head,所以应填:head。 ***************************************************

给定程序MODI1.C中函数fun的功能是:将s所指字符串中出现的与t1所指字符串相同的子串全部替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如,当s所指字符串中的内容为:\,t1所指子串中的内容为:\,t2所指子串中的内容为:\时, 结果在w所指的数组中的内容应为: \。 请改正程序中的错误,使它能得出正确的结果。

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

给定源程序: #include

2014年三月全国计算机二级C语言上机考试题库

输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(intk){intm=0,mc=0,j;while((k>=2)&&(mc<10)){if((k=0)||
推荐度:
点击下载文档文档为doc格式
48d6g8mkin1x2cx44eay
领取福利

微信扫码领取福利

微信扫码分享