上机填空题4144Word格式.docx

上传人:b****1 文档编号:5262578 上传时间:2023-05-04 格式:DOCX 页数:16 大小:19.02KB
下载 相关 举报
上机填空题4144Word格式.docx_第1页
第1页 / 共16页
上机填空题4144Word格式.docx_第2页
第2页 / 共16页
上机填空题4144Word格式.docx_第3页
第3页 / 共16页
上机填空题4144Word格式.docx_第4页
第4页 / 共16页
上机填空题4144Word格式.docx_第5页
第5页 / 共16页
上机填空题4144Word格式.docx_第6页
第6页 / 共16页
上机填空题4144Word格式.docx_第7页
第7页 / 共16页
上机填空题4144Word格式.docx_第8页
第8页 / 共16页
上机填空题4144Word格式.docx_第9页
第9页 / 共16页
上机填空题4144Word格式.docx_第10页
第10页 / 共16页
上机填空题4144Word格式.docx_第11页
第11页 / 共16页
上机填空题4144Word格式.docx_第12页
第12页 / 共16页
上机填空题4144Word格式.docx_第13页
第13页 / 共16页
上机填空题4144Word格式.docx_第14页
第14页 / 共16页
上机填空题4144Word格式.docx_第15页
第15页 / 共16页
上机填空题4144Word格式.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

上机填空题4144Word格式.docx

《上机填空题4144Word格式.docx》由会员分享,可在线阅读,更多相关《上机填空题4144Word格式.docx(16页珍藏版)》请在冰点文库上搜索。

上机填空题4144Word格式.docx

printf(___3___);

}

42

从字符串str中取出所有数字字符,并分别计数,并把结果保存在数组b中并输出,把其它字符保存在b[10]。

例如,当str1="

de123456789abc0908"

时,结果为:

0:

21:

12:

13:

14:

15:

16:

17:

18:

29:

2othercharacter:

5。

inti,b[11];

char*str="

;

char*p=str;

puts(str);

for(i=0;

i<

11;

i++)

b[i]=0;

while(*p)

switch(___1___)

case'

0'

:

b[0]++;

break;

1'

b[1]++;

2'

b[2]++;

3'

b[3]++;

4'

b[4]++;

5'

b[5]++;

6'

b[6]++;

7'

b[7]++;

8'

b[8]++;

9'

b[9]++;

___3___;

******theresult********\n"

10;

\n%d:

%d"

i,b[i]);

\nothercharacter:

b[i]);

43

请补充fun函数,该函数的功能是:

按‘0’到‘9’统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。

注意:

不能使用字符串库函数。

"

x=1123.456+0.909*bc"

,结果为:

1=2,3=1,5=1,7=0,9=2。

请勿改动主函数main和其它函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。

#defineN1000

voidfun(char*tt,intnum[])

inti,j;

intbb[10];

char*p=tt;

num[i]=0;

bb[i]=0;

while(___1___)

if(*p>

='

&

*p<

p++;

for(i=1,j=0;

i=i+2,j++)

charstr[N];

intnum[10],k;

\nPleaseenteracharstring:

gets(str);

\n*******Theoriginalstring******\n"

fun(str,num);

\n*******Thenumberofletter******\n"

for(k=0;

k<

5;

k++)

%d=%d"

2*k+1,num[k]);

return;

44

逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放在到c数组,形成一个新的字符串。

例如,若a中的字符串为aBCDeFgH,b中的字符串为ABcd,则c中的字符串应为:

aBcdeFgH。

string.h>

voidfun(char*p,char*q,char*c)

intk=___1___;

while(___2___)

if(*p<

*q)

c[k]=*q;

else

c[k]=*p;

if(*p)

if(*q)

q++;

k++;

chara[10]="

aBCDeFgH"

b[10]="

ABcd"

c[80]={'

\0'

};

fun(a,b,c);

Thestringa:

puts(a);

Thestringb:

puts(b);

Theresult:

puts(c);

走进淘宝,时时刻刻都充满关怀和希望

 

解答

分析:

第一个填空处要注意输入的是一个长整数,所以要使用"

%ld"

格式。

另外,这个长整数保存在n变量中,所以写&

n。

第二个填空处根据题目要求如果这个数是负数,则取它的绝对值,所以取负数的相反数。

第三个填空处输出n保存的长整数的值,所以填写"

n。

程序注解如下:

/*clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容*/

/*clrscr函数定义在conio.h中,所以需要#include<

*/

/*由于输入一个长整数,所以使用%ld*/

scanf("

&

n);

/*如果是负数,则取它的正数*/

n=-n;

/*输出n变量保存的长整数值*/

n);

题目要求从字符串str中取出所有数字字符,并分别计数,并把结果保存在数组b中并输出,把其它字符保存在b[10]。

程序使用p指针首先指向str字符串第一个字符,然后使用while循环将p指针不断往后移动,判断p指针在移动过程中指向的每一个字符,然后将对应的b数组中的成员增加一。

/*p指针指向str字符串第一个字符*/

/*puts函数的作用是在输出窗口中输出参数str的内容*/

/*puts函数定义在stdio.h中,所以需要#include<

/*将保存个数的b数组各成员初始化为0*/

/*while(*p)是while(*p!

='

)的简写方式*/

/*while循环逐个检查p指针指向的字符,同时p指针不断向后移动*/

/*判断p指针指向的字符是哪种字符*/

switch(*p)

/*除了以上情况,剩下的就是其他字符了,所以b[10]加一*/

/*根据题意,其他字符的个数保存在b[10]*/

default:

b[10]++;

/*检查p指针当前指向的字符之后,p指针往后移动,以便判断下一个字符*/

/*输出各个数字字符及其对应的个数*/

/*输出其他字符以及对应的个数*/

题目要求在fun函数中按‘0’到‘9’统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。

为了实现以上要求,程序采用了以下思路。

首先定义了两个数组,即num数组和bb数组。

bb数组是用于存放‘0’到‘9’10个数字字符在tt字符串中出现的个数,而num数组则只存放‘0’到‘9’中奇数数字字符各自出现的次数。

为什么要定义bb数组呢?

关键之处在于程序使用p指针在while循环中移动从而逐个检查tt字符串中的每一个字符。

如果发现p指针所指的字符为数字字符,则在bb数组对应的成员加一。

例如发现p指针所指的字符为'

,则将bb[8]增加一。

如果发现p指针所指的字符为'

,则将bb[0]增加一。

当p指针检查完tt字符串中所有字符,bb数组bb[0]至bb[9]10个成员分别保存了tt字符串中'

至'

10个数字字符的个数。

最后,从bb数组中提取奇数字符的个数复制到num数组就可以达到题目的要求。

在程序中,需要判断某一个字符是否是非数字字符还是数字字符。

判断方法就是检查该字符的ASCII码是否大于"

0"

字符的ASCII码而小于"

9"

的ASCII码。

也就是说只要某字符的ASCII码值在"

字符和"

字符两个ASCII码值之间,该字符就是数字字符。

ASCII全称是美国标准信息交换码(AmericanStandardCodeforInformationInterchange)。

在这张表中,小写字母"

的ASCII码值为48,小写字母"

1"

的ASCII码值为49,小写字母"

2"

的ASCII码值为50,后面的数字字符的ASCII码值依次类推,最后的"

的ASCII码值为57。

所有的数字字符在ASCII码表中是按顺序排列的,它们在ASCII表的码值开始于48,结束于57。

而根据C语言的语法,判断两个字符之间的大小实际上是比较两个字符在ASCII表中的码值大小。

例如"

7"

字符大于"

6"

字符,因为"

的ASCII码值为55,"

的ASCII码值为54,"

的ASCII码值大于"

的ASCII码值。

使用C语言描述就是'

>

'

这个表达式成立。

综上所述,判断某个字符是否为数字字符只要判断该字符的ASCII码值是否在"

和"

之间即可。

如果在这范围之内,该字符就是数字字符,否则不是。

/*fun函数统计tt字符串中奇数数字字符各自出现的次数,结果保存在数组num中*/

/*p指针指向tt字符串第一个字符,准备在循环中往后移动*/

/*作为保存个数的num数组和bb数组各成员初始化为0*/

/*num数组将要保存'

10个数字字符的个数*/

/*bb数组将要保存'

之间5个奇数数字字符的个数*/

/*while(*p)是while(*p!

while(*p)

/*判断p指针当前指向的字符的ASCII值是否在'

和'

的ASCII值之间*/

/*也就是判断p指针当前指向的字符是否为数字字符*/

/*如果是数字字符,则将bb数组中对应的成员增加一*/

/**p-'

取得p指针指向的数字字符与'

之间的差距*/

bb[*p-'

]++;

/*p指针向后移动一个字符位置*/

/*将奇数位置的数字字符的个数复制到num数组中*/

/*也就是将奇数数字字符各自出现的次数复制到num数组中,达到题目要求*/

num[j]=bb[i];

/*gets函数的作用是接收键盘输入的字符串,将其放入str参数中*/

/*gets函数定义在stdio.h中,所以需要#include<

*/

/*输出奇数和保存在num数组中的各个奇数出现的次数*/

此题目的关键之处就是如何判断两个字符的大小。

根据C语言的语法,两个字符进行比较大小实际上是比较这两个字符的ASCII码的大小。

题目的程序使用while循环逐一检查两个字符串a和b。

在fun函数中,p指针和q指针分别指向字符串a和b的第一个字符。

/*k指示数据放入c数组的位置,由于数组从0开始的,所以k初始值设置为0*/

intk=0;

/*while(*p||*q)是while(*p!

||*q!

/*只要p、q之间某个指针移动到字符串结尾处就结束循环*/

while(*p||*q)

/*比较p、q两个指针当前所指的字符,将大的字符放入c数组*/

/*if(*p)是if(*p!

/*p指针是否移动到了字符串结束之处,如果不是,p指针往后移动*/

/*q指针是否移动到了字符串结束之处,如果不是,q指针往后移动*/

/*c数组中放入一个新字符之后,指示放入位置的k需要增加一*/

/*这样才能指示下一个存放位置*/

/*puts函数的作用是在输出窗口中输出参数的内容*/

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2