- 数学公式类(较为简单,这里不做功能阐述):
#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");
}