实验参考答案.doc
《实验参考答案.doc》由会员分享,可在线阅读,更多相关《实验参考答案.doc(18页珍藏版)》请在冰点文库上搜索。
计算机软件基础实验指导书参考程序
【1-1】在屏幕上显示你的学号、姓名和专业,分别各占一行显示。
#include
main()
{printf("081\n王力\n计算机应用\n");}
【1-2】如何在屏幕上显示下列图形?
#include
main()
{printf("*****\n");
printf("***\n");
printf("*\n");
}
【2-1】求半径为2.3的圆的周长和面积。
#include
main()
{doubler=2.3,l,s,pi=3.142;
l=pi*2*r;
s=pi*r*r;
printf("圆半径=%lf,周长=%lf,面积=%lf\n",r,l,s);
}
【2-2】任意输入两个基本整型数,其中一个为正,另一个为负,分别做被除数和除数时,输出它们的余数。
#include
main()
{inta,b;
printf("请输入一个正整数和一个负整数:
");
scanf("%d%d",&a,&b);
printf("a=%d,b=%d,a%b=%d\n",a,b,a%b);
printf("b=%d,a=%d,b%a=%d\n",b,a,b%a);
}
改错1题:
inta=3;b=5;sum;改为inta=3,b=5,sum;
改错2题:
scanf(“%lf%lf”,x,y);改为:
scanf(“%lf%lf”,&x,&y);
改错3题:
b=x%100;改为:
b=x/10%10;c=x/10;改为:
c=x%10;
【3-1】任意输入一个整数,如果能被3整除,输出此数;否则,输出"不是3的倍数"。
#include
main()
{intn;
printf("请输入整数:
");
scanf("%d",&n);
if(n%3==0)
printf("%d\n",n);
else
printf("不是3的倍数\n");
}
【3-2】编写程序,输入x,利用分段函数,计算并输出y值。
y=|x|(x≤0)
y=ex(x>0)
#include
#include
main()
{doublex,y;
printf("请输入实数x:
");
scanf("%lf",&x);
if(x<=0)
y=fabs(x);
else
y=exp(x);
printf("y=%f\n",y);/*或printf("y=%lf\n",y);*/
}
改错1题:
ifx%2!
=0改为if(x%2!
=0)
改错2题:
if(x!
=0);改为if(x!
=0)
y=1/x;改为:
y=1.0/x;
【4-1】求1+2+3+...+n的和。
#include
main()
{inti,n,sum=0;
printf("请输入n值:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
sum=sum+i;
printf("1+2+3+...+%d=%d\n",n,sum);
}
【4-2】求1-1/3+1/5-1/7+...+1/n的和。
#include
main()
{inti,n,f=-1;
doublesum=0;
printf("请输入n值:
");
scanf("%d",&n);
for(i=1;i<=n;i=i+2)
{sum=sum+f*1.0/i;/*加数为f*1.0/i*/
f=-f;/*求下一个加数的符号值*/
}
printf("结果为%f\n",sum);
}
【4-3】任意输入两个正整数m和n,求m!
+n!
的值。
#include
main()
{inti,m,n,t1=1,t2=1,sum;
printf("请输入m和n的值:
");
scanf("%d,%d",&m,&n);
for(i=1;i<=m;i++)
t1=t1*i;
for(i=1;i<=n;i++)
t2=t2*i;
sum=t1+t2;
printf("%d!
+%d!
=%d\n",m,n,sum);
}
改错1题:
(1)inti,sum;改为:
inti,sum=0;
(2)for(i=1,i<=100,i++)改为for(i=1;i<=100;i++)
改错2题:
for(i=100;i<=999;i++);改为:
for(i=100;i<=999;i++)
【5-1】任意输入一个字符,如果是数字字符,则输出相应的数字,是空格输出它的ASCII码值;否则,原样输出。
提示:
例:
'5'-'0'=5
#include
main()
{charch;
ch=getchar();
if(ch>='0'&&ch<='9')printf("%d\n",ch-'0');
elseif(ch=='')printf("%d\n",ch);
elseprintf("%c\n",ch);/*putchar(ch);*/
}
【5-2】输入n个字符统计其中数字字符、*号和字母的个数。
#include
main()
{charch;/*定义字符型变量*/
inti,n,num1=0,num2=0,num3=0;/*i计数变量,其它变量计各类字符的个数*/
printf("请输入要统计的字符的个数n的值:
");
scanf("%d",&n);/*给n赋值*/
for(i=1;i<=10;i++)/*for循环控制函数体执行n次*/
{ch=getchar();/*循环一次给变量ch赋值一次*/
if(ch>='0'&&ch<='9')
num1=num1+1;/*统计数字个数*/
elseif(ch=='*')
num2=num2+1;/*统计*号个数*/
elseif((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
num3=num3+1;/*统计字母个数*/
}
printf("共输入%d个字符\n",n);
printf("数字%d个,*号%d个,字母%d\n",num1,num2,num3);/*输出统计结果*/
}
【5-3】输入x,计算并输出分段函数y的值。
当x<0时y=0
当0≤x<10时y=9x/2
当x≥10时y=4.5x-8.5x
#include
#include
main()
{floatx,y;/*定义两个单精度的实型变量*/
printf("Enterx:
");
scanf("%f",&x);/*给单精度变量赋值,格式控制为:
%f*/
if(x<0)y=0;
elseif(x<10)y=9*x/2;
elsey=4.5*x-8.5*x;
printf("\nx=%f,y=%f\n",x,y);
}
【5-4】任意输入一个数,判断是否是偶数,是,输出"yes";否则,输出"no"。
#include
main()
{intn;/*定义变量*/
printf("请输入n的值:
");
scanf("%d",&n);/*给变量n赋值*/
if(n%2==0)
printf("yes\n");/*偶数输出“yes”*/
else
printf("no\n");/*不是偶数输出“no”*/
}
【5-5】输入10个字符,分别统计空格、回车和其它字符出现的次数。
#include
main()
{charch;
inti,n1=0,n2=0,n3=0;/*i循环变量,其它变量用来计数*/
printf("请输入10个字符:
");
for(i=1;i<=10;i++)
{scanf("%c",&ch);/*给ch赋值*/
switch(ch)/*判断字符类型计数*/
{case'':
n1=n1+1;break;/*是空格*/
case'\n':
n2=n2+1;break;/*是回车*/
default:
n3=n3+1;}
}
}
【5-6】任意输入一个数,判断是否是2~100之间的数:
(1)是,判断是否是3的倍数,是,输出此数;否则,不输出。
(2)不是,输出"输入错误"。
#include
main()
{intn;/*定义变量n为int类型*/
printf("请输入一个数n:
");
scanf("%d",&n);/*给n赋值*/
if(n>=2&&n<=100)/*判断n在2~100之间*/
{if(n%3==0)
printf("%d\n",n);}/*再判断n是否能被3整除*/
elseprintf("输入错误\n");/*n不在2~100之间输出“输入错误”*/
}
改错1题:
(1)scanf(“%d”,x);改为:
scanf(“%d”,&x);
(2)elseif(x<10)y=x^2-x+3;改为elseif(x<10)y=x*x-x+3;
(3)elsey=4x-7;改为:
elsey=4*x-7;
改错2题:
b=1;c=3;改为:
{b=1;c=3;}
【6-1】求1-2+3-4+5的和。
#include
main()
{intf=1,sum=0,i=1;
while(i<=5)
{sum+=i*f;
f=-f;
i++;}
printf("1-2+3-4+5=%d\n",sum);
}
【6-2】
#include
#include
main()
{doublet=1.0/2,a=1,b=1,c=1,d=2,eps,s=0;
scanf("%lf",&eps);
while(fabs(t)>=eps)
{s=s+t;
a=-a;
b=b+2;
c=c+1;
d=d+1;
t=a*b/(c*d);}
printf("%lf",s);
}
【6-3】
#include
main()
{inta,s=0;
printf("Enternumber:
");
scanf("%d",&a);/*输入第一个数*/
while(a>0)/*输入数据大于0时,执行循环*/
{ if(a%2!
=0)/*如果输入数据为奇数,求和*/
s=s+a;
scanf("%d",&a);/*输入一个新数据为下一次循环做准备*/
}
printf("奇数和=%d\n",s);
}
改错1题:
printf("%d,",k);k=k-1;改为:
{printf("%d,",k);k=k-1;}
或printf("%d,",k),k=k-1;或printf("%d,",k--);
改错2题:
while(i<=20);改为:
while(i<=20)
填空1题:
(1)x>=0
(2)x(ch=getchar())!
=’\n’
【7-1】
#include"stdio.h"
main()
{
inti=1,n,f=1;
doublesum=0;
printf("Entern:
");
scanf("%d",&n);
do
{sum+=f*1.0/i;
i=i+2;
f=-f;
}while(i<=n);/*先执行一次循环体,在判断循环终止条件*/
printf("sum=%f,i=%d\n",sum,i);
【7-2】
#include"stdio.h"
main()
{inti=0,n,s=0,j;
printf("Entern:
");
scanf("%d",&n);
do
{j=n%10;
s=s+j;
n=n/10;
i++;/*i用来统计位数*/
}while(n);/*while(n)等价于while(n!
=0)*/
printf("i=%d,s=%d\n",i,s);
}
改错1题:
(1)min(2)While(i>n);改为:
while(i<=n);
改错1题2题:
(1)if(i!
=5&&a%5=0)改为if(i!
=5&&a%5==0)
(2)while(i>0);改为:
while(i<5);
填空1题:
t*n/(2*n+1);填空2题:
n%10填空3题:
(1)s/100
(2)10*i
思考题:
程序1结果为sum=0,i=6循环体一次也没有执行
程序2结果为sum=6,i=7执行了一次循环体
【8-1】
#include
main()
{inti;
for(i=100;i<=999;i++)
if(i%5==0)
printf("%5d",i);
}
【8-2】
#include"stdio.h"
main()
{doublei,sum=0,t=1,n;
scanf("%lf",&n);
for(i=1;i<=n;i++)
{t=t*i;
sum=sum+1.0/t;}
printf("sum=%f\n",sum);
}
【8-3】
#include
main()
{intx,s=0;
for(x=1;;x++)/*表达式2省略表示永远为真*/
{s=s+x;
if(s>10)
break;}
printf("%d",s);
}
改错1题:
for(n=1;n<=30;n++);改为:
for(n=1;n<=15;n++)
改错2题:
for(i=1;i<=n)改为for(i=1;i<=n;)
改错3题:
if(i==(i*i)%10&&i==(i*i)%100)改为:
if(i==(i*i)%10||i==(i*i)%100)
填空1题:
n%3==0填空2题:
m/n
思考题3题:
结果为:
随机数,11
思考题4题:
100101;将break改为continue后结果为:
输出100到999之间不能被3整除的数
【9-1】
#include"stdio.h"
main()
{inti,j;
for(i=1;i<=4;i++)
{for(j=1;j<=4-i;j++)printf("");
for(j=1;j<=2*i-1;j++)printf("*");
printf("\n");
}
}
【9-2】
#include"stdio.h"
#include"math.h"
main()
{inti,j;doublesum=0;
for(i=100;i<=200;i++)
for(j=2;j
if(i%j==0)
{sum+=sqrt(i);break;}
printf("%f",sum);
}
改错1题:
for(n=1;n<=8;n++;)改为:
for(n=1;n<=8;n++)
scanf("%f",&score);ave+=score;printf("NO%d:
%f\n",n,ave);
改为:
{scanf("%f",&score);ave+=score;}printf("NO%d:
%f\n",n,ave/5);
改错2题:
(1)for(j=1;j<=10+i;j++)改为:
for(j=1;j<=10-i;j++)
(2)for(j=1;j<=2*i+1;j++)改为:
for(j=1;j<=5;j++)
填空1题:
s=0填空2题:
(1)m+1
(2)i-1
【10-1】
#include"stdio.h"
voidstar();
voidfun();
voidmain()
{star();
star();
fun();
star();
star();}
voidstar()/*定义函数*/
{printf("**********\n");}
voidfun()/*定义函数*/
{printf("hello\n");}
【10-2】
#include"stdio.h"
intfac(intm);
intfac(intn)
{intt=1,i;
for(i=1;i<=m;i++)
t=t*i;
returnt;
}
main()
{intn;doublef;
printf("inputn:
");scanf("%d",&n);
f=fac(n);
printf("%d!
=%f\n",n,f);
}
【10-3】
#include"stdio.h"
#include"math.h"
floatfun(floatx)/*在自定义函数体中可以有若干个return语句,但只有一个起作用*/
{if(x==0)return2*x-1;
elseif(x>0)returnsqrt(x);
elsereturncos(x);
}
main()
{floatx,y;
printf("Enterx:
");scanf("%f",&x);
printf("\n");
y=fun(x);
printf("y=%f\n",y);
}
【10-4】
#include"stdio.h"
doublemax(doublex,doubley,doublez);/*函数说明*/
voidmain()
{doublea,b,c;
printf("Entera,b,c:
");scanf("%lf,%lf,%lf",&a,&b,&c);
printf("he=%.2f\n",max(a,b,c));
}
doublemax(doublex,doubley,doublez)/*对形参分别定义*/
{doublesum;sum=x+y+z;returnsum;}
改错1题:
intfun(intm)改为:
doublefun(intm)
for(i=2;ifor(i=2;i<=m;i++)
y+=1/(i*i);改为:
y+=1.0/(i*i);
printf("\nTheresultis%1f\n",fun(intn));改为:
printf("\nTheresultis%1f\n",fun(n));
改错2题:
intmax(doublex,doubley,doublez);改为:
doublemax(doublex,doubley,doublez);
doublemax(doublex,y,z)改为:
doublemax(doublex,doubley,doublez)
填空1题:
(1)countdigit(number,2);
(2)longnumber,inta(3)returnn;
填空2题:
(1)doublefun(intm);
(2)double(3)returnt;
【11-1】
#include
doublefun(intn)
{inti;doublet=0,s=0,f=1;
for(i=1;i<=n;i++)
{t=1.0/(2*i-1)-1.0/(2*i);
s=s+f*t;
f=-f;}
returns;
}
main()
{intn;
doubles;
printf("\nInputn:
");
scanf("%d",&n);
s=fun(n);
printf("\ns=%f\n",s);
}
【11-2】
#include"stdio.h"
intfun(intnum);
main()
{inti,m,n;
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
if(fun(i))
printf("%5d",i);
}
intfun(intnum)
{intn=num,a,s=0;
while(n)
{a=n%10;
s=s+a*a*a;
n=n/10;}
if(s==num)
return1;
else
return0;
}
【11-3】
#include"stdio.h"
intfun(intx)
{
if(x%2)
return0;
else
return1;
}
main()
{intx,sum=0;
printf("Enterx:
");
scanf("%d",&x);
while(x>0)
{if(fun(x)==1)
sum+=x;
printf("Enterx:
");
scanf("%d",&x);}
printf("sum=%d\n",sum);
}
改错1题:
(1)doublesum=0,t=1;改为:
doublesum=1,t=1;
(2)for(i=0;i<=n;i++)改为:
for(i=1;i<=n;i++)
改错2题:
(1)fun(intn)改为:
doublefun(intn)
(2)returnsum改为:
returnsum;
填空1题:
此题删除
(1)double
(2)f1(3)f2
填空