C程序设计常用算法
一、求平均值
1.输入10个数给一维数组a[10],计算并输出数组的平均值。
#include
for(j=0;j<10;j++) {
scanf(\ x= x + a[j]; }
x = x/10;
printf(\平均值= %f\\n\ }
二、逆序排列
1.将字符串str的内容颠倒。
#include
char str[ ] \ j = strlen( str ); for(i=0; i< j/2; i++) { k = str[ i ];
str[ i ] = str[ j-1-i ]; str[ j-1-i ]= k ; } }
2. 输入10个数给一维数组a[10],再按逆序重新存放并输出。
#include
{ int i,x, a[10] ;
for(i=0;i<10;i++) scanf(\ for(i=0; i< 5; i++) { x = a[ i ]; a[ i ] = a[9-i ]; a[9-i ]= x ; }
for(i=0;i<10;i++) printf(\ }
三、级数求和
1.按公式1?1111?????计算 e 的值,误差小于1e-4。 1!2!3!n!#include
#define P 0.0001 void main()
{ float x = 1, k = 1; int i = 1; do {
k = k*i ; x= x + 1/k; i++;
}while ( 1/k > p );
printf(\e 的值= %f\\n\ } 2. 计算数列1?1111?????的和至某项的绝对值小于1e-5时为止( 该项不累加)。 3!5!7!9!#include
{ float sum = 1, t = 1, i = 3; do {
t= -t*i*( i-1) ; sum += 1/t ; i+= 2;
}while ( fabs(1/t) >= 1e-5 ); printf(\sum = %f\\n\ }
3. 输入1个实数给x 和一个正整数给 n,计算并输出下式 sin(x)的值。要求定义和调用函数 fun( x , n)计算x, 类型是 double 。
nx3x5x7sin(x)?1?????
3!5!7!#include
double fun( float x, int n ) { int i ; double t = 1; for ( i = 1; i<=n; i++) t = t*x; return t; }
void main() { int j, n ;
double x , t=1 ,y= 1;
scanf(\
for(j=3;j<=n; j=j+2) { t= -t*j*( j-1) ;
y= y + fun( x, j )/t; }
printf(\ }
4. 输入1个实数给x 和一个正整数给 n,计算并输出下式的值。要求定义和调用函数 fact(k)计算k的阶乘,定义和调用函数mypow(x,k)计算x, 类型是 double 。
nxns??
k?1k!n#include
for ( i = 1; i<=n; i++) t = t*i; return t; }
double mypow ( float x, int n ) { int i ; double t = 1; for ( i = 1; i<=n; i++) t = t*x; return t; }
void main() { int i, n ;
double x , sum= 0;
printf(\输入 x 和 n:\ scanf(\ for(i=1;i<=n; i++)
sum = sum + mypow ( x, i )/fact( i ); }
printf(\ }
四、因子和
1.输出6~10000之间的亲密数对。【说明】若a、b是亲密数对,则a的因子和等于b、b的因子和等于a 且a不等于b 。
#include
for(a=6;a<=10000; a++) { b = 1;
for ( i =2; i<=a/2; i++) if ( a%i==0) b +=i; c = 1;
for ( i =2; i<=b/2; i++) if ( b%i==0) c +=i;
if( a==c && a!=b) printf(\ %d\\n\ } }
2. 找出500以内的所有完数,并输出其因子。
【说明】一个数恰好等于它的因子之和,这个数称为完数,如 6=1+2+3 。 程序1 要求定义和调用函数 f(k)计算k的因子之和。
#include
for ( i = 2; i<=n/2; i++) if((n%i)==0) f1= f1 + i; return f1; }
void main() { int j, a,b ;
for( a=6; a<=500; a++) { b=f( a);
if( a==b ) //如果 a 是完数则输出其各个因子 { printf(\ for(j=2;j<=a/2; j++)
if(a%j==0) printf(\
printf(\} }
}
程序2 要求定义和调用函数 f(k)计算k的因子之和。
#include
for(i=6; i<=500; i++,s = 1) { for(j=2; j<=i/2;j++) if(i%j==0) s+=j; if(s==i)
{ printf(\ //如果 i 是完数则输出其各个因子 for(j=2;j<=i/2; j++)
if(i%j==0) printf(\
printf(\} } }
五、素数
1.输入一批正整数(以零或负数结束),输出其中的素数。要求定义并调用函数prime(m)判断 m 是否为素数。
#include
if(x==1) res = 0; else
{ res = 1;
for( i=2; i if( x%i ==0 ){ res=0; break ; } } return res; } void main() { int m; while (scanf(\ if( prime(m)) printf(\是素数\putchar('\\n'); } 2. 找出200~1000之间所有素数,一行输出5个。 #include for( i=2; i if( x%i ==0 )return 0; return 1;