版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2021年吉林省松原市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________
一、2.填空题(10题)1.下列程序的输出结果是【】。
intt(intx,inty,intcp,intdp)
{cp=x*x+y*y;
dp=x*x-y*y;
}
main()
{inta=4,b=3,c=5,d=6;
t(a,b,c,d);
printf("%d%d\n",c,d);
}
2.有以下程序
intfa(intx){returnx*x;}
intfb(intx){returnx*x*x;}
intf(ing(*f1)(),int(*f2)(),intx)
{returnf2(x)-f1(x);}
main()
{inti;i=f(fa,fb,2),printf("%d\n",i);}
程序运行后,输出结果是【】。
3.下列程序运行时输入1234567<CR>,则输出结果是______。
#include<stdio.h>
main()
{inta=1,b;
scanf("%2d%2d",&a,&b);printf("%d%d\n",a,b);
}
4.软件工程学把软件从开始研制到最终软件被废弃的整个阶段叫做软件的【】。
5.#define命令出现在程序中函数的外面,宏名的有效范围为______。
6.设y为血型变量,请写出描述“y是偶数”的表达式______。
7.以下isprime函数的功能是判断形参a是否为素数,是素数,函数返回1,
否则返回0。请填空。
intisprime(inta)
{inti;
for(i=2;i<=a/2;i++)
if(a%i==0)【】;
【】;
}
8.以下程序的功能是建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输入结束(链表头结点的data域不放数据,表空的条件是ph->next==NULL),请填空。
#include<stdio.h>
structlist{intdata;structlist*next;};
structlist*creatlist()
{structlist*p,*q,*ph;inta;ph=(structlist*)malloc(sizeof(structlist));
p=q=ph;printf("Inputanintegernumber;entre-1toend:\n");
scanf("%d",&a);
while(a!=-1)
{p=(structlist*)malloc(sizeof(structlist));
【】=a;q->next=p;【】=p;scanf("%d",&a);}
p->next=′\0;return(ph);}
main()
{structlist*head;head=creatlist();}
9.设有以下程序,为使之正确运行,请在横线中填入应包含的命令行。(注:try_me()函数在a:\myfile.txt中有定义。)
______
main()
{printf("\n");
try_me();
printf("\n");}
10.在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种;前序遍历、【】遍历和后序遍历。
二、单选题(10题)11.下面关于串的的叙述中,哪一个是不正确的()。
A.串是字符的有限序列
B.空串是由空格构成的串
C.模式匹配是串的一种重要运算
D.串既可以采用顺序存储,也可以采用链式存储
12.C语言中函数返回值的类型是由()决定的。
A.return语句中的表达式类型B.调用该函数的主调函数类型C.定义函数时所指定的函数类型D.以上说法都不正确
13.下列叙述中正确的是()
A.C语言程序必须要有return语句
B.C语言程序中,要调用的函数必须在main()函数中定义
C.C语言程序中,只有int类型的函数可以未经声明而出现在调用之后
D.C语言程序中,main()函数必须放在程序开始的部分
14.数据表A中有10000个元素,如果仅要求求出其中最大的10个元素,则采用()最节省时间。
A.堆排序B.希尔排序C.快速排序D.希尔排序
15.
16.以下选项中不能用做C程序合法常量的是()。
A.1,234B.‘\123’C.123D.“\x7G”
17.
下列程序的输出结果是()。
main
{inta,b,d=25;
a=d/10%9;
b=a&&(一1);
printf("%d,%d\n",a,b);}
A.6,1B.2,1C.6,0D.2,0
18.设有下列二叉树:
对此二叉树先序遍历的结果为
A.ABCDEFB.DBEAFCC.ABDECPD.DEBFCA
19.若i和k都是int类型变量,有以下for语句:for(i=0,k=-1;k=1;k++)printf("*****\n");下面关于语句执行情况的叙述中正确的是()。
A.循环体执行两次B.循环体执行一次C.循环体一次也不执行D.构成无限循环
20.有下列程序:intfun(intx[],intn){staticintsum=0,i;for(i=0;i<n;i++)sum+=x[i]:returnsum;}main(){inta[3]={1,2,3,4,5),b[3]={6,7,8,9),s=0;s=fun(a,5)+fun(b,4);printf("%d\n",s);}程序执行后的输出结果是()。、A.45B.50C.60D.55
三、程序设计题(10题)21.规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:除了字符串前导的。号之外,将串中其他*号全部删除。在编写函数时.不得使用C语言提供的字符串函数.
22.请编写函数fun(),其功能是计算并输出下列多项式的值:F=1+1/1!+1/21+1/31+1/41+…+1/m!例如,若主函数从键盘给m输入5,则输出为F=2.716667。注意:m的值要求大于1但不大于100。部分源程序给出如下。请勿改动main()函数与其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。试题程序:
23.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun(),其功能是将s所指字符串中ASCII值为奇数的字符删除,将剩余字符形成的新字符串放在t所指数组中。例如,若s所指字符串中的内容为“ABCDEFG12345”,其中字符A的ASCII值为奇数,字符1的ASCII值也为奇数,都应当删除,其他依此类推。最后t所指的数组中的内容应是“BDF24”。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){}main(){ chars[100],t[100],Msg[]=“Pleaseenterstrings:”; printf(Msg); scanf(“%s”,s); fun(s,t); printf(“\nTheresuitis:%s\n”,t);}
24.规定输入的字符串中只包含字母和。号。请编写函数fun,其功能是:将字符串尾部的。号全部删除,前面和中间的*号不动。
25.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组stu中,请编写函数proc,其功能是:按分数的高低排列学生的记录,高分在前。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#defineMl6typedefstruct{charnum[l0];intS;}STREC:voidproc(STRECa[]){inti,j;STRECt;for(i=1;i<M;i++)/*用冒泡法来按从高到低排序*/for(j=0;j<M-1;j++)。if(a[j].s<a[j+1].s)//*按分数的高低排列学生的记录,高分在前*/{t=a[j];a[j]=a[j+1];a[j+1]=t;)}voidmain{STRECstu[M]={{"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;proc(stu);printf("Thedataaftersorted:\n");for(i=0;i<M;i++){if(i%4==0)//每行输出4个学生记录printf("n");printf("%s%4d",stu[i],num,stu[i].s);}printf("\n");}
26.假定输入的字符串中只包含字母和*号。请编写函数proc(),它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参m给出了字符串的长度,形参h给出了字符串中前*号的个数,形参e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言提供的字符串函数。例如,若字符串中的内容为****a*bc*def*g****,删除后,字符串中的内容则应当是a*bc*def*g。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:
27.请编一个函数voidproc(intttEM][N],intpp[N]),tt指向一个M行N列的二维数组,求出二维数组每行中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#defineM3
#defineN4
voidproc(intttrM3rN]。intpp[N])
{}
voidmain
{
intstr[M][N]={{34,56,84,78},
{23,84,93,12),
{28,38,39,93}};
intp[N],i,j,k;
system("CLS");
printf("Theriginaldatais:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%6d",str[i][j]);
printf("\n");
}
proc(str,p);
printf("\nTheresultis:\n");for(k=0:k<M;k++)
printf("%4d",p[k]);
printf("n");}28.请编写函数proc,该函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。
例如,若二维数组中的数据为
13233343
14243444
15253545
则一维数组中的内容应该是132333431424344415253545。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
voidproc(int(*s)[103,int*b,int*n,intrain.intnn)
{}
voidmain
{
intarr[10][10]={{33,33,33,33),{44,44,44,44},
{55,55,55,55}),i,j;
inta[l00]={o),n=o;
printf("Thematrix:\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%3d",arr[i][j]):
printf("\n");
}
proc(arr,a,&n,3,4):
printf("TheAarray:\n");
for(i=0;i<n;i++)
printf("%3d",a[i]):
printf("\n\n");
}
29.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出,请编写函数fun,其功能是:求出该学生的平均分,并放人记录的ave成员中。
例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应为78.875。注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun部位中填入你编写的若干语句。
30.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun(),其功能是根据以下公式求π的值(要求精度0.0005,即某项小于0.0005时停止迭代)。程序运行后,若输入精度0.0005,则程序应输出为3.140578。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<math.h>doublefun(doubleeps){}voidmain(){ doublex; printf(“Inputeps:”); scanf(“%lf”,&x); printf(“\neps=%lf,PI=%lf\n”,x,fun(x));}
四、2.程序修改题(10题)31.下列给定程序中,函数fun()的功能是:将m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指字符串中,例如:把3个串abc,CD,EF串联起来,结果是abcCDEF。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<conio.h>
#include<string.h>
#include<stdio.h>
/*************found**************/
intfun(charstr[][10],intm,char*pt)
{intk,q,i,j=0;
for(k=0;k<m;k++)
{q=strlen(str[k]);
j+=q;
for(i=0;i<q;i++)
/*************found**************/
pt[i]=str[k,i];
pt+=q;
pt[0]=0;
}
pt-=j;
}
main()
{intm,h;
chars[10][10],p[120];
clrscr();
printf("\nPleaseenterm:");
scanf("%d",&m);gets(s[0]);
printf("\nPleaseenter%dstring:In",m);
for(h=0;h<m;h++)gets(s[h]);
fun(s,m,p);
printf("\nTheresultis:%s\n",p);
}
32.给定程序MODII.C中函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中,中间的放在b中。
例如,输入的数为:551234,输出结果应当是:a=55.0,b=34.0,c=12.0。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
33.下列给定程序中,函数fun()的功能是逐个比较a,b两个字符串对应位置中的字符,把ASCII值小或相等的字符依次存放到c数组中,形成一个新的字符串。
例如:a中的字符串为fshADfg,b中的字符串为sdAEdi,则c中的字符串应为fdAADf。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#include<strinq.h>
voidfun(char*p,char*q,char*c)
{intk=0;
while(*p||*q)
/**********found**************/
{if(*p<=*q)
c[k]=*q;
elsec[k]:*p;
if(*p)p++;
if(*q)q++;
/**+**********found**************/
k++
}
}
main()
{chara[10]="fshADfg",b[10]="sdAEdi",
c[80]={'\0');
fun(a,b,c);
printf("Thestringa:");puts(a);
printf("Thestringb:");puts(b);
printf("Theresult:");puts(c);
}
34.给定程序MODll.C中函数fun的功能是:首先将大写字母转换为对应小写字母;若小写字母为a~u,则将其转换为其后的第5个字母;若小写字母为v~z,使其值减21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换为小写字母f若形参是字母W,则转换为小写字母b。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
35.下列给定程序中,函数fun()的功能是:根据整型形参n,计算如下公式的值。
A1=1,A2=1/(1+A1),A3=1/(1+A2),…,An=(1/(1+A(n-1))
例如,若p=10,则应输出0.617977。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动mah函数,不得增行或删行,也不得更改程序的蛄构.
试题程序:
#include<conio.h>
#include<stdio.h>
/**************found********************/
ihtfun(ihtn)
{floatA=l;inti;
/**************foudn********************/
for(i=2;i<n;i++)
A=1.0/(i+A);
returnA;
}
main()
{intn;
clrscr();
printf("\nPleaseentern:");
$canf("%d",&n);
printf("A%d=%lf\n",n,fun(n));
}
36.下列给定程序中,函数fun()的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<conio.h>
#include<stdio.h>
intfun(int*x,inty)
{
intt;
/***************found***************/
t=x;x=y;
/***************found***************/
return(y);
}
main()
{inta=3,b=8;
clrscr();
printf("%d%d\n",a,b);
b=fun(&a,b);
printf("%d%d\n",a,b);
}
37.给定程序MODll.C中函数fun的功能是:从n(形参)个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。
例如,若输入8名学生的成绩:80.5607290.59851.58864则低于平均分的学生人数为:4(平均分为:75.5625)。
请改正程序中的错误,使它能统计出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
38.给定程序MODll.C中函数fun的功能是:应用递归算法求形参a的平方根。求平方根的迭代公式如下:
例如,a为2时,平方根值为:1.414214。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
39.给定程序MODll.C中fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。
例如,给字符串s输入:AAaaBBb123CCccccd,则应输出结果:upper=6,lower=8。
请改正程序中的错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
40.给定程序MODll.C中函数fun的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:
例如,程序运行后,输入0.0001,则程序输出3.1414。
请改正程序中的错误,使它能输出正确的结果。
注意:不要改动smain函数,不得增行或删行,也不得更改程序的结构!
五、程序改错题(2题)41.下列给定程序中,函数fun的功能是:求出s所指字符串中最后一次出现的t所指字符串的地址,并通过函数值返回,在主函数中输出从此地址开始的字符串;’若未找到,则函数值为NULL。例如,当字符串中的内容为“123dabfl23dx”,t中内容为“ab”时,输出结果应是“l23dx”。当字符串中的内容为“l23dabfl23dx”,t中内容为“aim”时,则程序输出未找到信息“Notfound!”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:
42.下列给定程序中,函数proc的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码升序排序后输出。例如,输入opdye,则应输出deopy。请修改程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<string.h>#include<stdlib.h>#include<conio.h>#include<stdio.h>//****found****intproc(charstr[]){charc;unsignedi,j;for(i=0;i<strlen(str)-1;i++)for(j=i+1;j<strlen(str);j++)if(str[i]>str[j]){c=str[j]://****found****str[j]=str[i++];str[i]=c;}}voidmain{charstr[81];system("CLS");printf("\nPleaseenteracharacterstring:");gets(str);printf("\n\nBeforesorting:\n%s",str);proc(str);printf("\nAftersortingdecendingly:\n%s",str);}六、操作题(2题)43.某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。请编写fun()函数,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。
例如,若学生的成绩是85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应当是78.875。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#defineN8
typedefstruct
{charnum[10];
doubles[N];
doubleave;
}STREC;
voidfun()
{
}
main()
{
STRECs={"GA005",85.5,76,69.5,85,91,72,64.5,87.5);
inti;
fun(&s);
printf("The%s'sstudentdata:\n",s.num)//*输出学号*/
for(i=0;i<N;i++)
printf("%4.1f\n",s.s[i]);
/*输出各科成绩*/
printf("\nave=%7.3f\n",s.ave);
/*输出平均分*/
}
44.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是在形参s所指宇符串中寻找与参数c相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则不做任何处理。例如,若s所指字符串为“baacda”,c中的字符为a,执行后s所指字符串为“baaaacdaa”。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>voidfun(char*s,charc){ inti,j,n;/*********found*********/ for(i=0;s[i]!=【1】;i++) if(s[i]==c) {/*********found*********/ n=【2】; while(s[i+1+n]!=‘\0’) n++; for(j=i+n+l;j>i;j--) s[j+1]=s[j];/*********found*********/ s[j+1]=【3】; i=i+1; }}main(){ chars[80]=’’baacda’、c; printf(“\nThestring:%s\n'Vs); printf(M\nlnputacharacter:”); scanf(“%c”,&c); fun(s,c); printf(n\nTheresultis:%s\n”,s);}
参考答案
1.5656解析:本题中a,b,c,d足实参,x,y,cp,dp是形参。C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。因此,程序的输出结果是56。
2.44解析:在主函数中调用函数f,函数f有三个参数,形参f1与f2分别是两个指向函数的指针。在f中执行f2(x)-f1(x),实际上是执行了fb()2)-fa(2),故执行i=(fa,fb,2)卮i的值为23-22=4。
3.本题考查的重点是scanf函数的调用。scanf(“<格式化字符串>”,<地址表>),格式化字符串后可以加上场宽,本题中两个变量的场宽都为2,所以输入1234567<CR>后,变量a的值为12。变址b的值为34,从而输出为1234。\r\n\r\n
4.生命期生命期解析:软件的生存周期是软件工程最基本的重要概念。软件产品和其他产品的生产一样,都要经过分析、设计、制造、检测和运行使用几个阶段。通常,把软件从开始研制(形成概念)到最终软件被废弃这整个过程称为软件的生命期。
5.从定义到本源文件结束从定义到本源文件结束解析:C语言规定,宏名的有效范围为从定义宏到本源程序结束。
6.(y%2)==0(y%2)==0解析:因符合偶数的条件是对2取余为0,所以要描述y是偶数的表达式是(y%2)==0。
7.return0return1return0,return1解析:如果a能被i整除,则a是素数,返回值为0。如果a不能被i整除,则a不是素数,返回值为1。
8.p->dataqp->data,q解析:本题考查的是链表这一数据结构对结构体变量中数据的引用。链表的特点是结构体变量中有两个域,一个是数据,另一个是指向该结构体变量类型的指针,用以指明链表的下一个结点。
9.#include<a:\myfile.txt>#include<a:\\myfile.txt>解析:本题考查了函数的存储分类的概念。如果没有特别说明,函数的存储范围是从定义函数的位置到文件的结尾,如果其他文件想使用这个函数,需要用ginclude文件包含命令将定义函数的文件包含进来。
10.中序中序解析:在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍历、中序遍历和后序遍历.前序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先访问根结点,然后遍历左子树,最后遍历右子树;并且遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。中序遍历指在访问根结点、遍历左了树与遍历右子树这三者中,首先遍历左子树,然后访问根结点,最后遍历右子树:并且遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。后序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历右子树,然后访问根结点,最后遍历左子树;并且遍历左、右子树时,仍然光遍历右子树,然后访问根结点,最后遍历左子树。
11.B
12.C
13.C
14.B
15.C
16.AA选项中逗号是一个操作符。
17.B
\n当逻辑运算符“&&”两边的值是非零时,逻辑表达式的值为真(即为1)。所以b=2&&(-1)=1,2%9=2,故a=2,故先算a/10=25/10=2。
\n
18.C解析:二叉树的遍历分为先序,中序、后序三种不同方式.本题要求先序遍历,其遍历顺序应该为:访问根结点->,先序遍历左子树->先序遍历右子树。按照定义,先序遍历序列是ABDECF,故答案为C。
19.D此题考查的是基本的循环,答案为D。
20.C在函数intfun(intx[],intn)的定义中,变量sum为一个静态局部变量。由于在整个程序运行期间,静态局部变量在内存中的静态存储中占据着永久的存储单元。函数intfun(intx[],intn)的功能是求出数组x[]各个元素的和,所以在主函数中,调用函数fun(a,5)后,变量sum=1+2+3+4+5=15,当再次调用fun(b,4)后,变量sum=15+6+7+8+9=45,所以s=15+45=60。
21.
程序设计题解析:
【考点分析】
本题考查:指针型变最定义;wh丑e循环语句;语句条件
表达式;字符串结束标识‘\0’。
【解题思路】
函数fun的功能:除了字符串前导的*号之外,将串中其他+号全部删除。
【解答本题】
(1)定义一个临时指针P,初始指向原串首地址;(2)利用循环语句把字符串前导*号拷贝到原串;(3)继续移动指针,把串中和串尾的非*号字符拷贝到原串;(4)为修改后的字符串赋结束字符‘、O’。
【解题宝典】
要删除字符串中的指定字符,我们通常采用保留非指定字符的方法。可以将非指定字符保留在原串,即将需要保留的字符从原串的起始位置重新赋值;也可以保留到新串,即新建一个字符串,存放要保留的字符。
22.
【解析】该程序的功能是计算并输出多项式的值。该题的解题思路是根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。
根据题干中给出的数列,推出每一项是阶乘的倒数,所以首先在循环中求得每一项的阶乘。其中阶乘的计算公式
定义为:
m!=m*(m=1)*(m=2)*…*1(m>1)
m!=1(m=1)
公式分为参数m是1和大于1的两种情况,例如.1的阶乘1!=1;5的阶乘5!=5*4*3*2*1。
然后求得阶乘分之一的累加和。
23.voidfun(char*s,chart[]){ inti,j=0,n; n=strlen(s);/*遍历整个数组*/ for(i=0;i<=""p="">/*如果元素的ASCII值为偶数*/ if(s[i]%2==0) {/*将元素保存到t中*/ t[j]=s[i]; j++; } t[j]=-‘\0’;}要删除ASCII值为奇数的字符,也就是要保留ASCII值为偶数的字符,将ASCII值为偶数的字符保存到新字符串。所以本题的算法是对原字符串从头到尾进行扫描,找出ASCII值为偶数的字符并依次存入数组。24.
voidfun(char*a){
while(*a!=’、0。)
a++:
a一一;/*指针a指向字符串的尾部*/while(}a==’*。)
a一一;/·指针a指向最后一个字母*/
*(a+1)=’、0’;/*在字符串最后加上结束标志符·/
【考点分析】
本题考查:删除字符串尾部*号;删除的主要思想是把不删除的字符保留起来。
【解题思路】
对于一个字符串要删除其尾部的*号,只需要在最后一个不是*号的字符后面加上结束符号‘、0’。具体操作为:首先找到字符串的结尾,然后从最后一个字符开始往前逐个判断是否为*号,直到找到非·号字符为止。最后在该字符后面加上结束符号’\0。25.voidproc(STRECa[]){inti,j;STRECt;for(i=1;i<M;i++)//用冒泡法来按从高到低排序for(j=0;j<M-1;j++)if(a[j].s<a[j+1].s)//按分数的高低排列学生的记录,高分在前{t=a[j];a[j]=a[j+1];a[j+1]=t;}}
26.
【解析】题目要求不能用C语言提供的字符串函数,可以利用移动字符串指针来实现,首先移动字符串指针到第一个不是*的位置,通过指针的移动,来实现把第一个不是星号的字符与最后一个不是星号的字符放到a数组中,最后用ˊ\0ˊ来作为字符串结束的标志。
27.\r\n\tvoidproc(inttt[M][N],intpp[N])
inti,j,max;
for(i=0;i<M;i++)//i控制行的下标
{
max=tt[i][c];//max存放每行中最大的数
for(j=0;j<N;j++)
if(tt[i][j]>max)
max=tt[i][j];
pp[i]=max;//把大的数放到PP数组中,经过i来控制pp数组的下标
}
}
【解析】按照题目中要求,求出二维数组每行中最大元素,并依次放入PP所指的一维数组中。首先比较二维数组中每一行的元素,找出每一行中的最大元素,放入一维数组pp中,返回到主函数当中。28.\r\n\tvoidproc(int(*s)[10],int*b,int*n,intmm,intnn)
{
inti,j,k=0;
for(i=0;i<mm;i++)//i是表示其行的下标
for(j=0;j<nn;j++)//j是表示其列的下标
b[k++]=s[i][j];//把其放到b的一维数组中
*n=k;//把b数组的长度通过形参n传回到主函数中
}
【解析】要将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,可以通过首先行循环,然后列循环取出二维数组中的每一个元素,并将其放入一维数组中。最后,将一维数组的长度通过形参返回到主函数当中。29.
【考点分析】
本题考查:结构体类型成员运算,指向结构体类型的指针变量作函数参数。
【解题思路】
本题考查自定义形参的相关知识点,程序流程是这样的:在fun函数中求出平均分后,返回到主函数时平均分也要带回,所以只能定义一个指针类型的形参STREC*a,此时,引用成员的方式可以使用指向运算符,即a一>ave和a一>s[i],当然也可用(*a).ave和(*a).s[i]。30.doublefun(doubleeps){ doubles=0.0,s1=1.0; intn=1; while(s1>=eps) /*当某项大于精度要求时,继续求下一项*/ { s=s+s1; /*求和*/ s1=s1*n/(2*n+1);/*求多项式的每一项*/ n++; } return2*s;}该题考核的是通过迭代法求给定多项式的值。迭代法是让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。需要注意变量的数据类型和赋初值操作。定义double类型变量s,并为其赋初值,用来存放多项式的某一项和最后的总和。从第2项开始,以后的每一项都是其前面一项乘以n/(2*n+1)。程序用s1来表示每一项,用s表示求和后的结果。需注意变量s1和s的初值都为1.0,因为循环变量从第2项开始累加。
31.(1)错误:intfun(charstr[][10]intmchar*pt)正确:voidfun(charstr[][10intmchar*pt)(2)错误:pt[i]=str[ki];正确:pt[i]=str[k][i];(1)错误:intfun(charstr[][10],intm,char*pt)正确:voidfun(charstr[][10,intm,char*pt)\r\n(2)错误:pt[i]=str[k,i];正确:pt[i]=str[k][i];解析:本题中的两例错误我们已经在前面的讲解中详细阐述了,一般这样的字符串连接函数在C语言的考试中肯定不让使用strcat函数,但是,直接用if和while的循坪嵌套也很容易解决问题的。
32.(1)f1oatk;(2)if(*a<*c)(1)f1oatk;(2)if(*a<*c)解析:本题中函数的功能是把主函数中输入的3个数,最大的放在a中,最小的放在c中。对三个数进行两两比较,实现函数功能。
33.(1)错误:{if(*P<=*q)正确:{if(*p>=*q)(2)错误:k++正确:k++;(1)错误:{if(*P<=*q)正确:{if(*p>=*q)\r\n(2)错误:k++正确:k++;解析:错误1:依题意,把ASCII值小或相等的字符存放到c数组中,故if语句的关系运算符应为“>=”。错误2:C语言规定,每个语句要用分号结束。
34.(1)c=c+32;(2)c=c+5;(1)c=c+32;(2)c=c+5;解析:本题中函数的功能是将某些大写字母转换为对应小写字母之后的第五个字母。对于将字母转换的题型,首先是查找符合条件的字符,然后根据规则对字符进行转换。本题需要大家了解大小写字母是怎样通过ASCII码相互转换的。
35.(1)错误:intfun(intn)正确:floatfun(intn)(2)错误:for(i=2;i<n;i++)正确:for(i=2;i<=n;i++)(1)错误:intfun(intn)正确:floatfun(intn)\r\n(2)错误:for(i=2;i<n;i++)正确:for(i=2;i<=n;i++)解析:该题中fun()函数的作用是计算数列前n项的和,而数列的组成方式是:第n项的分母是功口第n-1项的值,分子为1,如果循环累加按for(i=2;i<n;i++)执行的话,当我们输入n=2的时候会是什么结果?循环会怎么执行呢?循环不能执行,但数学思路绝对正确,这就矛盾了,所以循环条件应该是for(i=2;i<n;i++)。
36.(1)错误:t=x;x=y;正确:t=*X;*x=y;(2)错误;return(y);正确:return(t);(1)错误:t=x;x=y;正确:t=*X;*x=y;\r\n(2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 关于加强中小学校固定资产管理的思考
- 信息化环境下企业财会工作职能转变的研究
- 家具设计课件教学课件
- 53模拟试卷初中数学八年级下册16.1.1二次根式的概念
- DB14-T 2987-2024 山西电子政务外网电子认证系统总体架构
- 保健食品行业供需现状与发展战略规划
- 中国金属导体浆料市场发展状况与投资规划建议报告2024-2030年
- 睿创微纳财务报表分析报告
- 八年级物理第一次月考卷01(参考答案)(安徽沪科版)
- 河北省正定县七中2025年高三第一次测试语文试题含解析
- 板球运动简介课件
- 兵团精神讲座-课件
- 师德师风量化考核表
- 小学硬笔书法课课件
- 学校中层干部培训课件
- 硬质合金生产重点技术之压制和烧结
- 小学特殊教育人教三年级上册目录教学设计《小台灯》第一课时
- 门诊诊断证明书(模板)
- 初中 初二 生物 鸟 任务单
- 2021年新教科版六年级上册科学第四单元能量教材分析
- 分项工程质量验收记录表格模板
评论
0/150
提交评论