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

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

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

加字符串结束符,所以应填:'\\0'。 ***************************************************

给定程序MODI1.C中函数 fun 的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num )为止: π 1 1 1

┄┄≈1 - ┄┄ + ┄┄ - ┄┄ + ... 4 3 5 7

例如, 程序运行后, 输入0.0001, 则程序输出3.1414。

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

注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include float fun ( float num ) { int s ;

float n, t, pi ;

t = 1 ; pi = 0 ; n = 1 ; s = 1 ; while(t >= num) {

pi = pi + t ; n = n + 2 ; s = -s ; t = s % n ; }

pi = pi * 4 ; return pi ; }

main( )

{ float n1, n2 ;

printf(\ scanf(\ n2 = fun(n1) ;

printf(\ }

解题思路:

第一处:要判断t的最后一项绝对小于指定的数,由于t是实数,那么应改为while(fabs(t)>=num)。 第二处:t是s除以n的值,而不是取余数,所以应改t=s/n;。 ***************************************************

请编写一个函数void fun (char a[],char b[],int n),其功能是:删除一个字符串中指定下标的字符。其中, a指向原字符串, 删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。 例如,输入一个字符串: World,然后输入3,则调用该函数后的结果

为: Word。

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

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

void fun (char a[], char b[], int n) { }

main( )

{ char str1[LEN], str2[LEN] ; int n ;

printf(\ gets(str1) ;

printf(\the position of the string deleted:\ scanf(\ fun(str1, str2, n) ;

printf(\new string is: %s\\n\str2) ; NONO() ; }

解题思路:

本题是利用字符串拷贝和字符串连接来生成新的字符串。 参考答案:

void fun (char a[], char b[], int n) {

strncpy(b, a, n) ; b[n] = 0 ;

strcat(b, a + n + 1) ; }

※※※※※※※※※※※※※※※※※※※※※※※※※

第32套: 给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的字符串中右边的字符删除,只保留左边的k个字符。ss所指字符串数组中共有N个字符串,且串长小于M。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。

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

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

void fun(char (*ss) __1__, int k) { int i=0 ;

while(i< __2__) {

ss[i][k]=__3__; i++; } }

main() { char x[N][M]={\\ int i;

printf(\ for(i=0;i

for(i=0; i

解题思路:

本题是根据给定的字符串数组中删除串长大于某个值的右边字符串。

第一处:函数的定义,试题中已用M作为字符串的长度,所以应填:M。

第二处:利用while循环,分别对字符串数组中的每个字符串置字符串结束符,程序中已经给定了N个字符串,所以应填:N。 第三处:置字符串结束符,所以应填:0(或'\\0')。

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

给定程序MODI1.C中函数fun的功能是:根据以下公式求π值,并作为函数值返回。

例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.140578。 π 1 1 2 1 2 3 1 2 3 4

─=1+ ─ + ─×─ + ─×─×─ + ─×─×─×─+?? 2 3 3 5 3 5 7 3 5 7 9

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

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

给定源程序: #include #include double fun(double eps) { double s,t; int n=1; s=0.0; t=0;

while( t>eps) { s+=t;

t=t * n/(2*n+1); n++; }

return(s); }

main() { double x;

printf(\enter a precision: \ printf(\

Pi=%lf\\n\\n\ }

解题思路:

第一处: 初始化t的值,根据程序中的计算程序和试题的要求得出,t应为1。

第二处: 根据公式π/2得出,所以返回时应原有s的基础上乘以2作为返回值。

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

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串的前导*号不得多于n个;若多于n个,则删除多余的*号; 若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。函数fun中给出的语句仅供参考。例如,字符串中的内容为:*******A*BC*DEF*G****,若n的值为4,删除后,

字符串中的内容应当是:****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍

为:*******A*BC*DEF*G****。n的值在主函数中输入。 在编写函数时,不得使用C语言提供的字符串函数。

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

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。 给定源程序: #include

void fun( char *a, int n ) {

int i=0,j,k=0;

while(a[k]=='*') k++; /* k为统计*字符个数 */ if(k>n) {

i=n;j=k;

/* 以下完成将下标为k至串尾的字符前移k-n个位置 */ } }

main()

{ char s[81]; int n;

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

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

解题思路:

本题是考察字符串的操作。 利用for循环来判断a[j]的字符是否是字符串结束符,如果不是字符串结束符,则把a[j]

的字符依次存放到a[i]。其中,变量i是n的初始值,变量j是字符串前导的*号数。 参考答案:

void fun( char *a, int n ) {

int i=0,j,k=0;

while(a[k]=='*') k++; /* k为统计*字符个数 */ if(k>n) {

i=n;j=k;

/* 以下完成将下标为k至串尾的字符前移k-n个位置 */ for(; a[j] !=0 ; j++) a[i++]=a[j]; a[i] = 0; } }

※※※※※※※※※※※※※※※※※※※※※※※※※ 第33套:

给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放 在变量tfname中。

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

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

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

int fun(char *source, char *target) { FILE *fs,*ft; char ch; if((fs=fopen(source, ___1___))==NULL) return 0;

if((ft=fopen(target, \ return 0;

printf(\ ch=fgetc(fs);

while(!feof(___2___)) { putchar( ch ); fputc(ch,___3___); ch=fgetc(fs); }

fclose(fs); fclose(ft); printf(\ return 1; }

main() { char sfname[20] =\ FILE *myf; int i; char c; myf=fopen(sfname,\

printf(\ for(i=1; i<30; i++){ c='A'+rand()%;fprintf(myf,\ fclose(myf);printf(\ if (fun(sfname, tfname)) printf(\ else printf(\ }

解题思路:

本题要求是把一个文件中的内容复制到另一个文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。

第一处:要求打开一个读方式的源文件,因此可以填上\或\。打开读文件操作的流是fs。 第二处:用while循环来判断源文件是否已读到文件结束符,int feof(FILE *stream),因 此,此处只能填写fs。

第三处:把已经读取的字符写入目标文件中,打开写文件操作的流是ft,因此,此处只能填写ft。 ***************************************************

给定程序MODI1.C中函数fun的功能是:将长整型数中每一位上为偶数的数依 次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。 例如,当s中的数为:87653142时,t中的数为:8642。 请改正程序中的错误,使它能得出正确的结果。

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

给定源程序: #include

void fun (long s, long *t) { int d; long sl=1; *t = 0;

while ( s > 0) { d = s;

if (d%2=0) { *t=d* sl+ *t; sl *= 10; }

s \\= 10; } }

main() { long s, t; printf(\enter s:\scanf(\ fun(s, &t);

printf(\ }

解题思路:

第一处:判断相等的条件是==。 第二处:整除的符号是/。 ***************************************************

函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上, b数的十位和个位数依次放在c数的百位和个位上。 例如,当a=45,b=12时,调用该函数后,c=5142。

注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。

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

void fun(int a, int b, long *c) { }

main()

{ int a,b; long c; printf(\

scanf(\ fun(a, b, &c);

printf(\ NONO(); }

解题思路:

本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。

取a十位数字的方法:a/10 取a个位数字的方法:a 参考答案:

void fun(int a, int b, long *c) {

*c=(a)*1000+(b/10)*100+(a/10)*10+(b); }

※※※※※※※※※※※※※※

※※※※※※※※※※※ 第34套:

用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数

表中找下一个非0数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于n为止。这样会得到一个序列:

2,3,5,7,11,13,17,19,23,?? 函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。

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

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

不得增行或删行,也不得更改程序的结构! 给定源程序: #include int fun(int n)

{ int a[10000], i,j, count=0; for (i=2; i<=n; i++) a[i] = i; i = 2;

while (i

for (j=a[i]*2; j<=n; j+=___1___) a[j] = 0; i++;

while (___2___==0) i++; }

printf(\prime number between 2 to %d\\n\ for (i=2; i<=n; i++) if (a[i]!=___3___) { count++; printf( count?\[i]); }

return count; }

main()

{ int n=20, r; r = fun(n);

printf(\number of prime is : %d\\n\ }

解题思路:

第一处:所有2的倍数的数从数表中删去,所以应填:a[i]。

第二处:找出下一个不是的a[i],所以应填:a[i]。

第三处:输出素数,只要判断a[i]不是0就是素数,所以应填:0。 ****************************

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

给定程序MODI1.C中函数fun的功能是: 为一个偶数寻找两个素数, 这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。

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

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

给定源程序: #include #include

void fun(int a,int *b,int *c) { int i,j,d,y;

for(i=3;i<=a/2;i=i+2) { Y=1;

for(j=2;j<=sqrt((double)i);j++) if(i%j==0) y=0; if(y==1) { d==a-i;

for(j=2;j<=sqrt((double)d);j++) if(d%j==0) y=0; if(y==1)

{ *b=i; *c=d; } } } }

main() { int a,b,c; do { printf(\a: \scanf(\ while(a%2); fun(a,&b,&c); printf(\= %d + %d\\n\ }

解题思路:

第一处:变量y错写成Y。

第二处:给变量d进行赋值,所以应改为:d=a-i;。

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

请编写函数fun, 它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。 例如,在主函数中从键盘给n输入20后, 输出为: s=0.583333。 注意: 要求n的值不大于100。 部分源程序在文件PROG1.C中。 请勿改动主函数main和其他函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: #include double fun(int n) {

}

main()

{ int n; double s; printf(\n: \scanf(\ s=fun(n);

printf(\ NONO(); }

解题思路:

本题是计算n(包括n)以内能被5或9整除的所有自然数的倒数之和。 参考答案: double fun(int n) { int i;

double sum=0.0; for(i=1; i<=n; i++)

if(i%5 == 0 || i%9 == 0) /* 被5或9整除 */ sum+=1.0/i; return sum; }

※※※※※※※※※※※※※※※※※※※※※※※※※ 第35套:

给定程序中,函数fun的功能是建立一个N×N的矩阵。 矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值 全部为3,?依次类推。例如,若N=5,生成的矩阵为: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1

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

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

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

void fun(int (*a) __1__) { int i,j,k,m;

if(N%2==0) m=N/2 ; else m=N/2+1; for(i=0; i

for(j= __2__ ; j

main()

{ int x[N][N]={0},i,j; fun(x);

printf(\ for(i=0; i

解题思路:

第一处:建立一个N×N的矩阵,所以应填:[N]。

第二处:j的起始变量值应i。 第三处:也应该填写i+1。 ***************************************************

给定程序MODI1.C中函数 fun 的功能是: 将十进制正整数m转换成k(2≤k≤9) 进制数, 并按高位到低位顺序输出。

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

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

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

给定源程序: #include #include void fun( int m, int k ) {

int aa[20], i;

for( i = 0; m; i++ ) {

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

for( ; i; i-- )

printf( \ }

main() {

int b, n;

printf( \enter a number and a base:\\n\

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

解题思路:

第一处:应该取模而不是整除,所以应为:aa[i]=m%k;。 第二处:输出aa的位置不正确,所以应为:printf(\。 ***************************************************

编写一个函数,从num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址。(注意: 主函数中用****作为结束输入的标志,函数fun中给出的语句仅供参考。)

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

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

int i,k=0,len, maxlen; /* k为a数组中最长串所在元素的下标,初始为0,maxlen为其串 长 */

maxlen=strlen(a[k]); for(i=1;i

/* 以下完成查找最长串 */ }

*max=a[k]; }

main() {

char ss[10][81],*ps; int n,i=0;

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

while(!strcmp(ss[i],\ { i++;

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

fun(ss,n,&ps);

printf(\ NONO(); }

解题思路:

本题是考察考生怎样从已输入的字符串中找出长度最大的字符串。求字符串的长度可以使用strlen函数。 参考答案:

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

int i,k=0,maxlen; /* k为a数组中最长串所在元素的下标,初始为0,maxlen为其串长 */

maxlen=strlen(a[k]); for(i=1;i

/* 以下完成查找最长串 */ if(strlen(a[i]) > maxlen) { maxlen = strlen(a[i]) ; k = i ; } }

*max=a[k]; }

※※※※※※※※※※※※※※※※※※※※※※※※※ 第36套:

给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数, 存放在形参n所指的存储单元中。

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

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

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

typedef struct list { int data;

struct list *next; } SLIST;

SLIST *creatlist(int *a); void outlist(SLIST *);

void fun( SLIST *h, int *n) { SLIST *p; ___1___=0; p=h->next; while(p) { (*n)++;

p=p->___2___; } }

main()

{ SLIST *head;

int a[N]={12,87,45,32,91,16,20,48}, num;

head=creatlist(a); outlist(head); fun(___3___, &num);

printf(\ }

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=p->next; }

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

解题思路:

本题是要求统计出带有头结点的单向链表中结点的个数。

第一处:对n所指的存储单元进行初始化,所以应填:*n。

第二处:指向p的下一个结点,所以应填:next。

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

给定程序MODI1.C中函数fun的功能是:求出s所指字符串中最后一次出现的t 所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串; 若未找到,则函数值为NULL。

例如,当字符串中的内容为:\,t中的内容为:\时,

输出结果应是:abcdx。 当字符串中的内容为:\,t中的内容为:\时, 则程序输出未找到信息:not be found!。 请改正程序中的错误,使它能得出正确的结果。

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

给定源程序: #include #include

char * fun (char *s, char *t ) {

char *p , *r, *a; a = Null; while ( *s ) { p = s; r = t; while ( *r ) if ( r == p ) { r++; p++; } else break;

if ( *r == '\\0' ) a = s; s++; }

return a ; }

main() {

char s[100], t[100], *p;

printf(\enter string S :\scanf(\

printf(\scanf(\ p = fun( s, t );

if ( p ) printf(\result is : %s\\n\

else printf(\ }

解题思路:

第一处:指向空指针错误,Null应NULL。

第二处:比较指针位置的值是否相等,所以应改为:if(*r==*p)。 ***************************************************

函数fun的功能是: 将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。 例如,若s所指字符串中的内容为:\,其中字符A的ASCII码

值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为

奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其它依此类推。最后t所指的数组中的内容应是:\。 注意: 部分源程序存在文件PROG1.C中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。 给定源程序: #include #include

void fun(char *s, char t[]) { }

main() {

char s[100], t[100];

printf(\enter string S:\scanf(\ fun(s, t);

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

加字符串结束符,所以应填:'\\0'。***************************************************给定程序MODI1.C中函数fun的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:π111┄┄≈1-┄┄+┄┄-┄┄+...4357
推荐度:
点击下载文档文档为doc格式
48d6g8mkin1x2cx44eay
领取福利

微信扫码领取福利

微信扫码分享