关于吉林大学程序设计基础作业与实验参考答案.docx
- 文档编号:28694483
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:163
- 大小:123.40KB
关于吉林大学程序设计基础作业与实验参考答案.docx
《关于吉林大学程序设计基础作业与实验参考答案.docx》由会员分享,可在线阅读,更多相关《关于吉林大学程序设计基础作业与实验参考答案.docx(163页珍藏版)》请在冰豆网上搜索。
关于吉林大学程序设计基础作业与实验参考答案
程序设计基础
实验与习题参考答案
(最终版)
2015年12月16日
注:
未经全面测试,仅供参考,发现错误,请及时修正!
第二章
2.2用赋值表达式表示下列计算。
(1)
(2)
(3)
(4)
(5)
(1)y=pow(x,(a+pow(b,c)))
(2)x=pow(log(sqrt(a+d*d))-exp(26),5.0/2.0)
(3)y=sin(X)/(a*X)+fabs(cos(3.14159265*X/2.0))
(4)R=1.0/(1.0/R1+1.0/R2+1.0/R3)
(5)y=x/(1+x/(3+(2*x*2*x)/(5+pow(2*x,3)/(7+4*x*4*x))))
2.3编程序,输入一个字符,然后顺序输出该字符的前驱字符、该字符本身、它的后继字符。
#include"stdio.h"
voidmain()
{
charcIn;
scanf("%c",&cIn);
if(cIn>33&&cIn<126)
{
printf("%c,%c,%c\n",cIn-1,cIn,cIn+1);
}
else
{
printf("三个字符不都是可显示字符\n");
}
}
2.6编写程序,输入两个整数,分别求它们的和、差、积、商、余数并输出
#include"stdio.h"
voidmain()
{
inta,b;
intHe,Cha,Ji;
intYu;
floatShang;
printf("\nInputTwoIntTypeNumber:
\n");
scanf("%d%d",&a,&b);
He=a+b;
Cha=a-b;
Ji=a*b;
Yu=a%b;
Shang=float(a)/float(b);
printf("ResultIs:
%d,%d,%d,%f,%d\n",He,Cha,Ji,Shang,Yu);
}
2.9已知摄氏温度(℃)与华氏温度(℉)的转换关系是:
编写一个摄氏温度(℃)与华氏温度(℉)进行转换的程序,输入摄氏温度,输出华氏温度。
#include"stdio.h"
voidmain()
{
floatC,F;
printf("请输入摄氏温度:
\n");
scanf("%f",&C);
F=9.0*C/5+32;
printf("F=%f\n",F);
}
第三章
3.1编写程序,输入一个字母,若其为小写,将其转换成相应的大写字母,然后输出。
#include"stdio.h"
voidmain()
{
charc1,c2;
printf("请输入一个字母:
\n");
c1=getchar();
if((c1>='a')&&(c1<='z'))
{
c2=c1-32;
printf("%c\n",c2);
}
elseif((c1>='A')&&(c1<='Z'))
printf("%c\n",c1);
else
printf("输入的不是字母!
\n");
}
3.9编写程序,判断给定的3位数是否为Armstrong数,Armstrong数是指其值等于它本身每位数字立方和的数,如153就是一个Armstrong数。
153=13+53+33
#include
voidmain(void)
{
intInData;
inta,b,c;
printf("InputaNumber:
");
scanf("%d",&InData);
a=InData/100;
b=(InData-100*a)/10;
c=InData%10;
if(InData==a*a*a+b*b*b+c*c*c)
printf("%d是Armstrong数\n",InData);
else
printf("%d不是Armstrong数\n",InData);
}
3.10编写程序,读入一个点的坐标X,Y,计算
#include"stdio.h"
#include"math.h"
voidmain()
{
floatx,y,z;
printf("输入两个数");
scanf("%f%f",&x,&y);
if(x>0&&y>0)
printf("%f\n",log(x)+log(y));
if(x<0&&y>0)
printf("%f\n",sin(x)+sin(y));
if(x<0&&y<0)
printf("%f\n",exp(2*x)+exp(3*y));
if(x>0&&y<0)
printf("%f\n",tan(x+y));
}
3.11编程序,输入一个整数,判断它能否被3、5、7整除,并输出如下信息。
(1)能同时被3、5、7整除;
(2)能同时被两个数整除,并指明是被哪两个数整除;
(3)能被一个数整除,并指明是哪个数;
(4)不能被所有3个数整除。
#include"stdio.h"
voidmain()
{
intn;
inta,b,c;
printf("pleaseinputn:
");
scanf("%d",&n);
a=b=c=0;
if(n%3==0)a=1;
if(n%5==0)b=1;
if(n%7==0)c=1;
switch(a+b+c)
{
case3:
printf("3,5,7");
break;
case2:
if(a==0)printf("5,7");
if(b==0)printf("3,7");
if(c==0)printf("3,5");
break;
case1:
if(a==1)printf("only3");
if(b==1)printf("only5");
if(c==1)printf("only7");
break;
default:
printf("nevercanbe!
");
}
}
3.20编程序,当输入数值月份时,显示相应英文月份名称。
例如当输入1时输出January,当输入5时输出May,等等。
参考答案:
#include"stdio.h"
voidmain(){
intx;
printf("Pleaseinputthenumber:
");
scanf("%d",&x);
switch(x){
case1:
printf("JAN\n");
break;
case2:
printf("FEB\n");
break;
case3:
printf("MAR\n");
break;
case4:
printf("APR\n");
break;
case5:
printf("MAY\n");
break;
case6:
printf("JUN\n");
break;
case7:
printf("JUL\n");
break;
case8:
printf("AUG\n");
break;
case9:
printf("SEP\n");
break;
case10:
printf("OCT\n");
break;
case11:
printf("NOV\n");
break;
case12:
printf("DEC\n");
break;
default:
printf("Wrongnumber!
\n");
}
}
第四章
4.3利用展开式
计算ex,到第100项;到余项小于10-8(考虑当0
#include
voidmain(void){
inti;
floatp=1.0,sum=1.0,x;
printf("输入x的值\n");
scanf("%f",&x);
for(i=1;i<=100;i++){
p=p*x/i;
sum+=p;
}
printf("到第100项的结果为:
%f\n",sum);
}
到余项小于10-8
#include
#defineesp1e-8
voidmain(void){
inti;
floatp=1.0,sum=1.0,x;
printf("输入x的值\n");
scanf("%f",&x);
for(i=1;fabs(p)>=esp;i++){
p=p*x/i;
sum+=p;
}
printf("到余项小于10-8的结果为:
%f\n",sum);
}
4.13编写程序,打印所有小于100的可以被11整除的自然数。
#include"stdio.h"
voidmain()
{
inti=0,n=100;
for(i=1;i<100;i++)
if(i%11==0)
printf("%d\n",i);
}
4.16编写程序,打印所有3位的Armstrong数。
Armstrong数是指其值等于它本身每位数字立方和的数,如153就是一个Armstrong数。
153=13+53+33
#include
voidmain(void)
{
inta,b,c,k=100;
while(k<999)
{
a=k/100;
b=(k-100*a)/10;
c=k%10;
if(k==a*a*a+b*b*b+c*c*c)
printf("结果是:
%d\n",k);
k++;
}
}
4.19编程序,打印下图形式的数字金字塔。
1
121
12321
1234321
123454321
…………
…………………
1234567890987654321
参考答案:
#include"stdio.h"
voidmain()
{
inti,j,k,l;
for(i=1;i<=10;i++)
{
for(j=1;j<=10-i;j++)
printf("");
for(k=1;k<=i;k++)
{
if(k==10)//或者是printf("%2d",k%10)
printf("%2d",k-10);
else
printf("%2d",k);
}
for(l=i-1;l>0;l--)
printf("%2d",l);
printf("\n");
}
}
4.20斐波纳契序列问题。
●有一对小兔子,出生一个月后变成大兔子开始怀孕;
●两个月后,生出一对小兔子,这时共有两对兔子(一对大兔子,一对小兔子),同时大兔子又再次怀孕;
●三个月后,以前出生的小兔子变成大兔子,以前怀孕的大兔子又生出一对小兔子,这时共有三对兔子(两对大兔子,一对小兔子),所有大兔子又全部怀孕;
●四个月后,以前出生的小兔子变成大兔子,以前怀孕的大兔子又各生出一对小兔子,这时共有五对兔子(三对大兔子,两对小兔子),所有大兔子又全部怀孕;
●五个月后,以前出生的小兔子变成大兔子,以前怀孕的大兔子又各生出一对小兔子,这时共有八对兔子(五对大兔子,三对小兔子),所有大兔子又全部怀孕;
⏹…………
●假设在兔子的生养过程中没有死亡。
编程序,输入n,计算n个月后,有多少对兔子,并输出。
参考答案:
#include"stdio.h"
voidmain()
{
intx,y,z;
inti;
intn;
printf("pleaseinputn:
");
scanf("%d",&n);
x=0;//大兔子个数
y=1;//小兔子个数
for(i=1;i<=n;i++)
{
z=x;
x=x+y;
y=z;
}
printf("thetotlenumberis%d\n",x+y);//大兔子加小兔子个数
}
4.23求解非线性方程f(x)=0的牛顿迭代法的迭代公式是:
编写程序,用此方法求方程f(x)=x41+x3+1=0在x0=-1附近的根。
#include"stdio.h"
#include"math.h"
#defineeps1e-6
doublef(floatx)
{
returnpow(x,41)+pow(x,3)+1;
}
doubleff(floatx)
{
return41*pow(x,40)+3*x*x;
}
voidmain()
{
doublex0,x1;
x0=0.0;
x1=-1.0;
do
{
x0=x1;
x1=x0-f(x0)/ff(x0);
}
while(fabs(x0-x1)>eps);
printf("x=%f\n",x0);
}
4.29棋盘麦粒
#include"stdio.h"
#include"math.h"
voidmain()
{
doublev,i,n,r,w;
i=1;
n=64;
r=1;
w=0;
for(i=1;i<=n;i++)
{
w=w+r;
r=2*r;
}
v=w/1.4e8;
printf("%e\n",v);
}
4.6编程序,打印斐波纳契序列前20项。
斐波纳契序列是第1、2两项为1,以后每项为前两项之和,如下:
1、1、2、3、5、8、13、22、……
#include"stdio.h"
intmain(intargc,char*argv[])
{
inti;
intFi=1,Se=1;
intCu;
printf("%8d%8d",Fi,Se);
for(i=3;i<=20;i++)
{
Cu=Fi+Se;
printf("%8d",Cu);
if(i%5==0)
{
printf("\n");
}
Fi=Se;
Se=Cu;
}
return0;
}
4.20编程序,打印图4.52字符图形的左侧三分之一部分。
#include"stdio.h"
intmain(intargc,char*argv[])
{
chari;
intj;
charPrintChar;
for(i='A';i<='F';i++)
{
for(j=0;j<9;j++)
{
PrintChar=((i+j)-'A')%9+'A';
printf("%c",PrintChar);
}
printf("\n");
}
for(i='E';i>='A';i--)
{
for(j=0;j<9;j++)
{
PrintChar=((i+j)-'A')%9+'A';
printf("%c",PrintChar);
}
printf("\n");
}
return0;
}
4.29古印度有一位十分好玩的国王要奖励为他发明国际象棋的宰相达依尔,问他要什么。
达依尔回答:
“陛下,只要在国际象棋棋盘的第一个格子中放一粒麦子,第二个格子中放两粒麦子,第三个格子中放四粒麦子,第四个格子中放八粒麦子,……如此下去,以后每个格子中都放它前一个格子中麦子数的两倍,这样放满棋盘的64个格子为止即可。
”。
国王觉得这很容易,于是开始奖赏,没想到一袋麦子很快就用完了,下一袋也很快就用完了,最后一算全印度的麦子全部用上也不够。
请编程序计算所需麦子的体积(一立方米麦子约1.4×108粒)。
#include"stdio.h"
#include"math.h"
voidmain()
{
doublev,i,n,r,w;
i=1;
n=64;
r=1;
w=0;
for(i=1;i<=n;i++)
{
w=w+r;
r=2*r;
}
v=w/1.4e8;
printf("%e\n",v);
}
P22_45.(习题集)判断给定字符序列中(与)、[与]、{与}是否配对(个数相等)。
#include"stdio.h"
intmain(intargc,char*argv[])
{
charInChar;
InChar='A';
inti,j,k;
i=0;
j=0;
k=0;
do
{
scanf("%c",&InChar);
if(InChar=='(')
i++;
if(InChar==')')
i--;
if(InChar=='[')
j++;
if(InChar==']')
j--;
if(InChar=='{')
k++;
if(InChar=='}')
k--;
}while(InChar!
='#');
if(i==0)
printf("()配对\n");
else
printf("()不配对\n");
if(j==0)
printf("[]配对\n");
else
printf("[]不配对\n");
if(k==0)
printf("{}配对\n");
else
printf("{}不配对\n");
return0;
}
P23_50
(1)(习题集).读入n和x,输出序列的前n项和直到余项小于10-8
Sh(x)=x+x3/3!
+x5/5!
+x7/7!
+...+x2n+1/(2n+1)!
#include"stdio.h"
#include"math.h"
intmain(intargc,char*argv[])
{
intn;
floatx;
inti;
printf("输入n:
\n");
scanf("%d",&n);
printf("输入x:
\n");
scanf("%f",&x);
floatRes=x;
floatTemp=x;;
for(i=1;i<=n;i++)
{
Temp=Temp*x*x/((2*i)*(2*i+1));
if(fabs(Temp)<1e-8)
{
break;
}
Res=Res+Temp;
}
printf("计算结果为:
%f\n",Res);
return0;
}
P23_50(6)(习题集).读入n和x,输出序列的前n项和直到余项小于10-8
arth(x)=x+x3/3+x5/5+x7/7+...+x2n+1/(2n+1)
#include"stdio.h"
#include"math.h"
intmain(intargc,char*argv[])
{
intn;
floatx;
inti;
printf("输入n:
\n");
scanf("%d",&n);
printf("输入x:
\n");
scanf("%f",&x);
floatRes=x;
floatTemp1=x;
floatTemp=x;;
for(i=1;i<=n;i++)
{
Temp1=Temp1*x*x;
Temp=Temp1/(2*i+1);
if(fabs(Temp)<1e-8)
{
break;
}
Res=Res+Temp;
}
printf("计算结果为:
%f\n",Res);
return0;
}
P24_51
(2)(习题集).用展开式计算圆周率PI到10-5精度,
PI/2=(2/1)X(2/3)X(4/3)X(4/5)X(6/5)X(6/7)X(8/7)....(2n/2n-1)X(2n/2n+1)......
#include"stdio.h"
#include"math.h"
intmain(intargc,char*argv[])
{
inti;
floatTempP=0;
floatTempC=1;
i=1;
while(fabs(TempC-TempP)>=1e-5)
{
TempP=TempC;
TempC=TempP*(2*i)*(2*i)/(2*i-1)/(2*i+1);
i++;
}
printf("计算结果为:
%.6f\n",TempC);
return0;
}
第五章
5.1编程序计算
其中
#include"stdio.h"
#include"math.h"
floatf(floatv,floatw)
{
return(w+v)/(7*v);
}
floatp(floatu)
{
return(f(0.3*u,u)+u/2)/(2*u);
}
floaty(floatx)
{
return(p(x)*p(x)+5*x)*p(x+2)/(p(x+5)-sqrt(x));
}
voidmain()
{
floatx;
floatResult;
printf("\nInputx:
\n");
scanf("%f",&x);
Result=y(x);
printf("\nTheresultis:
%f\n",Result);
}
5.2编写程序,输入实数a、b、c的值,计算并输出以下算式的值。
#include"math.h"
#include"stdio.h"
floatT_ABC(floata,floatb,floatc)
{
floatResult;
Result=(4.25*(a+b)+log(a+b+sqrt(a+b)+1.0/(a+b)))/(4.25+log(c+sqrt(c)+1.0/c));
returnResult;
}
voidmain()
{
floatx,y,z;
floatT;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关于 吉林大学 程序设计 基础 作业 实验 参考答案