上机填空题2124.docx

上传人:b****8 文档编号:10233558 上传时间:2023-02-09 格式:DOCX 页数:16 大小:19.32KB
下载 相关 举报
上机填空题2124.docx_第1页
第1页 / 共16页
上机填空题2124.docx_第2页
第2页 / 共16页
上机填空题2124.docx_第3页
第3页 / 共16页
上机填空题2124.docx_第4页
第4页 / 共16页
上机填空题2124.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

上机填空题2124.docx

《上机填空题2124.docx》由会员分享,可在线阅读,更多相关《上机填空题2124.docx(16页珍藏版)》请在冰豆网上搜索。

上机填空题2124.docx

上机填空题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;i

if(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;i

s[i]=t1[i];

/*将t2数组中的数字字符紧接着非数字字符覆盖s数组内容*/

for(i=0;i

s[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;i

sum+=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的值

例如(i

i:

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);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1