资源描述
全国计算机等级考试二级C语言真题题库2 2023年3月
(总分100, 做题时间120分钟)
一、选择题(每小题1分,共40分)
1. 设有以下程序段:struct book{ float price;char language;char title[20];} rec,*ptr;ptr = &rec;规定输入字符串给结构体变量rec的title成员,错误的输入语句是( )。
A seanf(”%s”Ptrtitle);
B scanf(”%s”,rec.title);
C scanf(’’%s”,(*pu).title);
D scanf(”%s”,ptr->title);
答案:A
符号“_>”是指针特用的,符号“.”用于指定元素的成员。ptr是指针,只能用符号“一>”,因此选项A错误。+P是指定元素(Fee)可以使用“.”运算,因此选项D对的。选项B,Fee.title代表数组title,同理选项C对的。答案为A选项。
2. 有以下程序:执行时输入:aBeDefG##<回车>,则输出结果是( )。
A AbCdEFg
B ABCDEFG
C BCDEFGH
D bedefgh
答案:C
循环的作用是将输入的字符串转化为大写,9etchar()每次读入一个字符,putchar()每次输出一个字符,当碰到#字符结束。putchar(++C),表达将字符变量C加1后输出。因此,输入aBcDefG##,得到的结果是BCDEFGH。故答案为c选项。
3. 以下与存储类别有关的四组说明符中,所有属于静态类的一组是( )。
A extem和static
B auto和static
C register和static
D register和excerl
答案:A
auto用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字通常会被省,由于所有的变量默认就是aut0的。
register定义的变量告诉编译器尽也许的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。
static变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持本来的赋值。这一点是它与堆栈变量和堆变量的区别。变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。当static用来修饰全局变量时,它就改变了全局变量的作用域。extern限制在了当前文献里,但是没有改变其存放位置,还是在全局静态储存区。extem外部声明,该变量在其他地方有被定义过。因此,答案为A选项。
4. 设有定义:int x,Y,z;,且各变量已赋正整数值,则以下能对的表达代数式的C语言表达式是( )。
A …1.…0/x。/y,/z
B 1/x * Y * z
C 1/(x * Y * z)
D 1/x/y/(double)z
答案:A
代数表达式1/(X•Y•z)是小数,转为cf语言的表达式必须是小数。A选项由于l.0为浮点数,计算结1果自动转换为浮点数,故A选项对的。选项B,C,D的表达式均为0。答案为A选项。
5. 若有定义:double x;,则表达式IX=0,x+10,x+十的值是( )。
A 11.0
B 10.0
C 0.0
D 1.0
答案:C
c语言中,逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式。逗号运算符的优先级是所有运算符中级别最低的,逗号运算符保证左边的子表达式运笑结束后才进行右边的子表达式的运算。也麓是辽,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式值作为整个逗号表达式的值。后置自增运算:k++表达先运算,后自■:曹置自增运算:++k表达先自加,后运算。因此,表达式l;O,I+10。x++的计算过程为一方面赋值x=0,然后将x加l0,包是并不对x进行赋值,最后计算x++,并,根据后置自增运算的计算结果,即为x=0.0。故答案为C选项。
6. 有以下程序:执行时输入:0<回车>后,则输出结果是( )。
A 5,
B 0,0,0,0,0,
C 0,1,2,3,4,
D 0,1,
答案:C
”anf(”%c”,&c),输入的字符,题目中输入了0,字符0,相应于ASCIl码为48,因此for循环中,i的范围从0~5,均小于48,if条件不成立,直接执行下一条语句,执行语句prinff,因此得到的结果是0,1,2,3,4。故答案为C选项。
7. 以下程序拟实现计算sum=1+1/2+1/3+…+1/50。程序运营后,不能得到对的结果,出现问题的语句是( )。
A sum+=1/i;
B while(i<50);
C sum.=1.0;
D i++;
答案:A
选项A中,8111111+=1/i;i为整型,因此l/i是整型类型,当1/i有小数时,小数部分会被截断。因此l/i结果始终为0,导致结果犯错,应改为8111m+=1.0/i。因此答案为A选项。
8. 下列解决中与队列有关的是( )。
A 操作系统中的作业调度
B 执行程序中的过程调用
C 执行程序中的循环控制
D ---X树的遍历
答案:A
队列是指允许在一端进行插入,而在另一端进行删除的线性表。由于最先进入队列的元素将最先出队,所以队列具有“先进先出”的特性,体现了“先来先服务”的原则。作业调度是指根据一定信息,按照一定的算法,从外存的后备队列中选取某些作业调入内存分派资源并将新创建的进程插入就绪队列的过程。执行程序中的过程调用一般指函数调用,需要调用时候转入被调用函数地址执行程序,与队列无关。执行程序中的循环控制是指算法的基本控制结构,涉及对循环条件的鉴定与执行循环体,与队列无关。二叉树是一个有限的结点集合,二叉树的遍历是指不反复地访问二叉树中的所有结点,与队列无关。故本题选择A选项。
9. 非空循环链表所表达的数据结构( )。
A 有根结点也有叶子结点
B 没有根结点但有叶子结点
C 有根结点但没有叶子结点
D 没有根结点也没有叶子结点
答案:A
在单链表的第一个结点前增长一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由NULL改为指向表头结点,这样的链表称为循环链表。循环链表是线性结构,有且只有一个根结点,每一个结点最多有一个前件,也最多有一个后件。循环链表表头结点为根结点,链表的最后一个结点为叶子节点,虽然它具有一个指向表头结点的指针,但是表头结点并不是它的一个后件。故选择A选项。
10. 将c语言的整数设为整数类1,则下面属于类I实例的是( )。
A -103
B 10E3
C 10.3
D “0103”
答案:A
整数类实例涉及:十进制常量用0—9表达,不能以0开头;/k进制常量用0-7表达,必须用0开头;十六进制常量用0—9和A—F(a—f)表达,必须以0x或OX开头。本题中B选项是科学计数法表达的浮点数实例,c选项是浮点数实例,D选项是字符串实例。故选A选项。
11. 有以下程序:程序运营后的输出结果是( )。
A 7
B 0
C 3
D 8
答案:C
题意记录字符s中阿拉伯数字的个数。char s[]=’012xy\08s34f4w2’;元素是字符型。~0=48;而’\0’=0;因此可以计算出’、0’之前阿拉伯数字的个数,由字符串s可知,有3个阿拉伯数字。答案为C选项。
12. 有以下程序:程序运营后的输出结果是( )。
A 6.5.4.3.3,2,1,
B 1,2,3,4,5,6,
C 1,1,1,1,1,1
D 6,6,6,6,6,6,
答案:A
fopen(”data.chit“,”w+”);W+打开可读写文献,若文献存在则文献长度清为零,即该文献内容会消失。若文献存在则建立该文献。rewind(fp);使文献fp的I位置指针指向文献开始。fprintf(fp,”%d\n”,a[5一i]);将8[i]输出到fp指向的文献中。fseanf(fp,”%d”,&k);将fp读I入到变量k中,第一个for循环将数组中元素倒着输入到fp指l向的文献中,rewind()则指向文献开始,因此打印是数组a的I倒叙。故打印为6,5,4,3,2,1。答案为A选项。
13. 软件开发中需求分析的重要任务是( )。
A 定义和描述目的系统“做什么”
B 获取需求
C 给出软件解决方案
D 需求评审
答案:A
需求分析阶段的工作可以分为4个方面:需求获取、需求分析、编写需求规格说明书和需求评审。需求分析的任务是发现需求、求精、建模和定义需求的过程,是描述“做什么”的软件开发阶段。故选A选项。
14. 若有定义:char c;double d;程序运营时输入:1 2<回车>,能把字符1输入给变量c、数值2输入给变量d的输入语句是( )。
A scanf("%d%lf",&c,&d);
B scanf("%c%lf",&c,&d);
C scanf("%c%f",&c,&d);
D scanf("%d%f",&c,&d);
答案:B
%lf是针对double类型,假如仅用%f,输入的数据也许没有被完全接受,数据的精度也许局限性,选项C,D错误。%f重要针对float类型的变量的输入。%d重要针对整型数据的输入,%c重要针对字符类型的数据的输入,选项A错误。故答案为B选项。
15. 有以下程序:程序运营后的输出结果是( )。
A Beijing!
B toBeijing]
C WelcomeyoutoBeijingI
D youtoBeijingI
答案:A
for循环的作用是每次碰到空格,将空格后面的移动到数组的最前面。因此数组最后的状态是“Bei-jing!、Og!\0ng!、neijing!、O”,但是pfinff(“%s”)打印碰到、0自动结束。因此,打印Beijing!。故答案为A选项。
16. 有以下程序:程序运营后的结果是( )。
A 有运营错误
B 输出11.10
C 输出12.10
D 输出21.10
答案:A
calloe(n,sizeof(type))在内存的动态存储区中分派n个长度为size的连续空间,函数返回一个指向分派起始地址的指针,假如分派不成功,返回NULL。s在函数fun()申请了内存空间,但是在调用fun()函数后会释放掉,因此,最后q指向NULL,因此运营是打印犯错。答案为A选项。
17. 有以下程序程序运营后的输出结果是( )。
A 15
B 12
C 16
D 20
答案:B
#define命令是C语言的宏定义命令,标记符一般使用大写,为了区分其他标记符,将标记符定义为一个字符串,该标记符被称为宏名,被定义的字符串称为替换文本。宏定义不进行其他操作,仅仅只是替换标记符。后置自增运算:k++表达先运算,后自加。意思是碰到k++了,先把当前的k的值拿来参与运算,后面再去管它的自加。SUB(a++,b++)一(a++)t(b++)—d}4。故答案为B选项。
18. 若文献指针fp已对的指向文献,ch为字符型变量,以下不能把字符输出到文献中的语句是( )。
A fget(f0,ch);
B foutc(ch,fo);
C fprinff(fp,”%c”,ch);
D fwrite(&ch,sizeof(ch),1,fp);
答案:A
函数fgete()从文献读入一个字符到指定变量。函数fputc()将指定字符写入审文献中,函数fprinff(),fwrite()均是写入文献操作函数。因此选项B,c。D错误。答案为A选项。
19. 函数fgetc的功能是从指定文献中读入一个字符,以下与其功能完全相同的函数是( )。
A fread
B fscanf
C fgets
D getc
答案:D
fgets读取一个长度为(n-1)的字符串,fread按照指定的长度读取数据项,相应2进制的打开方式,fscanf按指定格式读,相应文本打开方式,getc从指定的文献读 入一个字符,即从fp所指向的文献中读入一个字符赋给ch。因此答案为D选项。
20. 有以下程序:#include <stdio.h>int add(int a,int b){return(a+b);}main(){ int k,(*f)().a=5,b=10;f=add; …}则以下函数调用语句错误的是( )。
A k=f(a,B.;
B k=add(a,B.;
C k=(*f)(a,B.;
D k={f(a,B.;
答案:D
s与()的优先级,()的优先级高于*,由于(+f)()定义函数指针f。f指向函数的指针。f=add,将函数8dd()的首地址赋给指针f,所以调用函数add()可以写为f(),其返回值是整型,不是指针类型,不能用t取指针指向的内存单元的数据,故k=*f(a,b)的调用方式错误。答案为D选项。
21. 某循环队列的存储空间为Q(4:m),初始状态为front=lea/"=m。现通过一系列的人队操作和退队操作后,front=m,r6ar=m一1,则该循环队列中的元素个数为( )。
A m-1
B m
C 1
D 0
答案:A
循环队列长度为rl3,由初始状态为锄t=re“=m,可知此时循环队列为空。入队运算时,一方面队尾指针进1(即rear+1),然后在re”指针指向的位置插入新元素。特别的,当队尾指针瑚r=nl+1时,置rear=1。退队运算时,徘头指针进1(即front+1),然后删除f∞ont指针指向的位置上的元素,当排头指针front=ITI+1时,置front=1。从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。假如l_efl.r—front>0,则队列中的元素个数为rear—front个;假如reⅡ一front<0,则队列中的元素个数为rear—front+m。该题中m一1<ITl,即/'ear—front<0,则该循环队列中的元素个数为(m一1)一m+111=m一1。故选A选项。
22. 在最坏情况下,堆排序的时间复杂度是( )。
A O(log2n)
B O(nlog2n)
C O(n2)
D O(n1.5)
答案:B
若有n个元素的序列,将元素接腰序组成一棵完全二叉树,当且仅当满足下列条件时称为堆。大根堆是指所有结点的值大于或等于左右子结点的值;小掇堆是指所有结点的值小于或等于左右子结点的值。在调整建堆的过程中,总是将根结点值与左、右子树的根结点进行比较,若不满足堆的条件,则将左、右子树根结点值中的大者与根结点值进行互换。堆排序最坏情况需要0(nl092n)次比较,所以时间复杂度是0(nl092n),B选项对的。
23. 若某二叉树中的所有结点值均大于其左子树上的所有结点值,且小于右子树上的所有结点值,则该二叉树遍历序列中有序的是( )。
A 前序序列
B 中序序列
C 后序序列
D 以上说法均可以
答案:B
二叉树遍历可以分为3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。由于结点值均大于其左子树上的所有结点值,且小于右子树上的所有结点值,那么只要遍历时访问根结点在访问左子树和右子树之间,遍历序列有序,即中序序列有序。故选B选项。
24. 有以下程序:程序运营后的输出结果是( )。
A 24
B 720
C 120
D 6
答案:C
函数hm()求数组指定返回的元素的积。函数fun(a,3)求的是数组a[0]~a[3]的积。因此结果为2 t3女4十5=120,故答案为C选项。
25. 学生选课成绩表的关系模式是sc(S#,c#,G),其中S#为学号,c#为课号,G为成绩,检索课号为2且成绩及格的学生学号的表达式为( )。
A
B
C
D
答案:A
表达针对属性进行的投影运算,0r表达针对元组进行的选择运算,’^’表达交运算,’V’表达并运算。规定检索结果为关系模式中的学生学号s#,一方面在几种属性中选择学生学号'iTS#,另一方面要在其中选择满足条件的元组0r,条件是课号为2且成绩及格,即为“c#=2AG,>60”,故完整表达式为叮rs#(orc#=2AG一>60(SC))。本题选A选项。
26. 以下程序段中的变量已对的定义。 for(i=0;i<4;i++,i++)for(k=1;k<3;k++);prinff(”*”);该程序段的输出结果是( )。
A *
B ****
C **
D ********
答案:A
c语言约定分号为一条语句的结束。因此for(i=0;i<4;i++,i++)for(k=1;k<3;k++);是完整的语句,对研nd();没有任何影响,最后一nff(”•’),执行一次。因此答案为A选项。
27. 有以下程序:程序运营后的输出结果是( )。
A 7,8,9,10,6,5,4,3,2,1,
B 10,9,8,7,6,5,4,3,2,1,
C 10,9,8,7,1,2,3,4,5,6,
D 1,2,3,4,5,6,7,8,9,10,
答案:C
flm()函数作用冒泡法排序,fla9控制升序(0)或者降序(1)。n为参与排序的元素个数。a为数组的起始地址。因此,flm(a,4,1),数组的前四个降序排序,fun(a+4,6,O)对数组的第四项后六个元素进行升序排序。故结果为10,9,8,7,1,2,3,4,5,6。答案为C选项。
28. 有以下程序:程序运营后的输出结果是( )。
A 2,3
B 2,1
C 1,2
D 3,1
答案:B
结构体tt是一个递归定义,类似于链表,通过成员变量Y链接起来。P=s+1指向s[1]。P一>Y指向8[2],但现在P->Y=s,因此s[2]=s[O],此时8[]={1.0,2.0,1.0},而P在s[1]位置,因此P_>x为2,P=P_>Y,P指向s[2],因此P_>x=1,故打印结果为2,1。答案为B选项。
29. 以下定义数组的语句中错误的是( )。
A int num[][3]={{1,2},3,4,5,6};
B int nUITI[2][4]={{1,2},{3,4},{5,6}};
C int num[]={1,2,3,4,5,6};
D int num[][4]={1,2,3,4,5,6’};
答案:B
选项B中,int Irlllm[2][4]={{1,2},{3,4},{5,6}};定义数组是2行4列,但是初始化的结构是3行2列,因此初始化错误。故答案为B选项。
30. 设有定义:doublex=5.16894;,则语句prinff(”%If\n”,(int)(x$1000+0.5)/1000.);的输出结果是( )。
A 5.16900
B 5.16800
C 0.00000
D 输出格式说明符与输出项不匹配,产生错误信息
答案:A
(x}1000+0.5)表达x移动3位小数,细0.5,也就是小数第4位加5,若这位大于等于5,则进1到个整。由于“5.16894}1000 5168.94+0.5 75169.44”所以(int)(x$1000+0.5)强制转换为整型结果为5169。(5169/1000.0)5.169,由于1000.0结果自动转换为浮点数所以prinff(“%lf\n”,5.169)结果是5.16900。故答案为A选项。
31. 下列叙述中对的的是( )。
A 数据库系统可以解决数据冗余和数据独立性问题,而文献系统不能
B 数据库系统可以管理各种类型的文献,而文献系统只能管理程序文献
C 数据库系统可以管理庞大的数据量,而文献系统管理的数据量较少
D 数据库系统独立性较差,而文献系统独立性较好
答案:A
数据管理技术的发展经历了3个阶段:
人工管理阶段、文献系统阶段和数据库系统阶段。三者各自的特点如下表所示。
数据库系统可以解决数据冗余和数据独立性问题,面文献系统不能。数据库系统和文献系统的区别不仅在于管理的文献类型与数据量的多少。数据库系统具有高度的物理独立性和一定的逻辑独立性,而文献系统独立性较好。故本瑟答案为A选项。
32. 有以下程序:程序运营后的输出结果是( )。
A -2,3,
B -1,-2,
C -2,-3,
D -2,1
答案:A
fun()函数使用了静态变量,静态变量只在声明时初始化一次。一方面实参的数值是-12,if判断后输出负号,并将n=12,计算k+=n%10一k+=2—2,因此输出2,后将数值除以10,结果为1,递归调用fun()函数,第二次调用fun(),此时n=1,k=2,计算k+=n%10-÷k+=1--*3,因此打印3。故最后打印结果为一2,3,。故答案为A选项。
33. 有以下程序:}程序运营后的输出结果是( )。
A -263
B 2
C 0
D -26
答案:D
isspaee(c)检查参数c是否为空格字符。若参数e为空格字符,则返回TRUE,否则返回NULL(0)。Is—di#t(c)函数检查参数c是否为阿拉伯数字0到9。返回值若为阿拉伯数字,则返回TRUE,否则返回NULL(O)。fLm()函数的第一个for循环判断字符串是否为负号。第二个for循环获取符号后面的数字字符,并将它们转化为整数。碰到了非数字的字符跳出,最后返回数组的结果。因此,可知一方面获取负号,紧接着获取数值26,碰到了字符a,跳出返回-26,因此打印的结果是一26。故答案为D选项。
34. 以下是对的C语言实型常量的是( )。
A .e-1
B e-1
C -1e
D 1e-1
答案:D
所谓常量是指在程序运营过程中,其值不能被改变的量。在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。实型常量有两种表达形式:十进制小数形式、指数形式。指数形式中e后面的指数必须是整数,阶码标志e之前需要有数字,由此可知选项A,B,C错误。答案为D选项
35. 若想定义int型变量a,b,c,d并都赋值为1,以下写法中错误的是( )。
A int a=b=c=d=1;
B int a=1,b=1,c=1,d=1;
C int a,b,c,d;a=b=c=d=1;
D int a,b,c,d=1;a=b=c=d;
答案:A
C语言赋值运算符的结合方向是从右向左,使用的变量必须已经定义了,int a=b=c=d=1;本条语句一方面执行赋值运算d=1,由于b并未定义,故编译不通过,提醒没有定义标记符b.c、d,故A选项错误。答案为A选项。
36. 有以下程序:程序运营后的输出结果是( )。
A 10
B 16
C 6
D 12
答案:D
第一个for循环作用是对数组8赋初值,从0~9,第二个缸循环是计算数组前4项的a[i]+i的和。0+0,1+1,2+2,3+3,经计算的结果为l2,因此答案为D选项。
37. 有以下程序:程序运营后的输出结果是( )。
A B,C,D,E,
B A,B,C,D,
C C,D,E,F,
D B,D,F,H,
答案:A
函数ehmlge()的作用将从数组尾部将数组内的元素值加1。数组的初始值为ABCD,因此经change()后,得到的值为BCDE。故答案为A选项。
38. 有以下程序:程序运营后的输出结果是( )。
A Qian,f,350,Sun,f,350
B Qiamf,350,Qian,f,350
C Qian,f,350,Sun,m,370
D Zha0,m,290,Sun,m,370
答案:A
c语言函数参数传递大体分为:1、值传递过程中。被调函数的形参作为被调函数的局部变量解决,即在内存的堆栈中开辟空间以存放由主调函数放进来的实参的值,从而成为了实参的一个拷贝。值传递的特点是被调函数对形参的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。2、地址传递过程中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被解决成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正由于如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。结构体中nanle是数组,做实参传递,会退化为指针,因此调用f(),b.nanle发生修改,其他的成员,传递的是拷贝,不会被修改。因此输出Sun,f,350。故答案为A选项。
39. 软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是( )
A 学生成绩管理系统
B ERP系统
C 办公自动化系统
D UNIX系统
答案:D
系统软件是管理计算机的资源,提高计算机的使用效率,为用户提供各种服务的软件。应用软件是为了应用于特定的领域而开发的软件。选项D属于系统软件。选项A、B、C属于应用软件。故选D选项。
40. 某循环队列的存储空间为Q(1:m),初始状态为front=rear=m。现通过一系列的入队操作和退队操作后,front=m一1,real"=m,则该循环队列中的元素个数为( )。
A m-1
B 1
C m
D 0
答案:B
循环队列长度为m,由初始状态为front=real"=ITl可知此时循环队列为空。入队运算时,一方面队尾指针(rear)进1(即rear+I),然后在lear指针指向的位置插入新元素。特别的,当队尾指针lear=m+1时,置l'ear=1。退队运算时,排头指针(front)进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=m+1时,置front=1。从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素,则该循环队列中的元素个数为m一(m一1)=1。故选择B选项。
二、程序填空题(共18分)
1. 函数fun的功能是:根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回。其中函数isleap用来判别某一年是否为闰年。 例如,若输入:2023 5 1,则程序输出:2023年5月1日是该年的第122天。 请在程序的下划线处填入对的的内容,并把下划线删除,使程序得出对的的结果。注意:源程序存放在考生文献夹下的BLANKl.C中。 不得增行或删行,也不得更改程序的结构!试颢;陧序。
答案:
(1)leap
(2)day
(3)1
填空1:leap isleap()函数判断是否是闰年,由于初始化2月为28天,但是闰年是29,因此闰年要多加l天,isleap()应当返回0或者l,leap的表达式为逻辑运算,得到的结果刚好是0或1。
填空2:day前面累加了平年月份的天数,还需要加上目的天数。
填空3:l假如是闰年并且累加月份大于2月,需要多加1天。
三、程序改错题(共24分)
1. 给定程序MODll.C中,函数fun的功能是:在有n名学生,2门课成绩的结构体数组std中,计算出第l门课程的平均分,作为函数值返回。例如,主函数中给出了4名学生的数据,则程序运营的结果为:第l门课程的平均分是:76.125000请改正函数fun中指定部位的错误,使它能得出对的的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:
答案:
(1)double sum改为double sunl=0.0;
(2)for(i=0;i<2;i*)改为细(i=0;i<n;i++);
(3)sum+=ad[i].scom[1]改为sum+=羽[i].score[0];
【解题思绪】
(1)doubleⅫ改为double 8am=0.0;累加求和需要初始化累加结果的临时变量。
(2)for(i_0;i<2;i++)改为for(i_0;i<n;i++);共有11个学生的成绩,需要累加所有学生第一门课的成绩。
(3)sum+.std[i].BCOl.e[1]改为8am+=8td[i].score[0];第1门课程的平均分,c语言的下标是从0开始的。
四、程序设计题(共18分)
1. 请编写函数。fun能是:判断形参n中的正整数是几位数(输入数据的位数不超过4位),并将结果通过函数值返回。例如:若输入的数据为l23,则输出结果为:输入的数字是3位。注意:部分源程序存在PROGl.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所缩写的若干语句。 试题程序:
答案:
【解题思绪】
通过对指定的多位数每次除以10,去掉最后一位,直到为0结束,使用临时变量来记录一个多位数的位数。
展开阅读全文