2022年湖南省长沙市全国计算机等级考试C语言程序设计模拟考试(含答案)_第1页
2022年湖南省长沙市全国计算机等级考试C语言程序设计模拟考试(含答案)_第2页
2022年湖南省长沙市全国计算机等级考试C语言程序设计模拟考试(含答案)_第3页
2022年湖南省长沙市全国计算机等级考试C语言程序设计模拟考试(含答案)_第4页
2022年湖南省长沙市全国计算机等级考试C语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩57页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2022年湖南省长沙市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.设有条件表达式:(EXP)?i++;j--,则以下表达式中(EXP)完全等价的是()。

A.(EXP==0)B.(EXP!=0)C.(EXP==1)D.(EXP!=1)

2.

3.下列二维数组的说明中,不正确的是()。

A.floata[][4]={0,1,8,5,9};

B.inta[3][4]

C.#defineN5floata[N][3]

D.inta[2][9.5];

4.软件工程的出现是由于()。A.A.程序设计方法学的影响B.软件产业化的需要C.软件危机的出现D.计算机的发展

5.有以下定义:structperson{charname[10];intage;};structpersonclass[10]={“Johu”,17,“Paul”,19,“Mary”,18,“Adam”,16,};能输出字母M的语句是()。

A.printf(“%c\n”,class[2].name[0]);

B.printf(“%c\n”,class[3].name[0]);

C.printf(“%c\n”,class[3].name[1]);

D.printf(“%c\n”,class[2].name[1]);

6.有以下程序:#include<stdio.b>voidfun(charc){if(c>X)fun(c-1):printf("%C",c);}traia(){fun(z);}程序运行后的输出结果是()A.xyzB.wxyzC.xzyD.zvx

7.假设整型数i的地址为0x12345678,指针ip地址为0x21850043,则执行以下后,k的值为()。A.0x12345678B.0x21850043C.100D.不确定

8.下列结构体的定义语句中错误的是()。

A.structord{intx;inty;intz;}structorda;

B.structord{intx;inty;intz;};structorda;

C.structord{intx;inty;intz;}a;

D.struct{intx;inty;intz;}a;

9.以下程序运行后的输出结果是()。

A.2B.1C.3D.O

10.下列关于栈叙述正确的是A.栈顶元素最先能被删除B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.上述三种说法都不对

11.下列描述中正确的是______。

A.软件工程只是解决软件项目的管理问题

B.软件工程主要解决软件新产品的生产率问题

C.软件工程的主要思想是强调在软件开发过程中需要应用工程化原则

D.软件工程只是解决软件开发中的技术问题

12.下列叙述中错误的是()。A.程序可以由多个程序文件组成

B.一个C语言程序只能实现一种算法

C.程序可以由一个或多个函数组成

D.一个C函数可以单独作为一一个c程序文件存在

二、2.填空题(12题)13.C语言用于结构化程序设计的3种基本结构是______、选择结构和循环结构。

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

#defineMAX(x,y)(x)>(y)?(x):(y)

main()

{inta=5,b=2,c=3,d=3,t;

t=MAX(a+b,e+d)*10;

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

}

15.设y为int型变量,请写出描述“y是偶数”的表达式______。

16.对于长度为n的顺序存储的线性表,当随机插入和删除一个元素时,需平均移动元素的个数为【】。

17.以下isprime函数的功能是判断形参a是否为素数,如果是素数,函数返回1,否则返回0。

intisprime(inta)

inti;

for(i=2;i<=a/2;i++)

if(a%i==0)【】;

【】;

}

18.下列程序运行时输入1234567<CR>,则输出结果是______。

#include<stdio.h>

main()

{inta=1,b;

scanf("%2d%2d",&a,&b);printf("%d%d\n",a,b);

}

19.以下程序运行后的输出结果是【】。

main()

{inta=l,b=3,c=5;

if(C=a+b)printf("yes\n");

elseprintf("no\n");

}

20.在数据库理论中,数据物理结构的改变,如存储设备的更换、物理存储的更换、存取方式等都不影响数据库的逻辑结构,从而不引起应用程序的变化,称为【】。

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

#inClude<strinq.h>

char*ss(char*s)

{char*p;t;

p=S+1;t=*s;

while(*p){*(p-1)=*p;p++;}

*(p-1)=t;

returns;

}

main()

{char*p,str[10]="abcdefgh";

p=ss(str);

printf("%s\n",p);

}

22.软件测试按功能划分的方法划分,通常分为【】测试方法和黑盒测试方法。

23.函数compare的功能是比较两个字符串是否相等,若相等则函数返回1,否则返回o,请填空。

compare(chars[],chart[])

{

inti=0

while(s[i]==t[i]&&【】)i++;

return(【】?1:0);

}

24.在长度为n的有序线性表中进行二分查找。最坏的情况下,需要的比较次数为【】。

三、3.程序设计题(10题)25.学生的记录由学号和成绩组成,N名学生的数据已存放在主函数的结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。

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

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

[试题源程序]

#include<stdio.h>

#defineN8

typedefstruct

{

charnum[10];

doubles;

}STREC;

doublefun(STREC*a,STREC*b,int*n)

{

}

voidmain()

{

STRECs[N]={{"GA05",85},

{"GA03",76},{"GA02",69},{"GA04",85},

{"GA01",91},{"GA07",72},{"GA08",64},

{"GA06",87}};

STRECh[N],t;FILE*out;

inti,j,n;

doubleave;

ave=fun(s,h,&n);

printf("The%dstudentdatawhichislowerthan%7.3f:\n",n,ave);

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

printf("%s%4.1f\n",h[i].num,h[i].s);

printf("\n");

ut=fopen("out.dat","W");

fprintf(out,"%d\n%7.3f\n",n,ave);

for(i=0;2<n-1;i++)

for(j=i+1;j<n;j++)

if(h[i].s>h[j].s)

{

t=h[i];

h[i]=h[j];

h[j]=t;

}

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

fprintf(out,"%4.1f\n",h[i].s);

fclose(out);

}

26.请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17,5,则应输出:19,23,29,3l,37。

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

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

27.编写函数fun(),它的功能是;根据以下公式求p的值,结果由函数值带回。m与n为两个正数且要求m>n。

P=m!/n!(m-n)!),例如:m=12,n=8时,运行结果为495.000000。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

floatfun(intm,intn)

{

}

main()

{

clrscr();

printf("p=%f\n",fun(12,8));

}

28.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:按分数的高低排列学生的记录,高分在前。

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

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

试题程序:

#include<stdio.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

intfun(STRECa[])

{

}

main()

{

STRECsIN]={{"GA005",85},{"GA003",76},

{"GA002",69},{"GA004",85},{"GA001",91},

{"GA007",72},{"GA008",64},{"GA006",87},

{"GA015",85},{"GA013",91},{"GA012",64},

{"GA014",91},{"GA011",66},{"GA017",64},

{"GA018",64},{"GA016",72}};

inti;

FILE*out;

fun(s);

printf("Thedataaftersorted:In");

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

{if((i)%4=-0)

/*每行输出4个学生记录*/

printf("\n");

printf("%s%4d",s[i].num,s[i].s);

}

printf("\n");

out=fopen("out16.dat","w");

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

{if((i)%4==0&&i)

fprintf(out,"\n");

fprintf(out,"%4d",s[i].s);

}

fprintf(out,"\n");

fclose(out);

}

29.请编写函数fun(),该函数的功能是:移动字符串中的内容,移动的规则是把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。

例如,字符串中原有的内容为ABCDEFGHIJK,m的值为3,移动后,字符串中的内容应该是DEFGHIJKABC。

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

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

试题程序:

#include<stdio.h>

#include<string.h>

#defineN80

voidfun(char*w,intm)

{

}

main()

{

chara[N]="ABCDEFGHIJK";

intm;

printf("Theoriginastring:\n");

puts(a);

printf("\n\nEnterm:");

scanf("%d",&m);

fun(a,m);

printf("\nThestringaftermoving:\n");

puts(a);

printf("\n\n");

}

30.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。

例如,若学生的成绩是:85,76,69,85,91,72,64,87,则平均分应当是:78.625。

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

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

31.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。

例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****A*BC*DEF*G。在编写函数时,不得使用C语言提供的字符串函数。

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

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

32.下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun(),函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。例如:若a数组中的值为

a=01279

19745

23831

45682

59141

则返回土程序后s的值应为3.375。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

doublefun(intw[][N])

{

}

main()

{

inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,

3,8,3,1,4,5,6,8,2,5,9,1,4,1};

inti,j;

doubles;

clrscr();

printf("*****Thearray*****\n");

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

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

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

printf("\n");

}

s=fun(a);

printf("*****THERESULT*****\n");

printf("Thesumis:%lf\n",s);

}

33.请编写函数fun(),其功能是:计算并输出给定10个数的方差。

其中

例如,给定的10个数为95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0,则输出为S=11.730729。

注意;部分源程序给出如下.

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

试题程序:

#include<math.h>

#include<stdio.h>

doublefun(doublex[10])

{

}

main()

{

doubles,x[i0]={95.0,89.0,76.0,65.0,

88.0,72.0,85.0,81.0,90.0,56.0};

inti;

printf("\nTheoriginaldatais:\n");

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

printf("%6.1f",x[i]);

printf("\n\n");

s=fun(x);

printf("s=%f\n\n",s);

}

34.下列程序定义了N×N的二维数组,并在主函数中自动赋值;请编写函数fun(inta[][N]),该函数的功能是:使数组左下半三角元素中的值全部置成0。例如a数组中的值为

a=197

238

456

则返回主程序后a数组中的值应为

097

008

000

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N])

{

}

main()

{

inta[N][N],i,j;

clrscr();

printf("*****Thearray*****\n");

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

/*产生—个随机的5*5矩阵*/

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

{a[i][j]=rand()%10;

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

}

printf("\n");

}

fun(a);

printf("THERESULT\n");

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

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

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

printf("\n");

}

}

四、单选题(0题)35.

五、单选题(0题)36.将发送端数字脉冲信号转换成模拟信号的过程称为

A.链路传输B.调制C.解调D.数字信道传输

六、单选题(0题)37.以下叙述中正确的是()。

A.文件指针是一种特殊的指针类型变量

B.文件指针的值等于文件当前读写位置,以字节为单位

C.文件指针的值等于文件在计算机硬盘中的存储位置

D.调用fscanf函数只能向文本文件中写入任意字符

参考答案

1.B解析:条件表达式的形式为:“表达式1?表达式2:表达式3”。其含义为:当“表达式1”的值为非零时,求出“表达式2”的值,此时“表达式2”的值就是整个条件表达式的值;当“表达式1”的值为零时,求出“表达式3”的值,此时“表达式3”的值就是整个条件表达式的值。对于本题来说,当表达式EXP为非0值时条件成立,即执行语句i++;当EXP等于0时,执行语句j--;这等同于条件表达式“(EXP!=0)?i++:i++;”。

2.C

3.D解析:C语言规定,对于二维数组,只可以省略第一个方括号中的常量表达式,而不能省略第二个方括号中的常量表达式:二维数组的一般定义格式是:类型说明符数组名[常量表达式][常量表达式]。

4.C解析:软件工程的基本概念。软件工程概念的出现源自于软件危机。为了消除软件危机,通过认真研究解决软件危机的方法,认识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念。

5.AC语言规定数组的下标从0开始,结构体数组class初始化了前4个元素。第3个元素的name=“Marry”,则class[2].name[0]=‘M’。故本题答案为A选项。

6.A本题考查简单的递归函数,当c>X则会产生递归,依次类推,答案选择A.

7.C

8.AA选项错误,在定义结构体语句后少了分号。故本题答案为A选项。

9.A参数r的传递是地址传递,函数调用会改变其值。函数f的功能是:判断n是否为3或5的倍数,如果是,则将指针r所指的内存空间赋值为n除以3或5的商;否则n递减,直到它可以被3或5整除。初始时调用函数f(7,&r);n=7,执行else子句,调用f(6,&r1);后n=6,执行语句if(n%3==0)r1=n/3;,此后执行语句*r=rl;。所以r=6/3=2。

10.A解析:在栈中,允许插人与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。故本题选A。

11.C解析:软件工程是解决软件项目的管理、软件开发过程中的技术、软件产品的生产率等问题,它的主要思想是强调在软件开发过程中需要应用工程化原则。

12.B[解析]在一个C语言程序中可以进行多种算法的实现,对算法的个数没有规定,所以B)错误。

13.顺序结构顺序结构解析:结构化程序有3种摹本结构,即顺序结构、选择结构(包括if语句和switch语句)和循环结构(包括for语句、while语句、do…while语句)。

14.77解析:在C语言中,宏定义是直接替换的,所以在对表达式MAX(a+b,c+d)*l0进行替换后,表达式变为(a+b)>(c+d)?(a+b):(c+d)*10。在这个条件表达式中,(a+b)>(c+d)为真,所以用(a+b)的值作为整个表达式的值(否则用(c+9d)*10)的值作为整个表达式的值),而(a+b)的值为7。所以整个表达式的值为7。

15.(y%2)==0(y%2)==0解析:因符合偶数的条件是对2取余为0,所以要描述y是偶数的表达式是(y%2)==0。

16.n/2n/2解析:删除一个元素,平均移动的元素个数为(n-1+n-2+…+0)/n=(n-1)/2;插入一个元素,平均移动元素个数为(n+n-1+n-2+…+1)/n=(n+1)/2;所以总体平均移动元素个数为n/2。

17.return0或return(0)return1或return(1)return0或return(0)\r\nreturn1或return(1)解析:素数是指只能被1和其本身整除,不能被其他任何整数整除的数。根据if条件语句,若形参a对i取余等于0,则形参a可以被其他数整除,所以第一处填return0;若形参a对i取余不等于0,则形参s不可以被其他数整除,所以第二处填return1。

18.本题考查的重点是scanf函数的调用。scanf(“<格式化字符串>”,<地址表>),格式化字符串后可以加上场宽,本题中两个变量的场宽都为2,所以输入1234567<CR>后,变量a的值为12。变址b的值为34,从而输出为1234。\r\n\r\n

19.yesyes解析:本题中,if后面括号里的表达式为c=a+b为真(即c=1+3=4为真),所以,执行printf('yes\\n'),最后输出yes。

20.物理独立性物理独立性解析:数据的物理结构改变,不影响数据库的逻辑结构,从而不引起应用程序的变化,这种性质叫做物理独立性。

21.bcdefghabcdefgha解析:在本题定义的ss()函数中首先定义了一个指针p和一个字符变量t,然后让p指向参数指针s的下一个位置s+1,并让t保存s位置的字符.然后使用一个while循环将p指向的内容赋给它前面一个位置,即将参数s所指的字符串从第2个字符开始整体往前移动一位。循环结束时,p指向原s串的结束标志处,所以让*(p-1)=t;即是将原s串的第1个字符复制到s串的最后一个位置。整个函数实现的是让一个字符串循环左移一位。故主函数中最后输出的字符串是'bcdefgha'。

22.白盒白盒解析:软件测试的方法分为白盒测试方法和黑盒测试方法。

23.s[i]&&t[i]或s[i]!='\0'&&t[i]!='\0'!(s[i]-t[i])s[i]&&t[i]或s[i]!='\\0'&&t[i]!='\\0'\r\n!(s[i]-t[i])解析:while后括号中的判断条件为两个字符串相同位置上的字符相等,且两个字符串都没有结束,则循环。故第一空应该填s[i]&&t[i]或其他等价表达式。如果两个字符串完全相等,则while循环退出时s[i]和t[i]的值同时为0,否则s[i]和t[i]不相等。故表达式s[i]-t[i]在字符串相等时为0,不相等时为非0,所以第二空应该填!(s[i]-t[i])就满足题意了。

24.log2n

25.intfun(STREC*aSTREC*bint*n){doubleave=0.0;intij=0;*n=0;for(i=0;i<N;i++)ave+=a[i].s;ave/=N;for(i=0;i<N;i++)if(a[i].s<ave){b[j]=a[i];(*n)++;j++;}returnave;}intfun(STREC*a,STREC*b,int*n)\r\n{\r\ndoubleave=0.0;\r\ninti,j=0;\r\n*n=0;\r\nfor(i=0;i<N;i++)\r\nave+=a[i].s;\r\nave/=N;\r\nfor(i=0;i<N;i++)\r\nif(a[i].s<ave)\r\n{\r\nb[j]=a[i];\r\n(*n)++;\r\nj++;\r\n}\r\nreturnave;\r\n}解析:本题的设计思路是:(1)定义两个变量,分别用于保存总分和平均值,定义循环变量并赋初值:(2)利用循环语句遍历所有学生的分数,累加求和并计算初值;(3)再次遍历结构体数组,找出低于平均分的分数,把该学生的记录保存在形参数组b中,并记录其个数;(4)用return语句返回平均值。

26.

解析:(1)该程序功能是取大于整数m且紧靠m的k个素数。其中,素数是指只能被1和自身除尽的正整数(>1),所以判别n是否为素数,只要用2~n-1这些数逐个去除n,判断余数是否为0即可。只要有一次余数为0,n就不是素数,否则n为素数。

它的解题思路,可以分解为以下几步:判断是否为素数一判断素数个数是否满足要求一存储素数到指定的数组。

(2)从已给部分源程序的main主函数开始入手,核心函数“fun(m,n,zz);”中的参数由题目可知,zz存放素数,n为要求的素数个数。

27.floatfun(intmintn){inti;doublep=1.0;for(i=1;i<=m;i++)p=p*i;/*求m!*/for(i=1;i<=n;i++)p=p/i;/*求m!/n!*/for(i=1;i<=m-n;i++)p=p/i;/*求m!/(n!(m-n)!)*/returnp;}floatfun(intm,intn)\r\n{\r\ninti;\r\ndoublep=1.0;\r\nfor(i=1;i<=m;i++)p=p*i;/*求m!*/\r\nfor(i=1;i<=n;i++)p=p/i;/*求m!/n!*/\r\nfor(i=1;i<=m-n;i++)p=p/i;/*求m!/(n!(m-n)!)*/\r\nreturnp;\r\n}解析:本题中,欲求P的值,需要先求m,n,m-n的阶乘值,可用循环语句实现。注意阶乘值应当是double类型,若定义x,y,z为整型变量,则p=x/(y*z)中的除法为整数除法。

28.intfun(STRECa[]){intij;STRECt;for(i=1;i<N;i++)/*用冒泡法进行排序进行N-1次比较*/for(j=0;j<N-1;j++)/*在每一次比较中要进行N-1次两两比较*/if(a[j].s<a[j+1].s){t=a[j];a[j]=a[j+1];a[j+1]=t;}/*按分数的高低排列学生的记录高分在前*/}intfun(STRECa[])\r\n{\r\ninti,j;\r\nSTRECt;\r\nfor(i=1;i<N;i++)/*用冒泡法进行排序,进行N-1次比较*/\r\nfor(j=0;j<N-1;j++)/*在每一次比较中要进行N-1次两两比较*/\r\nif(a[j].s<a[j+1].s)\r\n{t=a[j];a[j]=a[j+1];a[j+1]=t;}/*按分数的高低排列学生的记录,高分在前*/\r\n}解析:冒泡法算法思路:如果有N个数,则要进行N-1次比较,在每一次比较中要进行N-1次两两比较(这种算法较好理解但不是最精的)。所谓两两比较就是从头到尾依次将相邻两个数进行比较并将其中大的数放在前或在后(若要求从小到大排序,则大的数要放在后。反之则对调),即两两比较后这两个数要形成题中所要求的顺序。由于总是从头到尾进行比较,所以第1次比较结束后,最大(或最小)数肯定在最后,第2次比较结束后,次最大(或次最小)数肯定在倒数的第2个数,依次类推,所以进行第一次比较时必须比较到最后一个数,而进行第2次比较时只要比较到倒数的第2个数即可,所以进行第i次比较时只需比较N-i次即可(这种算法较难理解,但它是最好的)。

选择法算法思路:如果有N个数则从头到倒数的第2个数一个一个往后走动,每走动1个数总是将这个数与其后的所有数进行比较并找出它们的最大(或最小)数,找出最大(或最小)数后再将所得的最大(或最小)数与该数进行交换,交换后再走到下一个数依次交换到结束。此外,选择法还可用如下思路:如果有N个数,则从头到倒数的第2个数—个一个往后走动,每走动一个数总是将这个数与其后的所有数进行两两比较,在比较时按顺序将进行比较的这两个数排序(即交换)。

插入法算法思路:先对头两个数进行排序。然后把第3个数插入到前两个数中,插入后前3个数依然有序;再把第4个数插入到前3个数中,插入后前4个数依然有序;依次插完所有的数。具体执行方式(假设从小到大排序):从第2个数开始往后一个一个走动直到最后。每走到1个数总是将该数(先将其存到1个临时变量中)与其前面的数进行比较(比较的顺序总是从后往前进行),在比较时只要发现该数比被比较的数小,就将被比较的数往后移1位,然后该数还要冉与前1个数进行比较,亢到发现该数比被比较的数大或己比较到头(即第1个数的前面),并将该数存入当前被比较数的后1位(存储空间)。

如果有整型一维数组a其有N个元素,要求将其按从小到大排序。注意元素下标是从0始的。

冒泡法:

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

for(j=0;N-1;j++)

if(a[j]>a[j+1])

{t=a[j];a[j]=a[j+1];a[j+1]=a[j];}

选择法

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

{p=i;

for(ji+1;j<N;j++)

if(a[p]>a[j])p=j;

if{p!=i)

t=a[i];a[i]=a[p];a[p]=t;

}

插入法

for{i=1;i<N;i++}

{t=a[i];

for{j=i-1;a[j]>t&&j>=0;j--)

a[j+1]=a[j];

a[j+1]=t;

}

29.voidfun(char*wintm){intij;chart;for(i=1;i<=m;i++)/*进行m次的循环左移*/{t=w[0];for(j=1/w[j]!='\0';j++)/*从第2个字符开始以后的每个字符都依次前移一个字符*/w[j-1]=w[j];w[j-1]=t;/*将第1个字符放到最后一个字符中*/}}voidfun(char*w,intm)\r\n{\r\ninti,j;\r\nchart;\r\nfor(i=1;i<=m;i++)/*进行m次的循环左移*/\r\n{t=w[0];\r\nfor(j=1/w[j]!='\\0';j++)/*从第2个字符开始以后的每个字符都依次前移一个字符*/\r\nw[j-1]=w[j];\r\nw[j-1]=t;/*将第1个字符放到最后一个字符中*/\r\n}\r\n}解析:我们在学习C语言的时候,应该广泛地应用到循环的方法,本题应采用“循环左移”的算法。即从第2个字符开始以后的每个字符都依次前移一个字符,而原来的第1个字符放在串中的最后一个字符。当要平移m个字符时,则要进行m次的循环左移。内嵌的循环的作用是完成从第2个字符开始以后的每个字符都依次前移一个字符,w[j-1]=t的作用是将第1个字符放到最后一个字符中。

30.

解析:该程序功能是求出存储在带头节点的链表结构中成绩的平均分。解题思路是,首先对单链表中存储的所有成绩求总分,然后对总分计算平均值。

31.

解析:该程序功能是将字符串尾部的“*”号全部删除,前面和中间的“*”号不删除。本题的解题过程首先确定由串尾开始的第一个非“*”位置,将由头开始到此位置的字符拷贝到字符串。

32.doublefun(intw[][N]){intijk=0;doubleav=0.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则它一定是周边元素*/{av=av+w[i][j];/*将周边元素求和*/k++;}returnav/k;/*求周边元素的平均值*/}doublefun(intw[][N])\r\n{\r\ninti,j,k=0;\r\ndoubleav=0.0;\r\nfor(i=0;i<N;i++)\r\nfor(j=0;j<N;j++)\r\nif(i==0||i==N-1||j==0||j==N-1)/*只要下标中有一个为0或N-1,则它一定是周边元素*/\r\n{av=av+w[i][j];/*将周边元素求和*/\r\nk++;\r\n}\r\nreturnav/k;/*求周边元素的平均值*/\r\n}解析:该题采用逐一判断的方式,周边元素的下标一定有一个是0或N-1,且只要下标中有一个为0或N-1,则它一定是周边元素。计算周边元素个数的方式是当给av加一个值时,则k加1。k也可用2*N+2*N-4求得。

33.doublefun(doublex[10]){doublexl=0.0s=0.0;inti;for(i=0;i<10;i++)xl=xl+x[i];xl-xl/10;/*求10个数的平均值*/for(i=0;i<l0;i++)s=s+(x[i]-xl)*(x[i]-x1);returnsqrt(s/l0);/*求10个数的方差*/}doublefun(doublex[10])\r\n{\r\ndoublexl=0.0,s=0.0;\r\ninti;\r\nfor(i=0;i<10;i++)\r\nxl=xl+x[i];\r\nxl-xl/10;\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求10个数的平均值*/\r\nfor(i=0;i<l0;i++)\r\ns=s+(x[i]-xl)*(x[i]-x1);\r\nreturnsqrt(s/l0);\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求10个数的方差*/\r\n}解析:又是一道算式表达题,程序中用第1个循环来完成求10个数的总和,接着再用x1=x1/10来求出平均值。

34.intfun(inta[][N]){intij;for(i=0;i<N;i++)for(j=0;j<=i;j++)a[i][j]=0;/*将数组左下半三角元素中的值全部置成0*/}intfun(inta[][N])\r\n{\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=0;j<=i;j++)\r\na[i][j]=0;/*将数组左下半三角元素中的值全部置成0*/\r\n}解析:本题旨在考查控制数组中左下半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。

35.C

36.B

37.A文件指针实际上是指向一个结构体类型的指针。这个结构体中包含缓冲区的地址、在缓冲区中当前存取字符的位置、对文件是“读”还是“写”、是否出错、是否已经遇到文件结束标识等信息。选项A正确,选项B、C错误;fscanf函数只能从文本文件中输入数据到内存,选项D错误。故本题答案为A选项。2022年湖南省长沙市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.设有条件表达式:(EXP)?i++;j--,则以下表达式中(EXP)完全等价的是()。

A.(EXP==0)B.(EXP!=0)C.(EXP==1)D.(EXP!=1)

2.

3.下列二维数组的说明中,不正确的是()。

A.floata[][4]={0,1,8,5,9};

B.inta[3][4]

C.#defineN5floata[N][3]

D.inta[2][9.5];

4.软件工程的出现是由于()。A.A.程序设计方法学的影响B.软件产业化的需要C.软件危机的出现D.计算机的发展

5.有以下定义:structperson{charname[10];intage;};structpersonclass[10]={“Johu”,17,“Paul”,19,“Mary”,18,“Adam”,16,};能输出字母M的语句是()。

A.printf(“%c\n”,class[2].name[0]);

B.printf(“%c\n”,class[3].name[0]);

C.printf(“%c\n”,class[3].name[1]);

D.printf(“%c\n”,class[2].name[1]);

6.有以下程序:#include<stdio.b>voidfun(charc){if(c>X)fun(c-1):printf("%C",c);}traia(){fun(z);}程序运行后的输出结果是()A.xyzB.wxyzC.xzyD.zvx

7.假设整型数i的地址为0x12345678,指针ip地址为0x21850043,则执行以下后,k的值为()。A.0x12345678B.0x21850043C.100D.不确定

8.下列结构体的定义语句中错误的是()。

A.structord{intx;inty;intz;}structorda;

B.structord{intx;inty;intz;};structorda;

C.structord{intx;inty;intz;}a;

D.struct{intx;inty;intz;}a;

9.以下程序运行后的输出结果是()。

A.2B.1C.3D.O

10.下列关于栈叙述正确的是A.栈顶元素最先能被删除B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.上述三种说法都不对

11.下列描述中正确的是______。

A.软件工程只是解决软件项目的管理问题

B.软件工程主要解决软件新产品的生产率问题

C.软件工程的主要思想是强调在软件开发过程中需要应用工程化原则

D.软件工程只是解决软件开发中的技术问题

12.下列叙述中错误的是()。A.程序可以由多个程序文件组成

B.一个C语言程序只能实现一种算法

C.程序可以由一个或多个函数组成

D.一个C函数可以单独作为一一个c程序文件存在

二、2.填空题(12题)13.C语言用于结构化程序设计的3种基本结构是______、选择结构和循环结构。

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

#defineMAX(x,y)(x)>(y)?(x):(y)

main()

{inta=5,b=2,c=3,d=3,t;

t=MAX(a+b,e+d)*10;

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

}

15.设y为int型变量,请写出描述“y是偶数”的表达式______。

16.对于长度为n的顺序存储的线性表,当随机插入和删除一个元素时,需平均移动元素的个数为【】。

17.以下isprime函数的功能是判断形参a是否为素数,如果是素数,函数返回1,否则返回0。

intisprime(inta)

inti;

for(i=2;i<=a/2;i++)

if(a%i==0)【】;

【】;

}

18.下列程序运行时输入1234567<CR>,则输出结果是______。

#include<stdio.h>

main()

{inta=1,b;

scanf("%2d%2d",&a,&b);printf("%d%d\n",a,b);

}

19.以下程序运行后的输出结果是【】。

main()

{inta=l,b=3,c=5;

if(C=a+b)printf("yes\n");

elseprintf("no\n");

}

20.在数据库理论中,数据物理结构的改变,如存储设备的更换、物理存储的更换、存取方式等都不影响数据库的逻辑结构,从而不引起应用程序的变化,称为【】。

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

#inClude<strinq.h>

char*ss(char*s)

{char*p;t;

p=S+1;t=*s;

while(*p){*(p-1)=*p;p++;}

*(p-1)=t;

returns;

}

main()

{char*p,str[10]="abcdefgh";

p=ss(str);

printf("%s\n",p);

}

22.软件测试按功能划分的方法划分,通常分为【】测试方法和黑盒测试方法。

23.函数compare的功能是比较两个字符串是否相等,若相等则函数返回1,否则返回o,请填空。

compare(chars[],chart[])

{

inti=0

while(s[i]==t[i]&&【】)i++;

return(【】?1:0);

}

24.在长度为n的有序线性表中进行二分查找。最坏的情况下,需要的比较次数为【】。

三、3.程序设计题(10题)25.学生的记录由学号和成绩组成,N名学生的数据已存放在主函数的结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。

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

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

[试题源程序]

#include<stdio.h>

#defineN8

typedefstruct

{

charnum[10];

doubles;

}STREC;

doublefun(STREC*a,STREC*b,int*n)

{

}

voidmain()

{

STRECs[N]={{"GA05",85},

{"GA03",76},{"GA02",69},{"GA04",85},

{"GA01",91},{"GA07",72},{"GA08",64},

{"GA06",87}};

STRECh[N],t;FILE*out;

inti,j,n;

doubleave;

ave=fun(s,h,&n);

printf("The%dstudentdatawhichislowerthan%7.3f:\n",n,ave);

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

printf("%s%4.1f\n",h[i].num,h[i].s);

printf("\n");

ut=fopen("out.dat","W");

fprintf(out,"%d\n%7.3f\n",n,ave);

for(i=0;2<n-1;i++)

for(j=i+1;j<n;j++)

if(h[i].s>h[j].s)

{

t=h[i];

h[i]=h[j];

h[j]=t;

}

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

fprintf(out,"%4.1f\n",h[i].s);

fclose(out);

}

26.请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17,5,则应输出:19,23,29,3l,37。

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

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

27.编写函数fun(),它的功能是;根据以下公式求p的值,结果由函数值带回。m与n为两个正数且要求m>n。

P=m!/n!(m-n)!),例如:m=12,n=8时,运行结果为495.000000。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

floatfun(intm,intn)

{

}

main()

{

clrscr();

printf("p=%f\n",fun(12,8));

}

28.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:按分数的高低排列学生的记录,高分在前。

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

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

试题程序:

#include<stdio.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

intfun(STRECa[])

{

}

main()

{

STRECsIN]={{"GA005",85},{"GA003",76},

{"GA002",69},{"GA004",85},{"GA001",91},

{"GA007",72},{"GA008",64},{"GA006",87},

{"GA015",85},{"GA013",91},{"GA012",64},

{"GA014",91},{"GA011",66},{"GA017",64},

{"GA018",64},{"GA016",72}};

inti;

FILE*out;

fun(s);

printf("Thedataaftersorted:In");

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

{if((i)%4=-0)

/*每行输出4个学生记录*/

printf("\n");

printf("%s%4d",s[i].num,s[i].s);

}

printf("\n");

out=fopen("out16.dat","w");

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

{if((i)%4==0&&i)

fprintf(out,"\n");

fprintf(out,"%4d",s[i].s);

}

fprintf(out,"\n");

fclose(out);

}

29.请编写函数fun(),该函数的功能是:移动字符串中的内容,移动的规则是把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。

例如,字符串中原有的内容为ABCDEFGHIJK,m的值为3,移动后,字符串中的内容应该是DEFGHIJKABC。

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

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

试题程序:

#include<stdio.h>

#include<string.h>

#defineN80

voidfun(char*w,intm)

{

}

main()

{

chara[N]="ABCDEFGHIJK";

intm;

printf("Theoriginastring:\n");

puts(a);

printf("\n\nEnterm:");

scanf("%d",&m);

fun(a,m);

printf("\nThestringaftermoving:\n");

puts(a);

printf("\n\n");

}

30.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。

例如,若学生的成绩是:85,76,69,85,91,72,64,87,则平均分应当是:78.625。

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

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

31.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。

例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****A*BC*DEF*G。在编写函数时,不得使用C语言提供的字符串函数。

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

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

32.下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun(),函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。例如:若a数组中的值为

a=01279

19745

23831

45682

59141

则返回土程序后s的值应为3.375。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

doublefun(intw[][N])

{

}

main()

{

inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,

3,8,3,1,4,5,6,8,2,5,9,1,4,1};

inti,j;

doubles;

clrscr();

printf("*****Thearray*****\n");

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

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

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

printf("\n");

}

s=fun(a);

printf("*****THERESULT*****\n");

printf("Thesumis:%lf\n",s);

}

33.请编写函数fun(),其功能是:计算并输出给定10个数的方差。

其中

例如,给定的10个数为95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0,则输出为S=11.730729。

注意;部分源程序给出如下.

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

试题程序:

#include<math.h>

#include<stdio.h>

doublefun(doublex[10])

{

}

main()

{

doubles,x[i0]={95.0,89.0,76.0,65.0,

88.0,72.0,85.0,81.0,90.0,56.0};

inti;

printf("\nTheoriginaldatais:\n");

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

printf("%6.1f",x[i]);

printf("\n\n");

s=fun(x);

printf("s=%f\n\n",s);

}

34.下列程序定义了N×N的二维数组,并在主函数中自动赋值;请编写函数fun(inta[][N]),该函数的功能是:使数组左下半三角元素中的值全部置成0。例如a数组中的值为

a=197

238

456

则返回主程序后a数组中的值应为

097

008

000

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N])

{

}

main()

{

inta[N][N],i,j;

clrscr();

printf("*****Thearray*****\n");

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

/*产生—个随机的5*5矩阵*/

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

{a[i][j]=rand()%10;

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

}

printf("\n");

}

fun(a);

printf("THERESULT\n");

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

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

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

printf("\n");

}

}

四、单选题(0题)35.

五、单选题(0题)36.将发送端数字脉冲信号转换成模拟信号的过程称为

A.链路传输B.调制C.解调D.数字信道传输

六、单选题(0题)37.以下叙述中正确的是()。

A.文件指针是一种特殊的指针类型变量

B.文件指针的值等于文件当前读写位置,以字节为单位

C.文件指针的值等于文件在计算机硬盘中的存储位置

D.调用fscanf函数只能向文本文件中写入任意字符

参考答案

1.B解析:条件表达式的形式为:“表达式1?表达式2:表达式3”。其含义为:当“表达式1”的值为非零时,求出“表达式2”的值,此时“表达式2”的值就是整个条件表达式的值;当“表达式1”的值为零时,求出“表达式3”的值,此时“表达式3”的值就是整个条件表达式的值。对于本题来说,当表达式EXP为非0值时条件成立,即执行语句i++;当EXP等于0时,执行语句j--;这等同于条件表达式“(EXP!=0)?i++:i++;”。

2.C

3.D解析:C语言规定,对于二维数组,只可以省略第一个方括号中的常量表达式,而不能省略第二个方括号中的常量表达式:二维数组的一般定义格式是:类型说明符数组名[常量表达式][常量表达式]。

4.C解析:软件工程的基本概念。软件工程概念的出现源自于软件危机。为了消除软件危机,通过认真研究解决软件危机的方法,认识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念。

5.AC语言规定数组的下标从0开始,结构体数组class初始化了前4个元素。第3个元素的name=“Marry”,则class[2].name[0]=‘M’。故本题答案为A选项。

6.A本题考查简单的递归函数,当c>X则会产生递归,依次类推,答案选择A.

7.C

8.AA选项错误,在定义结构体语句后少了分号。故本题答案为A选项。

9.A参数r的传递是地址传递,函数调用会改变其值。函数f的功能是:判断n是否为3或5的倍数,如果是,则将指针r所指的内存空间赋值为n除以3或5的商;否则n递减,直到它可以被3或5整除。初始时调用函数f(7,&r);n=7,执行else子句,调用f(6,&r1);后n=6,执行语句if(n%3==0)r1=n/3;,此后执行语句*r=rl;。所以r=6/3=2。

10.A解析:在栈中,允许插人与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。故本题选A。

11.C解析:软件工程是解决软件项目的管理、软件开发过程中的技术、软件产品的生产率等问题,它的主要思想是强调在软件开发过程中需要应用工程化原则。

12.B[解析]在一个C语言程序中可以进行多种算法的实现,对算法的个数没有规定,所以B)错误。

13.顺序结构顺序结构解析:结构化程序有3种摹本结构,即顺序结构、选择结构(包括if语句和switch语句)和循环结构(包括for语句、while语句、do…while语句)。

14.77解析:在C语言中,宏定义是直接替换的,所以在对表达式MAX(a+b,c+d)*l0进行替换后,表达式变为(a+b)>(c+d)?(a+b):(c+d)*10。在这个条件表达式中,(a+b)>(c+d)为真,所以用(a+b)的值作为整个表达式的值(否则用(c+9d)*10)的值作为整个表达式的值),而(a+b)的值为7。所以整个表达式的值为7。

15.(y%2)==0(y%2)==0解析:因符合偶数的条件是对2取余为0,所以要描述y是偶数的表达式是(y%2)==0。

16.n/2n/2解析:删除一个元素,平均移动的元素个数为(n-1+n-2+…+0)/n=(n-1)/2;插入一个元素,平均移动元素个数为(n+n-1+n-2+…+1)/n=(n+1)/2;所以总体平均移动元素个数为n/2。

17.return0或return(0)return1或return(1)return0或return(0)\r\nreturn1或return(1)解析:素数是指只能被1和其本身整除,不能被其他任何整数整除的数。根据if条件语句,若形参a对i取余等于0,则形参a可以被其他数整除,所以第一处填return0;若形参a对i取余不等于0,则形参s不可以被其他数整除,所以第二处填return1。

18.本题考查的重点是scanf函数的调用。scanf(“<格式化字符串>”,<地址表>),格式化字符串后可以加上场宽,本题中两个变量的场宽都为2,所以输入1234567<CR>后,变量a的值为12。变址b的值为34,从而输出为1234。\r\n\r\n

19.yesyes解析:本题中,if后面括号里的表达式为c=a+b为真(即c=1+3=4为真),所以,执行printf('yes\\n'),最后输出yes。

20.物理独立性物理独立性解析:数据的物理结构改变,不影响数据库的逻辑结构,从而不引起应用程序的变化,这种性质叫做物理独立性。

21.bcdefghabcdefgha解析:在本题定义的ss()函数中首先定义了一个指针p和一个字符变量t,然后让p指向参数指针s的下一个位置s+1,并让t保存s位置的字符.然后使用一个while循环将p指向的内容赋给它前面一个位置,即将参数s所指的字符串从第2个字符开始整体往前移动一位。循环结束时,p指向原s串的结束标志处,所以让*(p-1)=t;即是将原s串的第1个字符复制到s串的最后一个位置。整个函数实现的是让一个字符串循环左移一位。故主函数中最后输出的字符串是'bcdefgha'。

22.白盒白盒解析:软件测试的方法分为白盒测试方法和黑盒测试方法。

23.s[i]&&t[i]或s[i]!='\0'&&t[i]!='\0'!(s[i]-t[i])s[i]&&t[i]或s[i]!='\\0'&&t[i]!='\\0'\r\n!(s[i]-t[i])解析:while后括号中的判断条件为两个字符串相同位置上的字符相等,且两个字符串都没有结束,则循环。故第一空应该填s[i]&&t[i]或其他等价表达式。如果两个字符串完全相等,则while循环退出时s[i]和t[i]的值同时为0,否则s[i]和t[i]不相等。故表达式s[i]-t[i]在字符串相等时为0,不相等时为非0,所以第二空应该填!(s[i]-t[i])就满足题意了。

24.log2n

25.intfun(STREC*aSTREC*bint*n){doubleave=0.0;intij=0;*n=0;for(i=0;i<N;i++)ave+=a[i].s;ave/=N;for(i=0;i<N;i++)if(a[i].s<ave){b[j]=a[i];(*n)++;j++;}returnave;}intfun(STREC*a,STREC*b,int*n)\r\n{\r\ndoubleave=0.0;\r\ninti,j=0;\r\n*n=0;\r\nfor(i=0;i<N;i++)\r\nave+=a[i].s;\r\nave/=N;\r\nfor(i=0;i<N;i++)\r\nif(a[i].s<ave)\r\n{\r\nb[j]=a[i];\r\n(*n)++;\r\nj++;\r\n}\r\nreturnave;\r\n}解析:本题的设计思路是:(1)定义两个变量,分别用于保存总分和平均值,定义循环变量并赋初值:(2)利用循环语句遍历所有学生的分数,累加求和并计算初值;(3)再次遍历结构体数组,找出低于平均分的分数,把该学生的记录保存在形参数组b中,并记录其个数;(4)用return语句返回平均值。

26.

解析:(1)该程序功能是取大于整数m且紧靠m的k个素数。其中,素数是指只能被1和自身除尽的正整数(>1),所以判别n是否为素数,只要用2~n-1这些数逐个去除n,判断余数是否为0即可。只要有一次余数为0,n就不是素数,否则n为素数。

它的解题思路,可以分解为以下几步:判断是否为素数一判断素数个数是否满足要求一存储素数到指定的数组。

(2)从已给部分源程序的main主函数开始入手,核心函数“fun(m,n,zz);”中的参数由题目可知,zz存放素数,n为要求的素数个数。

27.floatfun(intmintn){inti;doublep=1.0;for(i=1;i<=m;i++)p=p*i;/*求m!*/for(i=1;i<=n;i++)p=p/i;/*求m!/n!*/for(i=1;i<=m-n;i++)p=p/i;/*求m!/(n!(m-n)!)*/returnp;}floatfun(intm,intn)\r\n{\r\ninti;\r\ndoublep=1.0;\r\nfor(i=1;i<=m;i++)p=p*i;/*求m!*/\r\nfor(i=1;i<=n;i++)p=p/i;/*求m!/n!*/\r\nfor(i=1;i<=m-n;i++)p=p/i;/*求m!/(n!(m-n)!)*/\r\nreturnp;\r\n}解析:本题中,欲求P的值,需要先求m,n,m-n的阶乘值,可用循环语句实现。注意阶乘值应当是double类型,若定义x,y,z为整型变量,则p=x/(y*z)中的除法为整数除法。

28.intfun(STRECa[]){intij;STRECt;for(i=1;i<N;i++)/*用冒泡法进行排序进行N-1次比较*/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论