环程序
5.1.1 累加和
程序1:应用for循环设计
/* for循环求s=1*2+2*3+…99*100 */
main()
{long i,s;
s=0;
for(i=1;i<=99;i++) /* 设置循环i=1,2,…,99 */ s+=i*(i+1); /* 把通项i*(i+1)累加到s中*/ printf("1*2+2*3+…+99*100=%ld\n",s);
}
程序2:应用while循环设计
/* while循环求s=1*2+2*3+…+99*100 */
main()
{long i,s;
i=1;s=0;
while(i<=99) /* 设置循环i=1,2,…,99 */ {s+=i*(i+1);i++;} /* 把通项i*(i+1)累加到s中*/ printf("1*2+2*3+…+99*100=%ld\n",s);
}
程序3:应用do while循环设计
/* do while循环求s=1*2+2*3+…+99*100 */
main()
{long i,s;
i=1;s=0;
do
{s+=i*(i+1);i++;} /* 把通项i*(i+1)累加到s中*/
while(i<=99); /* 设置循环i=1,2,…,99 */
printf("1*2+2*3+…+99*100=%ld\n",s);
}
5.1.2 代数和
/* 求s=1-1/2+1/3-1/4+…-1/100 */
main()
{int k,n;float s=0;
for(k=1;k<=100;k++)
if(k%2==1) s+=1.0/k; /* 应用分支实现符号一正一负*/ else s-=1.0/k;
printf("s=%9.6f",s);
}
5.1.3 阶乘计算
/* 循环累乘求阶乘n! */
main()
{int i,n; long t;
scanf("%d",&n);
t=1; /* 积变量t赋初值1 */
for(i=1;i<=n;i++)
t=t*i; /* 循环变量i累乘到t,体现阶乘运算*/
printf("%d!=%ld\n",n,t);
}
/
* 递归求阶乘N!*/
float fac(n)
int n;
{long f;
if(n==0) f=1; /* 初始条件*/ else f=n*fac(n-1); /* 递归关系*/ return (f);}
main()
{ int n; long y;
printf("input n:"); scanf("%d",&n);
y=fac(n); printf("%d!=%ld\n",n,y);
}
.1.4 定积分计算
#include"math.h"
main()
{ int i,n=1000;
float a,b,h,t1,t2,s,x;
printf("请输入积分限a,b:");
scanf("%f,%f",&a,&b);
h=(b-a)/n;
for(s=0,i=1;i<=n;i++)
{x=a+(i-1)*h;
t1=exp(-x*x/2);
t2=exp(-(x+h)*(x+h)/2);
s+=(t1+t2)*h/2;} /* 梯形面积累加*/ printf("梯形法算得积分值:%f.\n",s);
}
5.2.1 百鸡问题
main()
{int x,y,z;
for(x=1;x<=19;x++)
for(y=1;y<=33;y++)
for(z=1;z<=100;z++)
if(z%3==0 && x+y+z==100 && 5*x+3*y+z/3==100)
printf("x=%d,y=%d,z=%d\n",x,y,z); /* 同时满足时打印*/
}
5.2.2 解Pell方程
/* 解PELL方程: x^2-ny^2=1. */
#include <math.h>
main()
{int n,m,t;
long a,x,y;
printf("解PELL方程: x^2-ny^2=1.\n");
printf("请输入非平方正整数n:");
scanf("%d",&n);
m=sqrt(n);
if(m*m==n)
{printf("n为平方数,方程无正整数解!\n");
return;}
printf("解PELL方程:x^2-%dy^2=1\n",n);
for(y=1;y<=10000;y++) /* 实施穷举,约定10000内*/ {a=n*y*y;x=sqrt(a+1);
if(x*x==a+1)
{printf("方程的基本解为:");
printf(" x=%ld , y=%ld\n",x,y);
break;}
}}
5.2.3 牛顿迭代法解方程
#include<math.h>
float solut(a,b,c,d)
float a,b,c,d;
{ float x=1,x0,f,f1;
do{
x0=x; /* 在循环中实施迭代*/
f=((a*x0+b)*x0+c)*x0+d;
c语言用递归函数求n的阶乘f1=(3*a*x0+2*b)*x0+c;
x=x0-f/f1;
}