8992C语言试题Word文件下载.docx
- 文档编号:22862929
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:19
- 大小:25.39KB
8992C语言试题Word文件下载.docx
《8992C语言试题Word文件下载.docx》由会员分享,可在线阅读,更多相关《8992C语言试题Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
【解析】填空1:
本题考查对标准输入函数scanf()的掌握,输入的为字符,所以格式控制符为"
,并将输入的字符存于数组str中,注意在地址表列中,要在数组元素str[i]前加上取址符"
&
"
。
填空2:
由于输入的字符串以'
结束,所以只要输入的字符不是'
,就继续输入,即do-while循环继续执行。
填空3:
本题考查对标准输出函数printf()的掌握,因为输出的为字符,所以格式控制符为"
2.改错题
给定程序中,函数fun()的功能是:
使数组中的元素的值增加10倍。
改正其中的错误,使它能得出正确的结果。
不要改动main函数,不得增行或删行,也不得更改程序的结构。
conio.h>
intm[10];
voidfun(void)
intj;
Insubfuncaftercalling\n"
for(j=0;
j<
10;
j++)
/**********************found***********************/
%3d"
m[j]*10);
{inti;
Inmainbeforecalling\n"
for(i=0;
i<
i++)
m[i]=i;
m[i]);
fun();
\nInmainaftercalling\n"
getch();
错误:
正确:
printf("
m[j]=m[j]*10);
【解析】本题考查全局变量相关知识。
该题程序中的fun()没有参数输入,但数组m[10]为全局变量,故可在fun()函数中使用,fun()函数对数组m的操作可以反映到主函数的输出结果中。
3.编程题
请编写函数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。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
math.h>
doublefun(doublex[10])
{
doubles,x[10]={95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0};
inti;
\nTheoriginaldatais:
\n"
i++)
%6.1f"
x[i]);
\n\n"
s=fun(x);
s=%f\n\n"
s);
【解析】又是一道算式表达题,思路很简单,程序中用第1个循环来完成求10个数的总和,接着再用x1=x1/10来求出平均值。
doublex1=0.0,s=0.0;
x1=x1+x[i];
x1=x1/10;
/*求10个数的平均值*/
s=s+(x[i]-x1)*(x[i]-x1);
returnsqrt(s/10);
/*求10个数的方差*/
第90套
计算每个学生成绩的平均分,并把结果保存在数组bb中。
例如,当score[N][M]={{83.5,82,86,65,67},{80,91.5,84,
99,95},{90.5,95,86,95,97}}时,三个学生的平均分为76.7
89.992.7。
#defineN3
#defineM5
inti,j;
staticfloatscore[N][M]={{83.5,82,86,
65,67},{80,91.5,84,99,95},{90.5,95,
86,95,97}};
floatbb[N];
clrscr();
N;
【1】;
for(j=0;
M;
【2】;
bb[i]/=M;
printf("
\nstudent%d\taverage
=%5.1f"
i+1,bb[i]);
【1】bb[i]=0【2】bb[i]+=score[i][j]
每个人的平均分都保存在数组bb[N]中,所以在使用前要对数组bb的各元素赋初值0。
为了求出平均分,首先要求出每个学生的总分,并存于数组bb中。
以下程序可把输入的十进制数以十六进制数的形式输出。
请在横线上填上适当的内容并把横线删除,使它能得出正确的结果。
charb[17]={"
0123456789ABCDEF"
};
intc[64],d,i=0,base=16;
longn;
Enteranumber:
scanf("
%ld"
n);
do{
c[i]=______;
i++;
n=n/base;
while(n!
=0);
Transmitenewbase:
for(--i;
i>
=0;
--i)
{d=c[i];
b_______);
(1)错误:
缺少语句
应填入n%base或n%16
(2)错误:
应填入[d]
【解析】在该程序中,字符数组b存储十六进制的16个数字符,整型数组c存储译出的十六进制数的各位数值。
从整数n译出它的各位十六进制数值,需采用除16取余的方法,即求n除16的余,得到它的十六进制的个位数,接着将n除以16。
在n不等于0的情况下循环,能顺序求出n的十六进制的个位数、十位数、百位数等。
程序中变量base已预置16,所以在第1个空框处可填代码n%base或n%16。
当n的十六进制数的个位、十位、百位等依次存放于数组c中后,就从最高位至最低位,参照数组c[i]的内容d(以其内容为下标),取十六进制数字符表中的字符b[d]输出。
所以在第2个空框处可填入代码[d]。
学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),该函数的功能是:
把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。
#include<
#defineN12
typedefstruct
{charnum[10];
doubles;
}STREC;
doublefun(STREC*a,STREC*b,int*n)
STRECs[N]={{"
GA05"
85},{"
GA03"
76},{"
GA02"
69},{"
GA04"
85},
{"
GA01"
91},{"
GA07"
72},{"
GA08"
64},{"
GA06"
87},
GA09"
60},{"
GA11"
79},{"
GA12"
73},{"
GA10"
90}};
STRECh[N],t;
FILE*out;
inti,j,n;
doubleave;
ave=fun(s,h,&
The%dstudentdatawhichishigherthan%7.3f:
n,ave);
i<
n;
i++)
%s%4.1f\n"
h[i].num,h[i].s);
out=fopen("
out12.dat"
"
w"
fprintf(out,"
%d\n%7.3f\n"
n-1;
for(j=i+1;
if(h[i].s<
h[j].s)
{t=h[i];
h[i]=h[j];
h[j]=t;
}/*分数从高到低排列*/
%4.1f\n"
h[i].s);
fclose(out);
【解析】本题中第1个循环的作用求出所有分数的总和,只有进行了av=av/N后才得到平均值(我们在前面的程序中碰到过类似问题)。
第2个循环的作用是将高于等于平均分的学生存入b所指存储单元中。
同一结构体变量之间可以互相赋值。
本程序中直接用*n来表示b的下标,注意开始时要给*n赋0,且使用时不能少*号。
因为单独的n是一个指针变量,而我们要用的是它所指向的那个存储单元中的值。
doubleav=0.0;
*n=0;
av=av+a[i].s;
av=av/N;
/*求平均值*/
if(av<
=a[i].s)
{b[*n]=a[i];
*n=*n+1;
}/*将高于等于平均分的学生存入b所指存储单元中,并统计人数*/
returnav;
/*返回平均分*/
第91套
请补充函数fun(),该函数的功能是把数组bb中的数按从小到大的排列(数组的值及元素个数从主函数中输入)。
例如,输入23541,结果为12345。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
#defineN100
voidfun(intbb[],intn)
inti,j,t;
【1】;
【2】;
if(bb[j]>
bb[j+1])
{
t=bb[j];
bb[j]=bb[j+1];
bb[j+1]=t;
}
inti=0,n=0;
intbb[N];
\nInputn:
\n"
%d"
\nInputdata:
while(i<
n)
bb[%d]="
i);
scanf("
bb[i]);
fun(bb,n);
\n***theresult***\n"
%4d"
bb[i]);
【1】i<
n【2】j<
n-1
本题采用冒泡法进行排序。
冒泡法的思路是:
如果对n个数从小到大排序,则要进行n轮比较,在每一轮比较中要进行n-1次两两比较。
所谓两两比较就是从头到尾依次将相邻两个数进行比较并将其中大的数放在后面,即两两比较后这两个数要形成题中所要求的顺序。
理解了冒泡法的思路,则此空应填i<
n。
理解了冒泡法的思路,则此空应填j<
n-1。
下列给定程序中,函数fun()的功能是:
从字符串s中,删除所有小写字母′c′。
请改正程序中的错误,使它能得出正确的结果。
voidfun(char*s)
{inti,j;
for(i=j=0;
s[i]!
='
\0'
;
if(s[i]!
c'
)
s[j]=s[i];
s[i]='
{chars[80];
\nEnterastring:
"
gets(s);
Theoriginalstring:
puts(s);
fun(s);
Thestringafterdeleted:
s[j]=s[i];
s[j++]=s[i];
s[i]='
\0'
s[j]='
【解析】由本题循环条件if(s[i]!
),可知,如果字符串中的字符不是'
,则执行循环,所以应该是s[j++]=s[i];
,这样错误2中的错误也就清晰了。
计算并输出下列多项式值。
S=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)-1/2n)
例如,若主函数从键盘给n输入8后,则输出为S=0.662872。
doublefun(intn)
intn;
s=fun(n);
\ns=%f\n"
【解析】本题中s=s+(1.0/(2*i-1)-1.0/(2*i));
语句是用C程序去表达题目中的每一项,这是关键,其他问题不难理解。
doubles=0.0;
for(i=1;
=n;
s=s+(1.0/(2*i-1)-1.0/(2*i));
/*计算S=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)-1/2n)*/
returns;
第92套
计算两个自然数n和m(m<
10000)之间所有数的和(n和m从键盘输入)。
例如:
当n=1,m=100时,sum=5050;
当n=100,m=1000时,sum=495550。
intn,m;
longsum;
【1】;
\nInputn,m\n"
%d,%d"
n,&
m);
while(n<
=m)
【2】;
n++;
sum=%【3】\n"
sum);
【1】sum=0【2】sum+=n【3】ld
变量sum进行了类型声明,但没有进行初始化,而后面的程序用sum来存放最后的结果,所以要在使用前将sum初始化为0。
通过while循环将自然数n和m之间的数进行累加,结果存于sum中。
由于sum为长整型,所以标准输出函数printf()中的格式控制符为"
给一维数组a输入任意4个整数,并按如下的规律输出。
例如输入1,2,3,4,程序运行后输出以下方阵:
4123
3412
2341
1234
#defineM4
voidfun(inta)
{inti,j,k,m;
Enter4number:
i++)scanf("
a[i]);
\n\nTheresult:
for(i=M;
0;
i--)
{k=a[M-1];
for(j=M-1;
j>
j--)
a[j]=a[j+1];
a[0]=k;
for(m=0;
m<
m++)printf("
%d"
a[m]);
\n"
{inta[M];
fun(a);
intfun(int*a)
a[j]=a[j+1];
a[j]=a[j-1];
【解析】其实,该题中题目信息已经告诉我们按"
如下规律"
,这就需要去认真分析矩阵的"
规律"
了,在第1列中,数列以4开始递减,直至1,在该数列中,行和列都是递减循环排列,所以题目在循环的时候有循环条件for(i=M;
i--)和for(j=M-1;
j--),当然每次循环结束后在列中的赋值语句应该是a[j]=a[j-1];
请编写函数fun(),它的功能是计算:
s=(ln
(1)+ln
(2)+ln(3)+…+ln(m))0.5
在C语言中可调用log(n)函数求ln(n)。
例如,若m的值为20,则fun()函数值为6.506583。
doublefun(intm)
%f\n"
fun(20));
【解析】首先,题目要求计算从1到m的对数的和,可用从1到m的循环,每次循环都累加求和。
该题需要注意之处是,log()函数的形式参数应当为double型变量,而用于循环的基数变量为整数,需要进行强制转换。
最后在返回的时候求出平方根。
=m;
s=s+log(i);
/*计算s=ln
(1)+ln
(2)+ln(3)+…+ln(m)*/
returnsqrt(s);
/*对s求平方根并返回*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8992 语言 试题