C语言程序整理1

c程序整理
1.三个整数排序。

#include <stdio.h>
void main()
{
	int a,b,c,t;
	scanf("%d%d%d",&a,&b,&c);
	if(a>b)
	{
		t=a;
		a=b;
		b=t;
	}
	if(a>c)
	{
		t=a;
		a=c;
		c=t;
	}
	if(b>c)
	{
		t=b;
		b=c;
		c=t;
	}
	printf("%d %d %d",a,b,c);
}

2.输入成绩输出等级

#include <stdio.h>
#include <stdlib.h>
void main()
{
	int cj;
	scanf("%d",&cj);
	if(cj<0||cj>100)
	{
		printf("成绩输入错误!\n");
		exit(0);
	}
	if(cj>=90&&cj<=100)
	{
		printf("该同学成绩为优秀"); 
	}else if(cj>=80&&cj<90)
	{
		printf("该同学成绩为良好");
	}else if(cj>=70&&cj<80)
	{
		printf("该同学成绩为中等");
	}else if(cj>=60&&cj<70)
	{
		printf("该同学成绩为及格");
	}else
	{
		printf("该同学成绩不及格"); 
	}
}

3.输入三角形三边判断三角形形状

#include <stdio.h>
#include <stdlib.h>
void main() 
{
	float a,b,c;
	scanf("%f%f%f",&a,&b,&c);
	if(a<=0||b<=0||c<=0)
	{
		printf("三角形的三边不能为0为负");
		exit(0);
	}
	if(a+b<=c||a+c<=b||b+c<=a)
	{
		printf("不能构成三角形!");
	}else if(a==b||a==c||b==c)
	{
		printf("等腰三角形");
	}else if(a==b&&a==c)
	{
		printf("等边三角形");
	}else
	{
		printf("一般三角形");
	}
}

4.输入年份判断是否为闰年

#include <stdio.h>
#include <stdlib.h>
void main()
{
	int year;
	scanf("%d",&year);
	if(year<=0)
	{
		printf("输入错误");
		exit(0);	
	}
	if(year%4==0&&year%100!=0||year%400==0)
		printf("是闰年");
	else
		printf("不是闰年"); 
}

5.求一元二次方程的根

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main()
{
	double a,b,c,delta,x1,x2;
	scanf("%lf%lf%lf",&a,&b,&c);
	if(a==0)
		printf("不是一元二次方程");
	else
	{
		delta=b*b-4*a*c;
		if(delta==0)
		{
			printf("方程有两个相同的实根:\n");
			x1=-b/(2*a);
			x2=x1;
			printf("%.2lf,%.2lf",x1,x2);
		}else if(delta>0)
		{
			printf("方程有两个不同的实根:\n");
			x1=-b/(2*a)+sqrt(delta)/(2*a);
			x2=-b/(2*a)-sqrt(delta)/(2*a);
			printf("%.2lf,%.2lf",x1,x2);
		}else
		{
			printf("方程有两个不同的复数根:\n");
			x1=-b/(2*a);
			x2=sqrt(-delta)/(2*a);
			printf("%.2lf+%.2lfi,",x1,x2);
			printf("%.2lf-%.2lfi",x1,x2);
		}
	} 
}

6.switch求学生成绩等级

#include <stdio.h>
#include <stdlib.h>
void main()
{
	int cj;
	scanf("%d",&cj);
	if(cj<0||cj>100)
	{
		printf("输入错误");
		exit(0);	
	}
	switch(cj/10)
	{
		case 10:
		case 9:printf("优秀");break;
		case 8:printf("良好");break;
		case 7:printf("中等");break;
		case 6:printf("及格");break;
		default :printf("不及格"); break;
	}
}

7.输入年份和月份求该月有多少天

#include <stdio.h>
#include <stdlib.h>
void main()
{
	int year,month,day,leapyear;
	scanf("%d%d",&year,&month);
	if(year<0||month<1||month>12)
	{
		printf("输入错误");
		exit(0);	
	}
	leapyear=(year%4==0&&year%100!=0)||(year%400==0);
	switch(month)
	{
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10: 
		case 12:day=31;break;
		case 4:
		case 6:
		case 9:
		case 11:day=30;break;
		case 2:day=28+leapyear; 
	}
	printf("%d年%d月有%d天",year,month,day);
}

8.输入整数输出反位数

#include <stdio.h>
#include <stdlib.h>
void main()
{
	int n,k;
	scanf("%d",&n);
	if(n<=0)
	{
		printf("输入数据错误");
		exit(0);	
	}	
	while(n)
	{
		k=k*10+n%10;
		n/=10;
	}
	printf("反位数为:%d",k);
}

9.辗转相除求最大公约数

#include <stdio.h>
void main()
{
	int a,b,r;
	scanf("%d%d",&a,&b);
	do
	{
		r=a%b;
		a=b;
		b=r;	
	}while(r!=0);
	printf("最大公约数为:%d",a);
}

10.阶乘的和

#include <stdio.h>
#include <stdlib.h>
void main()
{
	int i,n,s=0,p=1;
	scanf("%d",&n);
	if(n<0)
	{
		printf("负数没有阶乘");
		exit(0);
	}
	for(i=1;i<=n;i++)
	{
		p=p*i;
		s+=p;
	}
	printf("阶乘的和为:%d",s);
} 

11.输入一个整数判断是否为素数

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*i从2开始*/
void main()
{
	int n,i,k;
	scanf("%d",&n);
	if(n<0)
	{
		printf("输入错误");
		exit(0);
	}
	k=sqrt(n);
	for(i=2;i<=k;i++)
		if(n%i==0)break;
	if(i>k)
		printf("%d是素数",n);
	else 
		printf("%d不是素数",n); 
}

12.求100-1000的所有水仙花数

#include <stdio.h>
void main()
{
	int m,i,j,k,s=0;
	for(m=100;m<1000;m++)
	{
		i=m/100;
		j=(m-i*100)/10;
		k=m%10;
		if(m==i*i*i+j*j*j+k*k*k)
		{
			printf("%4d",m);
			s++;
		}
	}
	printf("\n共有:%d",s);
}

13.指定格式输出九九乘法表

#include <stdio.h>
void main()
{
	int i,j;
	printf("    "); 
	for(i=1;i<10;i++)
		printf("%4d",i);
	printf("\n------------------------------------------------\n");
	for(i=1;i<10;i++)
	{
		printf("%4d",i);
		for(j=1;j<10;j++)
			printf("%4d",i*j);
		printf("\n");	
	}	
	printf("------------------------------------------------\n");	
}

14.哥德巴赫猜想

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main()
{
	int i,n,p,q,p_flag,q_flag;
	scanf("%d",&n);
	if(n%2==1||n<4)
	{
		printf("数据输入错误");
		exit(0);
	}
	p=1;
	do
	{
		p=p+1;
		q=n-p;
		p_flag=1;
		for(i=2;i<=sqrt(p);i++)
		{
			if(p%i==0)
			{
				p_flag=0;
				break;	
			}	
		}
		q_flag=1;
		for(i=2;i<=sqrt(q);i++)
		{
			if(q%i==0)
			{
				q_flag=0;
				break;	
			}	
		}
	}while(p_flag*q_flag==0);
	printf("%d=%d+%d",n,p,q);
}

15.Fibonacci数列

#include <stdio.h>
void main()
{
	int i,f1=1,f2=1;
	for(i=1;i<=20;i++)
	{
		printf("%12d%12d",f1,f2);
		if(i%2==0)
			printf("\n");
		f1=f1+f2;
		f2=f1+f2;	
	}	
}

16.回文数

#include <stdio.h>
#include <stdlib.h> 
void main()
{
	int n,m,k=0;
	scanf("%d",&n);
	if(n==0)
	{
		printf("输入错误!");
		exit(0);	
	}
	if(n<0)
		m=-n;
	else 
		m=n;
	do
	{
		k=k*10+m%10;
		m=m/10;
	}while(m);
	if(n<0)
		k=-k;
	if(k==n)
		printf("该数为回文数!");
	else
		printf("该数不是回文数!");
}

17.输出数列前20项和

/*2/1,-3/2,5/3,...*/
#include <stdio.h>
void main()
{
	int i,r=1;
	double p=2.0,q=1.0,s=0.0;
	for(i=1;i<=20;i++)
	{
		s=s+r*p/q;
		p=p+q;
		q=p-q;
		r=-r;
	}
	printf("%lf",s);
}

18.满足精度要求的eps的pi值

/*pi/2=1+1/3+1/3*2/5+*/
#include <stdio.h>
void main()
{
	int n;
	double eps,s=1.0,t=1.0;
	scanf("%lf",&eps);
	for(n=1;t>=eps;n++)
	{
		t=t*n/(2*n+1);
		s=s+t;
	}
	printf("%lf",2*s);
}

19.三个数中最小的数

#include <stdio.h>
void main()
{
	int a,b,c,min;
	scanf("%d%d%d",&a,&b,&c);
	if(a>b)
		min=b;
	else
		min=a;
	if(min>c)
		min=c;
	printf("%d",min);
}

20.输入年月日判断是这年的第几天

#include <stdio.h>
void main()
{
	int i,year,month,day,leapyear,s=0;
	scanf("%d%d%d",&year,&month,&day);
	leapyear=(year%4==0&&year%100!=0)||(year%400==0);
	for(i=1;i<=month;i++)
	{
		switch(month)
		{
			case 1:s=day;break;
			case 2:s=31+day;break;
			case 3:s=59+day;break;
			case 4:s=90+day;break;
			case 5:s=120+day;break;
			case 6:s=151+day;break;
			case 7:s=181+day;break;
			case 8:s=212+day;break;
			case 9:s=243+day;break;
			case 10:s=273+day;break;
			case 11:s=304+day;break;
			case 12:s=334+day;break;
		}
	}
	if(leapyear==1&&month>2)
		s=s+1;
	printf("%d年%d月%d日是这一年的第%d天!",year,month,day,s);
}

21.小写字母转换成大写字母

#include <stdio.h>
void main()
{
	char c;
	while((c=getchar())!='\n')
	{
		if(c>='a'&&c<='z')
			c=c-32;
		putchar(c);
	}
}

22.求正整数的所有素数因子

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int isPrime(int n);
int main()
{
	int i,n;
	scanf("%d",&n);
	if(n<=1)
	{
		printf("输入错误");
		exit(0);
	}
	for(i=2;i<=n;i++)
	{
		if(n%i==0&&isPrime(i))
			printf("%4d",i);
	}
	return 0;
}
int isPrime(int n)
{
	int i;
	for(i=2;i<=sqrt(n);i++)
		if(n%i==0)
			return 0;
	return 1;
}



23.输入a求和

/*输入a求s=a+aa+aaa+...*/
#include <stdio.h>
void main()
{
	int i,a,n,k=0,s=0;
	printf("请输入正整数n和a:\n");
	scanf("%d%d",&n,&a);
	for(i=1;i<=n;i++)
	{
		k=k*10+a;
		s=s+k;
	}
	printf("%d",s);
 } 

24.数列直到最后一项小于eps

/*x-1/2*x*x*x/4+1/2*3/4*x*x*x*x*x/6-.....*/
#include <stdio.h>
#include <math.h>
void main()
{
	int n=2;
	double t,x,eps,s=0;
	scanf("%lf%lf",&x,&eps);
	t=x;
	s=t;
	while(fabs(t/(2*n))>u=eps)
	{
		t=-t*x*x*(2*n-3)/(2*n-2);
		s=s+t/(2*n);
		n++;
	}
	printf("%d,%lf",n,s);
} 

25.取一个无符号数的奇数位按原来的顺序组成一个新数

#include <stdio.h>
void main()
{
	unsigned long n,p=1,s=0;
	scanf("%u",&n);
	while(n)
	{
		if((n%10)%2!=0)
		{
			s=s+(n%10)*p;
			p=p*10;
		}
		n=n/10;
	}
	printf("%u",s);
 } 

26.输入字符若有连续一个以上的空格时只输出一个空格

#include <stdio.h>
void main()
{
	char cx,front='\0';
	while((cx=getchar())!='\n')
	{
		if(cx!=' ')putchar(cx);
		if(cx==' ')
			if(cx!=front)
				putchar(cx);
		front =cx;	
	}	
}

27.(第四章函数)最大公约数函数

#include <stdio.h>
#include <stdlib.h>
int gcd(int x,int y);
void main()
{
	int a,b,c,g;
	scanf("%d%d%d",&a,&b,&c);
	if(a==0||b==0||c==0)
	{
		printf("输入错误!");
		exit(0);
	}
	g=gcd(a,b);
	printf("%d",gcd(g,c));	
}
int gcd(int x,int y)
{
	int r;
	do
	{
		r=x%y;
		x=y;
		y=r;	
	}while(r!=0);
	return x;
}

28.打印出2-100之间所有素数

#include <stdio.h>
#include <math.h>
int isPrime(int n);
void main()
{
	int i,s=0;
	for(i=2;i<=100;i++)
	{
		if(isPrime(i))
		{
			printf("%4d",i);
			s++;
			if(s%5==0)
				printf("\n");
		}
	}
}
int isPrime(int n)
{
	int i;
	for(i=2;i<=sqrt(n);i++)
	{
		if(n%i==0)
			return 0;
	}
	return 1;
}

29.用递归求阶乘

#include <stdio.h>
unsigned int getfac(unsigned int n);
void main()
{
	unsigned int n,fac;
	scanf("%u",&n);
	fac=getfac(n);
	printf("%u",fac);	
}
unsigned int getfac(unsigned int n)
{
	unsigned int result;
	if(n==0)
		result=1;
	else
		result=n*getfac(n-1); 
	return result;
}

30.判断绝对素数

/*一个素数它的反位数也是素数称为绝对素数*/ 
#include <stdio.h>
#include <math.h>
unsigned int rev(unsigned int n);
int isPrime(unsigned int n);
int main() 
{
	unsigned int n,m;
	scanf("%u",&n);
	if(isPrime(n))
		m=rev(n);
	else
	{
		printf("输入不是素数");
		return 0;
	}
	if(isPrime(m))
		printf("%u是绝对素数",n);
	else
		printf("%u不是绝对素数!",n);
	return 0;
}
int isPrime(unsigned int n)
{
	int i;
	for(i=2;i<=sqrt(n);i++)
		if(n%2==0)
			return 0;
	return 1;
}
unsigned int rev(unsigned int n)
{
	unsigned int k;
	do
	{
		k=k*10+n%10;
		n/=10;
	}while(n);
	return k;
}

31.求最小公倍数

/*求出最大公约数除以两个数的乘积就是最小公倍数*/
#include <stdio.h>
int gcd(int ,int );
int hcd(int,int,int);
int main()
{
	int a,b,g,h;
	scanf("%d%d",&a,&b);
	if(a==0||b==0)
	{
		printf("输入错误");
		return 1;
	}
	g=gcd(a,b);
	h=hcd(a,b,g);
	printf("最小公倍数为:%d",h);
	return 0;
}
int gcd(int x,int y)
{
	int r;
	do
	{
		r=x%y;
		x=y;
		y=r;
	}while(r);
	return x;
}
int hcd(int x,int y,int z)
{
	return x*y/z;
}

32.求数列之和p134

#include <stdio.h>
#include <math.h>
double fsum(int );
void main()
{
	int n;
	scanf("%d",&n);
	printf("数列的和:%lf",fsum(n));
}
double fsum(int n)
{
	int i,j,p=1,z=0;
	double term,sum=0.0;
	for(i=1;i<=n;i++)
	{
		term=0.0;
		for(j=0;j<i;j++)
			//term=term+i*pow(10,j);
			term=term*10+i;
		sum=sum+p*1/term;
		p=-p;
	}
	return sum;
}

33.求无符号整数所有数位上数字之和

#include <stdio.h>
unsigned int fun(unsigned int);
void main()
{
	unsigned int n,s;
	scanf("%u",&n);
	printf("%u",fun(n));
}
unsigned int fun(unsigned int n)
{
	unsigned int s;
	while(n)
	{
		s=s+n%10;
		n=n/10;
	}
	return s;
}

34.函数法求一元二次方程根

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void fun1(double a,double b,double c,double delta);
void fun2(double a,double b,double c,double delta);
void fun3(double a,double b,double c,double delta);
void main()
{
	double a,b,c,delta;
	scanf("%lf%lf%lf",&a,&b,&c);
	if(a==0)
	{
		printf("不是一元二次方程组!");
		exit(0); 
	}
	delta=b*b-4*a*c;
	if(delta==0)
		fun1(a,b,c,delta);
	else if(delta>0)
			fun2(a,b,c,delta);
		else
			fun3(a,b,c,delta);
}
void fun1(double a,double b,double c,double delta)
{
	double x1,x2;
	x1=-b/(2*a);
	x2=x1;
	printf("%.2lf,%.2lf",x1,x2);
}
void fun2(double a,double b,double c,double delta)
{
	double x1,x2;
	x1=-b/(2*a)+sqrt(delta)/(2*a);
	x2=-b/(2*a)-sqrt(delta)/(2*a);
	printf("%.2lf,%.2lf",x1,x2);
}
void fun3(double a,double b,double c,double delta)
{
	double p,q;
	p=-b/(2*a);
	q=sqrt(-delta)/(2*a);
	printf("x1=%.2lf+%.2lfi\n",p,q);
	printf("x2=%.2lf-%.2lfi\n",p,q);
}

35.勒让德多项式

#include <stdio.h>
double fun(int n,double x);
void main()
{
	int n;
	double x;
	do
	{
		scanf("%d",&n);
	}while(n<0);
	scanf("%lf",&x);
	printf("%lf",fun(n,x));
}
double fun(int n,double x)
{
	double pn;
	if(n==0)
		pn=1;
	else if(n==1)
			pn=x;
	else
		pn=((2*n-1)*x*fun(n-1,x)-(n-1)*fun(n-2,x))/n;
	return pn;
}

36.求n项和p143

/*求s=1/2^2+...+(2n-1)/(2n)^2*/
#include <stdio.h>
double fun(void);
void main()
{
	printf("%lf",fun());
}
double fun(void)
{
	double s=0;
	int n=1;
	while((double)(2*n-1)/((2*n)*(2*n))>1e-4)
	{
		s=s+(double)(2*n-1)/((2*n)*(2*n));
		n++;
	}
	return s;
}

37.输入无符号数求n-1位数

#include <stdio.h>
#include <stdlib.h>
unsigned int fun(unsigned int n);
void main()
{
	unsigned int n;
	scanf("%u",&n);
	if(n<=10)
	{
		printf("输入错误!");
		exit(0);	
	}
	printf("%u",fun(n));
}
unsigned int fun(unsigned int n)
{
	unsigned int m,k=1;
	m=n;
	do
	{
		m=m/10;
		k=k*10;
	}while(m>10);
	return n%k;
}

38.分解因式-125

#include <stdio.h>
#include <math.h>
void fun(int n);
void main() 
{
	int n;
	scanf("%d",&n);
	printf("%d=",n);
	if(n<0)
		printf("-");
	fun(fabs(n));
}
void fun(int n)
{
	int k,r;
	for(k=2;k<=sqrt(n);k++)
	{
		r=n%k;
		while(!r)
		{
			printf("%d",k);
			n=n/k;
			if(n>1)
				printf("*");
			r=n%k;	
		}
	}
	if(n!=1)
		printf("%d",n);
}

39.(第五章数组)保存一个10以内的所有约数

#include <stdio.h>
void main()
{
	int a[10],n;
	int i,j=0;
	printf("输入一个整数(n<10):");
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		if(n%i==0)
			a[j++]=i;
	printf("约数为:\n");
	for(i=0;i<j;i++)
		printf("%4d",a[i]); 
}

40.冒泡排序

#include <stdio.h>
#define N 8
void main()
{
	int i,j;
	int a[N],temp;		
	for(i=0;i<N;i++)
		scanf("%d",&a[i]);
	for(i=0;i<N-1;i++)
	{
		for(j=0;j<N-i-1;j++)
		{
			if(a[j]>a[j+1])
			{
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}
	printf("排序后:\n");
	for(i=0;i<N;i++)
		printf("%4d",a[i]);
}

41.保存Fibonacci数列前二十项,从大到小打印

#include <stdio.h>
#define MAX 20
void main()
{
	long int f[MAX];
	int n;
	f[0]=1;
	f[1]=1;	
	for(n=2;n<MAX;n++)
		f[n]=f[n-1]+f[n-2];
	for(n=MAX-1;n>=0;--n)
	{
		printf("%ld",f[n]);
		putchar((MAX-n-1)%6==5?'\n':' ');
	}
}

42.数组元素的逆转

#include <stdio.h>
void inv(int a[],int n);
void main()
{
	static int a[10]={8,6,7,1,0,9,3,5,4,2};
	int i;
	printf("数组初始数据:\n");
	for(i=0;i<10;i++)
		printf("%4d",a[i]);
	inv(a,10);
	printf("\n数组逆转后:\n");
	for(i=0;i<10;i++)
		printf("%4d",a[i]);
}
void inv(int a[],int n)
{
	int i,j,t,m=(n-1)/2;
	for(i=0;i<=m;i++)
	{
		j=n-i-1;
		t=a[i];
		a[i]=a[j];
		a[j]=t;
	}	
}

43.合并班级排名

/*期中考试后,某专业两个班分别对计算机课程的考试进行了排名
现在要按专业来排名,确定专业的排名情*/
#include <stdio.h>
#define N 5
#define M 4
void sort(int x[],int n);
void merge(int a[],int b[],int c[],int n,int m);
int main()
{
	int i;
	int a[N]={98,64,75,91,55};
	int b[M]={90,58,84,61};
	int c[N+M];
	printf("a排序前:\n");
	for(i=0;i<N;i++)
		printf("%4d",a[i]);
	printf("\nb排序前:\n");
	for(i=0;i<M;i++)
		printf("%4d",b[i]);
	sort(a,N);
	printf("\na排序后:\n");
	for(i=0;i<N;i++)
		printf("%4d",a[i]);
	sort(b,M);	
	printf("\nb排序后:\n");
	for(i=0;i<M;i++)
		printf("%4d",b[i]);
	merge(a,b,c,N,M);
	printf("\n合并排序后:\n");
	for(i=0;i<N+M;i++)
		printf("%4d",c[i]); 
}
void sort(int x[],int n)
{
	int i,j,temp;
	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-i-1;j++)
		{
			if(x[j]<x[j+1])
			{
				temp=x[j];
				x[j]=x[j+1];
				x[j+1]=temp;
			}
		}
	}
}
void merge(int a[],int b[],int c[],int n,int m)
{
	int i=0,j=0,k=0;
	while(i<n&&j<m)
	{
		if(a[i]<b[j])
			c[k++]=a[i++];
		else
				c[k++]=b[j++];
	}
	while(i<n)
	{
		c[k]=a[i];
		k++;
		i++;
	}
	while(j<m)
	{
		c[k]=b[j];
		k++;
		j++;
	}
}

44.统计单词个数

#include <stdio.h>
void main()
{
	char str[81];
	  int i=0,num=0,word=0;
    char c;
    while((str[i++]=getchar())!='\n'); 
    str[i]= '\0';
    for(i=0;(c=str[i])!='\0';i++)
       if(c==' ')  word=0;
       else if(word==0)
       {   
		word=1;  
		num++;   
		}
    printf("%d\n",num);
}

45.字符串复制

#include <stdio.h>
void char_copy(char from[],char to[]);
void main()
{
	char a[20]="i am a student";
	char b[20]="you are so beautiful";
	char_copy(a,b);
	printf("\na=%s\nb=%s\n",a,b);
}
void char_copy(char from[],char to[])
{
	int i=0;
	while(from[i]!='\0')
	{
		to[i]=from[i];
		i++;
	}
	to[i]='\0';
}

46.字符串变换

/*假定输入的字符串中只包含字母和*号请编写程序将字符串的前导*删除,中间和后面的不删除*/
#include <stdio.h>
void main()
{
	int i=0,k;
	char a[80];
	gets(a);
	puts(a);
	while(a[i]=='*')
	i++;
	k=i;
	for(i=0;a[k]!=0;i++,k++)
		a[i]=a[k];
	a[i]='\0';
	printf("%s",a);
}

47.查找子串个数

/*统计子串b在母串a中出现的次数*/
#include <stdio.h>
#include <string.h>
int count(char s[],char t[]);
int main()
{
	char a[80],b[10];
	int k;
	gets(a);
	gets(b);
	k=count(a,b);
	if(k==0)
		printf("没有找到!\n");
	else
		printf("%d",k);
	return 0;
}
int count(char s[],char t[])
{
	int i,j,k,m=0;
	for(i=0;s[i]!='\0';i++)
	{
		k=0;
		for(j=i;s[j]==t[k]&&k<strlen(t);j++)
			k++;
		if(t[k]=='\0')
			m++;		
	 }
	 return m;
}

48.矩阵旋转90°输出

#include <stdio.h>
#define N 3
void main()
{
	int i,j,a[N][N],b[N][N];
	for(i=0;i<N;i++)
		for(j=0;j<N;j++)
			scanf("%d",&a[i][j]);
	for(i=0;i<N;i++)
		for(j=0;j<N;j++)
			b[i][j]=a[N-j-1][i];
	for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
			printf("%4d",b[i][j]);
		printf("\n");
	}
}

49.组成最大数

/*设有N个正整数将他们连成一排组成一个最大的多位数,
例如输入n=3,以及3个整数13,313 312,31331213*/
#include <stdio.h>
#include <string.h>
#define N 3
#define M 10
void sort(char s[][M],int n);
void main()
{
	int i;
	char a[N][M];
	for(i=0;i<N;i++)
		scanf("%s",a[i]);
	sort(a,N);
	for(i=0;i<N;i++)
		printf("%s",a[i]); 
}
void sort(char s[][M],int n)
{
	int i,j;
	char t[M];
	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-i-1;j++)
		if(strcmp(s[j],s[j+1])<0)
		{
			strcpy(t,s[j]);
			strcpy(s[j],s[j+1]);
			strcpy(s[j+1],t);	
		}
	}
}

50.数组a中的内容复制到数组b中

#include <stdio.h>
int arrarycopy(int a[],int b[]);
int main()
{
	static int a[]={1,2,3,4,5,6,7,8,9,-999};
	int b[100],i=0;
	arrarycopy(a,b);
	while(b[i]!=-999)
		printf("%d",b[i++]);
	return 0;
}
int arrarycopy(int a[],int b[])
{
	int i=0;
	while(a[i]!=-999)
	{
		b[i]=a[i];
		i++;
	}
	b[i]=-999;
	return 0;
}

51.将数字字符转换成数值

#include <stdio.h>
int main()
{
	char ch[]="600";
	int s=0,i;
	printf("%d\n",sizeof(ch));
	for(i=0;i<sizeof(ch);i++)
		if(ch[i]>='0'&&ch[i]<='9')
			s=s*10+ch[i]-'0';
	printf("%d",s);
}

52.显示数字矩阵

/*
1 0 0 0 0 0
2 1 0 0 0 0
3 2 1 0 0 0
4 3 2 1 0 0
5 4 3 2 1 0
6 5 4 3 2 1 
*/
#include <stdio.h>
int main()
{
	int a[6][6]={0};
	int i,j,t=1;
	for(i=0;i<6;i++)
	{
		t=i+1;
		for(j=0;j<i+1;j++)
			a[i][j]=t--;
	}
	for(i=0;i<6;i++)
	{
		for(j=0;j<6;j++)
			printf("%4d",a[i][j]);
		printf("\n");
	}
	return 0;
} 
 

53.显示数字矩阵2

/*
1 1 1 1 1
1 2 2 2 2
1 2 3 3 3
1 2 3 4 4
1 2 3 4 5 
*/
#include <stdio.h>
#define N 30
void main()
{
	int a[N][N];
	int i,j,n;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			if(i<j)
				a[i][j]=i+1;
			else
				a[i][j]=j+1;
		}
	}
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
			printf("%3d",a[i][j]);
		printf("\n");
	} 
}

54.输入5个数存储在数组中找出最大数和最小数下标然后输出

#include <stdio.h>
int main()
{
	int a[5];
	int i,t,maxi,mini;
	for(i=0;i<5;i++)
		scanf("%d",&a[i]);
	maxi=mini=0;
	for(i=0;i<5;i++)
	{
		if(a[i]>a[maxi])maxi=i;
		 if(a[i]<a[mini])mini=i;
	}
	printf("\n最大数的下标为:%d\n",maxi+1);
	printf("\n最小数的下标为:%d\n",mini+1);
	t=a[mini];
	a[mini]=a[maxi];
	a[maxi]=t;
	for(i=0;i<5;i++)
		printf("%3d",a[i]);
	return 0;
}

55.输入一段文字,统计文字中指定字符个数

#include <stdio.h>
#include <string.h>
#define N 81
void main()
{
	int i,count=0; 
	char str[N],ch;
	printf("请输入一段文字:\n");
	gets(str);
	printf("请输入指定字符:\n");
	ch=getchar();
	for(i=0;i<strlen(str);i++)
		if(str[i]==ch)count++;
	printf("%c字符含有%d个",ch,count);
}

56.字符串处理p194_8

/*假定输入的字符串只含有字母和*。请编写函数fun
函数功能除了字符串前导的*之外,将串中其他*全部删除
如********ABC***D*E*F******处理后*********ABCDEF*/ 
#include <stdio.h>
#include <string.h>
void fun(char x[]);
void main()
{
	char str[81];
	gets(str);
	fun(str);
	puts(str);
}
void fun(char x[])
{
	int i,j=0;
	for(i=0;i<strlen(x)&&x[i]=='*';i++)
	{
		x[j++]=x[i];
	}
	while(x[i])
	{
		if(x[i]!='*')
			x[j++]=x[i];
		i++;
	}
	x[j]='\0';
}

57.找出字符串中ASCII码值最大的字符,并统计其出现的位置和出现次数

#include <stdio.h>
#include <string.h>
#define N 81
void main()
{
	char str[N];
	int a[N];
	int i,count=0;
	char ch=0;
	gets(str);
	for(i=0;i<strlen(str);i++)
		if(ch<str[i])
			ch=str[i];
	for(i=0;i<strlen(str);i++)
		if(ch==str[i])
			a[count++]=i;
	printf("最大数出现的下标:\n"); 
	for(i=0;i<count;i++)
		printf("%3d",a[i]);
	printf("\n最大数为:%c,出现次数:%d",ch,count);
}

58.(第六章指针)利用指针输入和输出二维数组个元素

#include <stdio.h>
#define N 3
#define M 4
void main()
{
	int a[N][M];
	int i,j;
	int *p;
	p=a[0];
	for(i=0;i<N;i++)
		for(j=0;j<M;j++)
			scanf("%d",p++);
	p=*a;
	for(i=0;i<N;i++)
	{
		for(j=0;j<M;j++)
			printf("%3d",*p++);
		printf("\n");
	}
}

59.冒泡排序指针

#include <stdio.h>
#define N 10
void input(int a[]);
void output(int a[]);
void sort(int a[]);
int main()
{
	int a[N];
	input(a);
	printf("\n排序前:\n");
	output(a);
	sort(a);
	printf("\n排序后:\n");
	output(a);
	return 0;
}
void input(int a[])
{
	int i;
	for(i=0;i<N;i++)
		scanf("%d",a+i); 
}
void output(int a[])
{
	int i;
	for(i=0;i<N;i++)
		printf("%3d",*(a+i));
}
void sort(int a[])
{
	int i,j,temp;
	for(i=0;i<N-1;i++)
	{
		for(j=0;j<N-i-1;j++)
		{
			if(*(a+j)>*(a+j+1))
			{
				temp=*(a+j);
				*(a+j)=*(a+j+1);
				*(a+j+1)=temp; 
			}
		}
	}
}

60.利用指针输入字符数组

#include <stdio.h>
#include <string.h>
void main()
{
	char str[81];
	char *p;
	int i;
	scanf("%s",str); 
	p=str;//指向第一个位置 
	for(i=0;i<strlen(str);i++)
		printf("%c",*p++); 
}

61.处理两个字符串的复制合并,比较

#include <stdio.h>
void cpy(char *,char *);
void cat(char *,char *);
int cmp(char *,char *);
void main()
{
	char a[81],b[81];
	gets(a);
	gets(b);
	//cpy(a,b);
	//puts(a);
	//puts(b);
//	cat(a,b);
//	puts(a);
	int n;
	n=cmp(a,b);
	if(n)
	{
		if(n>0)
			printf("%s>%s",a,b);
		else
			printf("%s<%s",a,b);
	}
	else
		printf("%s=%s",a,b);
}
void cpy(char *from,char *to)
{
	for(;*from!='\0';from++,to++)
		*to=*from;
	*to='\0';
}
void cat(char *from,char *to)
{
	while(*from)from++;
	while(*to)
		*from++=*to++;
	*from='\0';
}
int cmp(char *s,char *t)
{
	while(*s&&*t&&*s==*t)
	{
		s++;
		t++;	
	}	
	return *s-*t;
}

62.将整数字符串转换成一个整数(指针)

#include <stdio.h>
#include <string.h>
int chnum(char *);
void main()
{
	int n;
	n=chnum("1515161");
	printf("转换整数为%d",n);
}
int chnum(char *p)
{
	int num=0,i,k,j,len;
	len=strlen(p);
	for(;*p!='\0';p++)
	{
		k=*p-'0';
		j=(--len);
		while(j--)k=k*10;
		num=num+k;
	}
	return num;
}


63.统计子串在母串出现的次数

#include <stdio.h>
int count(char str[],char substr[]);
void main()
{
	char a[81],b[10];
	int k;
	gets(a);
	gets(b);
	k=count(a,b);
	if(k==0)
		printf("没有找到!");
	else
		printf("%d",k);	
}
int count(char str[],char substr[])
{
	int i,j,k,m=0;
	for(i=0;str[i]!='\0';i++)
	{
		for(j=i,k=0;str[j]==substr[k];j++,k++)
		if(substr[k+1]=='\0')
		{
			m++;
			break;
		}
	}
	return m;
}

64.递归法将一个整数存到字符数组中

#include <stdio.h>
void convert(char *a,int n);
void main()
{
	int n;
	char a[81];
	scanf("%d",&n);
	convert(a,n);
	printf("%s",a);
}
void convert(char *a,int n)
{
	int i;
	if((i=n/10)!=0)convert(a+1,i);
	*a=(n%10)+'0';
}

65.定义3个整数及指向整数的指针,仅用指针方法按由小到大顺序输出

#include <stdio.h>
void main()
{
	int a,b,c;
	int *pa=&a,*pb=&b,*pc=&c;
	int temp;
	scanf("%d%d%d",&a,&b,&c);
	printf("a=%d,b=%d,c=%d\n",a,b,c);
	printf("\n*pa=%d,*pb=%d,*pc=%d\n",*pa,*pb,*pc);
	if(*pa>*pb)
	{
		temp=*pa;
		*pa=*pb;
		*pb=temp;
	}
	if(*pa>*pc)
	{
		temp=*pa;
		*pa=*pc;
		*pc=temp;
	}
	if(*pb>*pc)
	{
		temp=*pb;
		*pb=*pc;
		*pc=temp;
	}
	printf("\na=%d,b=%d,c=%d\n",a,b,c);
	printf("\n*pa=%d,*pb=%d,*pc=%d\n",*pa,*pb,*pc);
}

66.输入10个数,最小的数与第一个对换最大数与最后一个对换

/*输入10个数,将其中最小的数与第一个数对换,最大的数与最后一个数
对换,编写三个函数:1.输入十个数2.进行处理3.输出10个数,都有指针处理
有点问题
*/ 
#include <stdio.h>
void input(int *a,int n);
void output(int *a,int n);
void fun(int *a,int n);
void main()
{
	int a[10];
	input(a,10);
	fun(a,10);
	output(a,10);	
}
void input(int *a,int n)
{
	int i;
	for(i=0;i<n;i++)
		scanf("%d",a+i);
}
void output(int *a,int n)
{
	int i;
	for(i=0;i<n;i++)
		printf("%3d",*a++);
}
void fun(int *ptr,int n)
{
	int i,maxi,mini;
	int max=*ptr,min=*ptr;
	for(i=0;i<n;i++)
	{
		if(max<*(ptr+i))
		{
			max=*(ptr+i);
			maxi=i;
		}
		if(min>*(ptr+i))
		{
			min=*(ptr+i);
			mini=i;
		}
	}
	if(mini!=0)
	{
		i=ptr[0];
		ptr[0]=ptr[mini];
		ptr[mini]=i;
	}
	if(maxi!=n-1)
	{
		i=ptr[n-1];
		ptr[n-1]=ptr[maxi];
		ptr[maxi]=i;
	}
	if(mini==0&&maxi==n-1)
	{
		i=ptr[maxi];
		ptr[maxi]=ptr[mini];
		ptr[mini]=i;
	}

}

67.用指针编写一个求字符串长度的函数主函数输入字符串

#include <stdio.h>
int stlen(char *str);
int stlen1(char *str);
void main()
{
	int len;
	char str[81];
	gets(str);
	len=stlen1(str);
	printf("String:%s\n字符串长度为:%d\n",str,len);
}
int stlen(char *str)
{
	char *p=str;
	while(*p)p++;
	return (p-str);
}
int stlen1(char *str)
{
	int count=0;
	while(*str++)count++;
	return count;
}

68.编写一个函数(参数用指针)将MN阶矩阵转置

#include <stdio.h>
#define M 3
#define N 4
void transpose(int (*a)[N],int (*t)[M]);
void main()
{
	int i,j;
	int a[M][N],t[N][M];
	for(i=0;i<M;i++)
		for(j=0;j<N;j++)
			scanf("%d",&a[i][j]);
	printf("原始数据:\n");
	for(i=0;i<M;i++)
	{
		for(j=0;j<N;j++)
			printf("%4d",a[i][j]);
		printf("\n");	
	}
	transpose(a,t);
	printf("\n转置过:\n");
	for(i=0;i<N;i++)
	{
		for(j=0;j<M;j++)
			printf("%4d",t[i][j]);
		printf("\n");	
	}
}
void transpose(int (*a)[N],int (*t)[M])
{
	int i,j;
	for(i=0;i<N;i++)
		for(j=0;j<M;j++)
			t[i][j]=a[j][i];
}

69.判断字符串是否为回文

/*用指针作为函数参数,编写函数fun,该函数功能是判断字符串是否为回文
若是函数返回1,主函数输出YES,否则返回0,主函数输出NO
如:LEVEL是回文*/
#include <stdio.h>
int fun(char *str);
void main()
{
	char str[81];
	gets(str);
	if(fun(str))
		printf("YES\n");
	else
		printf("NO\n");
}
int fun(char *str)
{
	char *p,*q;
	p=str;
	while(*str)str++;
	q=str;
	q=q-1;
	while(p<=q)
	{
		if(*p!=*q)
			return 0;
		p++;
		q--;
	}
	return 1;
}

70.字符串处理p2387

/*(用指针)假定输入的字符串只含有字母和*。请编写函数fun
函数功能除了字符串前导的*之外,将串中其他*全部删除
如********ABC***D*E*F******处理后*********ABCDEF*/
void fun(char *str);
#include <stdio.h>
void main()
{
	char str[81];
	gets(str);
	fun(str);
	printf("\n%s",str);
} 
void fun(char *str)
{
	char *p;
	p=str;
	while(*str=='*')*str++=*p++;
	while(*p)
	{
		if(*p!='*')
			*str++=*p;
		p++;			
	}
	*str='\0';
}

71.(第八章结构体)用结构体将班级学生按总分高分到低分输出

/*设一个班级有30个人,填写如下登记表,姓名学号三科成绩
求班级成绩的单科平均分,求出每个人的三科总成绩,
并按总成绩由高分到低分输出*/
#include <stdio.h> 
#define N 3
void input();
void sort();
void output();
void average();
struct student
{
	char name[20];
	int num;
	float score[3];
	float sum;
};
struct student stu[N];
int main()
{
	input();
	sort();
	output();
	average();
	return 0;
}
void input()
{
	int i,j;
	for(i=0;i<N;i++)
	{
		scanf("%s%d",stu[i].name,&stu[i].num);
		for(j=0;j<3;j++)
		{
			scanf("%f",&stu[i].score[j]);
			stu[i].sum+=stu[i].score[j];	
		}	
	}	
}
void output()
{
	int i;
	for(i=0;i<N;i++)
		printf("%10s%8d%8.2f%8.2f%8.2f%8.2f\n",stu[i].name,stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);	
}
void sort()
{
	int i,j;
	struct student temp;
	for(i=0;i<N-1;i++)
	{
		for(j=0;j<N-i-1;j++)
		{
			if(stu[j].sum<stu[j+1].sum);
			{
				temp=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=temp;
			}
		}
	}
}
void average()
{
	float aver[3]={0};
	int i,j;
	for(i=0;i<3;i++)
	{
		for(j=0;j<N;j++)
			aver[i]+=stu[j].score[i];
	}
	for(i=0;i<3;i++)
		printf("Subject%dAverage:%.2f\n",i+1,aver[i]/N);
}

72.输出3门课平均成绩.以及总分最高的学生的数据

#include <stdio.h>
#define N 3
struct student 
{
	int num;
	char name[20];
	float score[3];
	float sum;
}; 
int main()
{
	struct student stu[N],maxst;
	int i,j;
	float aver[3];
	for(i=0;i<N;i++)
	{
		scanf("%ld%s",&stu[i].num,stu[i].name);
		for(j=0;j<3;j++)
		{
			scanf("%f",&stu[i].score[j]);
			stu[i].sum+=stu[i].score[j];
		}
	}
	maxst.sum=stu[0].sum;
	for(i=0;i<N;i++)
	{
		if(stu[i].sum>maxst.sum)
			maxst=stu[i];
	}
	for(i=0;i<3;i++)
		for(j=0;j<N;j++)
			aver[i]+=stu[j].score[i];
	printf("各科平均成绩如下:\n");
	for(i=0;i<3;i++)
		printf("subject:%d,Average:%.2f\n",i+1,aver[i]/3);
	printf("最高分学生基本信息如下:\n");
	printf("%8ld%10s%8.2f%8.2f%8.2f%8.2f%8.2f",maxst.num,maxst.name,maxst.score[0],maxst.score[1],maxst.score[2],maxst.sum,maxst.sum/3);
}

73.用函数输入输出学生信息

/*编写一个函数output,打印一个学生的成绩数组,该数组中有5个学生的数据记录
每个记录包括num、name、score,用主函数输入,用output输出这些记录*/ 
#include <stdio.h>
#define N 5
#define M 3 
struct student
{
	long num;
	char name[20];
	float score[3];
};
void output(struct student stu[]);
int main()
{
	struct student stu[N];
	int i,j;
	for(i=0;i<N;i++)
	{
		scanf("%ld%s",&stu[i].num,stu[i].name);
		for(j=0;j<M;j++)
			scanf("%f",&stu[i].score[j]);
	}
	output(stu);
}
void output(struct student stu[])
{
	int i,j;
	for(i=0;i<N;i++)
	{
		printf("%8ld%10s",stu[i].num,stu[i].name);
		for(j=0;j<M;j++)
			printf("%8.2f",stu[i].score[j]);
		printf("\n");
	}
}

74.找出最高分和最低分的学生成绩返回主函数打印

#include <stdio.h>
#define N 3
struct student
{
	char name[20];
	long num;
	float score[3];
	float sum;
};
void inputdata(struct student stu[],int n);
struct student max(struct student stu[],struct student *,int n);
int main()
{
	struct student st[N],minst,maxst;
	inputdata(st,N);
	maxst=max(st,&minst,N);
	printf("总分最高者信息:\n%10s%8ld%8.2f%8.2f%8.2f%8.2f\n",maxst.name,maxst.num,maxst.score[0],maxst.score[1],maxst.score[2],maxst.sum);
	printf("总分最低者信息:\n%10s%8ld%8.2f%8.2f%8.2f%8.2f\n",minst.name,minst.num,minst.score[0],minst.score[1],minst.score[2],minst.sum);
}
void inputdata(struct student stu[],int n)
{
	int i,j;
	for(i=0;i<n;i++)
	{
		scanf("%s%ld",stu[i].name,&stu[i].num);
		for(j=0;j<3;j++)
		{
			scanf("%f",&stu[i].score[j]);
			stu[i].sum+=stu[i].score[j];
		}
	}
}
struct student max(struct student stu[],struct student *s,int n)
{
	int i;
	struct student t;
	float max,min;
	max=min=stu[0].sum;
	t=*s=stu[0];
	for(i=1;i<N;i++)
	{
		if(stu[i].sum>max)
		{
			max=stu[i].sum;
			t=stu[i];
		}
		if(stu[i].sum<min)
		{
			min=stu[i].sum;
			*s=stu[i];
		}
	}
	return t;
}

75.高于平均另存

#include <stdio.h>
#define N 3
struct student
{
	int num;
	float score;
};
void main()
{
	struct student stu[N],stu1[N];
	int i,k=0;
	float avg=0.0;
	for(i=0;i<N;i++)
	{
		scanf("%d%f",&stu[i].num,&stu[i].score);
		avg+=stu[i].score;
	}
	avg=avg/N;
	for(i=0;i<N;i++)
	{
		if(stu[i].score>=avg)
			stu1[k++]=stu[i];
	}
	for(i=0;i<k;i++)
		printf("%8d%8.2f\n",stu1[i].num,stu1[i].score);
	
}

76.学生信息按姓名排序

/*将学生信息按字典序列排列从小到大*/
#include <stdio.h>
#define N 3
struct student
{
	int num;
	char name[20];
	float score[3];
	float sum;	
};
void main()
{
	struct student stu[N],temp;
	int i,j;
	for(i=0;i<N;i++)
	{
		scanf("%d%s",&stu[i].num,stu[i].name);
		for(j=0;j<N;j++)
		{
			scanf("%f",&stu[i].score[j]);
			stu[i].sum+=stu[i].score[j];
		}
	}
	for(i=0;i<N;i++)
	{
		for(j=0;j<N-i-1;j++)
		{
			if(strcmp(stu[j].name,stu[j+1].name)>0)
			{
				temp=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=temp;
			}
		}
	}
	for(i=0;i<N;i++)
		printf("%8d%10s%8.2f\n",stu[i].num,stu[i].name,stu[i].sum);
}

77.输出指定范围成绩的学生的信息

#include <stdio.h>
#define N 3
struct student
{
	int num;
	char name[20];
	float score[3];
	float sum;
};
void main()
{
	struct student stu[N],stuc[N];
	int i,j,k=0;
	float m,n;
	for(i=0;i<N;i++)
	{
		scanf("%d%s",&stu[i].num,stu[i].name);
		for(j=0;j<N;j++)
		{
			scanf("%f",&stu[i].score[j]);
			stu[i].sum+=stu[i].score[j];
		}
	}
	do
	{
		printf("请输入学生成绩范围[m,n]:\n");
		scanf("%f%f",&m,&n);
	}while(m>=n||m<0||n<0);
	for(i=0;i<N;i++)
	{
		if(stu[i].sum>=m&&stu[i].sum<n)
			stuc[k++]=stu[i];
	}
	for(i=0;i<k;i++)
		printf("%8d%10s%8.2f%8.2f%8.2f%8.2f\n",stuc[i].num,stuc[i].name,stuc[i].score[0],stuc[i].score[1],stuc[i].score[2],stuc[i].sum);
}

78.(补充)判断是否为完美数

#include <stdio.h>
void main()
{
	int n,i,s=0;
	scanf("%d",&n);
	for(i=1;i<n;i++)
	{
		if(n%i==0)
			s=s+i;
	}
	if(s==n)
		printf("是完美数");
	else
		printf("不是完美数");
}

79.输出1-n的所有完美数.

/*输入正整数n,求1-n之间的所有完数(完数是值一个数
恰好等于除了它本身之外的因子之和,如6=1+2+3*/
#include <stdio.h>
int main()
{
	int n,i,j,s=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		s=0;
		for(j=1;j<i;j++)
		{
			if(i%j==0)
				s=s+j;
		}
		if(i==s)
			printf("%3d",i);
	}
	return 0;
}

80.插入排序

/*直接插入排序:每次将一个待排序的记录按照关键字大小
插入到前面已经排好序的子序列中,直到全部记录完成*/ 
#include <stdio.h>
int Insertsort(int a[],int n){
	int i,j,temp;
	for(i=1;i<n;i++)
	{
		if(a[i]<a[i-1]){
			temp=a[i];
			for(j=i-1;j>=0&&temp<a[j];--j){
				a[j+1]=a[j];//向后移位 
			} 
			a[j+1]=temp; //j+1是因为执行for循环后j指向了要插入位置的前一个位置 
		}
	}
}
int main(){
	int i,a[10];
	printf("请输入10个数:");
	for(i=0;i<10;i++){
		scanf("%d",&a[i]);
	}
	printf("初始数据:\n");
	for(i=0;i<10;i++){
		printf("%5d",a[i]);
	}
	Insertsort(a,10);
	printf("\n排序后顺序:\n");
	for(i=0;i<10;i++){
		printf("%5d",a[i]);
	}

}

81.选择排序

/*选择排序
每一趟在待排序元素中选取关键字最小或最大的元素加入有序子序列 
(n个元素的选择排序需要n-1趟处理)*/
#include <stdio.h> 
void SelectSort(int a[],int len)
{
	int i,j,min,temp;
	for(i=0;i<len-1;i++)
	{
		min = i ;
		for(j=i+1;j<len;j++)
			if(a[min]>a[j])	min = j;
		if(min!=i){
			temp = a[i];
			a[i] = a[min];
			a[min] = temp;
		}
	 } 
 } 
int main()
{
	int i,a[10];
	printf("请输入10个整数:\n");
	for(i=0;i<10;i++)
		scanf("%d",&a[i]);
	printf("初始数据未排序:\n");
	for(i=0;i<10;i++)
		printf("%5d",a[i]);
	SelectSort(a,10);
	printf("\n已排序:\n");
	for(i=0;i<10;i++)
		printf("%5d",a[i]);
		return 0;
}

82.求数列前n相和

/*2/1,3/2,5/3,。。。*/ 
#include <stdio.h>
double fun(int n);
void main()
{
	int n;
	scanf("%d",&n);
	printf("数列之和:%lf",fun(n));
}
double fun(int n)
{
	int k,a,b,c;
	double s;
	s=0;
	a=2;
	b=1;
	for(k=1;k<=n;k++)
	{
		s=s+(double)a/b;
		a=a+b;
		b=a-b;
	}
	return s;
}

83.分式前n项和结果保存到文件中

#include <stdio.h>
#include <stdlib.h>
void main()
{
	int n,i,a=1,b=2;
	double t,s=0;
	FILE *fp;
	if((fp=fopen("out.dat","w+"))==NULL)	
	{
		printf("error\n");
		exit(0);
	}
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		t=(double)b/a;
		s+=t;
		b=a+b;
		a=b-a;
	}
	printf("%f",s);
	fprintf(fp,"%.2f\n",s);
	fprintf(fp,"%s","1021021");
	fclose(fp);
}

84.只保留s所指字符串中ascii码为偶数的字符

/*只保留s所指字符串中ascii码为偶数的字符*/ 
#include <stdio.h>
void fun(char *s,char *t);
int main()
{
	char s[81],t[81]={0};
	gets(s);
	fun(s,t);
	printf("%s",t);
}
void fun(char *s,char *t)
{
	while(*s)
	{
		if(*s%2!=0)
		{
			*t=*s;	
			t++;
		}
		s++;
	}
	*t='\0';
}

85.将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除

/*将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,
其余的全都删除,串中剩余字符所形成的一个新串放在t所指的一个数组中。*/
#include <stdio.h>
#include <string.h>
void fun(char *s,char *t);
void main()
{
	char s[81],t[81];
	gets(s);
	fun(s,t);
	printf("%s",t);
}
void fun(char *s,char *t)
{
	int i;
	while(i<strlen(s))
	{
		if((s[i]%2==0)&&(i%2==0))
		{
			*t=s[i];
			t++;
		}
		i++;
	}
	*t='\0';
}

86求一个正整数的所有因子之和

/*输入一个正整数,求其所有因子之和,
如输入6其因子为1,2,3,6,其和为12*/
#include "stdio.h"
int main()
{
	int n,i,s=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		if(n%i==0)
		{
			printf("%d、",i);
			s+=i;
		}
	}
	printf("\n%d",s);
	return 0;
}

87.字符统计字符在字符串出现的次数

/*字符统计
1)函数int ff(char *str,char ch)的功能是统计并返回字符ch在字符串str中
出现的次数:如调用ff("every","e")后返回2,因为字符串every中e出现了2次
2)从键盘输入一个字符ch,输入该字符在文本文件inut.txt的每一行出现的次数
如:文件input.txt中存放了下列数据
every
121
i am a student
运行程序输入e后输出
2
0
1
*/
#include <stdio.h>
#include <stdlib.h>
 int ff(char *str,char ch);
int main()
{
	char ch,c,k,s[80];
	FILE *fp;
	if((fp=fopen("a.txt","r"))==NULL)
	{
		printf("error\n");
		exit(0);
	}
	ch=getchar();
	k=0;
	while(1)
	{
		c=fgetc(fp);
		if(c=='\n'||c==EOF)
		{
			s[k]='\0';
			k=0;
			printf("%d\n",ff(s,ch));
			if(c==EOF)break; 
		}
		else
			s[k++]=c;
	}
	fclose(fp);
	return 0;
} 
 int ff(char *str,char ch)
 {
 	int s=0;
 	for(;*str!='\0';str++)
 	{
 		if(*str==ch)
 			s++;
	 }
	return s;
 }

88.折半查找

/*折半查找*/
#include <stdio.h>
int b_search(int a[],int key,int len);
int main() 
{
	int a[10]={11,23,34,45,49,59,69,75,85,95};
	int bi,key;
	scanf("%d",&key);
	bi=b_search(a,key,10);
	if(bi!=-1)
	{
		printf("查找元素的下标为:%d\n",bi);
	}else
	{
		printf("查找失败!");
	}
	return 0;
}
int b_search(int a[],int key,int len)
{
	int mid,high,low;
	low=0;high=len-1;
	while(low<=high)
	{
		mid=(low+high)/2;
		if(a[mid]<key)
			low=mid+1;
		else if(a[mid]>key)
				high=mid-1;
				else
					return mid;
	} 
	return -1;//查找失败 
}

89.链表的建立

/*创建学生信息的链表*/
#include <stdio.h>
#include <stdlib.h>
struct Node
{
	char name[20];
	long num;
	struct Node *next; 
};
struct Node * create(struct Node *head);
struct Node * Liststruct(struct Node *head);
struct Node *insertNode(struct Node *head,struct Node *node);
struct Node *deleteNode(struct Node *head,long num);
int main()
{
	struct Node *head=NULL,*p,*insertnode;
	long num;
	head=create(head);
	if(head==NULL)
	{
		printf("链表建立错误!");
		exit(0);
	}
	Liststruct(head);
//	insertnode = (struct Node *)malloc(sizeof(struct Node));
//	scanf("%s%ld",insertnode->name,&insertnode->num);
//	insertNode(head,insertnode);
	printf("输入要删除的学生的学号:");
	scanf("%ld",&num);
	deleteNode(head,num);
	Liststruct(head);
	return 0;
}
struct Node * create(struct Node *head)
{
	struct Node *newnode;
	struct Node *p;
	newnode = (struct Node *)malloc(sizeof(struct Node));
	scanf("%s%ld",newnode->name,&newnode->num);
	head=p=newnode;
	while(newnode->num>0)
	{
		newnode = (struct Node *)malloc(sizeof(struct Node));
		scanf("%s%ld",newnode->name,&newnode->num);
		p->next=newnode;
		p=p->next;
	}
	p->next=NULL;
	return head;
}
struct Node * Liststruct(struct Node * head)
{
	struct Node *p;
	p=head;
	while(p)
	{
		printf("%10s%10ld\n",p->name,p->num);
		p=p->next;
	}
}
struct Node *insertNode(struct Node *head,struct Node *node)/*假定都是按学号降序排列*/
{
	struct Node *p = head;
	struct Node *prep = p;
	if( head == NULL || node == NULL )
		return head;
	while( p->next != NULL )
	{
		if ( p->num < node->num )
		{
			prep = p;
			p = p->next;
		}
		else if ( p->num == node->num )
		{
			printf("%s already exist!\n",node->name);
			return head;
		}
		else 
			break;
	}
	if ( head == p ) /* 如果插入点在链表的头部,需要改动head指针*/
	{    
		node->next = p;
		head = node;
	}
	else
	{
		node->next = prep->next;
		prep->next = node;
	}
	return head;
}
struct Node *deleteNode(struct Node *head,long num)
{
	struct Node *p=head;
	struct Node *prep=p;
	if(head==NULL)
		return head;
	while(p!=NULL)
	{
		if(p->num!=num)
		{
			prep=p;
			p=p->next;
		}
		else 
			break;
	}
	if(head==p)
		head=p->next;
	else if(p->next!=NULL)
			prep->next=p->next;
		else
			prep->next=NULL;
	if(p==NULL)
		printf("不存在\n");
	else
		free(p);
	return head;
}

  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值