admin 管理员组

文章数量: 1086019


2024年4月21日发(作者:普通人怎么报考二建)

2022年湖南省常德市全国计算机等级考试

C语言程序设计模拟考试(含答案)

学校:________ 班级:________ 姓名:________ 考号:________

一、单选题(12题)

1. 有如下定义: struct person {char name[9];int age;} struct person

class[10]={ "John",17, "Paul",19, "Mary",18, "Adam",16};

能输出字母M的是( )

("%cn",class[3].name);

("%cn",class[3].name[1]);

("%cn",class[2].name[1]);

("%cn",class[2].name[0]);

2. 在以下一组运算中,优先级最高的运算符是 ( )

A.<= B.= C.% D.& &

3.

4.下列哪一种图的邻接矩阵是对称矩阵()。

A.有向图 B.无向图 网 网

5.有下列程序:

fun(int x,int y)

{ static int m=0,i=2;

i+=m+1;m=i+x+y;return m;

}

main( )

{ int j=1,m=1,k;

k=fun(j,m);print S(”%d,”,k);

k=fun(j,m);printf(”%d\n”,k);

执行后的输出结果是( )。

A.5,5 B.5,11 C.11,11 D.11,5

6.写出a*(b-c*d)+e-f/g*(h+i*j-k)的逆波兰表达式()。

A.a(b-c*d)*+e-(f/g(h+i*j-k)*)

B.a(b-(cd*))*+e-(fg/(h+ij*-k)*)

C.a(bcd*-)*+e-(fg/hij*+k-*)

*-*e+fg/hij*+k-*-

7.栈这种数据结构一般应用在()。

A.递归调用 B.子程序调用 C.表达式求值 D.A,B,C

8.算法的效率的分析主要包括两个方面()。

A.时间复杂度和空间复杂度 B.正确性和简单性 C.可读性和文档性 D.

数据复杂性和程序复杂性

9.若有下列定义(设int类型变量占2个字节):

int i=8;

则下列语句:

printf("i=%08d",i);

输出的结果是( )。

A.A.i=8 B.i=00000008 C.i=08 D.8

10.若有定义“double a; float b; short c;”,若想把1.2赋给变量a,3.4赋

给变量b,5678赋给变量c,程序运行时键盘输入:1.2 3.4 5678<回

车>则以下正确的读入语句是()。

("%If%If%d",&a,&b,&c) ;

("%If%If% hd",&a,&b,&c) ;

("%If%f%hd",&a,&b,&c) ;

("%f%f%d",&a,&b,&c);

11.

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

B.y=0; if(x>0)y=1; else if(x<0)y=-1;

C.y=0; if(x>=0) if(x>0)y=1; e1se y=-1;

(x>=0) if(x>0)y=1; elsey=0: elsey=-1;

12.有下列程序:

main( )

{ char*P[]={"3697","2584");

int i,j;long num=0;

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

{j=0;

while(p[i][j]!=\0)

{if((p[i][j]-t\0)%2)num=10*num+p[j][j]-0;

j+=2;

}

}

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

}

程序执行后的输出结果是( )。

A.35 B.37 C.39 D.3975

二、2.填空题(12题)

13. 设有char a,b;,若要通过a&b运算屏蔽掉a中的其他位,只保留第

2位和笫8位(右起为第1位),则b的二进制是【 】。

14. 设int a=5,b=6,表达式(++a==b--)?++a:--b的值是【 】。

15. 以下程序运行后的输出结果是______。

int a=5;

fun (int B)

{ static int a=10;

a+=b++;

printf("%d",A) ;

}

main()

{ int c=20;

fun(C) ,

a+=C++;

printf("%dn",A) ;

}

16. 以下程序的输出结果是【 】。

main()

{

int arr[]={30,25,20,15,10,5},*p=arr;

p++;

printf("%dn",*(p+3));

}

17. 以下程序的输出结果是【 】。

#include<stdlib.h>

main()

{ char *s1,*s2,m;

s1=s2=(char*)malloc(sizeof(char));

*s1=15; *s2=20; m=*s1+*s2;

printf("%dn",m);

}

18. 以下程序中,fun函数的功能是求3行4列二维数组每行元素中的

最大值。请填空。

#include <stdio, h>

void fun(int,int,int( * )[4] ,int* );

main ( )

{ int a[3] [4] = { { 12,41,36,28}, { 19,33,15,27}, {3,27,19,1 } } ,b[3] ,i;

fun(3,4,a,b);

for(i =0;i <3;i ++ ) printf( "%4d" ,b[i] );

prinff(" n" );

}

void fun(int m,int n,int ar[] [4] ,int* br)

{ int i,j,x;

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

{ x = ar[i] [0] ;'

for(j = 0;j < n;j ++ ) if(x < ar[i] [j] ) x = ar[i] [j];

【 】=x;

}

}

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

main()

{ int a[]={31,27,20,12,6,1),*p=a;

p++;

printf("%dn",*(p+2));

}

20. 以下函数把b字符串连接到a字符串的后面,并返回a中新字符串

的长度。请填空。

strcen(char a[],char b[])

{ int num=0,n=0;

while(*(a+num)!=【 】)num++;

while(b[n]){*(a+num)=b[n];num++;【 】;}

return(num);

}

21. 以下程序的输出是【 】。

main()

{

char strl[]]="How do you do",*p1=strl;

strcpy(strl+strlen(strl)/2,"es she");

printf("%sn",p1);

}

22. 在面向对象方法中,属性与操作相似的一组对象称为【 】。

23. 对于长度为n的顺序存储的线性表,当随机插入和删除一个元素时,

需平均移动元素的个数为【 】。

24. 以下程序运行后的输出结果是______。

fun(int x)

{ if(x/2>0) fun(x/2);

printf("%d " ,x);

}

main()

{ fun(6); }

三、3.程序设计题(10题)

25. 下列程序定义了NXN的二维数组,并在主函数中赋值。请编写函

数fun(),函数的功能是求出数组周边元素的平方和并作为函数值返回

给主函数中的S。例如:若a数组中的值为

a=0 1 2 7 9

1 11 21 5 5

2 21 6 11 1

9 7 9 10 2

5 4 1 4 1

则返回主程序后s的值应为310。

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

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

号中填入所编写的若干语句。

试题程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define N 5

int fun (int w[][N])

{

}

main()

{

int a[N)[N]={0,1,2,7,9,1,1l,2l,5,5,2, 21,6,11,1,9,

7,9,10,2,5,4,1,4,1};

int i,j;

int S;

clrscr( );

printf("*****The array***+*n");

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

{for(j=0;j<N;i++)

{printf(“%4d”,a[i][j]);}

printf("n");

}

s=fun(a);

printf(“*****THE RESULT*****n”);

printf("The sum is:%dn",s);

}

26. 请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数

组中有n个整数,要求把下标从p到n-1(p≤n-1)的数组元素平移到数组

的前面。

例如,一维数组中的原始内容为1,2,3,4,5,6,7, 8,9,10,11,

12,13,14,15,p的值为6。移动后,一维数组中的内容应为7,8,

9,10, 11,12,13,14,15,1, 2, 3, 4, 5, 6。

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

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

号中填入所编写的若干语句。

试题程序:

#include<stdio.h>

#define N 80

void fun(int *w,int p,int n)

{

}

main()

{

int a[N]={1,2,3,4,5,6,7,8,9,10,11, 12,13,14,15};

int i,p,n=15;

printf("The original data:n");

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

printf("%3d",a[i]);

printf("nnEnter p:");

scanf("%d",&p);

fun(a,p,n);

printf("nThe data after moving:n");

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

printf("%3d",a[i]);

printf("nn");

}

27. 请编写函数fun( ),其功能是:将所有大于1小于整数m的素数存

入xx所指数组中,素数的个数通过k传回。

例如,输入25,则应输出2 3 5 7 11 13 17 19 23。

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

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

号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

void fun(int m,int *k,int xx[ ])

{

}

main( )

{

int m,n,zz[100];

clrscr( );

printf("/nPlease enter an integer number between 10 and 100:");

scanf("%d",&n);

fun(n,&m,zz);

printf("nnThere are%d prime numbers

less than %d:",m,n);

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

printf("n %4d",zz[n]);

}

28. 请编写函数fun(),它的功能是计算:

s=(ln(1)+ln(2)+ln(3)+…+ln(m))

0.5

在C语言中可调用log(n)函数求ln(n)。

例如,若m的值为20,则fun()函数值为6.506583。

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

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

号中填入所编写的若干语句。

试题程序:

#include <conio. h>

#include <stdio. h>

#include <math.h>

double fun(int m)

{

}

main ()

{

clrscr ();

printf ("%fn ", fun (20));

}

29. 请编写函数fun,其功能是将两个两位数的正整数a、b合并形成一

个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数

个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。

例如,当a=16,b=35,调用该函数后,c=5361。

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

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

号中填入所编写的若干语句。

试题程序:

#include<stdio.h>

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

{

}

main()

{

int a,b;

long c;

clrscr();

printf("Input a,b;");

scanf("%d%d",&a,&b);

fun(a,b,&c);

printf("The result is:%ldn",c);

}

30. 请编写一个函数fun(),它的功能是:找出一维数组元素中最大的值

和它所在的下标,最大值和它所在的下标通过形参传回。数组元素中的

值已在主函数中赋予。

主函数中x是数组名,n是x中的数据个数,max存放最大值,index存

放最大值所在元素的下标。

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

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

号中填入所编写的若干语句。

试题程序:

#include<stdlib.h>

#include<stdio.h>

void fun(int a[],int n, int *max,int *d)

{

}

main()

{

int i, x[20], max, index, n=10;

randomize();

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

{

x[i]=rand()%50;

printf("%4d",x[i]);

/*输出一个随机数组*/

}

printf("n");

fun(x,n,&max,&index);

printf("Max=%5d,Index=%4dn",max,index);

}

31. 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入

结构体数组s中,请编写函数fun,它的功能是:把高于等于平均分的

学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n

传回,平均分通过函数值返回。

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

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

号中填入你编写的若干语句。

32. 函数fun的功能是:将s所指字符串中除了下标为偶数、同时ASCII

值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一含新

串放在t所指的数组中。

例如,若s所指字符串中的内容为:“ABCDEFGl23456”,其中字符A的

ASCII码值为奇数,因此应当删除:其中字符B的ASCII码值为偶数,

但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为

偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。

最后t所指的数组中的内容应是:“246”。

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

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

号中填入你编写的若干语句。

33. 请编写函数fun(),其功能是:将s所指字符串中下标为奇数的字符

删除,串中剩余字符形成的新串放在t所指数组中。

例如,当s所指字符串中的内容为siegAHdied,则在t所指数组中的内

容应是seAde。

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

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

号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

void fun(char*S,char t[])

{

}

main()

{

char s[100],t[100];

clrscr();

printf("nPlease enter string s:");

scanf("%S",S);

fun(S,t);

printf("nThe result is:%sn",t);

}

34. 请编写一个函数fun(),它的功能是:将ss所指字符串中所有下标为

偶数位置的字母转换为小写(若该位置上不是字母,则不转换)。

例如,若输入ABC4efG,则应输出aBc4efg。

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

请勿改动主函数miain和其他函数中的任何内容,仅在函数fun的花括

号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

void fun(char *SS)

{

}

main()

{

char tt[81];

clrscr();

printf("nPlease enter an string within 80

characters:n");

gets(tt);

printf("nnAfter changing,the stringn

%s",tt);

fun(tt);

printf("nbecomesn %Sn",tt);

}

四、单选题(0题)

35.

五、单选题(0题)

36.有以下程序:

#include <stdio.h>

void fun(int * a,int * b)

{ for( ; ( *a<*B)||(getchar()!=‘@’);)

{( *a)++; (*b)--; }

}

main()

{int i=0, j=5;

fun(&i,&j);

printf(“%d,%dn”,i,j);

}

程序运行时在第1列开始输入ab@并按<Enter>键,则运行结果是

()。

A.7,1 B.3,2 C.0,5 D.5,0

六、单选题(0题)

37.C语言中,组成数据文件的成分是( )。

A.A.记录

B.数据行

C.数据块

D.字符(字节)序列

参考答案

1.D

2.C

3.C

4.B

5.B

子函数fun(int x,int y),将变量m和i声明为局部静态变量,因此第l

次调用主函数后,局部静态变量m和i的值为5和3,第l次函数调用

结束时,它们的值不释放保持不变,所以第2次调用时,局部静态变

量m和i 的初始值分别为5和3,即在执行“i+=m+1”时,i的值为9,

因此最终m的值为11。

6.D

7.D

8.D

9.B

解析:本题考查printf函数的格式。“%08”格式符中的“0”表示在指定

数据输出宽度的同时,在数据前面的多余空格处加“0”;“8”表示指定数

据的输出宽度为8位。

10.C

scanf函数用于输入数据。第1个参数表示输入格式控制。本题变量a

是double类型,使用格式控制符%If;变量b是float类型,使用%If;

变量c是short类型,使用%hd,选项C正确。本题答案为C选项。

11.C解析:选项A的意思是:在x>O情况下,y为1,否则,在x=O

时,y为0,剩下x<O时,y为-1,满足本题中函数的要求。选项B描

述的意思是:初始化y的值为0,在x>O时,给y重新赋值为1,否

则,在x<O时,给y重新赋值为-1,满足本题中函数的要求。选项C

描述的意思是:在x>=0情况下,如果x>O,则y为1,否则,即x==0

时,y为-1;剩下的x<O时,y为0。可见答案C实现的结果不是给定

的表达式。选项D中描述的意思是:在x>=0的情况下,如果x>O,

就给y赋值为1,否则即x==0时给y赋值为0,在不是x>=0的其他情

况下,就给y赋值为-1,满足本题中函数的要求。所以4个选项中C为

所选。

12.D

执行第一次for循环时,用表达式p[i][J]!=\o来判断字符串数组指针

P是否到达字符串的结尾,如果没有到达,继续执行while中的语句。

if语句表示(p[i][j]-\o)除2的余数不为0时,即字符串所有奇数,执行

后面的语句。所以退出第1次for的循环体时,输出为397,执行第2

次循环体。对字符串“2584”进行处理,输出结果为5,因而最后输出结

果为3975。

13.1010 解析:运算“&”的,的规则是只有当两个相应的二

进制位都为1时,该位的结果才为1。要保留第2、8位,只要将其与二

进制数10000010相与。

14.77 解析:此表达式为三目运算符,++a的值为6,b --的值为6,则

整个表达式的值为++a的值,++a的值为7。请注意前缀++,--和后缀

++,--的区别。

15.30 2530 25 解析:本题考核的知识点是变量的存储属性和算术运算的

应用。本题涉及了自动变量、静态变量和外部变量。外部变量是定义在

所有函数之外的变量,本题中int a=5定义了一个外部变量a,它是一个

全局变量,即作用域是从定义的位置开始到本文件的结束;静态变量的

存储空间在程序的整个运行期间是固定的(static),本题函数fun()中

static int a=10定义个一个静态变量a,此静态变量a是个静态的局部变

量,即它的值只能在本函数中使用; 自动变量是C程序中使用最多的

一种变量,它的建立和撤消都是由系统在程序执行过程中自动进行的,

auto是自动变量的存储类别标识符,如果省略auto,系统隐含认为此变

量为auto,本题中main()中int c=20定义了一个自动变量c,此自动变

量c是个静态的局部变量.算术运算中 a+=b++相当于a=a+b,b=b+1.所

以,在第一个 ptine('%d',a)中 a=a+b=10+20=30, 第二个 printf('%d',

a)中a=a+c=5+20=25,即输出30 25。

16.1010 解析:整型指针最初被赋的值是数组arr的头指针,即指向数

组的第一个元素30,p++后,指针指向数组的下一个元素,即*p=arr[1]=25,

在执行*(p+3)时,则相当于a[1+3],即10。因此,输出应为100。

17.40

40 解析:本题中指针s1和s2都指向同一个内存中的地址。因此语句

“*s2=20;”执行后,*u3000s1=*s2=20。所以m最后的值为40。

[i]或*(br+i)br[i]或*(br+i) 解析:程序中的数组a是一个3行4列的

二维数组,一维数组b用于存放每行的最大数。在函数fun中,通过二

重for循环求每行的最大数,外层for循环用于控制行数,内层for循环

用于控制列数,当外层循环执行一次时,内层循环则从一行的4个数中

找出最大数x,然后将最大值x赋给数组br,故空格处应填br[i]或*(br+i)。

19.1212 解析:本题考查如何用指针引用数组元素。分析程序,首先定

义了一个指向数组a的指针p,p指向数组的首地址,通过p++,将p指

向a[1],p+2是将指针后移2位指向a[3],*(p+2)即是取a[3]的值12。

20.0'或0或NULL n++或++n或n=n+1或n+=10'或0或NULLrnn++

或++n或n=n+1或n+=1

does sheHow does she 解析:strcpy(strl,s1):字符串拷贝函数,

作用是将字符串s1拷贝到字符数组strl中去。strlen(str):测试字符串str

的长度,函数的值为字符串中实际长度,不包括'0'在内。本题中

strlen(strl)的值为13,则strcpy(strl+strlen(strl)/2,'es she');相当于

strcpy(strl+6,'es she');,因此可得答案为How does she。

22.类类 解析:在面向对象方法中,类描述的是具有相似性质的一组对

象。所以,属性与操作相似的一组对象称为类。

23.n/2n/2 解析:删除一个元素,平均移动的元素个数为(n-1+n-

2+…+0)/n=(n-1)/2;插入一个元素,平均移动元素个数为(n+n-1+n-2+…

+1)/n=(n+1)/2;所以总体平均移动元素个数为n/2。

24.1 3 61 3 6 解析:本题考核的知识点是函数递归。主函数调用函数

fun(6),由于6/2>0为真递归调用fun(3),接着递归调用fun(1),输出

1,返回上一层输出3,在返回上一层输出6。故空格处应该填1 3 6。

fun(int w[])[N]) { int ijk=0; int s=0; for(i=0;i<N;i++) for(j=0;

j<N;j++) if(i==0||i==N-1||j==0||j==N-1) /*只要下标中有一个为0或N-

1则它一定是周边元素*/ {s=s+w[i][j]*w[i][j]; /*将周边元素求平方和*/ }

return s; /+返回周边元素的平方和*/ }int fun(int w[])[N])rn { rn int i,j,

k=0;rn int s=0;rn for(i=0;i<N;i++)rn for(j=0;j<N;j++)rn

if(i==0||i==N-1||j==0||j==N-1) /*只要下标中有一个为0或N-1,则它一定

是周边元素*/rn {s=s+w[i][j]*w[i][j]; /*将周边元素求平方和*/rn }rn

return s; /+返回周边元素的平方和*/rn } 解析:该题采用逐一判断的方

式,周边元素的下标一定有一个是0或N-1,且只要下标中有一个为0

或N-1,则它一定是周边元素。

fun(int *w int p int n) { int i.jt; for(i=p;i<=n-1;i++) /*循环右移

n-p次*/ {t=w[n-11; for(j=n-2;j>=0;j--) /*实现循环右移*/ w[j+1]=w[j];

w[0]=t; }void fun(int *w, int p, int n)rn {rn int i.j,t; rn for(i=p;i

<=n-1;i++) /*循环右移n-p次*/rn {t=w[n-11;rn for(j=n-2;j>=0;j--) /*

实现循环右移*/rn w[j+1]=w[j];rn w[0]=t;rn } 解析:本题采用“循

环右移”的算法。和我们在前面分析的稍有不同的是,—个是整型数组,

—个是字符型数组。

fun(int mint *kint XX[]) { int ijtn=0; for(i=2;i<m;i++) /*找出大

于1小于整数m的素数*/ { t=l; for(j=2;j<i;j++) if(i%j==0) { t=0;

break; } if(t==1) xx[n++]=i; } *k=n; /*返回素数的个数*/ }void fun(int

m,int *k,int XX[])rn {rn int i,j,t,n=0;rn for(i=2;i<m;i++) /*找

出大于1小于整数m的素数*/rn { rn t=l;rn for(j=2;j<i;j++) rn

if(i%j==0)rn {rn t=0; rn break;rn } rn if(t==1)rn xx[n++]=i;

rn }rn *k=n; /*返回素数的个数*/rn } 解析:这道题是考查一个数

是不是素数,只要掌握了判断素数的方法,问题便能顺利解决,请以此

题为例,掌握判断素数的方法。

fun(int m) { int i; double s=0.0; for(i=1;i<=m;i++) s=s+ log(i);

/*计算s=ln(1)+ln(2)+ln(3)+…+in(m)*/ return sort (s); /*对s求平方根并

返回*/ }double fun(int m)rn {rn int i;rn double s=0.0;rn for(i=1;i<

=m;i++)rn s=s+ log(i); /*计算s=ln(1)+ln(2)+ln(3)+…+in(m)*/rn return

sort (s); /*对s求平方根并返回*/rn } 解析:首先,题目要求计算从1

到m的对数的和,可用从1到m的循环,每次循环都累加求和。该题

需要注意之处是, log()函数的形式参数应当为double 型变量,而用于

循环的基数变量为整数,需要进行强制转换。在返回的时候求小平方根。

fun(int aint blong*c)

{ *c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10; }void fun(int a,int b,

long*c)rn {rn *c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;rn } 解

析:语句“*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;”是将a数的十

位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在

c数的百位和千位上。注意“/”和“%”的用法。

fun(int a[]int nint *maxint *d) { int i; *max=a[0]; *d=0; for(i=0;

i<n;i++) /*将最大的元素放入指针max所指的单元最大元素的下标放

入指针d所指的单元*/ if(*max<a[i]) {*max=a[i];*d=i;} }void fun(int

a[],int n,int *max,int *d)rn {rn int i;rn *max=a[0];rn *d=0;rn

for(i=0;i<n;i++) /*将最大的元素放入指针max所指的单元,最大元

素的下标放入指针d所指的单元*/rn if(*max<a[i])rn {*max=a[i];

*d=i;}rn } 解析:该程序直接使用形参max和d,由于它们都是指针

变量,所以要引用它所指向的变量时要对它进行指针运算,也即*号运

算。

31. 解析:该程序功能是把

高于或等于平均分的学生数据放在b所指的数组中,高于等于平均分的

学生人数通过形参n传回,平均分通过函数返回值返回。解题过程首先

求得平均分,然后将所有成绩与平均分进行比较,如果大于或等于平均

分,存入指定数组。

32.

解析:该程序功能是将字符串中除了下标为偶数、ASCII值也为

偶数的字符外,其余的全都删除。解题过程利用if条件判断表达式选

择符合条件的字符,然后将符合条件的字符放入指定的字符串。

fun (char *Schar t[]) { int ij=0k=strlen(s); /*k为字符串的长度*/

for(i=0;i<k;i=i+2) /*将s所指字符串中下标为偶数的字符存入t所指

字符串中*/ t[j++]=s[i]; t[j]='0'; /*在字符串最后加上结束标志

*/ }void fun (char *S,char t[])rn { rn int i,j=0,k=strlen(s); /*k为

字符串的长度*/ rn for(i=0;i<k;i=i+2) /*将s所指字符串中下标为偶

数的字符存入t所指字符串中*/ rn t[j++]=s[i];rn t[j]='0'; /*在字

符串最后加上结束标志*/rn } 解析:本题使用了一种i永远是偶数的

循环方法,即for(i=0;i<k;i=i+2),因为开始时i的值为0,当i+2循

环时,此值永远是偶数。

fun(char *ss) { int i; for(i=0;ss[i]!='0'i++) /*将ss所指字符串

中所有下标为偶数位置的字母转换为小写*/ if(i%2==0&&ss[i]>

='A'&&ss[i]<='z') ss[i]=ss[i]+32; }void fun(char *ss)rn {rn int i;rn

for(i=0;ss[i]!='0'i++) /*将ss所指字符串中所有下标为偶数位置的字

母转换为小写*/rn if(i%2==0&&ss[i]>='A'&&ss[i]<='z')rn

ss[i]=ss[i]+32;rn } 解析:从C语言的学习中我们知道,只要将小写

字母减去32则转成大写字母,将大写字母加上32则转成小写字母。

该程序是用if语句实现该功能转化的。

35.D

函数接收两个整型指针变量a、b。for循环判断a、b指向的值

大小和getchar读入的字符是否为“@”来决定循环是否执行。循环体内

对a、b指向的值各自自增1、自减1。main函数定义并初始化实参i

的值为0,实参j的值为5,调用函数fun,传入i、j的地址。所以形

参a指向i,形参b指向j,*a的值为0,*b的值为5,*a<*b为真,

执行循环体;*a的值为1,*b的值为4,*a<*b为真,执行循环体;

*a的值为2,*b的值为3,*a<*b为真,执行循环体;*a的值为3,

*b的值为2,*a<*b为假,getchar读入字符“a”,执行循环体;*a的

值为4,*b的值为1,*a<*b为假,getchar读入字符“b”,执行循环

体;*a的值为5,*b的值为0,*a<*b为假,getchar读入字符“@”,

fun函数执行完毕,main函数输出5,0。故本题答案为D选项。

37.D解析:C语言中的文件是流式文件。流式文件是一种无结构文

件,即整个文件是一串字符流或二进制流。文件的存取以字符或字节

为单位。

2022年湖南省常德市全国计算机等级

考试C语言程序设计模拟考试(含答案)

学校:________ 班级:________ 姓名:________ 考号:________

一、单选题(12题)

1. 有如下定义: struct person {char name[9];int age;} struct person

class[10]={ "John",17, "Paul",19, "Mary",18, "Adam",16};

能输出字母M的是( )

("%cn",class[3].name);

("%cn",class[3].name[1]);

("%cn",class[2].name[1]);

("%cn",class[2].name[0]);

2. 在以下一组运算中,优先级最高的运算符是 ( )

A.<= B.= C.% D.& &

3.

4.下列哪一种图的邻接矩阵是对称矩阵()。


本文标签: 函数 数组 变量 字符串 所指