上机填空题2124.docx
《上机填空题2124.docx》由会员分享,可在线阅读,更多相关《上机填空题2124.docx(16页珍藏版)》请在冰豆网上搜索。
上机填空题2124
21
题目:
给定程序中,函数fun的功能是:
将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。
例如,形参s所指的字符串为:
def35adh3kjsdf7。
执行结果为:
defadhkjsdf3537。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
voidfun(char*s)
{
inti,j=0,k=0;
chart1[80],t2[80];
for(i=0;s[i]!
='\0';i++)
if(s[i]>='0'&&s[i]<='9')
{
t2[j]=s[i];
___1___;
}
else
t1[k++]=s[i];
t2[j]=0;
t1[k]=0;
for(i=0;i___2___;
for(i=0;i<___3___;i++)
s[k+i]=t2[i];
}
main()
{
chars[80]="ba3a54j7sd567sdffs";
printf("\nTheoriginalstringis:
%s\n",s);
fun(s);
printf("\nTheresultis:
%s\n",s);
}
22
题目:
给定程序中,函数fun的功能是:
在形参s所指字符串中的每个数字字符之后插入一个*号。
例如,形参s所指的字符串为:
def35adh3kjsdf7。
执行结果为:
def3*5adh3*kjsdf7*。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
voidfun(char*s)
{
inti,j,n;
chart1[80],t2[80];
for(i=0;s[i]!
='\0';i++)
if(s[i]>='0'___1___s[i]<='9')
{
n=0;
while(s[i+1+n]!
=___2___)
n++;
for(j=i+n+1;j>i;j--)
s[j+1]=___3___;
s[j+1]='*';
i=i+1;
}
}
main()
{
chars[80]="ba3a54cd23a";
printf("\nTheoriginalstringis:
%s\n",s);
fun(s);
printf("\nTheresultis:
%s\n",s);
}
23
题目:
在主函数中从键盘输入若干个数放入数组x中,用0结束输入但不计入数组。
下列给定程序中,函数fun的功能是:
输出数组元素中小于平均值的元素。
例如,数组中元素的值依次为1,2,2,12,5,15,则程序的运行结果为1,2,2,5。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
#include
voidfun(___1___,intn)
{
doublesum=0.0;
doubleaverage=0.0;
inti=0;
for(i=0;i___2___;
average=___3___;
for(i=0;iif(x[i]{
if(i%5==0)
printf("\n");
printf("%d,",x[i]);
}
}
main()
{
intx[1000];
inti=0;
clrscr();
printf("\nPleaseentersomedata(endwith0):
");
do
{
scanf("%d",&x[i]);
}
while(x[i++]!
=0);
fun(x,i-1);
printf("\n");
}
24
题目:
函数fun的功能是:
从三个形参a,b,c中找出中间的那个数,作为函数值返回。
例如,当a=3,b=5,c=4时,中数为4。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
intfun(inta,intb,intc)
{
intt;
t=(a>b)?
(b>c?
b:
(a>c?
c:
___1___)):
((a>c)?
___2___:
((b>c)?
c:
___3___));
returnt;
}
main()
{
inta1=3,a2=5,a3=4,r;
r=fun(a1,a2,a3);
printf("\nThemiddlenumberis:
%d\n",r);
}
更多更快的选择在淘宝
凉鞋与拖鞋的约会
天下女人事4-越聊越有事
众明星推荐护理诀窍变
超值内衣疯狂购全场5元起
只选对的不选贵的实用手机大PK
超级人气宝贝大展台
迎接3G时代
玩乐的OOU!
玩炫的乐活!
非买不可TOP鞋款
租房也精彩
暑期性价比最高MP4推荐
解答
21
分析:
题目要求将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。
例如,形参s所指的字符串为:
def35adh3kjsdf7。
执行结果为:
defadhkjsdf3537。
为了实现以上要求,题目中的程序使用了一下思路:
(1)定义两个数组t1、t2,准备分别存放原字符串s中的非数字字符、数字字符。
(2)逐一检查字符串s中每一个字符,如果是非数字字符,则将其放入t1数组中。
如果是数字字符,则将其放入t2数组中。
(3)以上过程结束之后,将t1数组中的字符(即非数字字符)和t2数组中的字符(即数字字符)按照顺序覆盖原字符串s。
这样就达到了题目的要求。
在程序中,需要判断某一个字符是否是非数字字符还是数字字符。
判断方法就是检查该字符的ASCII码是否大于"0"字符的ASCII码而小于"9"的ASCII码。
也就是说只要某字符的ASCII码值在"0"字符和"9"字符两个ASCII码值之间,该字符就是数字字符。
ASCII全称是美国标准信息交换码(AmericanStandardCodeforInformationInterchange)。
在这张表中,小写字母"0"的ASCII码值为48,小写字母"1"的ASCII码值为49,小写字母"2"的ASCII码值为50,后面的数字字符的ASCII码值依次类推,最后的"9"的ASCII码值为57。
所有的数字字符在ASCII码表中是按顺序排列的,它们在ASCII表的码值开始于48,结束于57。
而根据C语言的语法,判断两个字符之间的大小实际上是比较两个字符在ASCII表中的码值大小。
例如"7"字符大于"6"字符,因为"7"的ASCII码值为55,"6"的ASCII码值为54,"7"的ASCII码值大于"6"的ASCII码值。
使用C语言描述就是'7'>'6'这个表达式成立。
综上所述,判断某个字符是否为数字字符只要判断该字符的ASCII码值是否在"0"和"9"之间即可。
如果在这范围之内,该字符就是数字字符,否则不是。
程序注解如下:
#include
voidfun(char*s)
{
inti,j=0,k=0;
chart1[80],t2[80];
/*逐一检查s字符串中每一个字符*/
for(i=0;s[i]!
='\0';i++)
/*如果当前字符是数字字符的时候*/
if(s[i]>='0'&&s[i]<='9')
{
/*将数字字符放入t2数组*/
t2[j]=s[i];
/*j变量记录数字字符放入t2数组的位置*/
/*所以j需要加一,指示下一个数字字符存放的位置*/
j++;
}
else
/*如果是非数字字符,则将其放入t1数组*/
/*k变量记录非数字字符放入t1数组的位置*/
/*t1[k++]=s[i];相当于以下两句:
t1[k]=s[i];k++;*/
t1[k++]=s[i];
/*设置t1、t2数组的结束标记,j记录数字字符的个数,k记录非数字字符个数*/
t2[j]=0;
t1[k]=0;
/*将t1数组中的非数字字符覆盖s数组内容*/
for(i=0;is[i]=t1[i];
/*将t2数组中的数字字符紧接着非数字字符覆盖s数组内容*/
for(i=0;is[k+i]=t2[i];
}
main()
{
/*s数组中的字符串为要处理的字符串*/
chars[80]="ba3a54j7sd567sdffs";
/*输出提示信息:
"Theoriginalstringis:
ba3a54j7sd567sdffs"*/
printf("\nTheoriginalstringis:
%s\n",s);
/*调用fun函数处理s字符串,使之符合题目要求*/
fun(s);
/*输出处理之后的s字符串*/
printf("\nTheresultis:
%s\n",s);
}
22
分析:
题目要求在fun函数的形参s所指字符串中的每个数字字符之后插入一个*号。
为了实现以上要求,题目的程序使用了以下思路:
(1)在s字符串中逐一检查每一个字符,如果发现某一个字符是数字字符就开始以下处理。
(2)发现数字字符之后就要在该数字字符之后插入一个*号。
插入之前必须将该数字字符后一个位置腾出来放入*号,所以将该数字字符之后所有的字符都往后移动一个位置。
(3)在腾出的位置放入*号。
在程序中,需要判断某一个字符是否是数字字符。
判断方法就是检查该字符的ASCII码是否大于"0"字符的ASCII码而小于"9"的ASCII码。
也就是说只要某字符的ASCII码值在"0"字符和"9"字符两个ASCII码值之间,该字符就是数字字符。
ASCII全称是美国标准信息交换码(AmericanStandardCodeforInformationInterchange)。
在这张表中,小写字母"0"的ASCII码值为48,小写字母"1"的ASCII码值为49,小写字母"2"的ASCII码值为50,后面的数字字符的ASCII码值依次类推,最后的"9"的ASCII码值为57。
所有的数字字符在ASCII码表中是按顺序排列的,它们在ASCII表的码值开始于48,结束于57。
而根据C语言的语法,判断两个字符之间的大小实际上是比较两个字符在ASCII表中的码值大小。
例如"7"字符大于"6"字符,因为"7"的ASCII码值为55,"6"的ASCII码值为54,"7"的ASCII码值大于"6"的ASCII码值。
使用C语言描述就是'7'>'6'这个表达式成立。
综上所述,判断某个字符是否为数字字符只要判断该字符的ASCII码值是否在"0"和"9"之间即可。
如果在这范围之内,该字符就是数字字符,否则不是。
程序注解如下:
#include
voidfun(char*s)
{
inti,j,n;
chart1[80],t2[80];
/*逐一检查s数组中每一个字符是否为数字字符*/
/*'\0'是s数组中字符串的结束标记*/
for(i=0;s[i]!
='\0';i++)
/*判断当前字符是否为数字字符*/
/*ASCII码值在'0'和'9'ASCII码值之间的就是数字字符*/
if(s[i]>='0'&&s[i]<='9')
{
n=0;
/*从i+1开始往后逐一寻找s字符串最后一个字符的位置*/
while(s[i+1+n]!
=0)
n++;
/*while循环结束之后i+n+1的值为s字符串最后一个字符的位置*/
/*腾出插入*号的位置,i+1为插入的位置*/
/*所有i位置之后的字符都往后移动一个位置,以腾出位置*/
for(j=i+n+1;j>i;j--)
s[j+1]=s[j];
/*在腾出的位置插入*号*/
s[j+1]='*';
/*处理完当前的数字字符之后继续在s字符串中查找数字字符*/
i=i+1;
}
}
main()
{
/*s数组中的字符串为要处理的字符串*/
chars[80]="ba3a54cd23a";
/*将s数组的内容输出*/
printf("\nTheoriginalstringis:
%s\n",s);
/*调用fun函数处理s字符串,以达到题目要求*/
fun(s);
/*输出处理过的s字符串*/
printf("\nTheresultis:
%s\n",s);
}
23
分析:
题目要求函数fun的功能是输出数组元素中小于平均值的元素。
题目中的程序使用了以下思路:
(1)首先要得到x数组中的元素的平均值。
所以程序首先将x数组中所有元素进行累加,然后除以元素个数得到平均值。
(2)得到平均值之后,再次逐一检查x数组中每一个元素,如果小于平均值则使用printf函数输出。
(3)程序中的if(i%5==0)printf("\n");语句的作用是为了美化输出结果。
它能够使每一行输出5个数字就换行。
程序注解如下:
#include
#include
/*intx[]表示x是一个数组,如果intx表示x是一个变量,所以必须加上[]*/
/*n参数为x数组中元素的个数*/
voidfun(intx[],intn)
{
doublesum=0.0;
/*average为记录平均值的变量*/
doubleaverage=0.0;
inti=0;
/*计算x数组中所有元素的总和,sum保存累加过的元素的总和*/
for(i=0;isum+=x[i];
/*将总和除以x数组中元素个数以便得到平均值,n为x数组中的元素个数*/
average=sum/n;
/*使用循环逐一检查x数组中的元素是否小于平均值*/
for(i=0;i/*如果数组元素小于平均值则使用printf函数将该元素输出*/
if(x[i]{
/*在输出的时候如果一行已经输出5个元素则换行*/
/*保证每一行输出5个数组元素*/
if(i%5==0)
printf("\n");
printf("%d,",x[i]);
}
}
main()
{
intx[1000];
inti=0;
/*clrscr函数用于清除输出窗口中已经显示的内容*/
/*clrscr函数定义在conio.h,所以需要#include*/
clrscr();
printf("\nPleaseentersomedata(endwith0):
");
/*输入x数组中的元素,用0结束输入但不计入数组*/
do
{
scanf("%d",&x[i]);
}
while(x[i++]!
=0);
/*将x数组和x数组中元素个数传入fun函数*/
fun(x,i-1);
printf("\n");
}
24
分析:
题目要求在fun函数中从三个形参(形式参数)a,b,c中找出中间的那个数,作为函数值返回。
为了实现以上要求,题目中的程序使用了?
:
运算符。
表达式1?
表达式2:
表达式3
相当于
if(表达式1成立)
整个表达式的值为表达式2的值
else
整个表达式的值为表达式1的值
例如(ii:
j的运算结果取i和j之间的较小者。
程序中首先判断a>b是否成立。
(1)如果a>b成立进入b>c?
b:
(a>c?
c:
a)再次判断b>c是否成立。
(1.2)如果b>c成立,则t=b,即a>b>c
(1.3)如果b>c不成立,即bc?
c:
a,即取a、c之间较小者。
(2)如果a>b不成立(即ac)?
a:
((b>c)?
c:
b)再次判断a>c是否成立。
(2.2)如果a>c成立,则t=a,即b>a>c
(2.3)如果a>c不成立,即ac)?
c:
b,即取b、c之间较小者。
程序注解如下:
#include
intfun(inta,intb,intc)
{
intt;
/*取得a、b、c三者中间大小的数字*/
t=(a>b)?
(b>c?
b:
(a>c?
c:
a)):
((a>c)?
a:
((b>c)?
c:
b));
returnt;
}
main()
{
inta1=3,a2=5,a3=4,r;
r=fun(a1,a2,a3);
/*输出fun的处理结果*/
printf("\nThemiddlenumberis:
%d\n",r);
}