C程序设计 第四版(谭浩强)-学习笔记-第五天

/*  创建时间: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
*/
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值