扬州大学C语言上机作业19整理.docx
- 文档编号:17197772
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:35
- 大小:38.67KB
扬州大学C语言上机作业19整理.docx
《扬州大学C语言上机作业19整理.docx》由会员分享,可在线阅读,更多相关《扬州大学C语言上机作业19整理.docx(35页珍藏版)》请在冰点文库上搜索。
扬州大学C语言上机作业19整理
答案仅供参考
实验一
4.设计main函数实现从键盘上输入两个整型变量a、b的值,交换它们的值并输出。
#include
voidmain()
{inta,b,c;printf("enterfirstinteger:
");scanf("%d",&a);printf("entersecondinteger:
");scanf("%d",&b);
c=a;
a=b;
b=c;printf("%d,%d\n",a,b);getch();
}
5.设计main函数实现从键盘上输入两个整型变量a、b的值,并将b的值加入到a中,输出a的值。
#include
voidmain()
{inta,b,c;printf("enterfirstinteger:
");scanf("%d",&a);printf("entersecondinteger:
");scanf("%d",&b);
c=a+b;
a=c;printf("a=%d,b=%d\n",a,b);getch();
}
6.从键盘输入整数x的值,根据公式y=x3+3x2+x-10求y的值,输出x和y的值。
#include
voidmain()
{intx,y;printf("enterfirstinteger:
");scanf("%d",&x);
y=x*x*x+3*x*x+x-10;printf("x=%d,y=%d\n",x,y);getch();
}
实验二
1.编写程序,从键盘上输入一个整数(例如560)表示分钟,将其换算成用小时和分钟表示,然后输出至屏幕。
#include
voidmain()
{
inta,b,hour,min;
printf("enterfirstinteger:
");
scanf("%d",&a);
b=60;
hour=a/b;
min=a%b;
printf("hour=%d,min=%d\n",hour,min);
getch();
}
2.编写程序,输入两个整数(例如1500和350),求出它们的商和余数并进行输出。
#include
voidmain()
{
inta,b,c,d;
a=1500,b=350;
c=a/b;
d=a%b;
printf("%d,%d",c,d);
getch();
}
3.编写程序,读入3个整数给分别变量a,b,c,然后将a,b,c的值输出到屏幕,再交换它们中的数值,把a中原来的值给b,把b中原来的值赋给c,把c中原来的值赋给a,然后再次输出a,b,c的值到屏幕。
#include
voidmain()
{
inta,b,c,d;
printf("enterfirstinteger:
");
scanf("%d",&a);
printf("entersecondinteger:
");
scanf("%d",&b);
printf("enterthirdinteger:
");
scanf("%d",&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
d=c;
c=b;
b=a;
a=d;
printf("a=%d,b=%d,c=%d",a,b,c);
getch();
}
4.编写程序,读入3个双精度数,求它们的平均值输出到屏幕。
#include
voidmain()
{
doublesum=0;
doublea,b,c,d;
printf("enterfirstinteger:
");
scanf("%lf",&a);
printf("entersecondinteger:
");
scanf("%lf",&b);
printf("enterthirdinteger:
");
scanf("%lf",&c);
sum=a+b+c;
d=sum/3.0;
printf("d=%lf",d);
getch();
}
5.下列程序中,要求main函数实现如下功能:
从键盘上输入3个正整数,求出它们中的最大值。
请完善程序,并在程序最后用注释的方式给出你的测试数据及在这组测试数据下的运行结果。
#include
voidmain()
{
inta,b,c,d,max;
printf(“Enterthreeintegers:
”);
scanf(“%d%d%d”,&a,&b,&c);
if(a>b)
max=a;
else
max=b;
if(c>max)
max=c;
printf(“maxofthethreenumbersis%d”,max);
grtch();
}
6.请编程序:
对从键盘上输入的x值,根据以下函数关系计算出相应的y值(设x,y均为整型量)。
x值的范围
计算y的公式
x<0
0
0<=x<10
x
10<=x<20
10
20<=x<40
-5x+20
#include
voidmain()
{
intx,y;
printf("x=");
scanf("%d",&x);
if(x<0)
y=0;
elseif(x<10&&x>=0)
y=x;
elseif(x>=10&&x<20)
y=10;
elseif(x>=20&&x<40)
y=(-5)*x+20;
printf("%d",y);
getch();
}
实验三
1.下列程序想求出满足如下条件的三位数n:
(1)n除以11(整数相除)所得到的商等于n的各位数字的平方和;
(2)n中至少有二位数字相同。
如:
131除以11的商为11,131各位数字的平方和为11,131中有二位数字相同,故131是所要求出的三位数中的一个;又如550,也是满足条件的三位数。
源程序中有些错误,请你改正并最终使程序得到如下的运行结果:
131550900
#include
voidmain()
{intn,a,b,c;
for(n=1;n<1000;n++)
{a=n/100;b=n/10%10;c=n%10;
if(n/11==a*a+b*b+c*c&&(a==b||a==c||b==c))
printf("%d\n",n);}
getch();}
2.请编程序,实现从键盘上输入任意一个整数n,求出n的各位数字之和。
例如,当n为263时,各位数字之和为11。
下面是一个可以实现逐位数字累加功能的程序段,试理解后应用到自己的程序中。
k=0;n=263;
do{k+=n%10;
n/=10;
}while(n);
#include
voidmain()
{ intn,k;
scanf("%d",&n);
k=0;
do{k+=n%10;
n/=10;
}while(n);
printf("%d",k);
getch();
}
3.试找出符合下列条件的正整数:
(1)该数是一个三位数;
(2)该数是37的倍数;(3)该数循环左移后得到的另两个数也是37的倍数。
例如148是37的倍数,481和814也是37的倍数。
#include
voidmain()
{intn,a,b;
for(n=100;n<1000;n++)
if(n%37==0)
{a=n/10+n%10*100;
b=n/100+n%100*10;
if(a%37==0&&b%37==0)printf("%d\n",n);
}getch();
}
4.请编程序利用下列公式求π的近似值。
公式为:
要求:
先求出前2n项的π值,再求出2n+2项的π值,直至二者之差小于10-5为止。
#include
voidmain()
{intn;
floata,b;
a=1,b=4.0/3;
n=1;
while(b-a>=1e-5)
{a=b;
n++;
b=b*4*n*n/(2*n-1)/(2*n+1);
}
printf("%f,%f",2*a,2*b);
getch();
}
5.请编程序求出满足如下条件的四位数n:
(1)n的范围为[5000,8000];
(2)n千位上的数减百位上的数减十位上的数减个位上的数大于零。
编程要求:
以每行5个输出满足条件的数及该类数的个数。
#include
voidmain()
{intn,a,b,c,d,k=0;
for(n=5000;n<=8000;n++)
{a=n/1000;
b=n/100%10;
c=n/10%10;
d=n%10;
if((a-b-c-d)>0)
{printf("%5d",n);
k++;
if(k%5==0)printf("\n");
}
}
printf("k=%d",k);
getch();
}
6.请编程序求出满足如下条件的一个四位整数,它的9倍恰好是其反序数(例如,1234与4321互为反序数)。
#include
voidmain()
{intn,e,a,b,c,d; for(n=1000;n<=9999;n++)
{a=n/1000;
b=n/100%10;
c=n/10%10;
d=n%10;
e=d*1000+c*100+b*10+a;
if(9*n==e)
printf("%d",n);}
getch();
}
7.请编程序求出从键盘上输入的两个正整数a和b的最大公约数和最小公倍数。
#include
voidmain()
{
intm,n,r,x;
scanf("%d,%d",&m,&n);
x=m*n;
while(n!
=0)
{
r=m%n;
m=n;
n=r;
}
printf("%d%d",m,x/m);
getch();
}
8.请编程序计算1!
+2!
+3!
+…+n!
的前10项之和。
#include
voidmain()
{
longsum,k;
inti,j;
sum=0;
for(i=1;i<=10;i++)
{
for(j=1,k=1;j<=i;j++)
{ k*=j; }
sum+=k;
}
printf("%ld\n",sum);
getch();
}
实验四
1.反序数。
例如,123的反序数是321。
请设计程序,从键盘上输入一个整数,求其反序数并输出。
#include"stdio.h"
main()
{intn,k;printf("n=");scanf("%d",&n);k=0;
while(n!
=0)
{k=k*10+n%10;
n/=10;} printf("k=%d",k);
getch();
}
2.完备数。
完备数是一些特殊的自然数,它所有的真因子(即除了自身以外的约数)之和恰好等于该数本身。
例如,6=1+2+3,故6是一个完备数。
请设计程序,找出500以内的所有完备数。
#include"stdio.h"
voidmain()
{intn,i,k;for(n=1;n<=500;n++)
{ k=0;
for(i=1;i<=n-1;i++)
{if(n%i==0)
k+=i;}
if(n==k)
printf("%d\n",n);
} getch();
}
3.回文数。
一个数如果正读和倒读(即反序数)相同,称该数是回文数。
例如,121、1331均为回文数。
请设计程序,找出200~300之间的所有回文数,并以每行8个数输出至屏幕。
#include"stdio.h"
voidmain()
{intn,k,i,m=0;
for(n=200;n<=300;n++)
{k=0;
i=n;
while(i!
=0)
{k=k*10+i%10;
i/=10;}
if(n==k)
{m++;
printf("%8d",n);
}
if(m%8==0)printf("\n");
}
getch();
}
4.回文质数。
一个数如果是回文数,同时又是质数,则该数被称为回文质数。
请设计程序,找出100~500之间的所有回文质数,并以每行5个输出至屏幕。
#include"stdio.h"
#include"math.h"
voidmain()
{intn,k,i,m; for(n=100;n<=500;n++)
{ k=0;
i=n;
while(i!
=0)
{k=k*10+i%10;
i/=10;}
if(n==k)
{for(m=2;m<=sqrt(n);m++)
{if(n%m==0)
break;
}
if(m>sqrt(n))
{
printf("%4d",n);
account++;
if(account%5==0)
printf(“\n”);
} }
} getch();
}
5.绝对质数。
如果一个数和其反序数均为质数,则该数被称为绝对质数。
如,13是质数,其反序数31也为质数,则13和31是一对绝对质数。
请设计程序,找出200以内的绝对质数。
#include"stdio.h"
#include"math.h"
voidmain()
{intn,k,i,m,a;
for(n=1;n<=200;n++)
{for(a=2;a<=sqrt(n);a++)
{if(n%a==0)
break;
}
if(a>sqrt(n))
{i=n,k=0;
while(i!
=0)
{k=k*10+i%10;
i/=10;}
for(m=2;m<=sqrt(k);m++)
{if(k%m==0)
break;
}
if(m>sqrt(k))
printf("%5d",n);
}
}
getch();
}
6.平方镜反数。
如果一个数的平方数,是其反序数的平方数的反序数,则称该数和其反序数是一对平方镜反数。
例如,12的平方数是144,其反序数为21,21的平方数是441,其反序数是12的平方数144,故12和21是一对平方镜反数。
请设计程序找出200以内的所有平方镜反数对。
#include"stdio.h"
#include"math.h"
voidmain()
{intn,k,i,a,b;
for(n=1;n<=200;n++)
{ k=0;
i=n; while(i!
=0)
{k=k*10+i%10;
i/=10;}
a=k*k;
b=0;
while(a!
=0)
{b=b*10+a%10;
a/=10;}
if(b==(n*n))
printf("%d\n",n);
} getch();
}
7.黑洞数。
黑洞数又称陷阱数,是类具有奇特转换特性的整数。
任何一个数字不全相同整数,经有限“重排求差”操作,总会得到某个数,这些数即为黑洞数。
“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。
随便造一个四位数,如a1=1231,先把组成部分1231的四个数字由大到小排列得到a2=3211,再把1231的四个数字由小到大排列得a3=1123,用大的减去小的a2-a1=3211-1123=2088。
把2088按上面的方法再作一遍,由大到小排列得8820,由小到大排列得288,相减8820-288=8532。
把8532按上面的方法再作一遍,由大到小排列得8532,由小到大排列得2358,相减8532-2358=6174。
如果再往下做,奇迹就出现了!
7641-1467=6174,又回到6174。
6174便是一个4位黑洞数。
请编写程序,用上述方法找出3位黑洞数。
暂无答案
实验五
1.有一张足够大的纸,厚0.09毫米,问将它对折多少次后可以达到珠穆朗玛峰的高度(8848米)?
#include"stdio.h"
voidmain()
{doublea=9e-2;
intn=0;
while(a<=8848)
{a=a*2;
n++;
}
printf("a=%d",n);
getch();
}
2.请设计程序采用递推法计算下列级数的近似值,当n取某一值使得|x(2n+1)/n!
|<0.000001时停止计算(x从键盘输入)。
级数如下:
#include"stdio.h"
#include"math.h"
voidmain()
{doublesum,x,p,n,q,m,k;
printf("x=");
scanf("%lf",&x);
sum=x;p=x;
m=1;q=1;n=1;k=1; while(fabs(p/n)>=1.0e-6)
{m=-m; p*=(x*x);
q+=2;
k++;
n*=k;
sum+=((m*p)/(q*n));
}
printf("%lf",sum); getch();
}
3.请设计程序,根据下列公式计算cos(x)的近似值。
精度要求:
当通项的绝对值小于等于10-6为止。
cos(x)=1-x2/2!
+x4/4!
-x6/6!
+……+(-1)nx2n/(2n)!
#include"stdio.h"
#include"math.h"
voidmain()
{doublex,k,sum,term,a,b,m;
printf("x=");
scanf("%lf",&x);
sum=1;
m=1;
a=0;
k=1;
b=1;
term=1;
while(fabs(term)>1.0e-6)
{k*=(x*x); m=-m;
a+=2;
b*=(a*(a-1));
sum+=((m*k)/b);
term=(m*k)/b;
} printf("cos(x)=%lf",sum);
getch();
}
4.请设计程序采用递推法计算
的值。
即求
-
+…+
的值。
其中x为键盘输入的一个任意的单精度实数。
#include"stdio.h"
voidmain()
{inti,p; floatx,m,q,sum;
printf("x=");
scanf("%f",&x);
sum=x;
m=x;
p=1;
q=1;
for(i=1;i<=10;i++)
{m*=(x*x); p=-p;
q*=i;
sum+=(p*m/q);
}
printf("%f",sum);
getch();
}
5.请设计程序,根据下列公式计算表达式的值。
计算公式如下:
当通项绝对值小于等于10-6时停止累加。
#include"stdio.h"
#include"math.h"
voidmain()
{doublex,k,sum,term,a,b,m; printf("x=");
scanf("%lf",&x);
sum=1;
m=1;
a=0;
k=1;
b=1;
term=1;
while(fabs(term)>1.0e-6)
{k*=(x*x);
m=-m;
a+=2;
b*=(a*(a-1));
sum+=((m*k)/b);
term=(m*k)/b;
} sum=(-1)*sum*cos(x)/x;
sum+=3.14/2;
printf("%lf",sum);
getch();
}
实验六
3.水仙花数是指一个3位数,其各位数字的立方和等于该数本身。
请完善下列程序中的函数intdaffodil(intn),其功能是判断整数n是否为水仙花数,如是,则该函数返回值1,否则返回值0。
注意,不能更改main函数。
#include
intdaffodil(intn)
{intk=0,m;
m=n;
do
{k+=(m%10)*(m%10)*(m%10);
m/=10;}while(m);
if(n==k)
return1;
elsereturn0;
}
main()
{intm,i=0;
for(m=100;m<1000;m++)
if(daffodil(m)==1)
{printf("%5d",m);
i++;
if(i%5==0)printf("\n");
}
getch();
}
4.请编写程序,找出满足如下条件的整数m:
(1)该数在[11,999]之内;
(2)m、m2、m3均为回文数。
例如m=11,m2=121,m3=1331,11、121、1331皆为回文数,故m=11是满足条件的一个数。
请设计函数intvalue(longm),其功能是判断m是否是回文数,如是,该函数返回值1,否则返回值0。
编写main函数,求出[11,999]内满足条件的所有整数。
#include
intvalue(longm)
{longs,n;
s=0;
n=m;
while(n)
{s=s*10+n%10;
n/=10;}
if(s==m)
return1;
else
return0;
}
main()
{longm;
for(m=11;m<1000;m++)
if(value(m)==1&&value(m*m)==1&&value(m*m*m)==1)
{printf("%5ld",m);
}
getch();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 扬州 大学 语言 上机 作业 19 整理