上机填空题3740.docx
《上机填空题3740.docx》由会员分享,可在线阅读,更多相关《上机填空题3740.docx(14页珍藏版)》请在冰点文库上搜索。
上机填空题3740
上机填空题37-40.txt没有不疼的伤口,只有流着血却微笑的人有时候给别人最简单的建议却是自己最难做到的。
37
题目:
从键盘输入一组无符号整数并保存在数组xx[N]中,以整数0结束输入,要求这些数的最大位数不超过4位,其元素的个数通过变量num传入fun函数。
请补充fun函数,该函数的功能是:
从数组xx中找出个位和十位的数字之和大于5的所有无符号整数,结果保存在数组yy中,其个数由fun函数返回。
例如:
当xx[8]={123,11,23,222,42,333,14,5451}时,bb[3]={42,333,5451}。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
#defineN1000
intfun(intxx[],intbb[],intnum)
{
inti,n=0;
intg,s;
for(i=0;i{
g=___1___;
s=xx[i]/10%10;
if((g+s)>5)
___2___;
}
return___3___;
}
main()
{
intxx[N];
intyy[N];
intnum=0,n=0,i=0;
printf("Inputnumber:
\n");
do
{
scanf("%u",&xx[num]);
}
while(xx[num++]!
=0);
n=fun(xx,yy,num);
printf("\nyy=");
for(i=0;iprintf("%u",yy[i]);
printf("\n");
}
38
题目:
请补充fun函数,该函数的功能是判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回"yes!
",否则返回"no!
"。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
#include
char*fun(intn)
{
intg,s,b;
g=n%10;
s=n/10%10;
b=___1___;
if((g+b)==s)
return___2___;
else
return___3___;
}
main()
{
intnum=0;
clrscr();
printf("******Inputdata*******\n");
scanf("%d",&num);
printf("\n\n\n");
printf("******Theresult*******\n");
printf("%s\n",fun(num));
}
39
题目:
请补充main函数,该函数的功能是:
从一个字符串中截取前面若干个给定字符数的子字符串。
其中,str1指向原字符串,截取后的字符串存放在str2所指的字符数组中,n中存放预截取的字符个数。
例如,当str1="abcdefg",然后输入3,则str2="abc"。
注意:
部分源程序如blank.c给出。
仅在横线上填入所编写的若干表达式或语句,请勿改动函数中的其它任何内容。
#include
#include
#defineLEN80
main()
{
charstr1[LEN],str2[LEN];
intn,i;
clrscr();
printf("Enterthestring:
\n");
gets(str1);
printf("Enterthepositionofthestringdeleted:
");
scanf(___1___);
for(i=0;i___2___;
str2[i]='\0';
printf("Thenewstringis:
%s\n",___3___);
}
40
题目:
请补充main函数,该函数的功能是:
从键盘输入一个字符串并保存在字符str1中,把字符串str1中下标为偶数的字符保存在字符串str2中并输出。
例如,当str1="abcdefg"时,则str2="aceg"。
注意:
部分源程序如blank.c给出。
仅在横线上填入所编写的若干表达式或语句,请勿改动函数中的其它任何内容。
#include
#include
#defineLEN80
main()
{
charstr1[LEN],str2[LEN];
char*p1=str1,*p2=str2;
inti=0,j=0;
clrscr();
printf("Enterthestring:
\n");
scanf(___1___);
printf("******theorigialstring********\n");
while(*(p1+j))
{
printf("___2___",*(p1+j));
j++;
}
for(i=0;i*p2++=*(str1+i);
*p2='\0';
printf("\nThenewstringis:
%s\n",___3___);
}
逛商场走累了,上淘宝网也许会有惊喜!
解答
37
分析:
题目要求在fun函数中从参数xx数组中找出个位和十位的数字之和大于5的所有无符号整数,结果保存在参数bb数组中,其个数作为fun函数的返回值返回。
此题关键的地方在于如何取得一个数字的个位和十位的数字。
题目给出的程序使用了程序设计中常用的一种技巧。
即使用整除运算(/)和取模运算(%)。
在程序设计方法中,整除运算(/)和取模运算(%)可以相互配合用于取得整数的各个位数上的数字。
例如给出整数a,以下方法可以取得任意位数上的数字。
(1)取得个位上的数字,我们可以使用a%10即可。
(2)取得十位上的数字,我们可以使用a/10%10即可。
注意这里a/10不一定能取得十位数上的数字,因为a如果大于等于100的情况下,a/10只是去掉个位上的数字而已。
(3)取得百位上的数字,我们可以使用a/100%10即可。
(4)取得千位上的数字,我们可以使用a/1000%10即可。
(5)取得万位上的数字,我们可以使用a/10000%10即可。
(6)更高位的数字依次类推。
从以上可以看出,取得整数的低位可以使用取模运算(%)。
要取低位的几位数字可以通过取模10的倍数来控制。
例如取12345的最低位通过12345%10=5,取12345的低两位通过12345%100=45,取12345的低三位通过12345%1000=345,其余的依次类推。
取得整数的最高位可以使用整除运算(/)。
要取高位的几位数字可以通过整除10的倍数来控制。
例如取12345的最高位通过12345/10000=1,取12345的高两位通过12345/1000=12,取12345的高三位通过12345/100=123,其余的依次类推。
有的考生可能会问,12345除以100不是123.45吗?
小数部分怎么没有了?
这是由于C语言语法的规定,整除运算(/)用于两个整数之间,结果也为整数,即使存在小数部分也会被放弃。
程序注解如下:
#include
#defineN1000
/*在xx数组中找出符合条件的整数,将它们保存在参数bb数组中*/
/*num参数为xx数组中整数的个数*/
intfun(intxx[],intbb[],intnum)
{
/*n指示数字放入bb数组的位置,由于数组从0开始,所以初始值设置为0*/
inti,n=0;
/*g保存个位数字,s保存十位数字*/
intg,s;
/*使用for循环逐一检查xx数组中每一个整数*/
for(i=0;i{
/*通过针对10进行取模取得整数的个位数*/
g=xx[i]%10;
/*通过整除10再针对10进行取模取得整数的十位数*/
s=xx[i]/10%10;
/*判断当前检查的整数的个位和十位的数字之和是否大于5*/
if((g+s)>5)
/*符否大于5的条件,则将该整数放入bb数组中*/
/*bb[n++]=xx[i]相当于bb[n]=xx[i];n++;两句语句*/
bb[n++]=xx[i];
}
returnn;
}
main()
{
intxx[N];
intyy[N];
intnum=0,n=0,i=0;
printf("Inputnumber:
\n");
/*反复输入整数放入xx数组中,直到输入0为止*/
/*num变量每输入一个整数则加一,最后num保存了xx数组中整数的个数*/
do
{
scanf("%u",&xx[num]);
}
while(xx[num++]!
=0);
n=fun(xx,yy,num);
printf("\nyy=");
/*输出符合条件的所有整数*/
for(i=0;iprintf("%u",yy[i]);
printf("\n");
}
38
分析:
题目要求在fun函数中判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回"yes!
",否则返回"no!
"。
实现以上要求的关键在于如何取得一个整数的个位、十位和百位数字。
通过整除(/)和取模(%)运算,我们可以得到一个整数的任意位数上的数字。
例如给出整数a,各个位数的数字可以通过以下方式得到:
(1)取得个位的数字,可以通过a%10得到。
例如12345%10=5
(2)取得十位的数字,可以通过a/10%10得到。
例如12345/10%10=4
(3)取得百位的数字,可以通过a/100%10得到。
例如12345/100%10=3
(4)取得千位的数字,可以通过a/1000%10得到。
例如12345/1000%10=2
(5)其余位数的数字依次类推
所以,程序使用以上的方法在fun函数中分别得到个位数字g、十位数字s、百位数字b,然后将个位数字g加上百位数字b判断是否等于十位数字s。
如果等于则返回字符串"yes!
",否则返回字符串"no!
"。
程序注解如下:
#include
#include
char*fun(intn)
{
intg,s,b;
/*取得参数n的个位数字,保存在g变量中*/
g=n%10;
/*取得参数n的十位数字,保存在s变量中*
s=n/10%10;
/*取得参数n的百位数字,保存在b变量中*/
b=n/100%10;
/*判断个位数字和百位数字之和是否等于十位上的数字*/
if((g+b)==s)
return"yes!
";
else
return"no!
";
}
main()
{
intnum=0;
/*clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容*/
/*clrscr函数定义在conio.h中,所以需要#include*/
clrscr();
printf("******Inputdata*******\n");
/*从键盘上输入要判断的整数*/
scanf("%d",&num);
printf("\n\n\n");
printf("******Theresult*******\n");
/*输出fun函数的返回值*/
printf("%s\n",fun(num));
}
39
分析:
题目要求在main函数中实现从字符串str1中截取前面n个字符数的子字符串,然后将截取的子字符串放入str2字符串数组中。
程序注解如下:
#include
#include
#defineLEN80
main()
{
charstr1[LEN],str2[LEN];
intn,i;
/*clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容*/
/*clrscr函数定义在conio.h中,所以需要#include*/
clrscr();
printf("Enterthestring:
\n");
/*gets函数的作用是接收从键盘输入的字符串,将其放入str1参数中*/
/*gets函数定义在stdio.h中,所以需要#include*/
gets(str1);
printf("Enterthepositionofthestringdeleted:
");
/*输入要从str1字符串中截取的字符个数,将其放入n变量中*/
scanf("%d",&n);
/*使用循环将str1字符串前n个字符一个一个地复制到str2字符数组中*/
for(i=0;istr2[i]=str1[i]
/*设置str2的字符串结束标记*/
str2[i]='\0';
/*根据Thenewstringis:
的提示信息得知要输出得到的新字符串str2*/
printf("Thenewstringis:
%s\n",str2);
}
40
分析:
第一个填空处要注意str1是数组名,而数组名同时也是一个指针名称,所以不需要填写&str1的,即不需要针对str1取地址。
第二个填空处要注意*(p1+j)是取指针p1后第j个位置的地址存放的内容,即取出那个地址中的字符,所以填写%c。
第三个填空处输出得到的新的字符串,从"\nThenewstringis:
%s\n"中的"%s"也可以看出是填写一个字符串,所以填写str2。
程序注解如下:
#include
#include
#defineLEN80
main()
{
charstr1[LEN],str2[LEN];
/*p1初始值指向str1第一个字符*/
/*p2初始值指向str2第一个字符*/
char*p1=str1,*p2=str2;
inti=0,j=0;
/*clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容*/
/*clrscr函数定义在conio.h中,所以需要#include*/
clrscr();
printf("Enterthestring:
\n");
/*根据"Enterthestring:
"提示信息得知输入的是要进行处理的字符串str1*/
scanf("%s",str1);
printf("******theorigialstring********\n");
/*逐一输出str1字符串每一个字符,同时j记录str1字符串中的字符个数*/
/*while(*(p1+j))是while(*(p1+j)!
='\0')的简写方式*/
while(*(p1+j))
{
printf("%c",*(p1+j));
j++;
}
/*将str1字符串中数组下标为偶数的字符复制到str2数组中*/
/*p2初始值指向str2第一个字符,每复制一个字符p2往后移动一个字符位置*/
for(i=0;i*p2++=*(str1+i);
*p2='\0';
printf("\nThenewstringis:
%s\n",str2);
}