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

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

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

} } }

main( ) { int i ;

char *pstr[6], str[6][MAXLINE] ; for(i = 0; i < 6 ; i++) pstr[i] = str[i] ;

printf( \6 string(1 string at each line): \\n\

for(i = 0 ; i < 6 ; i++) scanf(\pstr[i]) ; fun(pstr) ; printf(\strings after sorting:\\n\

for(i = 0 ; i < 6 ; i++) printf(\pstr[i]) ; }

解题思路: 第一处:for循环语句中缺少分号。 第二处:应该把pstr+j位置上的值赋值给*(pstr+i)上,所以应改为: *(pstr+i)=*(pstr+j);。

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

请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。

例如,若输入字符串: 123412132,输入字符为: 1,则输出:3。

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

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

int fun(char *ss, char c) { }

main()

{ char a[M], ch;

printf(\enter a string:\gets(a);

printf(\enter a char:\ch = getchar();

printf(\number of the char is: %d\\n\ NONO ( ); }

解题思路:

本题是考察考生怎样从字符串中找出指定字符的个数。使用while循环语句来字符串是否结束,如果没有结束,则判断当前字符是否是指定的字符,如果是指定的字符,则个数cnt加1,直至字符串

结束为止,最后由函数返回。 参考答案:

int fun(char *ss, char c) {

int cnt = 0 ; char *p = ss ; while(*p) {

if(*p == c) cnt++ ; p++ ; }

return cnt ; }

※※※※※※※※※※※※※※※※※※※※※※※※※ 第43套:

给定程序中,函数fun的功能是:在形参ss所指字符串数组中查找与形参t所指字符串相同的串,找到后返回该串在字符串数组中的位置(下标值),未找到则返回-1。ss所指字符串数组中共有N个内容不同的字符串,且串长小于M。请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。

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

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

int fun(char (*ss)[M],char *t) { int i;

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

if(strcmp(ss[i],t)==0 ) return __2__ ; return -1; }

main() { char ch[N][M]={\nt\ int n,i;

printf(\ for(i=0;i

printf(\a string for search: \ n=fun(ch,t);

if(n== __3__) printf(\found!\\n\ else printf(\position is %d .\\n\ }

解题思路:

本题是考察在字符串查找指定的

子串。

第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:N。 第二处:在字符串已经找到,则返回字符串数组中的位置(下标值),所以应填:i。

第三处:如果没有发现,则显示没有找到信息,所以应填:-1。 ***************************************************

给定程序MODI1.C中函数fun的功能是:从整数1到55之间,选出能被3整除、且有一位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为函数值返回。规定,函数中a1放个位数,a2放十位数。

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

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

给定源程序: #include fun( int *b ) { int k,a1,a2,i=0;

for(k=10; k<=55; k++) { a2=k/1O; a1=k-a2*10;

if((k%3==0 && a2==5)||(k%3==0 && a1==5)) { b[i]=k; i++; } }

return k; }

main( )

{ int a[100],k,m; m=fun( a );

printf(\ for(k=0; k

解题思路:

第一处: 取当前变量k的十位数字上的数,所以应改为:a2=k/10;。 第二处: 要求统计个数并存入变量i中,最后返回i,所以应改为:return i;。

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

假定输入的字符串中只包含字母和*号。请编写函数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. 使用while循环语句和字符串指针p扫描出尾部的*号。

2. 定义两个字符串中间变量s和t,其中s是存放*号后面的字符串,t是存放*号字符串。

3. 最后利用字符串拷贝和连接,重新组成字符串a。 参考答案:

void fun( char *a ) {

char *p = a ;

while(*p) p++ ; p-- ; while(*p == '*') p-- ; p++ ; *p = 0 ; }

※※※※※※※※※※※※※※※※※※※※※※※※※ 第44套:

函数fun的功能是进行数字字符转换。若形参ch中是数字字符'0'~'9', 则

'0'转换成'9','1'转换成'8','2'转换成'7',??,'9'转换成'0';若是其它字符则保持不变;并将转换后的结果作为函数值返回。

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

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

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

#include ___1___ fun(char ch) {

if (ch>='0' && ___2___) return '9'- (ch-___3___); return ch ; }

main()

{ char c1, c2;

printf(\ c1='2'; c2 = fun(c1);

printf(\ c1='8'; c2 = fun(c1);

printf(\ c1='a'; c2 = fun(c1);

printf(\ }

解题思路:

第一处:要求返回处理好的字符,所以应填:char。

第二处:判断该字符是否是数字,所以应填:ch<='9'。

第三处:只要减去'0'的ASCII值,即可得到要求的结果,所以应填:'0'。

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

给定程序MODI1.C中函数fun的功能是:将p所指字符串中的所有字符复制到b 中,要求每复制三个字符之后插入一个空格。 例如,在调用fun函数之前给a输入字符串:ABCDEFGHIJK, 调用函数之后,字符数组b中的内容则为:ABC DEF GHI JK。

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

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

给定源程序: #include

void fun(char *p, char *b) { int i, k=0; while(*p) { i=1;

while( i<=3 && *p ) { b[k]=p;

k++; p++; i++; } if(*p) {

b[k++]=\ } }

b[k]='\\0'; }

main()

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

printf(\ printf(\original string: \puts(a); fun(a,b);

printf(\string after insert space: \ }

解题思路:

第一处:把指针p所指的值赋值给b[k]中。 第二处:把空格字符赋值给b[k++]中,而不是一个空格的字符串。 ***************************************************

N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头 节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。 例如,若学生的成绩是:85,76,69,85,91,72,64,87, 则平均分应当 是:78.625。

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

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

struct slist *next; };

typedef struct slist STREC; double fun( STREC *h ) { }

STREC * creat( double *s) { STREC *h,*p,*q; int i=0;

h=p=(STREC*)malloc(sizeof(STREC));p->s=0; while(i

{ q=(STREC*)malloc(sizeof(STREC));

q->s=s[i]; i++; p->next=q; p=q; }

p->next=0; return h; }

outlist( STREC *h) { STREC *p;

p=h->next; printf(\ do

{ printf(\;}

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

main() { double s[N]={85,76,69,85,91,72,64,87},ave;

STREC *h;

h=creat( s ); outlist(h); ave=fun( h );

printf(\ NONO(); }

解题思路:

本题是计算链表结构中成绩的平均分。具体操作请看答案程序中的说明。 参考答案:

#include #include

double fun( STREC *h ) {

STREC *p=h->next; /* 由于头结点中没有存放数据 */

double av=0.0; /* 对计算成绩平均值的变量进行初始化 */ int n = 0 ;

while(p!=NULL) { /* 判断链表是否结束 */

av = av + p->s ; /* 对成绩进行累加 */

p=p->next; /* 到下一个结点位置 */

n++; /* 人数加1 */ }

av /= n ; /* 计算成绩平均值 */ return av ; /* 返回成绩平均值 */ }

※※※※※※※※※※※※※※※※※※※※※※※※※ 第45套:

函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、

a[1]、a[2]、??中,把奇数从数组中删除,偶数个数通过函数值返回。例如:

若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后a 所指数组中的数据为:4、2、6、8,返回值为4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

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

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

#define N 9

int fun(int a[], int n) { int i,j; j = 0;

for (i=0; i

return ___3___; }

main()

{ int b[N]={9,1,4,2,3,6,5,8,7}, i, n; printf(\ for (i=0; i

printf(\ n = fun(b, N); printf(\number of even :%d\\n\

printf(\

for (i=0; i

printf(\ }

解题思路:

第一处:判断a[i]是否是偶数,若是,则仍保留在原数组中a[j],所以应填:a[i] % 2。

第二处:数组a中的元素位置由j来控制,每增加一个元素,则j加1,所以应填:a[j]。

第三处:返回删除奇数后a所指数组中数据的元素j,所以应填:j。 ***************************************************

给定程序MODI1.C中函数fun的功能是:按以下递归公式求函数值。 ┌ 10 (n=1) fun(n)=┥

└ fun(n-1)+2 (n>1)

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

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

给定源程序: #include fun ( n ) { int c; if(n=1) c = 10 ; else

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

main() { int n;

printf(\n : \scanf(\

printf(\result : %d\\n\\n\fun(n)); }

解题思路:

第一处:形参n没有定义类型,所以应改为:fun (int n)。

第二处:判断相等的符号是==。 ***************************************************

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个, 则什么也不做, 字符串中间和前面的*号不删除。

例如,字符串中的内容为:****A*BC*DEF*G*******,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****;若n的值为7,则字符串中的内容仍为:****A*BC*DEF*G*******。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。

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

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

main()

{ char s[81]; int n;

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

解题思路:

本题是考察字符串的操作。 1. 使用while循环语句和字符串指针p扫描出尾部的*号。

2. 找出字符串最右边字母后出现'*'的第1位置。

3. 使用while循环来处理右边'*'是否大于n个,若大于,则取n个'*'。 4. 最后给字符串加上结束符。 参考答案:

void fun( char *a,int n ) {

char *p=a ; int j=0;

while(*p) p++; p--; /* 字符串的长度 */

while(*p == '*') p--; /* 字符串右的'*' */ p++;

while(j

*p = 0 ; }

※※※※※※※※※※※※※※※※※※※※※※※※※ 第46套:

给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字符串,且串长小于M。

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

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

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

void fun(char (*ss)[M]) { char *ps[N],*tp; int i,j,k; for(i=0; i

for(j=i+1; j

if(strlen(ps[k]) < strlen(__2__) ) k=j; tp=ps[i]; ps[i]=ps[k]; ps[k]= __3__ ; }

printf(\length:\\n\\n\

for(i=0; i

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

printf(\ for(i=0;i

fun(ch); }

解题思路:

本题是按字符串的长短进行排序。

第一处:外循环每循环一次,k应保存当前的i值,所以应填:i。 第二处:使用内循环对i+1后面的字符串长度进行比较,所以应填:ps[j]。 第三处:交换内容,所以应填:tp。 ***************************************************

已知一个数列从第0项开始的前三项分别为0,0,1,以后的各项都是其相邻的前三项之和。给定程序MODI1.C中函数fun的功能是:计算并输出该数列前n项的平方根之和。n的值通过形参传入。 例如,当n=10时,程序的输出结果应为:23.197745。

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

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

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

{ double sum, s0, s1, s2, s; int k; sum = 1.0;

if (n <= 2) sum = 0.0;

s0 = 0.0; s1 = 0.0; s2 = 1.0; for (k = 4; k <= n; k++) { s = s0 + s1 + s2; sum += sqrt(s);

s0 = s1; s1 = s2; s2 = s; }

return sum }

main ( ) { int n;

printf(\ scanf(\

printf(\ }

解题思路:

第一处:由于函数返回是实数,所以必须定义返回的类型,只有整型或无结果返回可以忽略,其他必须定义返回的类型,所以要在此行前加上double或float。 第二处:该行缺少分号。

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

编写函数fun,它的功能是计算下列级数和,和值由函数值返回。

例如,当n = 10,x=0.3时,函数值为1.349859。

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

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

给定源程序: #include #include

double fun(double x , int n) { }

main() {

printf(\ NONO(); }

解题思路:

本题是根据给定的公式计算结果。使用for循环语句依次求出每一项的值,分别进行累加并把结果存入变量s中,最后把s作为函数值返回。其中,jc函数是计算阶乘的。

参考答案:

#include #include long jc(int n) {

long s = 1 ; int i ;

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

double fun(double x , int n) {

double s = 1.0, y = x ; int i ;

for(i = 1 ; i <= n ; i++) { s += y / (double)jc(i) ; y *= x ; }

return s ; }

※※※※※※※※※※※※※※※※※※※※※※※※※ 第47套:

给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。

例如,形参s所指的字符串为:abcAbsmaxless,程序执行后的输出结果为: letter 'a' : 3 times letter 's' : 3 times

请在程序的下划线处填入正确的

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

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

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

{ int k[26]={0},n,i,max=0; char ch; while(*s)

{ if( isalpha(*s) ) { ch=tolower(__1__); n=ch-'a';

k[n]+= __2__ ; } s++;

if(max

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

if (k[i]==max) printf(\\\'%c\\' : %d times\\n\ }

main()

{ char s[81];

printf(\a string:\\n\\n\gets(s); fun(s); }

解题思路:

本题是找出字符串中出现频率最高的字母并统计出其次数。 第一处:将当前字母转换为小写字母,所以应填:*s。

第二处:把该字母出现的个数累加到指定的数组中,所以应填:1。 第三处:如果当前该字母出现次数大于最大次数max,那么把该次数赋值给max,所以应填: k[n]。

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

给定程序MODI1.C中函数 fun 的功能是:求S的值。

例如,当k为10时,函数值应为:1.533852。

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

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

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

{ int n; float s, w, p, q;

n = 1; s = 1.0;

while ( n <= k ) { w = 2.0 * n; p = w - 1.0; q = w + 1.0;

s = s * w *w/p/q; n++; }

return s }

main ( ) {

printf(\ }

解题思路:

第一处:由于函数返回是实数,所以必须定义返回的类型,只有整型或无结果返回可以忽略,其他必须定义返回的类型,所以要在此行前加上double或float。 第二处:缺少分号。

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

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

S = ── + ── + ? + ─── 1×2 2×3 n(n+1)

例如,当n = 10时,函数值为:0.909091。

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

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

main() /* 主函数 */ {

printf(\ NONO(); }

解题思路:

本题是根据公式计算结果。使用for循环语句进行计算。但要注意的是:在除法运算中,如果除数和被除数都是整数,所以所除的结果也是整数,因此1应取实数或进行实型的类型转换。 参考答案:

double fun( int n ) {

double s = 0.0 ; int i ;

for(i = 1 ; i <= n ; i++) s = s + 1.0 / (i * (i + 1)) ; return s ; }

※※※※※※※※※※※※※※※※※※※※※※※※※ 第48套:

给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对 应的数值,计算出这些数值的累加和作为函数值返回。 例如,形参s所指的字符串为:abs5def126jkm8,程序执行后的输出结果为:22。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。

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

if( isdigit(*s) ) sum+= *s- __1__ ; __2__; }

return __3__ ; }

main()

{ char s[81]; int n;

printf(\a string:\\n\\n\gets(s); n=fun(s);

printf(\ }

解题思路:

本题是把字符串中是数字字符转换成对应的数值并进行累加。 第一处:'0'字符对应的ASCII值是48,因此数字字符转换成对应数值时只要减去48,即是该数字字符对应的数值,所以应填:48。 第二处:到字符串下一个位置,所以应填:s++。

第三处:返回累加和sum,所以应填:sum。

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

给定程序MODI1.C中函数fun的功能是:计算小于形参k的最大的10个能被13或 17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。 请改正程序中的错误,使程序能

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

}}}main(){inti;char*pstr[6],str[6][MAXLINE];for(i=0;i<6;i++)pstr[i]=str[i];printf(\6string(1stringateachline):\\n\for(i=
推荐度:
点击下载文档文档为doc格式
48d6g8mkin1x2cx44eay
领取福利

微信扫码领取福利

微信扫码分享