试题4548文档格式.docx
- 文档编号:16952022
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:18
- 大小:25.51KB
试题4548文档格式.docx
《试题4548文档格式.docx》由会员分享,可在线阅读,更多相关《试题4548文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
inti;
fprintf(pf,"
No=%sMark=%d\n"
a[i].num,a[i].order);
\n\n"
);
main()
STU[N]={{"
A01"
80},{"
A02"
79},
{"
A03"
66},{"
A04"
82},{"
A05"
87},
A06"
93},{"
A07"
78},{"
A08"
60},
A09"
85},{"
A10"
73}};
STU*p_order;
inti,m;
clrscr();
printf("
***TheOrigialdata***\n"
outresult(a,stdout);
\nGivethenumeberofthe
studentswhohavebetterscore:
"
scanf("
%d"
&
m);
while(m>
10)
printf("
\nGivethenumberofthe
studetswhohavebetterscore:
}
p_order=fun(a,m);
***THERESULT***\n"
***Thetopstudents***\n"
for(i=0;
%s%d\n"
p_order[i].num,p_order[i].order);
free(p_order);
【1】tt=(STU*)malloc(sizeof(STU)*m)【2】b[i].order>
b[j].order【3】tt
【解析】填空1:
tt是结构体STU型指针,声明时并没有进行初始化,所以,需要使用malloc()函数动态申请存储空间。
动态申请存储空间的大小取决于函数的形参m。
填空2:
按成绩高低找出前m名学生的方法是,先假设第一名学生成绩最高,依次与其他学生的成绩进行比较,如果出现成绩更高者,则认为这名学生成绩最高,全部比较完后找到成绩第一名的学生,存入指针tt所指的结构体空间中,同时将这名同学的成绩置0,这样在其他同学中找第一名就相当于找到所有同学中的第二名,依此类推,进行m次循环,找到前m名学生。
填空3:
题目要求函数值返回动态分配的存储区的首地址,所以返回指针tt。
2.改错题
从s所指字符串中,找出t所指字符串的个数作为函数值返回。
例如,当s所指字符串中的内容为abcdabfab,t所指字符串的内容为ab,则函数返回整数3。
请改正程序中的错误,使它能得出正确的结果。
不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include<
intfun(char*s,char*t)
{intn;
char*p,*r;
n=0;
while(*s)
{p=s;
r=t;
while(*r)
/**********************found***********************/
if(*r==*p){r++;
p++}
elsebreak;
if(r=='
\0'
)
n++;
s++;
returnn;
main()
{chars[100],t[100];
intm;
\nPleaseenterstrings:
"
scanf("
%s"
s);
\nPleaseentersubstringt:
scanf("
t);
m=fun(s,t);
\nTheresultis:
m=%d\n"
m);
(1)错误:
if(*r==*p){r++;
p++}
正确:
p++;
(2)错误:
if(r=='
\0'
if(*r=='
【解析】从字符串s中找出子串t的方法是:
从第一个字符开始,对字符串进行遍历;
若s串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符;
若比较至字符串t的结尾,则跳出循环;
若s串的字符和t串的字符不对应相同,则继续对下一个字符进行处理。
3.编程题
请编写一个函数fun(),它的功能是:
将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
例如,若输入字符串"
-1234"
,则函数把它转换为整数值-1234。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
longfun(char*p)
chars[6];
longn;
Enterastring:
\n"
gets(s);
n=fun(s);
%ld\n"
n);
【解析】if()的作用是判断它是正数还是负数。
while()循环的作用是将字符串转成相应的整数。
注意*p是一个字符如'
9'
,'
4'
,并不是一个数,要将其转成相应的数字必须令其减去'
0'
(不是'
),即*p-'
就得到*p这个字符的相应数字。
如'
-'
=0,'
8'
=8等。
必须在程序的前面加#include<
stdlib.h>
,函数atol()的作用是将字符串p转成长整型数,它是一个库函数。
longn=0;
intflag=1;
if(*p=='
)/*负数时置flag为-1*/
{p++;
flag=-1;
elseif(*p=='
+'
)/*正数时置flag为1*/
p++;
while(*p!
='
)
{n=n*10+*p-'
;
/*将字符串转成相应的整数*/
returnn*flag;
第46套
请补充函数fun,其功能是:
计算并输出给定10个数的方差:
其中
例如,给定的10个数为15.0,19.0,16.0,15.0,18.0,12.0,
15.0,11.0,10.0,16.0,输出为s=2.758623。
math.h>
doublefun(doublex[10])
doubleavg=0.0;
doublesum=0.0;
doubleabs=0.0;
doublesd;
10;
【1】;
avg=sum/10;
【2】;
sd=【3】;
returnsd;
doubles,x[10]={15.0,19.0,16.0,15.0,
18.0,12.0,15.0,11.0,10.0,16.0};
inti;
\nTheoriginaldatais:
%6.1f"
x[i]);
s=fun(x);
s=%f\n\n"
【1】sum+=x[i]【2】abs+=(x[i]-avg)*(x[i]-avg)【3】sqrt(abs/10)
根据求方差的公式可知,首先要求出10个数的平均值,此处是利用for循环对10个数求累加和。
使用for循环求出每个数与平均值之差的平方和。
通过开方,求出10个数的方差,此处需要注意对库函数sqrt()的调用。
先从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之和。
请改正函数fun()中的错误,使它能得出正确的结果。
intfun()
inta[3][3],sum;
inti,j;
sum=1;
for(i=0;
3;
{for(j=0;
j<
j++)
scanf("
a[i][j]);
sum=sum+a[i][i];
Sum=%d\n"
sum);
fun();
sun=1
sum=0;
a[i][j])
a[i][j])
【解析】该题依然考查对循环语句的掌握和对数组概念的理解,根据题干主线,我们可以看清这样的一个解题思路:
先从键盘输入一个3×
3矩阵,然后再循环累加执行循环语句中的sum=sum+a[i][i],所以sum=0。
比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。
若两个字符串长度相等,则返回第1个字符串。
例如,输入beijing<
CR>
shanghai<
(<
为回车键),函数将返回shanghai。
char*fun(char*s,char*t)
{
chara[20],b[10],*p,*q;
Input1thstring:
gets(a);
Input2thstring:
gets(b);
fun(a,b));
【解析】本题中,第1个for循环的作用是求出s的字符个数i,第2个for循环的作用是求出t的字符个数j,因为任何循环都要控制一条语句,所以在每一个for循环条件后面必须要有一个分号。
本题也可用如下技巧:
char*fun(char*s,char*t)
{if(strlen(s)>
=strlen(t)returns;
elsereturnt;
s[i]!
='
i++);
/*求字符串的长度*/
for(j=0;
t[j]!
j++);
if(i>
=j)/*比较两个字符串的长度*/
returns;
/*函数返回较长的字符串,若两个字符串长度相等,则返回第1个字符串*/
else
returnt;
第47套
请补充函数fun(),它的功能是:
计算并输出n(包括n)以内能被3或7整除的所有自然数的倒数之和。
例如,在主函数中从键盘给n输入32后,输出为:
s=1.226323。
doublefun(intn)
if(n>
0&
&
n<
=100)
for(i=1;
【1】;
if(【2】)
sum+=【3】;
returnsum;
intn;
doubles;
\nInputn:
n);
s=fun(n);
\n\ns=%f\n"
【1】i<
=n【2】i%3==0||i%7==0【3】1.0/i或1/(double)i
本题要求找出n(包括n)以内满足条件的自然数,所以,i的取值范围是从1到n。
i能被3整除,也就是指,i除以3的余数为0。
题中的条件是能被3或7整除,所以使用"
或运算符||"
。
需要注意,如果'
/'
运算符两边都是整型数,则结果也是整型数。
因为i为整型数,如果将i的倒数写为1/i,则结果为0,所以在求倒数时,要使用1.0,而不是1,或者将变量i强制类型转化为double型。
根据以下公式求π的值,并作为函数值返回。
例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.140578。
π/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9·
·
doublefun(doubleeps)
{doubles,t;
intn=1;
s=0.0;
t=1;
while(t>
eps)
{s+=t;
t=t*n/(2*n+1);
return(s);
{doublex;
\nPleaseenteraprecision:
%lf"
x);
\nPi=%1f\n"
fun(x));
t=0;
t=1.0
while(t>
=eps)
(3)错误:
return(s);
return(s*2);
【解析】该题中,我们首先看函数fun()中while语句的含义,当新的一项大于给定参数时,循环累加。
根据题意我们可以看出,最后一项应该小于给定参数,因此,循环条件应当为while(t>
=eps)。
至于return(s);
错误,是一个数学常识,应该是return(s*2);
根据以下公式求π的值(要求满足精度0.005,即某项小于0.005时停止迭代)。
π/2=1+1/3+1*2/(3*5)+1*2*3/(3*5*7)+1*2*3*4/(3*5*7*9)+…+1*2*3*…*n/(3*5*7*…*(2n+1))
程序运行后,如果输入精度0.0005,则程序输出3.140578。
doublex;
Inputeps:
%1f"
\neps=%1f,PI=%1f\n"
x,fun(x));
【解析】从第2项开始以后的每一项都是其前面一项乘以n/(2*n+1),程序中用s1来表示每一项,s来表示总和后的结果。
要注意s1,s的初值都为1.0,返回时要乘以2即return2*s,这跟数学思想有关系,学习者理解后就很简单了。
doubles=1.0,s1=1.0;
while(s1>
=eps)/*当某项大于精度要求时,继续求下一项*/
{s1=s1*n/(2*n+1);
/*求多项式的每一项*/
s=s+s1;
/*求和*/
return2*s;
第48套
补充函数fun(char*s),该函数的功能是把字符串中的内容逆置。
例如:
字符串中原有的字符串为abcde,则调用该函数后,串中的内容变为edcba。
#defineN81
voidfun(char*s)
inti=0,t,n=strlen(s);
for(;
【1】;
t=*(s+i);
【3】;
chara[N];
Theoriginalstringis:
puts(a);
fun(a);
Thestringaftermodified:
n/2或s+i<
s+n-1-i或i<
n-1-i【2】*(s+i)=*(s+n-1-i)【3】*(s+n-1-i)=t
将字符串的内容逆置,实际上就是将第一个字符和最后一个字符交换,再将第二个字符与倒数第二个字符交换,依此类推,直到中间的字符为止。
所以,长度为n的字符串需要交换的次数为n/2。
还可以这样理解,交换时始终保持顺数的字符在倒数的字符前面。
顺数第i个字符为*(s+i),倒数第i个字符为*(s+n-1-i)。
掌握利用第三个变量进行变量交换的方法。
本题中,第三个变量为t。
下列给定程序中函数fun()的功能是:
在字符串的最前端加入n个*号,形成新串,并且覆盖原串。
字符串的长度最长允许79。
voidfun(chars[],intn)
chara[80],*p;
s=p;
n;
i++)a[i]='
*'
do
{a[i]=*p;
i++;
}while(*p);
a[i]=0;
strcpy(s,a);
chars[80];
\nEnterastring:
gets(s);
\nThestring\%s\n"
\nEntern(numberof*):
fun(s,n);
\nThestringafterinster:
\%s\n"
voidfun(chars[],intn)
voidfun(char*s,intn)
p=s;
i++;
p++;
(4)错误:
a[i]=0;
a[i]='
【解析】在本题中,s是数组名,代表数组首地址,在编译时对s数组分配了一段内存单元,因此在程序运行期间s是一个常量,不能再被赋值。
因此s=p是错误的,如果把"
chars[];
改成"
char*s;
,则程序正确。
此时s是指向字符数组的指针变
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 试题 4548