上机填空题4952.docx
《上机填空题4952.docx》由会员分享,可在线阅读,更多相关《上机填空题4952.docx(15页珍藏版)》请在冰豆网上搜索。
上机填空题4952
上机填空题49-52.txt7温暖是飘飘洒洒的春雨;温暖是写在脸上的笑影;温暖是义无反顾的响应;温暖是一丝不苟的配合。
8尊重是一缕春风,一泓清泉,一颗给人温暖的舒心丸,一剂催人奋进的强心剂49
题目:
请补充main函数,该函数的功能是求方程a*x*x+b*x+c=0的两个实数根。
方程的系数a,b,c从键盘输入,如果判别式(disc=b*b-4*a*c)小于0,则要求重新输入a,b,c的值。
例如:
当a=1,b=2,c=1时,方程的两个根分别是:
x1=-1.00,x2=-1.00。
注意:
部分源程序如blank.c给出。
仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其它任何内容。
#include
#include
main()
{
floata,b,c,disc,x1,x2;
clrscr();
do
{
printf("Inputa,b,c:
");
scanf("%f,%f,%f",&a,&b,&c);
disc=b*b-4*a*c;
if(disc<0)
printf("disc=%f\nInputagain!
\n",disc);
}while(___1___);
printf("*******theresult*******\n");
x1=___2___;
x2=___3___;
printf("\nx1=%6.2f\nx2=%6.2f\n",x1,x2);
}
50
题目:
请补充fun函数,该函数的功能是在字符串的最前端加入n个*号,形成新串,并且覆盖。
注意:
字符串的长度最长允许为79。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其它函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
#include
#include
voidfun(chars[],intn)
{
chara[80],*p;
inti;
p=___1___;
for(i=0;ia[i]='*';
do
{
a[i]=___2___;
i++;
}while(___3___);
a[i]=0;
strcpy(s,a);
}
main()
{
intn;
chars[80];
clrscr();
printf("\nEnterastring:
");
gets(s);
printf("\nThestring\"%s\"\n",s);
printf("\nEntern(numberof*):
");
scanf("%d",&n);
fun(s,n);
printf("\nThestringafterinsert:
\"%s\"\n",s);
}
51
题目:
请补充fun函数,该函数的功能是把从键盘输入的3个整数按从小到大输出。
例如:
输入233214,结果输出142332。
注意:
部分源程序如blank.c给出。
仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其它任何内容。
#include
#include
main()
{
intx,y,z,t;
clrscr();
printf("Inputx,y,z\n");
scanf("%d%d%d",&x,&y,&z);
if(___1___)
{
t=x;
x=y;
y=t;
}
if(___2___)
{
t=z;
z=x;
x=t;
}
if(___3___)
{
t=y;
y=z;
z=t;
}
printf("******theresult*******\n");
printf("fromsmalltobig:
%d%d%d\n",x,y,z);
}
52
题目:
请补充main函数,该函数的功能是:
先以只写方式打开文件"out52.dat",再把字符串str中的字符保存到这个磁盘文件中。
注意:
部分源程序如blank.c给出。
仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其它任何内容。
#include
#include
#defineN80
main()
{
FILE*fp;
inti=0;
charch;
charstr[N]="I'mastudents!
";
clrscr();
if((fp=fopen(___1___))==NULL)
{
printf("cannotopenout52.dat\n");
exit(0);
}
while(str[i])
{
ch=str[i];
___2___;
putchar(ch);
i++;
}
___3___;
}
梦里有的,这里就有
解答
49
分析:
程序首先要求用户输入方程a*x*x+b*x+c=0中的a、b、c的值。
如果b*b-4*a*c小于0,则要求用户重新输入,直至根据输入的a、b、c计算得到的b*b-4*a*c大于等于0为止。
输入完成之后,程序根据二次方程a*x*x+b*x+c=0的求根公式计算方程的两个解。
求根公式是(-b+sqrt(b*b-4*a*c))/(2*a)和(-b-sqrt(b*b-4*a*c))/(2*a)。
程序注解如下:
#include
main()
{
floata,b,c,disc,x1,x2;
/*clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容*/
/*clrscr函数定义在conio.h中,所以需要#include*/
clrscr();
/*如果判别式(disc=b*b-4*a*c)小于0,则要求重新输入a,b,c的值*/
do
{
printf("Inputa,b,c:
");
/*从键盘输入a、b、c*/
scanf("%f,%f,%f",&a,&b,&c);
disc=b*b-4*a*c;
/*如果disc小于0,则提示再次输入*/
if(disc<0)
printf("disc=%f\nInputagain!
\n",disc);
}
/*如果disc小于0,则反复让用户重新输入*/
while(disc<0);
printf("*******theresult*******\n");
/*sqrt函数的作用是计算参数的平方根*/
/*sqrt函数定义在math.h中,所以需要#include*/
/*使用二次方程的求根公式计算两个解x1、x2的值*/
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("\nx1=%6.2f\nx2=%6.2f\n",x1,x2);
}
50
分析:
题目要求在fun函数中在字符串s的最前端加入n个*号,形成新串,并且覆盖s本身。
注意:
字符串的长度最长允许为79。
根据题意,程序在fun函数中首先定义了一个80长度的数组a和指向s数组第一个成员的p指针,然后在a数组第一个成员开始填入n个*号。
填写*号完成之后,程序从p指针所指向的s数组逐个地将字符拷贝到a数组中,最后在a数组最后一个位置设置字符串结束标记'\0',从而形成一个最前端有n个*号的新串。
由于题目要求要将得到新字符串覆盖s字符串本身,所以程序使用strcpy函数将a数组的内容拷贝覆盖s数组。
程序注解如下:
#include
#include
#include
/*s是要处理的字符串,n为加入*号的个数*/
voidfun(chars[],intn)
{
chara[80],*p;
inti;
/*p指针指向s字符串的第一个字符,准备通过p指针拷贝s字符串中的字符*/
p=s;
/*将自己定义的a数组前n个成员设置为*号*/
for(i=0;ia[i]='*';
/*将p指针所指向的字符拷贝到a数组中,然后p指针往后移动*/
do
{
/*a[i]=*p++;相当于a[i]=*p;p++;*/
a[i]=*p++;
/*i指示放入a数组的位置,所以此时i需要加一,指示下一个存放位置*/
i++;
}
/*while(*(p))是while(*(p)!
='\0')的简写方式*/
/*只有p指针不移动到结束标记'\0'该循环就反复执行*/
while(*(p));
/*在a数组最后一个位置设置0,即为字符串结束标记'\0'*/
a[i]=0;
/*strcpy函数可以将第二个参数拷贝覆盖第一个参数*/
/*strcpy函数定义在string.h中,所以需要#include*/
/*将a数组的内容覆盖s数组,使s字符串的内容符合题目的要求*/
strcpy(s,a);
}
main()
{
intn;
chars[80];
/*clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容*/
/*clrscr函数定义在conio.h中,所以需要#include*/
clrscr();
printf("\nEnterastring:
");
/*gets函数的作用接收从键盘上输入的字符串放入参数s*/
/*gets函数定义在stdio.h中,所以需要#include*/
gets(s);
printf("\nThestring\"%s\"\n",s);
printf("\nEntern(numberof*):
");
scanf("%d",&n);
fun(s,n);
printf("\nThestringafterinsert:
\"%s\"\n",s);
}
51
分析:
题目要求把从键盘输入的3个整数按从小到大输出。
为了实现以上要求,程序约定从小到大排列的顺序是x、y、z,所以需要将三个数字中最小的数字移至x,最大的数字移至z,中间大小的数字移至y即可。
为了实现以上思路,程序采取以下做法:
(1)首先将x的当前值分别与y的当前值比较大小,如果x的当前值大于y的当前值就交换两者,即将较小的值移动至x变量中保存。
(2)然后将x的值再与z进行比较大小。
同样,如果x的值大于z的值就交换两者,即将较小的值移动至x变量中保存。
(3)经过以上两个步骤之后,x变量保存的值就是原先三个数字中最小的一个。
只要将剩下的两个数字按照大小排列就可以到达要求了。
所以第三步将y的值再与z进行比较大小,如果y的当前值大于z的当前值就交换两者,即将较小的值移动至y变量中保存。
经过以上过程,变量x、y、z的值就是按照从小到大的顺序排列的。
程序注解如下:
#include
#include
main()
{
intx,y,z,t;
/*clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容*/
/*clrscr函数定义在conio.h中,所以需要#include*/
clrscr();
printf("Inputx,y,z\n");
/*输入x、y、z三个整数*/
scanf("%d%d%d",&x,&y,&z);
/*先把作为最小值的x变量中的数字确定下来*/
if(x>y)
{
/*交换x,y的值*/
t=x;
x=y;
y=t;
}
if(x>z)
{
/*交换x,z的值*/
t=z;
z=x;
x=t;
}
/*作为最小值的x变量中的数字确定之后,再把剩下的两个数字排列顺序*/
if(y>z)
{
/*交换z,y的值*/
t=y;
y=z;
z=t;
}
printf("******theresult*******\n");
/*输出经过大小排列的x、y、z*/
printf("fromsmalltobig:
%d%d%d\n",x,y,z);
}
52
分析:
题目要求先以只写方式打开文件"out52.dat",再把字符串str中的字符保存到这个磁盘文件中。
此题涉及文件操作的内容,题目中的程序首先使用fopen函数打开要操作的文件out52.dat,然后在while循环中逐一地将str字符串中的字符通过fputc函数写入out52.dat文件。
str字符串中所有字符处理结束之后则使用fclose函数关闭out52.dat文件。
程序注解如下:
#include
#include
#defineN80
main()
{
/*定义文件指针*/
FILE*fp;
inti=0;
charch;
/*str为要写入文件的字符串*/
charstr[N]="I'mastudents!
";
/*clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容*/
/*clrscr函数定义在conio.h中,所以需要#include*/
clrscr();
/*fopen函数的作用是打开文件以便进行文件的操作*/
/*fopen函数定义在stdio.h中,所以需要#include*/
/*fopen函数第一个参数代表打开的文件名,第二个参数代表以只写方式打开*/
if((fp=fopen("out52.dat","w"))==NULL)
{
/*如果打开文件失败则输出提示信息*/
printf("cannotopenout52.dat\n");
/*exit函数作用是退出程序,即结束本程序的运行*/
exit(0);
}
/*while(str[i])是while(str[i]!
='\0')的简写形式*/
/*while循环逐一提取str数组中的每一个字符,然后保存到文件中*/
while(str[i])
{
ch=str[i];
/*fputc函数的作用是将ch参数写入fp参数指向的文件中*/
/*fputc函数定义在stdio.h中,所以需要#include*/
fputc(ch,fp);
/*putchar函数的作用是将ch参数显示在输出窗口*/
/*putchar函数定义在stdio.h中,所以需要#include*/
putchar(ch);
/*准备写入下一个字符*/
i++;
}
/*关闭fp指向的文件out52.dat*/
fclose(fp);
}