• 数学公式类(较为简单,这里不做功能阐述):
#include<stdio.h>
int main()
{
	int n,i,d;
	double y=0.0;
	printf("please enter your ideal number\n");
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		d=i*i;
		y+=1.0/d;
	}
	printf("The result is %f\n",y);
}
#include<stdio.h>
int main()
{
	int i,n;
	double A=1.0;
	printf("Enter your ideal number:\n");
	scanf("%d",&n);
	for(i=2;i<=n;i++)//目的是为了A的值与i的值下标对应相等。
		A=1.0/(1+A);
	printf("The result is:%f\n",A);
}
  • 字符串类:

1.字符大VS小:

#include<stdio.h>
void fun(char *s,int *a,int *b)
{
	while(*s)
	{
		if(*s>='A'&&*s<='Z')
			++*a;//注意这里千万不能用*a++,为确保万一可以采用*a+=1来替代。
		if(*s>='a'&&*s<='z')
			++*b;
		s++;
	}
}
int main()
{
	char s[100];
	int upper=0,lower=0;
	printf("please enter a string:\n");
	gets(s);
	fun(s,&upper,&lower);
	printf("upper=%d lower=%d\n",upper,lower);
	return 0;
}

2.统计行式单词数:

#include<stdio.h>
#include<string.h>
int LINE_WORDS(char *s)
{
 int i,count=0;
 for(i=0;s[i]!='\0';i++)
	 if((s[i]!=' ')&&((s[i+1]==' ')||(s[i+1]=='\0')))//这里千万不能写成s[i++]这样的形式,s[i++]这样的形式在表示的仍是是s[i],i++先用后增!                                          
		 count++;
 return count;
}
 int main()
{
	char words[80];
	printf("Enter a string:\n");
	gets(words);//注意这里千万不能用scanf("%s",&words)!
	printf("The number of word is %d\n",LINE_WORDS(words));
	return 0;
}

3.搜索串中元音数:

#include<stdio.h>
void fun(char *s,int num[5])//这个fun()函数太漂亮了!
{

	//第一步:分配输出数组。
	int k,i=5;
	for(k=0;k<i;k++)
		num[k]=0;


  //第二步:给输出数组分配标识变量。
	for(;*s;s++)
		{
			i=-1;
			switch(*s)
		{
			case'A':
			case'a':
				{
					i=0;
					break;
				}
            case'E':
			case'e':
				{
					i=1;
					break;
				}
			 case'I':
			 case'i':
				{
					i=2;
					break;
				}
			case'O':
			case'o':
				{
					i=3;
					break;
				}
		     case'U':
			 case'u':
				{
					i=4;
					break;
				}
			}



			//统计各变量计数下的值。
             if(i>=0)
				 num[i]++;
	}
}
int main()
{
	char s[80];
	int num[5],i;
	printf("please enter a string:\n");
	gets(s);
	fun(s,num);
	for(i=0;i<5;i++)
		printf("%d\n",num[i]);
}

4.行式英文——首字母:

#include<stdio.h>
#include<ctype.h>
void upfst(char *p)
{
	int k=0;
	for(;*p;p++)//这种写法多用于处理字符串问题。
		if(k)
		{
			if(*p==' ')
				k=0;
		}
		else
		{
			if(*p!=' ')
				{
					k=1;
					*p=toupper(*p);
			    }
		}
}//这个fun()函数非常漂亮,值得学习。
int main()
{
	char chrstr[81];
	printf("please enter an English text line:\n");
	gets(chrstr);
	printf("\nBefore changing :\n%s",chrstr);
	upfst(chrstr);
	printf("\nAfter changing :\n%s\n",chrstr);
}

5.串值求和:

//这是一道好题。
#include<stdio.h>
#include<string.h>
#include<ctype.h>//存储着isdight函数。
#define N 9

//采用两个方法的好处在与优化与简洁。
int string(char *s)
{
	int num=0;
	while(*s)
		if(isdigit(*s))//isdight函数:检查参数是否为十进制的数组。
		{
			num=num*10+*s-'0';//这是本题的灵魂所在,字符与数值之间的转换。
			s++;
		}
		return num;
}
int fun(char *a,char *b)//一个方法套一个方法,避免了程序的拖沓。
{
	return string(a)+string(b);
}



int main()
{
	char s1[N],s2[N];
	do
	{
		printf("Input string1:");
			gets(s1);
	}while(strlen(s1)>N);//这里采用do...while是因为题目条件所限,必须先获取,才能判断。
	do
	{
		printf("Input string2:");
			gets(s2);
	}while(strlen(s2)>N);

    printf("The result is:%d\n",fun(s1,s2));
	return 0;
}

  • 数值保留:
#include<stdio.h>
int main()
{
	float num=0.0;
	printf("Enter num:");
	scanf("%f",&num);
	printf("The original date is:%lf\n",num);

	num=((num*1000)+5)/10.0;
	num=(int)(num);
	num=float(num)/100.0;
    printf("The result :%f\n",num);
	return 0;
}
  • 与矩阵及数组有关的一系列转化和求值:

1.边和均值:

#include<stdio.h>
#include<stdlib.h>
#define N 5
double fun(int w[][N])
{
	int i,j,k=0;
	double sum=0.0;
	for(i=0;i<N;i++)
		for(j=0;j<N;j++)
			if(i==0||j==0||i==N-1||j==N-1)
			{
				sum+=w[i][j];
				k++;
			}
			return sum/k;
}

int main()
{
	int a[N][N],m,i,j;
	double s;
	printf("*** The array ***\n");
	for(i=0;i<N;i++)
	{
	   for(j=0;j<N;j++)
		{
			a[i][j]=rand()%20;
			printf("%4d",a[i][j]);
		}
		printf("\n");
	}
	s=fun(a);
	printf("***The result***\n");
	printf("The average sum is:%lf\n",s);
	return 0;
}

2,阵部倍值:

#include<stdio.h>
#include<stdlib.h>
#define N 5
void fun(int a[][N],int m)
{
	int i,j;
	//
	for(j=0;j<N;j++)
		for(i=0;i<=j;i++)//类比于平面函数y=-x其在y>-x的线性规划问题。
			a[i][j]*=m;

	//
}
int main()
{
	int a[N][N],m,i,j;
    printf("       *** The array ***\n");
	//一个二维数组的构建遍历与配值。
		for(i=0;i<N;i++)
		{
			for(j=0;j<N;j++)
			{
				a[i][j]=rand()%20;
				printf(" %4d ",a[i][j]);
			}
			printf("\n");
		}
		//
		m=rand()%20;
		printf("             m= %d\n",m);
		fun(a,m);
		printf("       *** THE RESULT ***\n");
		for(i=0;i<N;i++)
		{
			for(j=0;j<N;j++)
				printf(" %4d ",a[i][j]);
			printf("\n");
		}
		return 0;
}

3,完美数组:

#include<stdio.h>
#include<stdlib.h>
#define N 20
void fun(int *a)
{
	int i,x,n=0;
	x=rand()%20;
	while(n<N)
	{
		for(i=0;i<n;i++)
			if(x==a[i])
				break;
		if(i==n)
		{
			a[n]=x;
			n++;
		}
		    x=rand()%20;
	}
}

int main()
{
	int x[N]={0},i;
	fun(x);
	printf("The result :\n");
	for(i=0;i<N;i++)
	{
		printf("%4d",x[i]);
		if((i+1)%5==0)
			printf("\n");
	}
	return 0;
}

4, 行列转置:

#include<stdio.h>
#include<stdlib.h>
void fun(int array[3][3])
{
	int i,j,t;
	for(i=0;i<3;i++)
		for(j=i+1;j<3;j++)//这里千万不能写成j=0;
		{
			t=array[i][j];
			array[i][j]=array[j][i];
			array[j][i]=t;
		}
}
int main()
{
	int i,j,array[3][3];
	printf("***The array***\n");
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			array[i][j]=rand()%20;
			printf("%4d",array[i][j]);
		}
		printf("\n");
	}
	fun(array);
	printf("converted array:\n");
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
			printf("%4d",array[i][j]);
		printf("\n");
	}
	return 0;
}

5,输出大于平均值的数:

#include<stdlib.h>//此库在这里调用rand()函数.
#include<stdio.h>
#define N 10
double OVER_AVE(int x[],int *y)
{
	int i,j=0;
	double av=0.0;
	for(i=0;i<N;i++)
		av+=x[i]/N;
	for(i=0;i<N;i++)
		if(x[i]>av)
			y[j++]=x[i];
		else
			y[j]=-1;//注意这一步骤的巧妙之处.
	return av;
}
 int main()
{
	int i;
	int x[N],y[N];
	for(i=0;i<N;i++)
	{
		x[i]=rand()%50;//  rand()--伪随机生成器   0——32767.
	printf(" %d ",x[i]);
	}
	printf("\n");
	printf("The average is:%f\n",OVER_AVE(x,y));
	for(i=0;y[i]>=0;i++)
		printf(" %d ",y[i]);
	printf("\n");
}

6,输出小于且最接近平均值的数:

#include<stdlib.h>
#include<stdio.h>
#define N 10
int CLOSE_LESS_AVE(int x[],double *av)
{
	int i,j,d;
    *av=0.0;//千万注意不要忘了赋初值!

	for(i=0;i<N;i++)
	   *av+=double(x[i])/N;

	d=32767;
	for(i=0;i<N;i++)
	if( x[i] < *av && *av-x[i] <= d)
	{
		d=int(*av)-x[i];
		j=i;//j=x[i]
	}
	return x[j];//j
}
int	main()
{
	int x[N],i,m;
	double av=0.0;
	for(i=0;i<N;i++)
	{
	   x[i]=rand()%50;
	   printf(" %d ",x[i]);
	}
	printf("\n");
	m=CLOSE_LESS_AVE(x,&av);
	printf("The average is:%f\n",av);
	printf(" %d \n",m );
}

7,数值转移:

#include<stdio.h>
#include<stdlib.h>
#define N 10
double MOVE_AVE(int *x)
{
	int i,j, y[N];
	double av=0.0;

	for(i=0;i<N;i++)
		av+=double (x[i])/N;

	//类似于杯水倒换问题。
	for(i=j=0;i<N;i++)
		if(x[i]<av)//这里的if循环起决定性作用。
			{
				y[j++]=x[i];
             	x[i]=-1;
		    }
	for(i=0;i<N;i++)
		if(x[i]!=-1)
			y[j++]=x[i];

    for(i=0;i<N;i++)
		x[i]=y[i];
	return av;
}

int main()
{
	int i, x[N];
	for(i=0;i<N;i++)
	{
		x[i]=rand()%50;
		printf(" %d ",x[i]);
	}
printf("\n");
printf("The average is:%f\n",MOVE_AVE(x));
printf("The result:\n");
for(i=0;i<N;i++)
	printf(" %d ",x[i]);
printf("\n");
}
07-16 17:58