2022-2023学年山西省忻州市全国计算机等级考试C语言程序设计模拟考试(含答案)_第1页
2022-2023学年山西省忻州市全国计算机等级考试C语言程序设计模拟考试(含答案)_第2页
2022-2023学年山西省忻州市全国计算机等级考试C语言程序设计模拟考试(含答案)_第3页
2022-2023学年山西省忻州市全国计算机等级考试C语言程序设计模拟考试(含答案)_第4页
2022-2023学年山西省忻州市全国计算机等级考试C语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩49页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2022-2023学年山西省忻州市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.

2.以下说法错误的是()。

A.由3种基本结构组成的结构化程序不能解决过于复杂的问题

B.由3种基本结构组成的结构化程序能解决一些简单的问题

C.由3种基本结构组成的结构化程序能解决递归问题

D.由3种基本结构组成的结构化程序能解决数学上有解析解的问题

3.用C语言编写的代码程序

A.可立即执行B.是一个源程序C.经过编译即可执行D.经过编译解释即可执行

4.以下描述中正确的是

A.由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句

B.do-while循环由d。开始,用while结束,在while(表达式)后面不能写分号

C.在do-while循环体中,是先执行一次循环,再进行判断

D.do-while循环中,根据情况可以省略while

5.下列条件语句中,输出结果与其他语句不同的是()。

A.if(a!=0)printf(“%d\n”,x);elseprintf(“%d\n”,y);

B.if(a==0)printf(“%d\n”,y);elseprintf(“%d\n”,x);

C.if(a==0)printf(“%d\n”,x);elseprintf(“%d\n”,y);

D.if(a)printf(“%d\n”,x);elseprintf(“%d\n”,y);

6.运行下列程序,若从键盘输入字符“a”,则输出结果是()。

charc;

c=getchar;

if(c>=a&&c<=g)c=c+4:

elseif(c>=9&&c<=2)c=c-21:

elseprintf("inputerror!\n");

putchar(c);

A.fB.tC.eD.d

7.有以下程序:#include<stdio.h>main(){inta=2,b;b=a<<2;printf("%d\n",b);}程序运行后的输出结果是()。A.2B.4C.6D.8

8.下列关于栈的描述中错误的是()。

A.栈是先进先出的线性表B.栈只能顺序存储C.栈具有记忆作用D.对栈的插入删除操作中,不需要改变栈底指针

9.若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是()A.1B.2C.2.0D.2.5

10.依次读入数据元素序列{a,b,c,d,e,f,g}进栈,元素进栈或出栈顺序是未知的,下列序列中,不可能成为栈空时弹出的元素构成序列的有()

A.{d,e,c,f,b,g,a}

B.{f,e,g,d,a,c,b}

C.{e,f,d,g,c,b,a}

D.{c,d,b,e,f,a,g}

11.以下叙述中错误的是()。

A.通过指针变量存取某个变量值的方式称为“直接存取”方式

B.在程序的开头包含头文件stdio.h后,可以给指针变量赋NULL值

C.将一个指针变量中的值赋给另一个指针变量,则这两个指针变量指向同一地址

D.C语言中函数返回值的类型可以是简单的数据类型,也可以是指针类型

12.设有定义“intx=2;”,以下表达式中,值不为6的是()。

A.2*x,x+=2B.x++,2*xC.x*=(1+x)D.x*=x+1

二、2.填空题(12题)13.类是一个支持集成的抽象数据类型,而对象是类的【】。

14.strcat函数的作用是【】。

15.有以下定义和语句,则sizeof(a)的值是【】,而sizeof(a.share)的值是【】。

structdatc

{intday;

intmouth;

intyear:

union{intshare1;

floatshare2:

}share;

}a;

16.Jackson结构化程序设计方法是英国的M.Jackson提出的,它是一种面向______的设计方法。

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

fun(intx,inty,intz)

{z=x*x+y*y;}

main()

{inta=31;

fun(6,3,a)

printf("%d,a)

}

18.以下函数rotate的功能是:将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第0列中,把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b所指二维数组中其他数据不变。

#defineN4

voidrotate(inta[][N],intb[][N])

{inti,j;

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

{b[i][N-1]=______;______=a[N-1][i];}

}

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

main()

{inti=10,j=0;

do

{j=j+i;i-;}

while(i>2);

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

}

20.下列程序的输出结果是【】。

main()

{inti;

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

{if(i>4)

{printf("%d\n",i);

break;}

printf("%d\n",i++);}}

21.软件工程研究的内容主要包括:【】技术和软件工程管理。

22.在面向对象方法中,类的实例称为______。

23.设有定义“struct{inta;floatb;charc;}abc,*p_abc=&abc;”,则对结构体成员a的引用方法可以是abc.a和p_abc【】a。

24.在链表的运算过程中,能够使空表与非空表的运算统一的结构是______。

三、3.程序设计题(10题)25.程序定义了N×N的二维数组,并在主函数中自动赋值。

请编写函数fun(inta[][N],intn),该函数的功能是使数组左下半三角元素中的值加上n。

例如:若n的值为3,a数组中的值为

a=254

169

537

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

554

499

8610

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

fun(inta[][N],intn)

{

}

main()

{

inta[N][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");

}

do

n=rand()%10;

/*产生一个小于5的随机数n*/

while(n>=5);

printf("n=%4d\n",n);

fun(a,n);

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

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

{

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

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

printf("\n");

}

}

26.请编写函数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");

}

27.编写函数fun(),它的功能是求n以内(不包括n)同时能被5与11整除的所有自然数之和的平方根s,并作为函数值返回。

例如:n为1000时,函数值应为s=96.979379。

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

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

试题程序:

#include<conio.h>

#include<math.h>

#include

doublefun(intn)

{

}

main()

{

clrscr();

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

}

28.请编一个函数floatfun(doubleh),函数的功能是对变量h中的值保留两位小数,并对第三位进行四舍五入(规定h中的值为正数)。

例如:若h值为8.32433,则函数返回8.32:若h值为8.32533,则函数返回8.33。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

floatfun(floath)

{

}

main()

{

floata;

clrscr();

printf("Entera:");

scanf("%f",&a);

printf("Theoriginaldatais:");

printf("%f\n\n",a);

printf("Theresult:%f\n",fun(a));

}

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

01279

1112155

2216111

979102

54141

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

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

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

[试题源程序]

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

intfun(intw[][N])

{

}

main()

{

inta[N][N]=(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);

inti,j;

ints;

clrscr()

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

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

{

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

{

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

}

printf("\n");

}

s=fun(a);

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

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

}

30.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:函数返回指定成绩的学生数据,指定的成绩在主函数中输入。若没找到指定的成绩,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。

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

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

试题程序:

#include<stdio.h>

#include<stdlib.h>

#defineN16

typedefstruct

{charnum[l0];

ints;

}STREC;

STRECfun(STREC*a,intb)

{

}

main()

{

STRECs[N)={{“GA005”,76},{“GA003”,89},

{“GA002”,64},{“GA004”,75},{“GA001”,88},

{“GA007”,65},{“CA008”,96},{“GA006”,69},

{“GA015”,85},{“GA013”,78},{“GA012”,62},

{“GA014”,60},{“GA011”,73},{“GA017”,72},

{“GA018”,98},{“GA016”,94}};

STRECh;

intm;

inti,n;

FILE*out;

printf(“Theoriginaldata:\n”);

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

{if(i%4==0)

printf(“\n”);

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

printf(“%s%3d”,s[i].num,s[i].s);

}

printf(“\n\nEnterthescore:”);

scanf(“%d”,&m);

h=fun(S,m);

printf(“Thedata:”);

printf(“\n%s%4d\n”,h.mum,h.S);

printf(“\n”);

ut=fopen(“out24.dat",“W”);

h=fun(s,85);

fprintf(out,“%S%4d\n”,h.num,h.S);

fclose(out);

}

31.请编写函数fun(),该函数的功能是:将两个两位数的正整数a,b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。

例如,当a=45时,b=12,调用到该函数后,c=5142。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

voidfun(inta,intb,long*c)

{

}

main()

{

inta,b;

longc;

clrscr();

printf("Inputa,b:");

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

fun(a,b,&c);

printf("Theresultis:%ld\n",c);

}

32.请编写函数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);

}

33.编写函数fun(),它的功能是:计算和输出下列级数的和。

S=1/(1×2)+1/(2×3)+…+1/(n×(n+1))

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

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

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

试题程序;

#include<conio.h>

#include<stdio.h>

doublefun(intn)

{

}

main()

{

clrscr();

printf("%f\n",fun(10));

}

34.请编写函数fun,其功能是:计算并输出下列多项式的值:

例如,在主函数中从键盘给n输入15,则输出为:s=2.718282。

注意:要求n的值大于1但不大于100。部分源程序在文件PROGl.C中。

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

四、单选题(0题)35.设有以下宏定义:#defineN3#defineY(n)((N+1)*n)则执行以下语句后,z的值为______。z=2*(N+Y(5+1));A.出错B.42C.48D.54

五、单选题(0题)36.下列选项中,能够满足“只要字符串s1等于字符串S2,则执行ST”要求的是()。

A.if(s1-s2==0)ST;

B.if(s1==s2)ST;

C.if(strcpy(s1,s2)==1)ST;

D.if(strcmp(s2,s1)==0)ST;

六、单选题(0题)37.设有定义:floata=2,b=4,h=3;以下c语言表达式中与代数式(a+B)h计算结果不相符的是()。A.(a+B)*h/2B.(1/2)*(a+B)*hC.(a+B)*h*1/2D.h/2*(a+B)

参考答案

1.A

2.A顺序结构、选择结构、循环结构是3种基本结构,由3种基本结构构成的程序称为结构化程序,由3种基本结构组成的算法可以解决任何复杂的问题,选项A错误。本题答案为A选项。

3.B解析:C语言一种高级语言,C语言源程序经过C语言编译程序编译之后,生成一个后缀为。OBJ的二进制文件(称为目标文件),最后还要由称为“连接程序”(Link)的软件,把此。OBJ文件与C语言提供的各种库函数连接在一起,生成一个后缀.EXE的可执行文件。显然C语言不能立即执行,故选项A错误;根据以上定义,选项C和选项D错误,所以,4个选项中选项B符合题意。

4.C解析:do-while语句的一般形式为:do循环体语句while(表达式);,其中循环体语句可以是复合型语句,但必须用花括号括起来。while后必须要有分号作为语句的结束,在do-while循环中,不可以省略while。

5.CA、B、D选项的含义均为:a的值如果为0,输出y的值,否则输出x的值。而C选项的含义是:a的值为0时输出x的值,不为0时输出y的值,与其他选项正好相反。故本题答案为C选项。

6.C

\ngetchar函数是读取键盘的输入函数,本题中输入字母“a”,则c=a,判断if条件,发现a>=a&&a<=g成立,则执行下列语句:C=C+4,C得到的字符的ASCII码值,退出if语句,通过putchar函数输出字符。

7.D本题考查运算符“<<”,b=a<<2,是左移2位,a=2,即b=2*2*2=8。

8.B

\n栈是线性表的一种,它的特点是先进后出,并且只能在表的一端进行插入和删除操作的线性表,入栈和出栈都是在栈顶进行,因此具有记忆作用,栈可以采用顺序存储,也可以采用链式存储。

\n

9.C解析:这是一个逗号表达式,它的值应为表达式y=x+3/2的值,而前一个表达式已给x赋值1,在没有进行类型转换的情况下,3/2的值为1,所以x+3/2的值应为2.0。

10.B

11.A通过指针变量存取某个变量值的方式称为“间接存取”方式,选项A错误;头文件stdio.h中定义了NULL,在程序的开头包含stdio.h后,可以给指针变量赋NULL值,表示一个空指针,选项B正确;将一个指针变量中的值赋给另一个指针变量,这两个指针变量指向同一地址,选项C正确;C语言中函数返回值的类型可以是简单的数据类型,也可以是指针类型,选项D正确。故本题答案为A选项。

12.AA选项中先计算逗号表达式的第1个表达式“2*x”,然后计算第2个表达式“x+=2”,即“x=x+2=4”,整个逗号表达式为第2个表达式的值4。所以A选项正确。B选项中首先计算逗号表达式的第1个表达式“x++”,此时x为3;再计算第2个表达式“2*x=2*3=6”,所以逗号表达式为第2个表达式的值6。C选项中的表达式可以表示为“x=x*(1+x)=2*(1+2)=6”。D选项中的表达式可以表示为“x=x*(x+1)=2*3=6”。故本题答案为A选项。

13.实例将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,对象则是其对应类的一个实例。

14.连接两个字符数组中的字符连接两个字符数组中的字符解析:strcat函数的作用是连接两个字符数组中的字符串。

15.10410\r\n4解析:结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。int占2个字节,float占4个字节,共用体变量所占的内存长度等于最长的成员的长度。所以,sizeof(a.share)的值是4,sizeof(A)的值是2+2+2+4=10。

16.数据结构数据结构

17.3131解析:在函数调用时,形参值和改变,不会改变实参的值。

18.a[0][i]b[i][0]a[0][i]\r\nb[i][0]解析:因为数组a[N][N]的第0行表示为a[0][n](n=0~3),而数组b[N][N]的最后一列表示为b[n][N-1)(n=0~3),所以前一空应该填a[0][i]。又因为数组a[N][N]的最后一行表示为a[N-1)][n](n=0~3),而数组b[N][N]的第0列表示为b[n][0](n=0~3),所以后一空应该填b[i][0]。

19.5252解析:do...while语句的形式为:

do

{

语句;

}while(条件表达式)

当条件表达式为非零时,继续执行循环体,直到条件表达式为零时退出循环。

20.1351\r\n3\r\n5解析:本题考查了for循环语句的使用,break语句用在本题中是结束for循环直接跳出循环体外。当i=1时,因为if语句条件不满足,所以直接执行printf('%d\\n',i++);输出1,同时i自加1;执行第二次for循环时,i=3;同样的if语句条件不满足,所以直接执行printf('%d\\n',i++);输出3,同时i自加1;执行第三次for循环时,i=5,if语句条件满足,所以执行printf('%d\\n',i),输出5,然后break语句跳出了for循环。

21.软件开发

22.对象对象解析:类描述的是具有相似性质的一组对象。例如,每本具体的书是一个对象,而这些具体的书都有共同的性质,它们都属于更一般的概念“书”这一类对象。一个具体对象称为类的实例。

23.->->解析:若结构体变量abc有成员a,并有指针p_abc指向结构变量abc,则引用变量abc成员a的标记形式有abc.a和p_abc->a。

24.循环链表循环链表解析:在循环链表中,由于设置了一个头结点,因此在任何情况下,循环链表中至少有一个结点存在,从而使空表与非空表的运算统一。

25.fun(inta[][N]intn){intij;for(i=0;i<N;i++)for(j=0;j<i;j++)a[i][j]=a[i][j]+n/*使数组左下半三角元素中的值加上n*/}fun(inta[][N],intn)\r\n{\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=0;j<i;j++)\r\na[i][j]=a[i][j]+n/*使数组左下半三角元素中的值加上n*/\r\n}解析:首先从数组中找出要被加上n的那部分元素,找的过程其实就是找出将被挑出的那部分元素在原数组中的分布规律的过程。通过观察得出,要被处理的那部分元素的下标值的范围是每行中从第一个元素开始,直到列数等于该行行数时为止。找到这个规律后,依次从数组中取得合乎要求的元素,然后再加上n。

26.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个字符放到最后一个字符中。

27.doublefun(intn){doubles=0.0;inti;for(i=0;i<n;i++)/*从0~n中找到既能被5整除同时又能被11整除的数并将这些数求和*/if(i%5==0&&i%11==0)s=s+i;s=sqrt(s);/*对s求平方根*/returns;doublefun(intn)\r\n{doubles=0.0;\r\ninti;\r\nfor(i=0;i<n;i++)/*从0~n中找到既能被5整除同时又能被11整除的数,并将这些数求和*/\r\nif(i%5==0&&i%11==0)\r\ns=s+i;\r\ns=sqrt(s);/*对s求平方根*/\r\nreturns;解析:本题的解题思路是逐个取得从。0-n之间的所有数,对每次取得的数进行条件判断,条件是既能被5整除同时又能被11整除,注意:这两个条件要求同时成立,因此用到了“&&”运算符。满足条件,该数就被累加到s中去,求出所有符合条件的数后,用sqrt()函数(包含于头文件<math.h>中)对s求平方根。

28.floatfun(floath){longt;t=(h*1000+5)/10;/*单精度数h乘以1000后再加5相当十对h中的第三位小数进行四舍五入除以10后将其赋给一个长整型数时就把第三位小数后的数全部截去*/return(float)t/100;/*除以100保留2位小数*/floatfun(floath)\r\n{\r\nlongt;\r\nt=(h*1000+5)/10;/*单精度数h乘以1000后再加5,相当十对h中的第三位小数进行四舍五入\r\n除以10后将其赋给一个长整型数时就把第三位小数后的数全部截去*/\r\nreturn(float)t/100;/*除以100,保留2位小数*/解析:注意本题要求h的值真正发生了四舍五入,而不是为了输出,即不能用printf(“%7.2f”,h)来直接得到结果。由于单精度数h乘以1000后再加5,此时相当于对h中的第三位小数进行四舍五入,再将其赋给一个长整型数时就把第三位小数后的数全部截去。注意在return中要将其中一个数转成浮点型数。

29.intfun(intw[][N]){intijk=0;ints=0;for(i=0;i<N;i++)for(j=0;j<N;j++)if(i==0||i==N-1||j==0||j==N-1){s=s+w[i][j]*w[i][j];}returns;}intfun(intw[][N])\r\n{\r\ninti,j,k=0;\r\nints=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)\r\n{\r\ns=s+w[i][j]*w[i][j];\r\n}\r\nreturns;\r\n}

30.STRECfun(STREC*aintb){inti;STRECstr={“\0”-1);/*若没找到指定的成绩在结构体变量中给学号置空串给成绩置-1*/for(i=0;i<N;i++)if(a[i].s==b)/*找到指定成绩的学生记录*/str=a[i];returnstr;/*返回学生记录*/}STRECfun(STREC*a,intb)\r\n{\r\ninti;\r\nSTRECstr={“\\0”,-1);/*若没找到指定的成绩,在结构体变量中给学号置空串,给成绩置-1*/\r\nfor(i=0;i<N;i++)\r\nif(a[i].s==b)/*找到指定成绩的学生记录*/\r\nstr=a[i];\r\nreturnstr;/*返回学生记录*/\r\n}解析:本程序一开始先使结构休变量str的学号为空出,成绩为-1。题中循环体的功能是搜索所有学生的成绩并判断是否有成绩与b所指定的成绩相同(即找到),若找到则给str重新赋值(str=a[i]),若没找到则str成员的值还是原有值(即未找到时学号返回空串,成绩返回-1)。

31.voidfun(intaihtblong*c){*c=a%10*i000+b/10*l00+a/10*10+b%10;/*将a数的十位和个位数依次放在c数的十位和千位上b数的十位和个位数依次放在c数的百位和个位上*/}voidfun(inta,ihtb,long*c)\r\n{\r\n*c=a%10*i000+b/10*l00+a/10*10+b%10;/*将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和\r\n个位数依次放在c数的百位和个位上*/\r\n}解析:本题中主要的问题是怎么取出a和b的个位数和十位数,取出后怎么表示成c中相应的位数。由于a和b都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。如45/10结果为4而不是4.5(这是由于两个数都为整型,所以结果出为整型),45%10结果为5。若a为45,则a/10*10的结果为40而非45。乘1000,乘100和乘10的作用是分别使其胶面的数成为*c的千位数、百位数。注意要使用c时要注意进行指针运算,即*c,不能少了*号。

32.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来求出平均值。

33.doublefun(intn){inti;doubles=0.0;for(i=l;i<=n;i++)s=s+l.0/(i*(i+l));/*求级数的和*/returns;}doublefun(intn)\r\n{\r\ninti;\r\ndoubles=0.0;\r\nfor(i=l;i<=n;i++)\r\ns=s+l.0/(i*(i+l));/*求级数的和*/\r\nreturns;\r\n}解析:解决数学序列的问题,我们的思路依然是“数学先行”,即先看清楚题目的数学逻辑,然后再根据C语言来“翻译”出来。本题中,每一项的值都是n*(n+1)的倒数。当输入n时,从1开始循环,注意,此处for(i=1;i

34.

解析:该程序功能是计算并输出多项式的值。该题的解题思路是。根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。

35.D

36.D在C语言中,对两个字符串进行比较,使用字符串比较函数strcmp。如果这个函数的返回值等于0,说明两个字符串相等。故本题答案为D选项。

37.B解析:选项B中由于1和2都是整型,其1/2的运算结果为0,故整个表达式的值为0,所以它的结果和题目中要求的代数式的讨算结果不相符,所以,4个选项中选项B符合题意。2022-2023学年山西省忻州市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.

2.以下说法错误的是()。

A.由3种基本结构组成的结构化程序不能解决过于复杂的问题

B.由3种基本结构组成的结构化程序能解决一些简单的问题

C.由3种基本结构组成的结构化程序能解决递归问题

D.由3种基本结构组成的结构化程序能解决数学上有解析解的问题

3.用C语言编写的代码程序

A.可立即执行B.是一个源程序C.经过编译即可执行D.经过编译解释即可执行

4.以下描述中正确的是

A.由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句

B.do-while循环由d。开始,用while结束,在while(表达式)后面不能写分号

C.在do-while循环体中,是先执行一次循环,再进行判断

D.do-while循环中,根据情况可以省略while

5.下列条件语句中,输出结果与其他语句不同的是()。

A.if(a!=0)printf(“%d\n”,x);elseprintf(“%d\n”,y);

B.if(a==0)printf(“%d\n”,y);elseprintf(“%d\n”,x);

C.if(a==0)printf(“%d\n”,x);elseprintf(“%d\n”,y);

D.if(a)printf(“%d\n”,x);elseprintf(“%d\n”,y);

6.运行下列程序,若从键盘输入字符“a”,则输出结果是()。

charc;

c=getchar;

if(c>=a&&c<=g)c=c+4:

elseif(c>=9&&c<=2)c=c-21:

elseprintf("inputerror!\n");

putchar(c);

A.fB.tC.eD.d

7.有以下程序:#include<stdio.h>main(){inta=2,b;b=a<<2;printf("%d\n",b);}程序运行后的输出结果是()。A.2B.4C.6D.8

8.下列关于栈的描述中错误的是()。

A.栈是先进先出的线性表B.栈只能顺序存储C.栈具有记忆作用D.对栈的插入删除操作中,不需要改变栈底指针

9.若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是()A.1B.2C.2.0D.2.5

10.依次读入数据元素序列{a,b,c,d,e,f,g}进栈,元素进栈或出栈顺序是未知的,下列序列中,不可能成为栈空时弹出的元素构成序列的有()

A.{d,e,c,f,b,g,a}

B.{f,e,g,d,a,c,b}

C.{e,f,d,g,c,b,a}

D.{c,d,b,e,f,a,g}

11.以下叙述中错误的是()。

A.通过指针变量存取某个变量值的方式称为“直接存取”方式

B.在程序的开头包含头文件stdio.h后,可以给指针变量赋NULL值

C.将一个指针变量中的值赋给另一个指针变量,则这两个指针变量指向同一地址

D.C语言中函数返回值的类型可以是简单的数据类型,也可以是指针类型

12.设有定义“intx=2;”,以下表达式中,值不为6的是()。

A.2*x,x+=2B.x++,2*xC.x*=(1+x)D.x*=x+1

二、2.填空题(12题)13.类是一个支持集成的抽象数据类型,而对象是类的【】。

14.strcat函数的作用是【】。

15.有以下定义和语句,则sizeof(a)的值是【】,而sizeof(a.share)的值是【】。

structdatc

{intday;

intmouth;

intyear:

union{intshare1;

floatshare2:

}share;

}a;

16.Jackson结构化程序设计方法是英国的M.Jackson提出的,它是一种面向______的设计方法。

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

fun(intx,inty,intz)

{z=x*x+y*y;}

main()

{inta=31;

fun(6,3,a)

printf("%d,a)

}

18.以下函数rotate的功能是:将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第0列中,把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b所指二维数组中其他数据不变。

#defineN4

voidrotate(inta[][N],intb[][N])

{inti,j;

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

{b[i][N-1]=______;______=a[N-1][i];}

}

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

main()

{inti=10,j=0;

do

{j=j+i;i-;}

while(i>2);

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

}

20.下列程序的输出结果是【】。

main()

{inti;

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

{if(i>4)

{printf("%d\n",i);

break;}

printf("%d\n",i++);}}

21.软件工程研究的内容主要包括:【】技术和软件工程管理。

22.在面向对象方法中,类的实例称为______。

23.设有定义“struct{inta;floatb;charc;}abc,*p_abc=&abc;”,则对结构体成员a的引用方法可以是abc.a和p_abc【】a。

24.在链表的运算过程中,能够使空表与非空表的运算统一的结构是______。

三、3.程序设计题(10题)25.程序定义了N×N的二维数组,并在主函数中自动赋值。

请编写函数fun(inta[][N],intn),该函数的功能是使数组左下半三角元素中的值加上n。

例如:若n的值为3,a数组中的值为

a=254

169

537

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

554

499

8610

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

fun(inta[][N],intn)

{

}

main()

{

inta[N][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");

}

do

n=rand()%10;

/*产生一个小于5的随机数n*/

while(n>=5);

printf("n=%4d\n",n);

fun(a,n);

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

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

{

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

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

printf("\n");

}

}

26.请编写函数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");

}

27.编写函数fun(),它的功能是求n以内(不包括n)同时能被5与11整除的所有自然数之和的平方根s,并作为函数值返回。

例如:n为1000时,函数值应为s=96.979379。

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

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

试题程序:

#include<conio.h>

#include<math.h>

#include

doublefun(intn)

{

}

main()

{

clrscr();

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

}

28.请编一个函数floatfun(doubleh),函数的功能是对变量h中的值保留两位小数,并对第三位进行四舍五入(规定h中的值为正数)。

例如:若h值为8.32433,则函数返回8.32:若h值为8.32533,则函数返回8.33。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

floatfun(floath)

{

}

main()

{

floata;

clrscr();

printf("Entera:");

scanf("%f",&a);

printf("Theoriginaldatais:");

printf("%f\n\n",a);

printf("Theresult:%f\n",fun(a));

}

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

01279

1112155

2216111

979102

54141

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

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

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

[试题源程序]

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

intfun(intw[][N])

{

}

main()

{

inta[N][N]=(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);

inti,j;

ints;

clrscr()

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

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

{

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

{

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

}

printf("\n");

}

s=fun(a);

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

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

}

30.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:函数返回指定成绩的学生数据,指定的成绩在主函数中输入。若没找到指定的成绩,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。

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

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

试题程序:

#include<stdio.h>

#include<stdlib.h>

#defineN16

typedefstruct

{charnum[l0];

ints;

}STREC;

STRECfun(STREC*a,intb)

{

}

main()

{

STRECs[N)={{“GA005”,76},{“GA003”,89},

{“GA002”,64},{“GA004”,75},{“GA001”,88},

{“GA007”,65},{“CA008”,96},{“GA006”,69},

{“GA015”,85},{“GA013”,78},{“GA012”,62},

{“GA014”,60},{“GA011”,73},{“GA017”,72},

{“GA018”,98},{“GA016”,94}};

STRECh;

intm;

inti,n;

FILE*out;

printf(“Theoriginaldata:\n”);

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

{if(i%4==0)

printf(“\n”);

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

printf(“%s%3d”,s[i].num,s[i].s);

}

printf(“\n\nEnterthescore:”);

scanf(“%d”,&m);

h=fun(S,m);

printf(“Thedata:”);

printf(“\n%s%4d\n”,h.mum,h.S);

printf(“\n”);

ut=fopen(“out24.dat",“W”);

h=fun(s,85);

fprintf(out,“%S%4d\n”,h.num,h.S);

fclose(out);

}

31.请编写函数fun(),该函数的功能是:将两个两位数的正整数a,b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。

例如,当a=45时,b=12,调用到该函数后,c=5142。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

voidfun(inta,intb,long*c)

{

}

main()

{

inta,b;

longc;

clrscr();

printf("Inputa,b:");

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

fun(a,b,&c);

printf("Theresultis:%ld\n",c);

}

32.请编写函数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);

}

33.编写函数fun(),它的功能是:计算和输出下列级数的和。

S=1/(1×2)+1/(2×3)+…+1/(n×(n+1))

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

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

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

试题程序;

#include<conio.h>

#include<stdio.h>

doublefun(intn)

{

}

main()

{

clrscr();

printf("%f\n",fun(10));

}

34.请编写函数fun,其功能是:计算并输出下列多项式的值:

例如,在主函数中从键盘给n输入15,则输出为:s=2.718282。

注意:要求n的值大于1但不大于100。部分源程序在文件PROGl.C中。

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

四、单选题(0题)35.设有以下宏定义:#defineN3#defineY(n)((N+1)*n)则执行以下语句后,z的值为______。z=2*(N+Y(5+1));A.出错B.42C.48D.54

五、单选题(0题)36.下列选项中,能够满足“只要字符串s1等于字符串S2,则执行ST”要求的是()。

A.if(s1-s2==0)ST;

B.if(s1==s2)ST;

C.if(strcpy(s1,s2)==1)ST;

D.if(strcmp(s2,s1)==0)ST;

六、单选题(0题)37.设有定义:floata=2,b=4,h=3;以下c语言表达式中与代数式(a+B)h计算结果不相符的是()。A.(a+B)*h/2B.(1/2)*(a+B)*hC.(a+B)*h*1/2D.h/2*(a+B)

参考答案

1.A

2.A顺序结构、选择结构、循环结构是3种基本结构,由3种基本结构构成的程序称为结构化程序,由3种基本结构组成的算法可以解决任何复杂的问题,选项A错误。本题答案为A选项。

3.B解析:C语言一种高级语言,C语言源程序经过C语言编译程序编译之后,生成一个后缀为。OBJ的二进制文件(称为目标文件),最后还要由称为“连接程序”(Link)的软件,把此。OBJ文件与C语言提供的各种库函数连接在一起,生成一个后缀.EXE的可执行文件。显然C语言不能立即执行,故选项A错误;根据以上定义,选项C和选项D错误,所以,4个选项中选项B符合题意。

4.C解析:do-while语句的一般形式为:do循环体语句while(表达式);,其中循环体语句可以是复合型语句,但必须用花括号括起来。while后必须要有分号作为语句的结束,在do-while循环中,不可以省略while。

5.CA、B、D选项的含义均为:a的值如果为0,输出y的值,否则输出x的值。而C选项的含义是:a的值为0时输出x的值,不为0时输出y的值,与其他选项正好相反。故本题答案为C选项。

6.C

\ngetchar函数是读取键盘的输入函数,本题中输入字母“a”,则c=a,判断if条件,发现a>=a&&a<=g成立,则执行下列语句:C=C+4,C得到的字符的ASCII码值,退出if语句,通过putchar函数输出字符。

7.D本题考查运算符“<<”,b=a<<2,是左移2位,a=2,即b=2*2*2=8。

8.B

\n栈是线性表的一种,它的特点是先进后出,并且只能在表的一端进行插入和删除操作的线性表,入栈和出栈都是在栈顶进行,因此具有记忆作用,栈可以采用顺序存储,也可以采用链式存储。

\n

9.C解析:这是一个逗号表达式,它的值应为表达式y=x+3/2的值,而前一个表达式已给x赋值1,在没有进行类型转换的情况下,3/2的值为1,所以x+3/2的值应为2.0。

10.B

11.A通过指针变量存取某个变量值的方式称为“间接存取”方式,选项A错误;头文件stdio.h中定义了NULL,在程序的开头包含stdio.h后,可以给指针变量赋NULL值,表示一个空指针,选项B正确;将一个指针变量中的值赋给另一个指针变量,这两个指针变量指向同一地址,选项C正确;C语言中函数返回值的类型可以是简单的数据类型,也可以是指针类型,选项D正确。故本题答案为A选项。

12.AA选项中先计算逗号表达式的第1个表达式“2*x”,然后计算第2个表达式“x+=2”,即“x=x+2=4”,整个逗号表达式为第2个表达式的值4。所以A选项正确。B选项中首先计算逗号表达式的第1个表达式“x++”,此时x为3;再计算第2个表达式“2*x=2*3=6”,所以逗号表达式为第2个表达式的值6。C选项中的表达式可以表示为“x=x*(1+x)=2*(1+2)=6”。D选项中的表达式可以表示为“x=x*(x+1)=2*3=6”。故本题答案为A选项。

13.实例将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,对象则是其对应类的一个实例。

14.连接两个字符数组中的字符连接两个字符数组中的字符解析:strcat函数的作用是连接两个字符数组中的字符串。

15.10410\r\n4解析:结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。int占2个字节,float占4个字节,共用体变量所占的内存长度等于最长的成员的长度。所以,sizeof(a.share)的值是4,sizeof(A)的值是2+2+2+4=10。

16.数据结构数据结构

17.3131解析:在函数调用时,形参值和改变,不会改变实参的值。

18.a[0][i]b[i][0]a[0][i]\r\nb[i][0]解析:因为数组a[N][N]的第0行表示为a[0][n](n=0~3),而数组b[N][N]的最后一列表示为b[n][N-1)(n=0~3),所以前一空应该填a[0][i]。又因为数组a[N][N]的最后一行表示为a[N-1)][n](n=0~3),而数组b[N][N]的第0列表示为b[n][0](n=0~3),所以后一空应该填b[i][0]。

19.5252解析:do...while语句的形式为:

do

{

语句;

}while(条件表达式)

当条件表达式为非零时,继续执行循环体,直到条件表达式为零时退出循环。

20.1351\r\n3\r\n5解析:本题考查了for循环语句的使用,break语句用在本题中是结束for循环直接跳出循环体外。当i=1时,因为if语句条件不满足,所以直接执行printf('%d\\n',i++);输出1,同时i自加1;执行第二次for循环时,i=3;同样的if语句条件不满足,所以直接执行printf('%d\\n',i++);输出3,同时i自加1;执行第三次for循环时,i=5,if语句条件满足,所以执行printf('%d\\n',i),输出5,然后break语句跳出了for循环。

21.软件开发

22.对象对象解析:类描述的是具有相似性质的一组对象。例如,每本具体的书是一个对象,而这些具体的书都有共同的性质,它们都属于更一般的概念“书”这一类对象。一个具体对象称为类的实例。

23.->->解析:若结构体变量abc有成员a,并有指针p_abc指向结构变量abc,则引用变量abc成员a的标记形式有abc.a和p_abc->a。

24.循环链表循环链表解析:在循环链表中,由于设置了一个头结点,因此在任何情况下,循环链表中至少有一个结点存在,从而使空表与非空表的运算统一。

25.fun(inta[][N]intn){intij;for(i=0;i<N;i++)for(j=0;j<i;j++)a[i][j]=a[i][j]+n/*使数组左下半三角元素中的值加上n*/}fun(inta[][N],intn)\r\n{\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=0;j<i;j++)\r\na[i][j]=a[i][j]+n/*使数组左下半三角元素中的值加上n*/\r\n}解析:首先从数组中找出要被加上n的那部分元素,找的过程其实就是找出将被挑出的那部分元素在原数组中的分布规律的过程。通过观察得出,要被处理的那部分元素的下标值的范围是每行中从第一个元素开始,直到列数等于该行行数时为止。找到这个规律后,依次从数组中取得合乎要求的元素,然后再加上n。

26.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个字符放到最后一个字符中。

27.doublefun(intn){doubles=0.0;inti;for(i=0;i<n;i++)/*从0~n中找到既能被5整除同时又能被11整除的数并将这些数求和*/if(i%5==0&&i%11==0)s=s+i;s=sqrt(s);/*对s求平方根*/returns;doublefun(intn)\r\n{doubles=0.0;\r\ninti;\r\nfor(i=0;i<n;i++)/*从0~n中找到既能被5整除同时又能被11整除的数,并将这些数求和*/\r\nif(i%5==0&&i%11==0)\r\ns=s+i;\r\ns=sqrt(s);/*对s求平方根*/\r\nreturns;解析:本题的解题思路是逐个取得从。0-n之间的所有数,对每次取得的数进行条件判断,条件是既能被5整除同时又能被11整除,注意:这两个条件要求同时成立,因此用到了“&&”运算符。满足条件,该数就被累加到s中去,求出所有符合条件的数后,用sqrt()函数(包含于头文件<math.h>中)对s求平方根。

28.floatfun(floath){longt;t=(h*1000+5)/10;/*单精度数h乘以1000后再加5相当十对h中的第三位小数进行四舍五入除以10后将其赋给一个长整型数时就把第三位小数后的数全部截去*/return(float)t/100;/*除以100保留2位小数*/floatfun(floath)\r\n{\r\nlongt;\r\nt=(h*1000+5)/10;/*单精度数h乘以1000后再加5,相当十对h中的第三位小数进行四舍五入\r\

温馨提示

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

最新文档

评论

0/150

提交评论