C语言基础程序

1.最有用的C程序

#include<stdio.h>
int main()
{
	printf("hello world.\n");
}

2.输入三个数找最大者

#include<stdio.h>
int main()
{
	int a,b,c;
	printf("请输入三个数:");
	scanf("%d%d%d",&a,&b,&c);
	if(a<b)a=b;
	if(a<c)a=c;
	printf("最大数为:%d\n",a);
	return 0;
}

3.互换两个变量的值

#include<stdio.h>
int main()
{
	int a,b,c;
	printf("请输入两个数a,b:");
	scanf("%d%d",&a,&b);
	c=a;a=b;b=c;
	printf("a=%d,b=%d\n",a,b);
	return 0;
}

4.输入三个数从大到小输出

#include<stdio.h>
int main()
{
	int a,b,c,d;
	printf("请输入三个数:");
	scanf("%d%d%d",&a,&b,&c);
	if(a<b){d=a;a=b;b=d;}
	if(a<c){d=a;a=c;c=d;}
	if(b<c){d=b;b=c;c=d;}
	printf("a=%d,b=%d,c=%d\n",a,b,c);
	return 0;
}

5.输入三角形三边长求求面积

#include<stdio.h>
#include<math.h>
int main()
{
	float a,b,c,d,area;
	printf("请输入三边长:");
	scanf("%f%f%f",&a,&b,&c);
	d=(a+b+c)/2;
	//面积公式。sqrt是求算术平方根
	area=sqrt(d*(d-a)*(d-b)*(d-c));
	printf("面积为:%f\n",area);
	return 0;
}

6.输入半径、圆柱高,求圆周长、圆面积、球表面积、球体积、圆柱体积

#include<stdio.h>
#define PI 3.1415926
int main()
{
	float r,h,zc,ym,qm,qt,zt;
	printf("请输入半径和圆柱高:");
	scanf("%f%f",&r,&h);
	//圆周长
	zc=r*PI*2;
	//圆面积
	ym=r*r*PI;
	//球面积
	qm=4*PI*r*r;
	//球体积
	qt=4.0/3.0*PI*r*r*r;
	//柱体积
	zt=PI*r*r*h;
	printf("周长:%f, 圆面积:%f, 球面积:%f\n球体积:%f, 柱体积:%f.\n",zc,ym,qm,qt,zt);
	return 0;
}

 7.输入大写字母将其转换为小写字母

#include<stdio.h>
int main()
{
	char c;
	c=getchar();
	c=c+32;
	putchar(c);
	putchar('\n');
	return 0;
}

8.判断闰年

 能被4整除,不能被100整除或者能被400整除的是闰年

#include<stdio.h>
int main()
{
	int a;
	printf("请输入需要判断的年份:");
	scanf("%d",&a);
	if(a%4==0)
		if(a%100!=0)printf("%d是闰年\n",a);
		else
			if(a%400==0)printf("%a是闰年\n",a);
			else printf("%d不是闰年。\n",a);
	else printf("%d不是闰年.\n",a);
	return 0;
}

9.求方程解

方程有四种情况:不是方程,有两个相同的实根,有两个不等的实根,有两个共轭复根

#include<stdio.h>
#include<math.h>
int main()
{
	float a,b,c,disc,x1,x2,real,imag;
	printf("请输入三个数:");
	scanf("%f%f%f",&a,&b,&c);
	if(fabs(a)<=1e-6)printf("这不是方程\n");
	else
	{
		disc=b*b-4*a*c;
		if(fabs(disc)<=1e-6)
			printf("此方程有两个相同的根:%f\n",-b/(2.0*a));
		else
			if(disc>1e-6)
			{
				x1=(-b+sqrt(disc))/(2.0*a);
				x2=(-b-sqrt(disc))/(2.0*a);
				printf("此方程有两个不等的实根%f和%f\n",x1,x2);
			}
			else
			{
				real=-b/(2.0*a);
				imag=sqrt(-disc)/(2.0*a);
				printf("此方程有两个共轭复根:%f+%fi和%f-%fi\n",real,imag,real,imag);
			}
	}
	return 0;
}

10.输入一个不多于5位的数,求位数、每位数、倒序

#include<stdio.h>
int main()
{
	int a,gs,gw,sw,bw,qw,ww;
	printf("请输入一个不超过五位的数:");
	scanf("%d",&a);
	//判断是几位数
	if(a>9999)gs=5;
	else if(a>999)gs=4;
	else if(a>99)gs=3;
	else if(a>9)gs=2;
	else gs=1;
	printf("这个数是%d位数。\n",gs);
	//求出每位数
	gw=a%10;
	sw=(a%100-gw)/10;
	bw=(a%1000-sw*10-gw)/100;
	qw=a/1000-ww*10;
	ww=a/10000;
	printf("万位:%d,千位:%d,百位:%d,十位:%d,个位:%d\n",ww,qw,bw,sw,gw);
	//判断几位数,输出倒序
	switch(gs)
	{
	case 1:printf("倒序是%d\n",gw);break;
	case 2:printf("倒序是%d%d\n",gw,sw);break;
	case 3:printf("倒序是%d%d%d\n",gw,sw,bw);break;
	case 4:printf("倒序是%d%d%d%d\n",gw,sw,bw,qw);break;
	case 5:printf("倒序是%d%d%d%d%d\n",gw,sw,bw,qw,ww);break;
	}
	return 0;
}

11.求PI

#include<stdio.h>
#include<math.h>
int main()
{
	int sign=1;
	double pi=0.0,fm=1.0,mx=1.0;
	while(fabs(mx)>=1e-6)
	{
		//将每项的值加起来
		pi=pi+mx;
		//每项的分子与符号
		sign=-sign;
		//每项分母
		fm=fm+2;
		//每项的值
		mx=sign/fm;
	}
	pi=4*pi;
	printf("pi=%10.8f\n",pi);
	return 0;
}

12.斐波那契数列

前40个数

#include<stdio.h>
int main()
{
	int f1=1,f2=1,i;
	for(i=1;i<=20;i++)
	{
		//每次循环输出两项数
		printf("%12d%12d",f1,f2);
		//计算下次循环需要输出的两个数
		f1=f1+f2;
		f2=f1+f2;
		//每输出4个数输出一次回车
		if(i%2==0)printf("\n");
	}
	return 0;
}

13.求100~200的素数

#include<stdio.h>
int main()
{
	int i,k;
	for(i=100;i<=200;i++)
	{
		//用i与2~i取余,余数为0跳出循环
		for(k=2;k<i;k++)if(i%k==0)break;
		//判断k与i,素数只能被1与它本身整除
		if(k>=i)printf("%4d",i);
	}
	printf("\n");
	return 0;
}

14.输入一串字符将每个字母输出为他后面第4个字母

#include<stdio.h>
int main()
{
	char c;
	c=getchar();
	//判断输入结束没
	while(c!='\n')
	{
		//判断是否是字母
		if((c>='a'&&c<='z')||(c<='Z'&&c>='A'))c=c+4;
		//将超过字母ASCII码的修改
		if((c>'Z'&&c<'a')||c>'z')c=c-26;
		putchar(c);
		c=getchar();
	}
	putchar('\n');
	return 0;
}

15.输出指定数列

#include<stdio.h>
int main()
{
	int a,b,x,y;
	printf("请输入数列行和列:");
	scanf("%d%d",&a,&b);
	for(x=1;x<=a;x++)
	{
		for(y=1;y<=b;y++)printf("%4d",x*y);
		printf("\n");
	}
	return 0;
}

16.输入两个数,求最大公约数和最小公倍数

#include<stdio.h>
int main()
{
	int a,b,c,d,e;
	printf("请输入两个数:");
	scanf("%d%d",&a,&b);
	//确定那个数大
	if(a>b){c=a;a=b;b=c;}
	e=a*b;
	//判断余数是否为0
	while(a!=0)
	{
		//取出每次的余数
		d=b%a;
		b=a;
		a=d;
	}
	printf("最大公约数为:%d\n",b);
	printf("最小公倍数为:%d\n",e/b);
	return 0;
}

17.统计输入字符串中,英文字母、空格、数字和其他字符个数

#include<stdio.h>
int main()
{
	char c;
	int yw=0,sz=0,kg=0,qt=0;
	while((c=getchar())!='\n')
	{
		if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))yw++;
		else if(c>='0'&&c<='9')sz++;
		else if(c==' ')kg++;
		else qt++;
	}
	printf("英文数:%d,数字数:%d,空格数:%d,其他:%d\n",yw,sz,kg,qt);
	return 0;
}

18.求一个多项式

S=2+22+222+......+22222  此时a=2,n=5。求任意a,n时S值

#include<stdio.h>
int main()
{
	int a,n,i,S=0,mx=0;
	printf("请输入a,n:");
	scanf("%d%d",&a,&n);
	for(i=1;i<=n;i++)
	{
		//计算每项的值
		mx=mx+a;
		//累加
		S=S+mx;
	
		a=a*10;
	}
	printf("S=%d\n",S);
	return 0;
}

19.求1~20中每个数的阶乘的和

#include<stdio.h>
int main()
{
	int i;
	double mx=1,he=0;
	for(i=1;i<=20;i++)
	{
		//mx每次循环乘i+1
		mx=mx*i;
		//he每次在mx乘i后累加
		he=he+mx;
	}
	//因为int占4字节,double占8字节,int存不下这么大的数
	printf("%22.15e\n",he);
		return 0;
}

20.水仙花数

#include<stdio.h>
int main()
{
	int i,gw,sw,bw;
	for(i=100;i<1000;i++)
	{
		gw=i%10;
		sw=(i%100-gw)/10;
		bw=i/100;
		//水仙花数就是各个位的立方相加等于本身
		if(i==gw*gw*gw+sw*sw*sw+bw*bw*bw)printf("%4d",i);
	}
	printf("\n");
	return 0;
}

21.完数

#include<stdio.h>
int main()
{
	int a,b,c;
	for(a=2;a<1000;a++)
	{
		c=0;
		//求因子和
		for(b=1;b<a;b++)
			if(a%b==0)c=c+b;
		//判断因子和与a是否相等
		if(c==a)
		{
			printf("%d是完数,",a);
			//输出完数的所有因子
			for(c=1;c<a;c++)
				if(a%c==0)printf("%d ",c);
			printf("\n");
		}
	}
	return 0;
}

22.一个球从100米落下每次回弹高度少一半,求第十次落地共弹多少米,第十次反弹多高

#include<stdio.h>
int main()
{
	int i;
	//第一次落地
	double g=100,h=g/2;
	//循环9次
	for(i=1;i<10;i++)
	{
		g=g+2*h;
		h=h/2;
	}
	printf("总距离:%f,第十次弹起高度:%f\n",g,h);
	return 0;
}

23.猴子吃桃

#include<stdio.h>
int main()
{
	int day,tao,sheng;
	//第9天剩一个桃子
	for(day=9,sheng=1;day>=1;day--)
	{
		//第九天吃之前的桃子数量
		tao=(sheng+1)*2;
		sheng=tao;
	}
	printf("一共摘了%d个桃子\n",tao);
}

24.迭代法

#include<stdio.h>
#include<math.h>
int main()
{
	float a,x1,x2;
	printf("请输入一个数:");
	scanf("%f",&a);
	//假设一个值满足循环条件
	x1=a/2;
    //求第一次迭代值
	x2=(x1+a/x1)/2;
	//求x的两次迭代差在0.00001之内
	do
	{
    //x1为上一次迭代的值
	x1=x2;
    //进行下一次迭代
	x2=(x1+a/x1)/2;
	}while(fabs(x2-x1)>1e-5);
	printf("%f的平方根是%f\n",a,x2);
	return 0;
}

25.输出菱形

#include<stdio.h>
int main()
{
	int a,b,c;
	for(a=0;a<4;a++)
	{
		for(b=0;b<6-2*a;b++)printf(" ");
		for(c=0;c<1+2*a;c++)printf("* ");
		printf("\n");
	}
	for(a=0;a<4;a++)
	{
		for(b=0;b<2+2*a;b++)printf(" ");
		for(c=0;c<5-2*a;c++)printf("* ");
		printf("\n");
	}
}

26.比赛名单

甲队ABC,乙队XYZ,A不与X比,C不与XZ比

#include<stdio.h>
int main()
{
	char x,y,z;
	for(x='x';x<='z';x++)
		for(y='x';y<='z';y++)
			if(x!=y)
				for(z='x';z<='z';z++)
					//将所有可能的名单列出
					if(x!=z&&y!=z)
						//排除A与X比赛,C与XZ比赛
						if(x!='x'&&z!='x'&&z!='z')
					printf("a--%c\nb--%c\nc--%c\n",x,y,z);
	return 0;
}

27.对数组依次赋值

#include<stdio.h>
int main()
{
	int i,j[10];
	for(i=0;i<10;i++)
	{
		//像数组每个元素赋值
		j[i]=i;
		//输出数组每个元素的值
		printf("%d ",j[i]);
	}
	printf("\n");
	return 0;
}

28.用数组解决斐波那契问题

#include<stdio.h>
int main()
{
	int i,j[40]={1,1};
    //为数组每个元素赋值
	for(i=2;i<40;i++)j[i]=j[i-1]+j[i-2];
    //每行输出5个数
	for(i=0;i<40;i++)
	{
		if(i%5==0&&i!=0)printf("\n");
		printf("%12d",j[i]);
	}
	printf("\n");
	return 0;
}

29.冒泡排序

#include<stdio.h>
int main()
{
	int i,j,a,s[10];
	printf("请输入十个数:");
	for(i=0;i<10;i++)scanf("%d",&s[i]);
	//进行九次比较
	for(i=0;i<9;i++)
		//从数组最后一个元素开始依次比较
		for(j=9;j>i;j--)
			//如果后一位大于前一位将他两换位
			if(s[j]>s[j-1])
			{
				a=s[j];
				s[j]=s[j-1];
				s[j-1]=a;
			}
	for(i=0;i<10;i++)printf("%3d",s[i]);
	printf("\n");
	return 0;
}

30.将一个二维数组与另一个数组的行和列元素值互换

#include<stdio.h>
int main()
{
	int i,j,s[3][4],s1[4][3];
	printf("请输入3X4数组各个数:");
	for(j=0;j<3;j++)
		for(i=0;i<4;i++)scanf("%d",&s[j][i]);
	//遍历3X4数组
	for(j=0;j<3;j++)
	{
		for(i=0;i<4;i++)
		{
			printf("%4d",s[j][i]);
			//将3X4数组各个元素行列互换到4X3数组中
			s1[i][j]=s[j][i];
		}
		printf("\n");
	}
	printf("\n");
	//打印4X3数组
	for(j=0;j<4;j++)
	{
		for(i=0;i<3;i++)printf("%4d",s1[j][i]);
		printf("\n");
	}
	return 0;
}

31.求二维数组内最大数

#include<stdio.h>
int main()
{
	int i,j,s[3][4],max,z;
	printf("请输入3X4数组:");
	for(i=0;i<3;i++)
		for(j=0;j<4;j++)
			scanf("%d",&s[i][j]);
	//讲数组第一个数赋给max
	max=s[0][0];
	for(i=0;i<3;i++)
		for(j=0;j<4;j++)
			//将数组每个元素与max进行比较
			if(s[i][j]>max)max=s[i][j];
	printf("max=%d\n",max);
	return 0;
}

33.字符数组

#include<stdio.h>
int main()
{
	char c,cs[10];
	int i=0;
    printf("请输入字符(不用空格隔开):");
	c=getchar();
	//将字符存入字符数组
	while(c!='\n')
	{
		cs[i]=c;
		i++;
		c=getchar();
	}
	//输出字符数组各个元素
	for(i=0;i<10;i++)printf("%c",cs[i]);
	printf("\n");
	//sizeof计算字符数组长度
	printf("%d\n",sizeof(cs));
	return 0;
}

34.字符函数

#include<stdio.h>
#include<string.h>
int main()
{
	char c1[20],c2[10];
	//获取字符串
	printf("输入c2:");
	gets(c2);
	//输出字符串
	printf("输出c2:");
	puts(c2);
	printf("输入c1:");
	//将c2接到c1后
	gets(c1);
	printf("输出c1:");
	puts(c1);
	strcat(c1,c2);
	printf("连接后输出c1:");
	puts(c1);
	//复制字符串
	printf("复制后c1:");
	strcpy(c1,c2);
	puts(c1);
	printf("复制指定字符串后c1:");
	strcpy(c1,"zhiding");
	puts(c1);
	//将c2中前两个字符复制到c1
	printf("将c2中前两个字符复制到c1前两个:");
	strncpy(c1,c2,2);
	puts(c1);
	//字符串比较
	printf("较大字符串:");
	puts(strcmp(c1,c2)>0?c1:c2);
	//测字符串长度
	printf("c1长度:%d\n",strlen(c1));
	printf("c2长度:%d\n",strlen(c2));
	//将c2小写转大写
	printf("大写c2:");
	strupr(c2);
	puts(c2);
	//将c2大写转小写
	printf("小写c2:");
	strlwr(c2);
	puts(c2);
	return 0;
}
	

35.输入一行字符统计有多少的单词

#include<stdio.h>
#include<string.h>
int main()
{
	char c[100];
	int dc=0,kg=0,i;
	printf("请输入句子:");
	gets(c);
	//遍历输入所有字符
	for(i=0;i<sizeof(c);i++)
		//如果是空格,空格数为0
		if(c[i]==' ')kg=0;
		//如果空格为0,那他后面必定会有一个单词
		else if(kg==0)
		{
			kg=1;
			dc++;
		}
	printf("一共有%d个单词\n",dc);
	return 0;
}

36.输入若干字符串,求最大的字符串

#include<stdio.h>
#include<string.h>
int main()
{
	char c[3][20],max[20];
	int i,j;
	//接收3个字符串
	for(i=0;i<3;i++)
	{
		printf("请输入第%d个字符串",i+1);
		gets(c[i]);
	}
	strcpy(max,c[0]);
	//比较大小
	for(i=0;i<3;i++)
		if(strcmp(max,c[i])<0)strcpy(max,c[i]);
	printf("max=%s\n",max);
	return 0;
}

37.筛选法求100内素数

#include<stdio.h>
#include<math.h>
int main()
{
	int i,j,n,a[100];
	for(i=0;i<100;i++)a[i]=i+1;
	a[0]=0;
	//100以内的数除数不可能大于100的开方
	for(i=1;i<sqrt(100);i++)
		//遍历数组
		for(j=i+1;j<100;j++)
		{
			if(a[i]!=0&&a[j]!=0)
				//如果能被除尽,不是素数
				if(a[j]%a[i]==0)
					a[j]=0;
		}
	for(i=1,n=0;i<100;i++)
	{
		if(a[i]!=0){printf("%5d",a[i]);n++;}
		if(n==10){printf("\n");n=0;}
	}
	printf("\n");
	return 0;
}

38.求矩阵对角线和

#include<stdio.h>
int main()
{
	int i,j,s[3][3],sum=0,sum1=0;
	printf("请输入十个数:");
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			scanf("%d",&s[i][j]);
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			printf("%3d",s[i][j]);
			//主对角线和
			if(i==j)sum=sum+s[i][j];
			//副对角线
			if(i+j==2)sum1=sum1+s[i][j];
		}
		printf("\n");
	}
	printf("主对角线和:%d\n",sum);
	printf("副对角线和:%d\n",sum1);
}

39.插入一个数到数组,数组顺序不变

#include<stdio.h>
int main()
{
	int a[11],x,i,j,z;
	printf("请输入十个数:");
	for(i=0;i<10;i++)scanf("%d",&a[i]);
	//将输入的数从小到大排列
	for(i=0;i<9;i++)
		if(a[i]>a[i+1])
		{
			x=a[i];
			a[i]=a[i+1];
			a[i+1]=x;
		}
	for(i=0;i<10;i++)printf("%4d",a[i]);
	printf("\n");

	printf("请输入要插入的数:");
	scanf("%d",&x);
	//判断x应该插入到那个元素
	for(i=0;i<10;i++)
		if(x<a[i])break;
	//将x插入元素后面的元素后移一位
	for(j=10;j>i;j--)
		a[j]=a[j-1];
	a[i]=x;
	for(i=0;i<11;i++)printf("%4d",a[i]);
	printf("\n");
	return 0;
}

40.杨辉三角

输出前十行

#include<stdio.h>
int main()
{
	int i,j,a[10][10];
	//先将每行第一个和最后一个元素复制
	for(i=0;i<10;i++)
	{
		a[i][0]=1;
		a[i][i]=1;
	}
	//从第三行开始
	for(i=2;i<10;i++)
		for(j=1;j<=i-1;j++)
			a[i][j]=a[i-1][j]+a[i-1][j-1];
	//输出
	for(i=0;i<10;i++)
	{
		for(j=0;j<=i;j++)
			printf("%4d",a[i][j]);
		printf("\n");
	}
	return 0;
}

41.魔方阵

#include<stdio.h>
int main()
{
	int a[15][15],i,j,k,p,n;
	p=1;
	while(p==1)
	{
		printf("请输入1~15中任意奇数:");
		scanf("%d",&n);
		//判断是否为奇数
		if((n!=0)&&(n<16)&&(n%2!=0))p=0;
	}
	//是数组元素全为0
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)a[i][j]=0;
	//确定中间列
	j=n/2+1;
	a[1][j]=1;
	for(k=2;k<=n*n;k++)
	{
		//确定下一个数应该存放的位置
		i=i-1;
		j=j+1;
		if((i<1)&&(j>n))
		{
			i=i+2;
			j=j-1;
		}
		else
		{
			if(i<1)i=n;
			if(j>n)j=1;
		}
		//判断此位置是否已经有数值
		if(a[i][j]==0)a[i][j]=k;
		else
		{
			i=i+2;
			j=j-1;
			a[i][j]=k;
		}
	}
	//输出数组
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)printf("%5d",a[i][j]);
		printf("\n");
	}
	return 0;
}

42. 找鞍点,本行最大,本列最小为鞍点(可能没有)

#include<stdio.h>
int main()
{
	int a[4][5],i,j,k,maxi,maxj,ad;
	//接收数组
    printf("请输入数组(4X5):");
	for(i=0;i<4;i++)
		for(j=0;j<5;j++)scanf("%d",&a[i][j]);
	//遍历数组
	for(i=0;i<4;i++)
	{
		//先随便设置一个元素为鞍点
		maxi=a[i][0];
		maxj=0;
		//判断此元素是否是本行最大数,不是就将最大元素赋值,并取出列
		for(j=0;j<5;j++)
			if(a[i][j]>maxi)
			{
				maxi=a[i][j];
				maxj=j;
			}
			//假设此元素为鞍点
			ad=1;
			//判断此元素是否为本列最小数,不是就没有鞍点
			for(k=0;k<4;k++)
				if(maxi>a[k][maxj])
				{
					ad=0;
					continue;
				}

			if(ad)
			{
				printf("鞍点a[%d][%d]=%d\n",i,maxj,maxi);break;
			}
	}
	if(!ad)printf("此数组无鞍点\n");
    return 0;
}

43.折半法

#include<stdio.h>
#define N 15
int main()
{
	int i,j,z,a[N],n,flag=1,sign,top,bott,local,mid;
	char c;
	printf("请输入%d个数:",N);
	for(i=0;i<N;i++)scanf("%d",&a[i]);
	//将数组从大到小排序
	for(i=0;i<N-1;i++)
		for(j=i;j<N;j++)
			if(a[i]<a[j])
			{z=a[i];a[i]=a[j];a[j]=z;}
	for(i=0;i<N;i++)printf("%4d",a[i]);
	printf("\n");
	//开始判断
	while(flag)
	{
		printf("请输入要找到数:");
		scanf("%d",&n);
		//设置查找范围,sign假设有此数
		sign=1;top=0;bott=N-1;
		//超过数组最大最小数
		if((n>a[0])||(n<a[N-1]))local=-1;
		//开始查找
		while(sign&&(top<=bott))
		{
			mid=(top+bott)/2;
			if(n==a[mid])
			{
				local=mid;
				printf("找到%d了,他是第%d位数\n",n,local+1);
				sign=0;
			}
			//如果大于中间数,将查找范围改为前半部分,反之改为后半部分
			else if(n>a[mid])bott=mid-1;
			else top=mid+1;
		}
		//判断有没有此数
		if(sign||local==-1)printf("没有%d\n",n);

		printf("是否要继续查找(y/n):");
		scanf(" %c",&c);
		//判断是否需要继续查找
		if((c=='n')||(c=='N'))flag=0;
	}
	return 0;
}

44.输入若干字符串统计其内容

#include<stdio.h>
int main()
{
	int i,j,d,x,s,k,q;
	char a[3][80];
	d=x=s=k=q=0;
	for(i=0;i<3;i++)
	{
		printf("请输第%d个字符串:",i+1);
		gets(a[i]);
		for(j=0;j<80&&a[i][j]!='\0';j++)
		{
			if((a[i][j]>='A')&&(a[i][j]<='Z'))d++;
			else if((a[i][j]>='a')&&(a[i][j]<='z'))x++;
			else if(a[i][j]==' ')k++;
			else if((a[i][j]>='0')&&(a[i][j]<='9'))s++;
			else q++;
		}
	}
	printf("大写%d,小写%d,数字%d,空格%d,其他%d\n",d,x,s,k,q);
	return 0;
}

45.基础函数

#include<stdio.h>
int main()
{
    //函数声明
	int add(int x,int y);
	int a,b,d;
	printf("请输入两个数:");
	scanf("%d%d",&a,&b);
    //调用函数,将返回值赋给d
	d=add(a,b);
	printf("和为%d\n",d);
	return 0;
}
//函数定义
int add(int x,int y)
{
	int z;
	z=x+y;
	return z;
}

46.函数嵌套调用

#include<stdio.h>
int main()
{
	int a,b,c,d,max;
	int max1(int a,int b,int c,int d);
	printf("请输入4个数:");
	scanf("%d%d%d%d",&a,&b,&c,&d);
	max=max1(a,b,c,d);
	printf("max=%d\n",max);
	return 0;
}
int max1(int a,int b,int c,int d)
{
	int m(int x,int y);
	int max;
	max=m(a,b);
	max=(max,c);
	max=(max,d);
	return max;
}
int m(int x,int y)
{
	return x>y?x:y;
}

47.函数递归调用

每个学生比上一个大2岁

#include<stdio.h>
int main()
{
	int age(int n);
	int n;
	printf("需要知道第几个学生的年纪:");
	scanf("%d",&n);
	printf("第%d个学生的年纪是:%d\n",n,age(n));
	return 0;
}
int age(int n)
{
	int c;
	if(n==1)c=10;
	else c=age(n-1)+2;
	return c;
}

48.递归求阶乘

#include<stdio.h>
int main()
{
	int fac(int n);
	int n;
	printf("请输入阶乘数:");
	scanf("%d",&n);
	printf("%d阶乘为%d\n",n,fac(n));
	return 0;
}
int fac(int n)
{
	int sum;
	if(n==1)sum=1;
	else sum=fac(n-1)*n;
	return sum;
}

//如果超过int类型存储范围,用double型,%e输出

49.汉诺塔问题

#include<stdio.h>
int main()
{
	void hanoi(int n,char o,char tw,char th);
	int m;
	printf("输入盘子数量");
	scanf("%d",&m);
	hanoi(m,'A','B','C');
	return 0;
}
void hanoi(int n,char o,char tw,char th)
{
	void move(char x,char y);
	//只有一个盘子将其直接放到C上
	if(n==1)move(o,th);
	else
	{
		//不止一个盘子时,将其他盘子视为整体放到B上
		hanoi(n-1,o,th,tw);
		//再将A上盘子放到C上
		move(o,th);
		//将B上剩余盘子放到C上
		hanoi(n-1,tw,o,th);
	}
}

void move(char x,char y)
{ printf("%c->%c\n",x,y);}

50.数组元素作为参数

#include<stdio.h>
int main()
{
	int max(int x,int y);
	int a[10],i,m,n;
	printf("请输入十个数:");
	for(i=0;i<10;i++)scanf("%d",&a[i]);
	for(i=0,m=a[0];i<10;i++)
	{
		if(max(m,a[i])>m)
		{
			m=max(m,a[i]);
			n=i;
		}
	}
	printf("最大数是%d,他是第%d个数\n",m,n+1);
}
int max(int x,int y)
{
	return (x>y?x:y);
}

51.函数名作为函数参数

#include<stdio.h>
int main()
{
	float ave(float a[10]);
	float c[];
	int i;
	printf("请输入十个学生的成绩:");
	for(i=0;i<10;i++)scanf("%f",&c[i]);
	printf("平均成绩为:%5.2f\n",ave(c));
	return 0;
}
float ave(float a[])
{
	float sum=0,aver;
	int i;
	for(i=0;i<10;i++)sum=sum+a[i];
	aver=sum/i;
	return aver;
}

52.函数实现选择法排序

#include<stdio.h>
int main()
{
	void px(int a[],int i);
	int a[10],i;
	printf("请输入十个数:");
	for(i=0;i<10;i++)scanf("%d",&a[i]);
	for(i=0;i<10;i++)printf("%5d",a[i]);
	printf("\n");
	px(a,i);
	for(i=0;i<10;i++)printf("%5d",a[i]);
	printf("\n");
	return 0;
}
void px(int a[],int i)
{
	int x,y,z;
	for(x=0;x<i-1;x++)
		for(y=x;y<i;y++)
			if(a[x]>a[y])
			{z=a[x];a[x]=a[y];a[y]=z;}
}

53.多维数组做函数参数

#include<stdio.h>
int main()
{
	int max(int a[][3],int i);
	int a[2][3],i,j;
	printf("请输入6个数:");
	for(i=0;i<2;i++)
		for(j=0;j<3;j++)scanf("%d",&a[i][j]);
	for(i=0;i<2;i++)
	{
		for(j=0;j<3;j++)printf("%5d",a[i][j]);
		printf("\n");
	}
	printf("max=%d\n",max(a,i));
	return 0;
}
int max(int a[][3],int i)
{
	int x,y,max;
	for(x=0;x<i;x++)
		for(y=0,max=a[0][0];y<3;y++)
			if(max<a[x][y])max=a[x][y];
	return max;
}

 54.外部函数

file1
#include<stdio.h>
int main()
{
    //声明外部函数
	extern void en(char c[]);
	extern void de(char c[],char d);
	extern void pr(char c[]);

	char a[80],d;
	printf("请输入字符串:");
	en(a);
	pr(a);
	printf("请输入要删除字符:");
	scanf("%c",&d);
	de(a,d);
	pr(a);
	return 0;
}
file2
#include<stdio.h>
void en(char c[])
{
	gets(c);
}
file3
#include<stdio.h>
void de(char c[],char d)
{
	int i,j;
	for(i=j=0;c[i]!='\0';i++)
		if(c[i]!=d)c[j++]=c[i];
		c[j]='\0';
}
 file4
#include<stdio.h>
void pr(char c[])
{
	puts(c);
}

 55.静态局部变量

#include<stdio.h>
int main()
{
	int fac(int n);
	int i,n;
	printf("请输入一个数:");
	scanf("%d",&n);
	for(i=1;i<=n;i++)printf("1~%d的阶乘分别为!%d=%d\n",n,i,fac(i));
	return 0;
}
int fac(int n)
{
	//静态局部变量只在声明它的函数内部有效
	static int i=1;
	i=i*n;
	return i;
}

56.用函数分别求出最大公约数和最小公倍数

#include<stdio.h>
int main()
{
	int max(int x,int y);
	int min(int a,int b);
	int a,b;
	printf("请输入两个数:");
	scanf("%d%d",&a,&b);
	printf("最大公约数为%d\n",max(a,b));
	printf("最小公倍数为%d\n",min(max(a,b),a*b));
	return 0;
}
int max(int x,int y)
{
	int i,j;
	if(x>y){i=x;x=y;y=i;}
	i=x*y;
	while((j=y%x)!=0)
	{
		y=x;x=j;
	}
	return x;
}
int min(int a,int b)
{
	return(b/a);
}

57. 指针基础

#include<stdio.h>
int main()
{
	void turn(int *p1,int *p2);

	int a,b,c,*p1,*p2;
	a=1;b=2;p1=&a;p2=&b;
	printf("a=%d b=%d p1=%d p2=%d\n",a,b,*p1,*p2);

	c=*p1;*p1=*p2;*p2=c;
	printf("a=%d b=%d p1=%d p2=%d\n",a,b,*p1,*p2);

	a=1;b=2;p1=&a;p2=&b;
	turn(p1,p2);
	printf("a=%d b=%d p1=%d p2=%d\n",a,b,*p1,*p2);

}
//将指针传入函数,通过改变指针指向的值改变变量值
void turn(int *p1,int *p2)
{
	int t;
	t=*p1;*p1=*p2;*p2=t;
}

58.指针引用数组

#include<stdio.h>
int main()
{
	int a[10],i,*p;
	for(i=0;i<10;i++)a[i]=i+1;
	for(i=0;i<10;i++)printf("%4d",a[i]);
	printf("\n");
	p=a;
	for(i=0;i<10;i++,p++)printf("%4d",*p);
	printf("\n");
}

59.指向数组指针

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

60.指向字符串的指针

#include<stdio.h>
int main()
{
	char *s="abcd";
	printf("%s\n",s);
	s="zxc";
	printf("%s\n",s);
	printf("%s\n",s+1);
}

61.指向函数指针

#include<stdio.h>
int main()
{
	int max(int a,int b);
	int min(int a,int b);
	int (*p)(int,int);
	int x=1,y=2,z=10;
	p=max;
	printf("%d\n",p(x,y));
	p=min;
	printf("%d\n",p(x,y));
	printf("%d\n",max(p(x,y),z));

}
int max(int a,int b)
{
	int z=a+b;
	return z;
}
int min(int a,int b)
{
	return a<b?a:b;
}

62.返回指针值函数

#include<stdio.h>
int main()
{
	int *max(int *a,int *b);
	int x=1,y=3,*p1,*p2,*p;
	p1=&x;p2=&y;
	p=max(p1,p2);
	printf("%d\n",p);
}
int *max(int *a,int *b)
{
	return *a>*b?*a:*b;
}

63.指针数组

#include<stdio.h>
int main()
{
	char *a[]={"abcd","efg"};
	int i,j=2;
	for(i=0;i<2;i++)printf("%s\n",*(a+i));
	for(i=0;i<2;i++)printf("%s\n",*(a+i)+j);
}

64.多重指针

#include<stdio.h>
int main()
{
	char *a[]={"abcd","efg"};
	int i,j=2;
	char **p;
	p=a;
	for(i=0;i<2;i++)printf("%s\n",*p+i);
}

65.指针数组作为main函数参数

#include<stdio.h>
int main(int argc,char *argv[])
{
	int i;
	for(i=1;i<argc;i++)
		printf("%s%c",argv[i],(i<argc-1)?' ':'\n');
}
//此程序需要用命令行执行

66.动态内存分配

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int *p1,i;
	p1=(int*)malloc(5*sizeof(int));
	for(i=0;i<5;i++)scanf("%d",p1+i);
	for(i=0;i<5;i++)printf("%4d",*p1+i);
	printf("\n");
}

67.结构体变量

#include<stdio.h>
int main()
{
	struct st
	{
		int id;
		int score;
		char name[10];
		char sex;
		int age;
	};
	struct st st1,st2;
	scanf("%d%d%s %c%d",&st1.id,&st1.score,&st1.name,&st1.sex,&st1.age);
	scanf("%d%d%s %c%d",&st2.id,&st2.score,&st2.name,&st2.sex,&st2.age);
	if(st1.score>st2.score)printf("%d %d %s %c %d\n",st1.id,st1.score,st1.name,st1.sex,st1.age);
	else printf("%d %d %s %c %d\n",st2.id,st2.score,st2.name,st2.sex,st2.age);
}

68.共用体

#include<stdio.h>
int main()
{
	union Date
	{
		int i;
		char c;
		float f;
	};
	union Date a;
	a.i=97;
	printf("%d %c %f\n",a.i,a.c,a.f);
	a.c='A';
	printf("%d %c %f\n",a.i,a.c,a.f);
	a.f=97.0;
	printf("%d %c %f\n",a.i,a.c,a.f);

}

69.声明新型变量

#include<stdio.h>
int main()
{
	typedef int I;
	I a=1;
	printf("%d\n",a);
}

70.顺序读写文件

#include<stdio.h>
#include<stdlib.h>
int main()
{
	FILE *fp;
	char ch,fn[10];
	printf("输入文件名:");
	scanf("%s",fn);
	getchar();						//接受回车
	if((fp=fopen(fn,"w"))==NULL)
	{
		printf("打开失败\n");
		exit(0);
	}
	printf("输入字符(#结束):");
	ch=getchar();
	while(ch!='#')
	{
		fputc(ch,fp);
		putchar(ch);
		ch=getchar();
	}
	fclose(fp);
	putchar(10);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值