/* 创建时间:20171224
创建人:fangweijun(773714759@qq.com)
功能:Sn=a+aa+aaa+aaaa+···+aaaa(n个a),其中a是一个数字,n表示a的位数,n由键盘输入
位置:C程序设计(第四版)2010年6月第四版 140习题5
*/
#include<stdio.h>
int main()
{
int a,n,i=1,sn=0,tn=0;
printf("a,n=:");
scanf("%d,%d",&a,&n);
while(i<=n)
{
tn=tn+a;
sn=sn+tn;
a=a*10;
++i;
}
printf("a+aa+aaa+···=%d\n",sn);
return 0;
}
/*Dev-c++输出结果:
a,n=:2,5
a+aa+aaa+···=24690
*/
/* 创建时间:20171224
创建人:fangweijun(773714759@qq.com)
功能: 1!+2!+···+20!=?
位置:C程序设计(第四版)2010年6月第四版 140习题6
*/
#include<stdio.h>
int main()
{
double s=0,t=1;
int n;
for(n=1;n<=20;n++)
{
t=t*n;
s=s+t;
}
printf("1!+2!+2!+···+20!=%22.15e\n",s);
return 0;
}
/*Dev-c++输出结果:
1!+2!+2!+···+20!=2.561327494111820e+018
*/
/* 创建时间:20171224
创建人:fangweijun(773714759@qq.com)
功能: 累加
位置:C程序设计(第四版)2010年6月第四版 140习题7
*/
#include<stdio.h>
int main()
{
int n1=100,n2=50,n3=10;
double k,s1=0,s2=0,s3=0;
for(k=1;k<=n1;k++)
s1=s1+k;
for(k=1;k<=n2;k++)
s2=s2+k*k;
for(k=1;k<=n3;k++)
s3=s3+1/k;
printf("sum=%15.6f\n",s1+s2+s3);
return 0;
}
/*Dev-c++输出结果:
sum= 47977.928968
*/
/* 创建时间:20171224
创建人:fangweijun(773714759@qq.com)
功能:输出所有“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身
位置:C程序设计(第四版)2010年6月第四版 140习题8
*/
#include<stdio.h>
int main()
{
int i,j,k,n;
printf("parcissus numbers are ");
for(n=100;n<1000;n++)
{
i=n/100;//求百位数
j=n/10-i*10;//求百位数
k=n%10;//求个位数
if(n==i*i*i+j*j*j+k*k*k)
printf("%d ",n);
}
printf("\n");
return 0;
}
/*Dev-c++输出结果:
parcissus numbers are 153 370 371 407
*/
/* 创建时间:20171224
创建人:fangweijun(773714759@qq.com)
功能:一个数如果恰好等于它的因子之和,这个数就称“完数”(方法一没看懂)
位置:C程序设计(第四版)2010年6月第四版 141习题9
*/
#include<stdio.h>
#define M 1000
int main()
{
//方法一:
// int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;
// int i,a,n,s;
// for(a=2;a<=M;a++)
// {
// n=0;
// s=a;
// for(i=1;i<a;i++)
// if(a%i==0)
// {
// n++;
// s=s-i;
// switch(n)
// {
// case 1:k1=i;
// break;
// case 2:k2=i;
// break;
// case 3:k3=i;
// break;
// case 4:k4=i;
// break;
// case 5:k5=i;
// break;
// case 6:k6=i;
// break;
// case 7:k7=i;
// break;
// case 8:k8=i;
// break;
// case 9:k9=i;
// break;
// case 10:k10=i;
// break;
// }
// }
// if(s==0)
// {
// printf("%d,its factors are ",a);
// if(n>1)
// printf("%d,%d",k1,k2);
// if(n>2)
// printf(",%d",k3);
// if(n>3)
// printf(",%d",k4);
// if(n>4)
// printf(",%d",k5);
// if(n>5)
// printf(",%d",k6);
// if(n>6)
// printf(",%d",k7);
// if(n>7)
// printf(",%d",k8);
// if(n>8)
// printf(",%d",k9);
// if(n>9)
// printf(",%d",k10);
// printf("\n");
// }
// }
// return 0;
//方法二:
int m,s,i;
for(m=2;m<1000;m++)
{
s=0;
for(i=1;i<m;i++)//遍历所有整数
if((m%i)==0)//符合约数的累加到s
s=s+i;
if(s==m)//如果s=m那么就是完数
{
printf("%d,it is factors are ",m);
for(i=1;i<m;i++)
if(m%i==0)
printf("%d ",i);
printf("\n");
}
}
return 0;
}
/*Dev-c++输出结果:
6,its factors are 1,2,3
28,its factors are 1,2,4,7,14
496,its factors are 1,2,4,8,16,31,62,124,248
*/
/*Dev-c++输出结果:
6,it is factors are 1 2 3
28,it is factors are 1 2 4 7 14
496,it is factors are 1 2 4 8 16 31 62 124 248
*/
/* 创建时间:20171224
创建人:fangweijun(773714759@qq.com)
功能:求一个数列的前二十项和(2/1+3/2+5/3+8/5+13/8+21/13···)
位置:C程序设计(第四版)2010年6月第四版 141习题10
*/
#include<stdio.h>
int main()
{
//规律:前一项的分母+分子是当前项的分子,前一项的分子是当前项的分母
int i,n=20;
double a=2,b=1,s=0,t;//a是分母,b是分子,s求和,t是中间变量
for(i=1;i<=n;i++)
{
s=s+a/b;
t=a;
a=a+b;
b=t;
}
printf("sum=%16.10f\n",s);
return 0;
}
/*Dev-c++输出结果:
sum= 32.6602607986
*/
/* 创建时间:20171224
创建人:fangweijun(773714759@qq.com)
功能:一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米,第10次反弹多高。
位置:C程序设计(第四版)2010年6月第四版 141习题11
*/
#include<stdio.h>
int main()
{
double sn=100,hn=sn/2;
int n;
for(n=2;n<=10;n++)
{
sn=sn+2*hn;//第n次落地时共经过的米数
hn=hn/2;//第n次反跳高度
}
printf("第10次落地时共经过:%f米\n",sn);
printf("第10次反弹:%f米\n",hn);
return 0;
}
/*Dev-c++输出结果:
第10次落地时共经过:299.609375米
第10次反弹:0.097656米
*/
/* 创建时间:20171224
创建人:fangweijun(773714759@qq.com)
功能:猴子每天早上吃前一天的一半零一个,到第十天早上想再吃时,就只剩下一个桃子了,求第一天共摘了多少个桃子
位置:C程序设计(第四版)2010年6月第四版 141习题12
*/
#include<stdio.h>
int main()
{
int day,x1,x2;
day=9;
x2=1;
while(day>0)
{
x1=(x2+1)*2;//第一天的桃子是第二天的桃子数加1后的两倍
x2=x1;
day--;
}
printf("total=%d\n",x1);
return 0;
}
/*Dev-c++输出结果:
total=1534
*/
/* 创建时间:20171224
创建人:fangweijun(773714759@qq.com)
功能:利用迭代法求x=sqrt(a)(公式:x(n+1)=1/2(xn+a/xn))
位置:C程序设计(第四版)2010年6月第四版 141习题13
*/
#include<stdio.h>
#include<math.h>
int main()
{
//思路1、设定初始值x0,求出x1 2、带入公式右边 3、直到fabs(x0-x1)>=10^-5
float a,x0,x1;
printf("enter a positive number:");
scanf("%f",&a);
x0=a/2;
x1=(x0+a/x0)/2;
do
{
x0=x1;
x1=(x0+a/x0)/2;
}while(fabs(x0-x1)>=1e-5);
printf("The square root of%5.2f is %8.5f\n",a,x1);
return 0;
}
/*Dev-c++输出结果:
enter a positive number:2
The square root of 2.00 is 1.41421
*/
/* 创建时间:20171224
创建人:fangweijun(773714759@qq.com)
功能:用牛顿迭代法求下面方程在1.5附近的根
位置:C程序设计(第四版)2010年6月第四版 141习题14
*/
#include<stdio.h>
#include<math.h>
int main()
{
//牛顿迭代法:x(n+1)=xn-f(xn)/f'(xn)
//f(x)=2x^3-4x^2+3x-6=((2x-4)x+3)x-6
//f'(x)=6x^2-8x+3=(6x-8)x+3
double x1,x0,f,f1;
x1=1.5;
do
{
x0=x1;
f=((2*x0-4)*x0+3)*x0-6;
f1=(6*x0-8)*x0+3;
x1=x0-f/f1;
}while(fabs(x1-x0)>=1e-5);
printf("The root of equation is %5.2f\n",x1);
return 0;
}
/*Dev-c++输出结果:
The root of equation is 2.00
*/
/* 创建时间:20171224
创建人:fangweijun(773714759@qq.com)
功能:用二分法求下面方程在(-10,10)之间的根(f(x)=2x^3-4x^2+3x-6)
位置:C程序设计(第四版)2010年6月第四版 141习题15
*/
#include<stdio.h>
#include<math.h>
int main()
{
//f(x)=2x^3-4x^2+3x-6=((2x-4)x+3)x-6
float x0,x1,x2,fx0,fx1,fx2;
do
{
printf("enter x1,x2:");
scanf("%f,%f",&x1,&x2);
fx1=x1*((2*x1-4)*x1+3)-6;
fx2=x2*((2*x2-4)*x2+3)-6;
}while(fx1*fx2>0);//异号有根
do
{
x0=(x1+x2)/2;
fx0=x0*((2*x0-4)*x0+3)-6;
if((fx0*fx1)<0)//同号有根,因为要代替原来的位置(原来位置是异号的)
{
x2=x0;//代替位置
fx2=fx0;
}
else
{
x1=x0;
fx1=fx0;
}
}while(fabs(fx0)>=1e-5);
printf("x=%6.2f\n",x0);
return 0;
}
/*Dev-c++输出结果:
enter x1,x2:-10,10
x= 2.00
*/
/* 创建时间:20171224
创建人:fangweijun(773714759@qq.com)
功能:输出以下图案
位置:C程序设计(第四版)2010年6月第四版 141习题16
*/
#include<stdio.h>
int main()
{
//试数:
// i---j---k---2-i---2*i---输出
//1-> 0---0---?---2-----???---" "
//2-> 0---1---?---2-----???---" "
//3-> 0---2---?---2-----???---" "
//4-> 0---3---0---2-----0-----*
//5-> ------------------------"\n"//第一行结束
//6-> 1---0---?---1-----???---" "
//7-> 1---1---?---1-----???---" "
//8-> 1---2---0---1-----2-----*
//9-> 1---2---1---1-----2-----*
//10->------------------------"\n"//第二行结束
//11->2---0---?---0-----???---" "
//12->2---1---0---0-----4-----*
//13->2---1---1---0-----4-----*
//14->2---1---2---0-----4-----*
//15->2---1---3---0-----4-----*
//16->2---1---4---0-----4-----*
//17->------------------------"\n"//第三行结束
//18->3---0---?--(-1)---???---
//18->3---0---0--(-1)---6-----*
//19->3---0---1--(-1)---6-----*
//20->3---0---2--(-1)---6-----*
//21->3---0---3--(-1)---6-----*
//22->3---0---4--(-1)---6-----*
//23->3---0---5--(-1)---6-----*
//24->3---0---6--(-1)---6-----*
//25->------------------------"\n"//第四行结束
// i---j---k---4-2*i-------输出
//26->0---0---?---?????-------" "
//27->0---1---0---4-----------*
//28->0---1---1---4-----------*
//29->0---1---2---4-----------*
//30->0---1---3---4-----------*
//31->0---1---4---4-----------*
//32->------------------------"\n"//第五行结束
//33->1---0---?---?????-------" "
//34->1---1---?---?????-------" "
//35->1---2---0---2-----------*
//36->1---2---1---2-----------*
//37->1---2---2---2-----------*
//38->------------------------"\n"//第六行结束
//39->2---0---?---?????-------" "
//40->2---1---?---?????-------" "
//41->2---2---?---?????-------" "
//42->2---3---0---0-----------*
//43->------------------------"\n"//第七行结束
int i,j,k;
for(i=0;i<=3;i++)//第1-4行
{
for(j=0;j<=2-i;j++)
printf(" ");
for(k=0;k<=2*i;k++)
printf("*");
printf("\n");
}
for(i=0;i<=2;i++)//第5-7行
{
for(j=0;j<=i;j++)
printf(" ");
for(k=0;k<=4-2*i;k++)
printf("*");
printf("\n");
}
return 0;
}
/*Dev-c++输出结果:
*
***
*****
*******
*****
***
*
*/
/* 创建时间:20171224
创建人:fangweijun(773714759@qq.com)
功能:ABC三人对赛XYZ三人,已知A不和X比,C不和X,Z比,求比赛名单
位置:C程序设计(第四版)2010年6月第四版 141习题17
*/
#include<stdio.h>
int main()
{
//算法:1.假设A--i,B--j,C--k,取得i的所有情况,j的所有情况,使i!=j,再取得k的所有情况,使k!=i&&k!=j
// 2.然后使题目的条件成立
char i,j,k;
for(i='x';i<='z';i++)
for(j='x';j<='z';j++)
if(i!=j)
for(k='x';k<='z';k++)
if(i!=k && j!=k)
if(i!='x' && k!='x' && k!='z')
printf("A--%c\nB--%c\nC--%c\n",i,j,k);
return 0;
}
/*Dev-c++输出结果:
A--z
B--x
C--y
*/
C程序设计 第四版(谭浩强)-学习笔记-第五天
最新推荐文章于 2023-05-07 16:36:06 发布