循环结构程序设计,可供参考
分类:高并发

高手们看看这两个程序错误的原因,我找这就图片 1

5.1 请画出例5.6中给出的3个程序段的流程图

加速法

本文转载(3-3自己补充,可供参考):

读时是什么效果,若不能读就算了。。。图片 2

/*
时间:2011年10月21日10:54:29
*/
# include <stdio.h>

#include<stdio.h>
#include<math.h>
void main()
{
 float work_out(float x);
 float f1(float x);
 float a;
 printf("input origial:n");
 scanf("%f",&a);
 f1(a);
 printf("%0.3f",work_out(a));
}
float f1(float x)
{
 
 x=(sin(x))/(x);
 return(x);
}

第一章
习题1-1
#include <stdio.h>
int main()
{
int a,b,c;
double d;
scanf("%d%d%d",&a,&b,&c);
d=(double)(a+b+c);
printf("%.3lfn",d/3.0);
return 0;
}

#include<stdio.h>

int main()
{
    int i,j,n=0;
    for(i=1;i<=4;i++)
    {
        for(j=1;j<=5;j++,n++)
        {
            if(0==n%5)
            {
                printf("n");
            }
            printf("%dt",i*j);
        }
    }
    printf("n");
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————

float work_out(float x)
{
 float x1,x2,x3;
  do{
  x1=f1(x);
  x2=f1(x1);
  x3=x2-((x2-x1)*(x2-x1))/(x2-2*x1+x);
 }while(fabs(x3-x2)>=1e-2);
  return(x3);
}

习题1-2
#include <stdio.h>
int main()
{
int f;
double c;
scanf("%d",&f);
c=5*(f-32)/9;
printf("%.3lfn",c);
return 0;
}

#include<math.h>
int main()
{
double a,x1,x2;
x1=a/2;
printf("请输入a:");
scanf("%lf",&a);
for(int i=1;;i++)
{
x2=1/2*(x1+a/x1);
if(fabs(x2-x1)<=1e-6) break;
x1=x2;
}
printf("%lfan",x2);
return 0;

1       2       3       4       5
2       4       6       8       10
3       6       9       12      15
4       8       12      16      20
Press any key to continue
————————————
*/

 

习题1-3
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("%dn",(n*(1+n))/2);
return 0;
}

}

 

牛顿法

习题1-4
#include <stdio.h>
#include <math.h>
#define pi 4.0*atan(1.0)
int main()
{
int n;
scanf("%d",&n);
printf("%lfn",sin((pi*n)/180));
printf("%lfn",cos((pi*n)/180));
return 0;
}

#include<stdio.h>
int main()
{
int n,leap;
scanf("%d",&n);

图片 3

#include<stdio.h>
#include<math.h>
void main()
{
 float work_out(float x1);
 float x1,a;
 printf("输入x的一个值:n");
 scanf("%f",&x1);
 a=work_out(x1);
 printf("输出计算结果:n");
 printf("%0.4f",a);
}
float work_out(float x1)
{
 float x0,f0,f1;
 do {
  x0=x1;
  f0=x0-cos(x0);
  f1=1+sin(x0);
  x1=x0-(f0/f1);
 }while(fabs(x1-x0)>=1e-3);
 return(x1);
}

习题1-5
#include <stdio.h>
int main()
{
double x1,y1,x2,y2,a;
scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
printf("%lfn",a);
return 0;
}

if((n%5==0&&n%7!=0&&n%11!=0)||(n%5!=0&&n%7!=0&&n%11==0)||(n%5!=0&&n%7!=0&&n%11!=0))
leap=1;
if(leap==1)
printf("%dna",n);
else
printf("please reputn");
return 0;
}

 

 

习题1-6
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n%2==0)
{
printf("YESn");
}
else
{
printf("NOn");
}
return 0;
}

 

/*
时间:2011年10月21日11:44:06
*/
# include <stdio.h>

弦截法

习题1-7
#include <stdio.h>
int main()
{
int n;
double a;
scanf("%d",&n);
a=n*95.0;
if(a<300)
{
printf("%.2lfn",a);
}
else
{
printf("%.2lfn",a*0.85);
}
return 0;
}

#include<stdio.h>

int main()
{
    int i,j,n=0;
    for(i=1;i<=4;i++)
    {
        for(j=1;j<=5;j++,n++)
        {
            if(0==n%5)
            {
                printf("n");
            }
            if(3==i && 1==j)
            {
                break;
            }
            printf("%dt",i*j);
        }
    }
    printf("n");
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————

#include<stdio.h>
#include<math.h>
float f(float x)
{
 float y;
 y=x*(x*(x-1))-1;
 return(y);
}
float xpoint(float x1,float x2)
{
 float y;
 y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
 return(y);
}
float root(float x1,float x2)
{
 float x,y,y1;
 y1=f(x1);
 do{
  x=xpoint(x1,x2);
  y=f(x);
  if(y*y1>0)
  {
   y1=y;
   x1=x;
  }
  else
   x2=x;
 }while(fabs(y)>=1e-3);
  return(x);
}
void main()
{
 float x1,x2,f1,f2,x;
 do{
  printf("input x1 x2:n");
  scanf("%f,%f",&x1,&x2);
  f1=f(x1);
  f2=f(x2);
 }
 while(f1*f2>=0);
 x=root(x1,x2);
 printf("A of equation is %0.4fn",x);
}

习题1-8
#include <stdio.h>
#include <math.h>
int main()
{
double n;
scanf("%lf",&n);
printf("%.2lf",fabs(n));
return 0;
}

#include<math.h>
int main()
{
 double a,x1,x2;

1       2       3       4       5
2       4       6       8       10

 

习题1-9
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a==b&&b==c)
{
printf("non");
}
if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
{
printf("yesn");
}
else
{
printf("non");
}
return 0;
}

 printf("请输入a:");
 scanf("%lf",&a);
 x1=a/2;
 for(int i=1;;i++)
 {
 x2=(x1+a/x1)/2;
 if(fabs(x2-x1)<=1e-6) break;
 x1=x2;
 }
 printf("%lfan",x2);
 return 0;

4       8       12      16      20
Press any key to continue
————————————
*/

迭代:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define n 3  
#define eps 0.5e-4  
#define Kmax 100
static double aa[n][n]={{10,-1,-2},{-1,10,-2},{-1,-1,5}};
 static double bb[n]={7.2,8.3,4.2};
void main()
{ int k,i,j;   double d,sum,norm;
  double a[n+1][n+1],b[n+1],x[n+1],y[n+1];
  for(i=1;i<=n;i++)
   { for(j=1;j<=n;j++)
   a[i][j]=aa[i-1][j-1];
     b[i]=bb[i-1];}
  for(i=1;i<=n;i++) x[i]=0;
  k=0;
  printf("n  k=%2d    X=",k);
  for(i=1;i<=n;i++) printf(" %f  ",x[i]);
   do
    {  k++;  if(k>Kmax)
{ printf("n The itetation failed !");break; }
       norm=0.0;
       for(i=1;i<=n;i++)
       { sum=0.0;
  for(j=1;j<=n;j++) if(j!=i) sum=sum+a[i][j]*x[j];
  y[i]=(b[i]-sum)/a[i][i];
  d=fabs(y[i]-x[i]);
  if(norm<d) norm=d;  
 }
      printf("n  k=%2d    X=",k);
      for(i=1;i<=n;i++) printf(" %f  ",y[i]);
      for(i=1;i<=n;i++) x[i]=y[i];
     }
    while(norm>=eps); 
    if (norm<eps)
     { printf("nn The result is:n");
      printf("n  k=%d  ",k);
      for(i=1;i<=n;i++) printf("   x[%d]=%f",i,x[i]);
      }
   getch();
}

习题1-10
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n%4==0)
{
if(n%100!=0)
{
printf("non");
}
else
{
if(n%400==0)
{
printf("yesn");
}
else
{
printf("non");
}
}
}
else
{
printf("non");
}
return 0;
}

}

 

三角
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define n 3
#define precision 1e-16
main()
{int i,j;double a[n+1][n+1],b[n+1];
 void LUdecomp();   void Solve();
 clrscr();
 printf("n Please input the matrix A:n");
 for(i=1;i<=n;i++)
  { printf("n row %d:",i);
    for(j=1;j<=n;j++)  scanf("%lf,",&a[i][j]);
   }
 printf("n Pleae input b[1]... b[n]:");
 for(i=1;i<=n;i++) scanf("%lf",&b[i]);
 LUdecomp(a);
 printf("n LU decomposition of Doolittle :nn");
   for(i=1;i<=n;i++)
   { for(j=1;j<=n;j++) printf("%12f",a[i][j]);  printf("n");
    }
 if(fabs(a[n][n])>precision)
  { Solve(a,b);  printf("n");
    for(i=1;i<=n;i++)  printf("   x[%d]=%f",i,b[i]);
  }
  else  printf("n LU decomposition method failed! n");
getch();
  }
void LUdecomp(double a[][n+1])
 { int i,j,k,s;
   for(k=1;k<=n;k++)
    { for(j=k;j<=n;j++)  for(s=1;s<=k-1;s++)
 a[k][j]-=a[k][s]*a[s][j];
      if((fabs(a[k][k])<precision)&&(k<n))
     { printf("n LU decomposition failed! n"); exit(0);}
      for(i=k+1;i<=n;i++)
       { for(s=1;s<=k-1;s++)  a[i][k]-=a[i][s]*a[s][k];
      a[i][k]/=a[k][k];
 }
     }
  }
 void Solve(double a[][n+1],double b[])
  { int k,j;
    for(k=1;k<=n;k++) for(j=1;j<=k-1;j++)
   b[k]-=a[k][j]*b[j];
    for(k=n;k>=1;k--)
     { for(j=k+1;j<=n;j++) b[k]-=a[k][j]*b[j];
  b[k]/=a[k][k];
     }
  }

第二章

第二个好像没什么毛病。。。。。。

图片 4

高斯
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
#define n 3  
#define precision 1e-16  
static double aa[n][n+1]={{1,2,-1,3},{1,-1,5,0},{4,1,-2,2}};
main()
{ int i,j,det;  double a[n+1][n+2],x[n+1];
  int GaussElimination_ColumnSelect();
  clrscr();
  for(i=1;i<=n;i++)for(j=1;j<=n+1;j++)
     a[i][j]=aa[i-1][j-1];
det=GaussElimination_ColumnSelect(a,x);
  if(det!=0)
    for(i=1;i<=n;i++)
     printf("n  x[%d]=%fn",i,x[i]); printf("n");
  getch();
 }
int GaussElimination_ColumnSelect(double a[][n+2],double x[n+1])
 { int i,j,k,r;   double c;
   for(k=1;k<=n-1;k++)
    { r=k;
      for(i=k;i<=n;i++) 
 if(fabs(a[i][k])>fabs(a[r][k]))   r=i;
if(fabs(a[r][k])<precision)
{printf("n det A = 0.Elimination  failed ! ");exit(0);}
      if(r!=k)
 {for(j=k;j<=n+1;j++) 
  { c=a[k][j];
a[k][j]=a[r][j]; a[r][j]=c;}
  }
      for(i=k+1;i<=n;i++)  
       { c=a[i][k]/a[k][k];
  for(j=k+1;j<=n+1;j++)
     a[i][j]=a[i][j]-c*a[k][j];
       }
     }
   if(fabs(a[n][n])<precision)
     {printf("n det A = 0. Algorithm failed !");exit(0);}
   for(k=n;k>=1;k--) 
    { x[k]=a[k][n+1];
      for(j=k+1;j<=n;j++)
 x[k]=x[k]-a[k][j]*x[j];
      x[k]=x[k]/a[k][k];
      }
   return(1);
 }

习题2-1

 谢谢各位了!!!!!!

 

 

#include <stdio.h>
int main()
{
int n,count=0;
scanf("%d",&n);
while(n>0)
{
count++;
n=n/10;
}
printf("%dn",count);
return 0;
}

/*
时间:2011年10月21日11:44:06
*/
# include <stdio.h>

 

习题2-2
#include <stdio.h>
int main()
{
int a,b,c;
for(int i=100;i<=999;i++)
{
a=i%10;
b=i/10%10;
c=i/100;
if(i==a*a*a+b*b*b+c*c*c)
{
printf("%dn",i);
}
}
return 0;
}

int main()
{
    int i,j,n=0;
    for(i=1;i<=4;i++)
    {
        for(j=1;j<=5;j++,n++)
        {
            if(0==n%5)
            {
                printf("n");
            }
            if(3==i && 1==j)
            {
                continue;
            }
            printf("%dt",i*j);
        }
    }
    printf("n");
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————

习题2-3
#include <stdio.h>
int main()
{
int i,a,b,c;
scanf("%d%d%d",&a,&b,&c);
for(i=10;i<=100;i++)
{
if(i%3==a&&i%5==b&&i%7==c)
{
printf("%dn",i);
}
}
if(i==101)
{
printf("no answern");
}
return 0;
}

1       2       3       4       5
2       4       6       8       10
6       9       12      15
4       8       12      16      20
Press any key to continue
————————————
*/

习题2-4
#include <stdio.h>
int main()
{
int i,j,k,n;
scanf("%d",&n);
for(i=n;i>0;i--)
{
for(k=0;k<n-i;k++)
{
printf(" ");
}
for(j=0;j<2*i-1;j++)
{

 

printf("#");
}
printf("n");
}
return 0;
}

图片 5

习题2-5
文件题,南邮竞赛基本不涉及。。。
习题2-6
#include <stdio.h>
int main()
{
int i,n;
double sum=1.0;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
sum+=(1.0/i);
}
printf("%.3lfn",sum);
return 0;
}

 

习题2-7
#include <stdio.h>
#include <math.h>
int main()
{
int t=-1;
double a=1.0,sum=1.0;
while(fabs(a)>=0.000001)
{
a=1.0/(a+2);
a=a*t;
sum=sum+a;
t=t*(-1);
}
printf("%.9lfn",sum);
return 0;
}

5.2 请补充例5.7程序,分别统计当“fabs(t)>=1e-6”和“fabs(t)>=1e-8“时执行循环体的次数

习题2-8
#include <stdio.h>
int main()
{
int i,n,m,temp;
double sum=0;
scanf("%d%d",&n,&m);
if(n>m)
{
temp=n;
n=m;
m=temp;
}
for(i=n;i<=m;i++)
{
sum=sum+(1.0/i/i);
}
printf("%.5lfn",sum);
return 0;
}

/*
时间:2011年10月24日11:36:47
题目:习题5-2
*/
# include <stdio.h>
# include <math.h>

习题2-9
printf的特殊用法:对于m.n的格式可以用如下方法表示
    char ch[20];
    printf("%*.*sn",m,n,ch);
    前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n 。 这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。 
#include <stdio.h>
int main()
{
    int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%.*lfn",c,(double)a/b);
return 0;
}

int main()
{
    int sign=1;
    double pi=0.0,term;
    int n=0;
    
    while(fabs(term)>=1e-8)
    {
        ++n;
        term = 1.0/(2*n-1)*sign;
        pi += term;
        sign = -sign;
    }
    pi *= 4;
    printf("pi的近似值是%lfn",pi);
    printf("循环体循环了%d次n",n);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
fabs(term)>=1e-6
pi的近似值是3.141595
循环体循环了500001次

习题2-10

Press any key to continue

fabs(term)>=1e-8
pi的近似值是3.141593
循环体循环了50000001次
Press any key to continue
————————————
*/

 

5.3 输入两个正整数m和n,求其最大公约数和最小公倍数

/*
时间:2011年10月24日12:13:07
题目:习题5-3 输入两个正整数m和n,求其最大公约数和最小公倍数
备注:最小公约数(Least Common Multiple)简写为LCM;最大公约数(greatest common divisor,简写为gcd
*/
# include <stdio.h>

int lcm (int x,int y);
int gcd (int x,int y);

int main()
{
    int a,b;
    int t;
    
    printf("输入两个正整数:");
    scanf("%d%d",&a,&b);
    
    if(a>b)
    {
        t=a;
        a=b;
        b=t;
    }
    
    printf("最小公倍数是%dn",lcm(a,b));
    printf("最大公约数是%dn",gcd(a,b));
    
    return 0;
}

//求最小公倍数
int lcm (int x,int y)
{
    int n=1;
    int lcm;
    for(lcm=x;0!=lcm%y;++n)
    {
        lcm = n*x;
    }
    return (lcm);
}
//求最大公约数
int gcd (int x,int y)
{
    
    int t;
    while(x!=0)
    {
        t = y%x;
        y = x;
        x = t;
    }
    return(y);
}
/*
在VC++6.0中的输出结果为:
————————————
输入两个正整数:12 18
最小公倍数是36
最大公约数是6
Press any key to continue
————————————
*/

 

5.4 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数

/*
时间:2011年10月24日13:48:26
题目:习题5-4 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数
*/
# include <stdio.h>

int main()
{
    int space=0;
    int number=0;
    int letters=0;
    int other=0;
    char c;
    printf("输入一串字符:");
    
    
    while((c=getchar())!='n')
    {
        if((65<=c && c<=90) || (97<=c && c<=122))
        {
            ++letters;
        }
        else if(32==c)
        {
            ++space;
        }
        else if(48<=c && c<=57)
        {
            ++number;
        }
        else
        {
            ++other;
        }
    }
    
    printf("空格有%d个n",space);
    printf("数字有%d个n",number);
    printf("字母有%d个n",letters);
    printf("其他字符有%d个n",other);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入一串字符:Bccn 2011.11.24
空格有1个
数字有8个
字母有4个
其他字符有2个
Press any key to continue
————————————
*/

 

5.5 求Sn=a+aa+aaa+。。。aaaaa(n个a,)其中a是一个数字,n表示a的位数,例如:2+22+222+2222+22222

/*
时间:2011年10月24日14:09:19
题目:习题5-5 求Sn=a+aa+aaa+。。。aaaaa(n个a,)其中a是一个数字,n表示a的位数
*/
# include <stdio.h>

int main()
{
    int a,n;
    int sn=0;
    int term=0,i;
    
    printf("输入a和n的值:n");
    printf("a=");
    scanf("%d",&a);
    printf("n=");
    scanf("%d",&n);
    
    for(i=1;i<=n; ++i)
    {
        term = 10*term + a;
        sn += term;
    }
    
    printf("当a=%d,n=%d时,sn=%dn",a,n,sn);
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入a和n的值:
a=2
n=5
当a=2,n=5时,sn=24690
Press any key to continue
————————————
*/

 

5.6 求1!+2!+3!+…..+20!

/*
时间:2011年10月24日14:39:40
题目:求1!+2!+3!+…..+20!
*/
# include <stdio.h>

double factoria (int x);

int main()
{
    int max=20;
    int i;
    double sn=0;    //注意这里用double型
    
    for (i=1; i<=max; ++i)
    {
        sn += factoria(i);
    }
    printf("sn=%22.15en",sn);
    return 0;
}

double factoria (int x)
{
    int i;
    double factoria=1;
    
    for(i=1; i<=x; ++i)
    {
        factoria *= i;
    }
    return (factoria);
}
/*
在VC++6.0中的输出结果为:
————————————
sn=2.561327494111820e+018
Press any key to continue
————————————
*/

 

5.7 图片 6

/*
时间:2011年10月28日13:12:51
题目:习题5-7
备注:原来编的效率不高,看坛友ppfly的代码后修改。
参考:
*/
# include <stdio.h>

int main ()
{
    int i;
    double sum1=0,sum2=0,sum3=0;
    
    for(i=1; i<=100; ++i)
    {
        sum1 += i;
        if(i<=50)
        {
            sum2 += i*i;
        }
        if(i<=10)
        {
            sum3 += 1.0/i;
        }
        
    }
    printf("sn=%lfn",sum1+sum2+sum3);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
sn=47977.928968
Press any key to continue
————————————
*/

 

5.8 输出所有的水仙花数

/*
时间:2011年10月24日17:00:12
题目:习题5.8 输出所有的水仙花数(3位)
*/
# include <stdio.h>
# include <math.h>

bool IsNarcissus (int number);
int n=3;   //这里只求3位数的水仙花数

int main()
{
    int i;
    for(i=pow(10,n-1); i<pow(10,n); ++i)
    {
        if (IsNarcissus (i))
        {
            printf("%d n",i);
        }    
    }
    return 0;
}

bool IsNarcissus (int number)
{
    int sum=0;
    int x=number;
    while(x!=0)
    {
        sum += pow((x%10),n);
        x /= 10;
    }
    if (sum == number)
    {
        return true;
    }
    else
    {
        return false;
    }
}
/*
在VC++6.0中的输出结果为:
————————————
153
370
371
407
Press any key to continue
————————————
*/

 

5.9 编程序找出1000以内所有完数

/*
时间:2011年10月25日14:43:51
题目:习题5.9 编程序找出1000以内所有完数
备注:要求输出格式为6 its factors are 1,2,3
*/
# include <stdio.h>

bool IsPerfectNumber (int val,int * pArr);

int main()
{
    int i,k=0;
    int a[100]={0};
    for(i=2;i<1000;++i)
    {
        if(IsPerfectNumber(i,a))
        {
            printf("%d its factors are 1",i);
            for(k=0; k<7; ++k)
            {
                if(a[k]!=0)
                {
                    printf(",%d",a[k]);
                }
            }
            printf("n");
        }
    }
    return 0;
}

bool IsPerfectNumber (int val,int * pArr)
{
    int i,j,k=0;
    int sum = 1;
    for(j=2;j<=val;++j)
    {
        if(j==val || val%j!=0)
        {
            continue;
        }
        else
        {
            sum += j;
            *(pArr+k)=j;
            ++k;
        }
    }
    if (sum == val)
    {
        return true;
    }
    else
    {
        for(i=0; i<=k; ++i)
        {
            *(pArr+i)=0;
        }
        return false;
    }
}
/*
在VC++6.0中的输出结果为:
————————————
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
Press any key to continue
————————————
*/

 

5.10 有一个分数数列 2/1,3/2,5/3,8/5,13/8,21/13…求前20项的和

/*
时间:2011年10月25日15:09:21
题目:习题5.10 求分数数列前20项和
备注:分数数列为2/1,3/2,5/3,8/5,13/8...
*/
# include <stdio.h>

int main()
{
    int i,n=20;
    double a=2,b=1,sum=0;
    double t;
    
    for(i=1; i<=n; ++i)
    {
        sum += a/b;
        t = a;
        a += b;
        b = t;
    }
        printf("前20项和为%lfn",sum);
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
前20项和为32.660261
Press any key to continue
————————————
*/

 

5.11 有一个球从100米高落下,每次反弹一半,求第10次落地时经过多长距离,第10次反弹多高

/*
时间:2011年10月25日15:30:44
题目:习题5.11 有一个球从100米高落下,每次反弹一半,求第10次落地时经过多长距离,第10次反弹多高
*/
# include <stdio.h>

int main()
{
    double sum = 100.0;
    double high = sum/2;
    int n;
    
    for(n=2; n<=10; ++n)
    {
        sum += 2*high;
        high /= 2;
    }
    printf("第10次落地时小球经过%lf米,第10次反弹的高度是%lf米n",sum,high);
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
第10次落地时小球经过299.609375米,第10次反弹的高度是0.097656米
Press any key to continue
————————————
*/

 

5.12猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了

一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天

剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个

桃子。

/*
时间:2011年10月25日15:44:20
题目:习题5.12 猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了
      一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天
      剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个桃子。
*/
# include<stdio.h>

int main()
{
    int peach=1;
    int day;
    
    for(day=9; day>0; --day)
    {
        peach =2*(peach+1);
    }
    printf("第1天猴子摘了%d个桃子n",peach);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
第1天猴子摘了1534个桃子
Press any key to continue
————————————
*/

 

5.13 用迭代法求平方根

/*
时间:2011年10月25日16:08:06
题目:习题5.13 用迭代法求平方根
公式:Xn+1=(Xn+a/Xn)/2
要求:两次求出的x的差的绝对值小于1e-5
*/
# include <stdio.h>
# include <math.h>

int main()
{
    double a;
    double x0,x1=1;
    
    printf("输入a的值:");
    scanf("%lf",&a);
    
    do
    {
        x0 = x1;
        x1=(x0+a/x0)/2;
    }
    while(fabs(x1-x0)>=1e-5);
    printf("%lf的平方根是%lfn",a,x1);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入a的值:2
2.000000的平方根是1.414214
Press any key to continue
————————————
*/

 

5.14 用牛顿迭代法求下面方程在1.5附近的根 2X^3-4X^2+3X-6=0

/*
时间:2011年10月26日8:55:22
题目:用牛顿迭代法求下面方程在1.5附近的根 2X^3-4X^2+3X-6=0
*/
# include <stdio.h>
# include <math.h>

int main()
{
    double x0,x1=1.5;
    double fx,fd;

    do
    {
    x0=x1;
    fx=((2*x0-4)*x0+3)*x0-6;
    fd=(6*x0-8)*x0+3;
    x1=x0-fx/fd;
    }
    while(fabs(x1-x0)>=1e-5);

    printf("方程在1.5附近的根是%lfn",x1);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
方程在1.5附近的根是2.000000
Press any key to continue
————————————
*/

 

5.15 用二分法求下面方程在(-10

#include <stdio.h>
int main()
{
    int a,b,c,d,e,f,g,h,i;
for(a=1;a<=9;a++)
{
for(b=1;b<=9;b++)
{
for(c=1;c<=9;c++)
{
for(d=1;d<=9;d++)
{
for(e=1;e<=9;e++)
{
for(f=1;f<=9;f++)
{
for(g=1;g<=9;g++)
{
for(h=1;h<=9;h++)
{
for(i=1;i<=9;i++)
{
if((2*(a*100+b*10+c)==1*(d*100+e*10+f))&&(3*(a*100+b*10+c)==1*(g*100+h*10+i))&&(a!=b)&&(a!=c)&&(a!=d)&&(a!=e)&&(a!=f)&&(a!=g)&&(a!=h)&&(a!=i)&&(b!=c)&&(b!=d)&&(b!=e)&&(b!=f)&&(b!=g)&&(b!=h)&&(b!=i)&&(c!=d)&&(c!=e)&&(c!=f)&&(c!=g)&&(c!=h)&&(c!=i)&&(d!=e)&&(d!=f)&&(d!=g)&&(d!=h)&&(d!=i)&&(e!=f)&&(e!=g)&&(e!=h)&&(e!=i)&&(f!=g)&&(f!=h)&&(f!=i)&&(g!=h)&&(g!=i)&&(h!=i))
{
printf("%d,%d,%dn",a*100+b*10+c,d*100+e*10+f,g*100+h*10+i);
}
}
}
}
}
}
}
}
}
}
return 0;
}

                                第三章
习题3-1

#include <stdio.h>
#include <string.h>
int main()
{
int i,a[101],n,max;
memset(a,sizeof(a),0);
while(scanf("%d",&n)==1)
{
a[n]++;
}
max=a[0];
for(i=1;i<101;i++)
{
if(a[i]>=max)
{
max=a[i];
}
}
for(i=0;i<101;i++)
{
if(a[i]==max)
{
printf("%d ",i);
}
}
printf("n");
return 0;
}

习题3-2

#include <stdio.h>
#include <ctype.h>
char s[1000];
int main()
{
char ch;
int i,j,m=0,sumlong=0,count=0;
while(1)
{
scanf("%c",&ch);
if(ch=='n'||ch==EOF)
{
break;
}
else
{
s[m++]=ch;
}
}
for(i=m-1;i>0;i--)
{
if(s[i]==' '&&s[i-1]==' ')
{
for(j=i-1;j<m-1;j++)
{
s[j]=s[j+1];
}
m--;
}
}
for(i=0;i<m;i++)
{
if(isalpha(s[i]))
{
sumlong++;
}
else if(s[i]==' ')
{
count++;
}
}
printf("%.2lfn",(double)((sumlong+count+1)/(count+1)));
return 0;
}

习题3-3(该题自己补充可以参考)

#include <iostream>
#include <cctype>
#include <math.h>
#include <iomanip>
using namespace std;
char ch_a[100];
int i_b[100];
int main()
{

//1.首先输入数据存储到字符数组中以空格代表结束,判断是数字还是字母(0~9 ASCII码48~57)
char ch;
int i=0;
int n=0;
int sum=1;

while(1)
{
scanf("%c",&ch);
if (ch =='n'|| ch ==EOF)//输入结束
{

//处理最后一个数据,最后一个数据是以回车结尾的
for (int j = 0;j<i;j++)//判断是数字还是字符串
{
if (ch_a[j]<'0'||ch_a[j]>'9')
{
//不是数字
i = 0;
break;
}
else if (j == i-1 && (ch_a[j] >= '0'&& ch_a[j] <= '9'))//判断到最后一个了,是一个整数
{

//此时需要转换数据,存储到新的整数数组中
for (int temp_j = i-1;temp_j >= 0;temp_j--)
{
i_b[n] += (ch_a[temp_j]-'0')*pow(10.0,(i-1) - temp_j);
}
n++;
i = 0;
}
}
//end of最后一个数据处理
break;
}
else if (ch == ' ')//输入空格,代表一个完整的数据输入完成,此时需要判断该数据的类型
{
for (int j = 0;j<i;j++)//判断是数字还是字符串
{
if (ch_a[j]<'0'||ch_a[j]>'9')
{
//不是数字
i = 0;
break;
}
else if (j == i-1 && (ch_a[j] >= '0'&& ch_a[j] <= '9'))//判断到最后一个了,是一个整数
{

//此时需要转换数据,存储到新的整数数组中
for (int temp_j = i-1;temp_j >= 0;temp_j--)
{
i_b[n] += (ch_a[temp_j]-'0')*pow(10.0,(i-1) - temp_j);
}
n++;
i = 0;
}
}
}
else //存储数据,继续输入
{
ch_a[i++] = ch;
}

}

//此时所有整数数据都存储到i_b[]数组中了
for (int temp_j2 = 0; temp_j2<n;temp_j2++)
{
sum *= i_b[temp_j2];
}
cout<<setw(3)<<setfill(' ')<<right << sum % 1000 << endl;
return 0;
}

习题3-4

习题3-5
#include <stdio.h>
char a[1000][1000];
int main()
{
int i,j,n;
scanf("%d",&n);
scanf(" ");
char temp;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%c",&a[i][j]);
}
}
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
}
for(i=n-1;i>=0;i--)
{
for(j=0;j<n;j++)
{
printf("%c ",a[i][j]);
}
printf("n");
    }
return 0;
}

习题3-6
#include <stdio.h>
int main()
{
int b,n,m=0;
char p[100];
scanf("%d%d",&b,&n);
while(b!=0)
{
p[m++]=b%n+'0';
b=b/n;
}
for(int i=m-1;i>=0;i--)
{
printf("%c",p[i]);
}
printf("n");
return 0;
}

习题3-7
#include <stdio.h>
int ndjc(int n,int m)
{
int i,a=1;
for(i=0;i<n;i++)
{
a*=m;
}
return a;
}
int main()
{
int i,b,n,p[100],m=0,a=0;
scanf("%d %d",&n,&b);
while(n>0)
{
p[m++]=n%10;
n=n/10;
}
m--;
for(i=m;i>=0;i--)
{
a+=p[i]*ndjc(i,b);
}
printf("%dn",a);
return 0;
}

本文由10bet手机官网发布于高并发,转载请注明出处:循环结构程序设计,可供参考

上一篇:捕获电脑桌面并打印,多背景循环动画 下一篇:没有了
猜你喜欢
热门排行
精彩图文