40道C语言大学经典例题及代码(免费 全)

废话不说,咱们直接上车

索引

1.计算三角形面积

#include<stdio.h>
#include<math.h>
double area(double a,double b,double c)
{
	double s,sarea=-1;
	if(a+b>c&&b+c>a&&c+a>b)
	{
        s=(a+b+c)/2;
        sarea=sqrt(s*(s-a)*(s-b)*(s-c));
	}
	return sarea;
}
void main()
{	
	double a,b,c,sarea;
	printf("请输入三个数:");
	scanf("%lf%lf%lf",&a,&b,&c);
	sarea=area(a,b,c);
	if(sarea>0)
		printf("可以构成三角形,其面积为:%.2lfn",sarea);
	else
		printf("不可以构成三角形n");
	
}

2.分段函数计算,输入一个x值,计算并输出y值。

#include <stdio.h>
void main()
{
    int x,y;
    scanf("%d",&x);
    if(x>-5 && x<0)  y=x-1;
    else if(x==0)  y=x;
    else if(x>0 && x<8)  y=x+1;
    else y=10;
    printf("y=%dn",y);
}

3.求e=1+1/1!+1/2!+1/3!+………+1/n!

#include <stdio.h>
void main ()
{
	int i=1;
	double s=1,e=1;
	while(1/s>=1E-5)
	{
		s=s*i;
		e=e+1/s;
		i++;
	}
	printf("e=%lfn",e);
}

4.最小公倍数

#include <stdio.h>
void main ()
{	int m,n,i;
	printf("请输入两个正整数: ");
	scanf("%d%d",&m,&n);
	for(i=m;;i++)
		if(i%m==0 && i%n==0)
			break;
	printf("%d,%d的最小公倍数为%dn",m,n,i);
}

5.求最高分

#include <stdio.h>
void main()
{
    int cj,max=0;
    printf("输入成绩,以负数结束: ");
    scanf ("%d",&cj);
    while(cj>=0)
    {   if(cj>max)   max=cj;
         scanf ("%d",&cj);
    }
    printf("最高分:%dn",max);
}

6.求数列和

#include <stdio.h>
void main()
{
	int a,b,t,i,n;
	double sum=0.0;
	printf("请输入n:");
	scanf("%d",&n);
	a=2,b=1;
	for (i=1;i<=n;i++)
	{
		sum=sum+(double)a/b;
		t=a;  a=a+b;  b=t;
	}
	printf("sum=%fn",sum);
}

7.输出平均分和低于平均分学生成绩

#include <stdio.h>
void main()
{	int a[100],i,n,score;	float sum,ave;

	i=0,sum=0;
	while(1)
	{	printf("请输入第%d个学生成绩: ",i+1);
		scanf("%d",&score);
		if(score<0)  break;
		a[i]=score;     sum+=a[i];
		i++;
	}

	n=i;
	ave=sum/n;
	printf("平均分为: %.2fn",ave);

	printf("低于平均分的成绩有: ");
	for(i=0;i<n;i++)
		if(a[i]<ave) printf("%d  ",a[i]);
	printf("n");
}

8.从键盘输入一字符串,将其逆序输出。

#include <stdio.h>
#include<string.h>
void main()
{ 
	char a[20];
	int i;
	printf("请输入字符串:");
	gets(a);
	for(i=strlen(a)-1;i>=0;i--)
		printf("%c",a[i]);
	printf("n");
}

9.字符串连接

#include<stdio.h>
void main()
{ 
	char s1[80],s2[40];
	int i,j;
	printf("请输入第1个字符串:");
	gets(s1);
	printf("请输入第2个字符串:");
	gets(s2);
	i=0;
	while(s1[i]!='')
		i++;
	j=0;
	while(s2[j]!='')
	    s1[i++]=s2[j++];    
	s1[i]='';
	printf(" 连接后的字符串为:%sn",s1);
}

10.字符串复制

#include <stdio.h>
void main()
{ 
	char s1[80],s2[80];
	int i;
	printf("请输入一个字符串:");
	gets(s2);

	for(i=0;s2[i]!='';i++)
		s1[i]=s2[i]; 
	s1[i]='';

	printf("复制后的字符串为:%sn",s1);
}

11.编写函数,求1+2+3+…….+m。

#include<stdio.h>
int sum(int m)
{
	int i,sumn=0; 
    for(i=1;i<=m;i++)
	   sumn=sumn+i;
    return sumn;
}
void main()
{

	int m;
	int sumn;
	printf("请输入一个整数:");
	scanf("%d",&m);
	sumn=sum(m);
	printf("1+2+3+...+%d=%dn",m,sumn);

}

12.用函数计算分段函数的值

#include<stdio.h>
double fd(double x)
{
	double y;
	if(x<0)
		y=x*x-2*x+1;
	else
		y=x*x*x+x+3;
	return y;
}
void main()
{
	double x,y;
	scanf("%lf",&x);
	y=fd(x);
	printf("y=%.2lfn",y);
}

13.编写函数,求3个整数最小值。

#include<stdio.h>
void main()
{   int min(int,int,int);
    int a,b,c,d,e,m1,m2;
    printf("请输入5个整数: ");
    scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
    m1=min(a,b,c);
    m2=min(m1,d,e);
    printf("最小值为: %dn",m2);
}
int min(int x,int y,int z)
{   int m=x;   
    if(m>y)  m=y;
    if(m>z)  m=z;
    return m;
}

14.编写判断素数函数

#include<stdio.h>
#include<math.h>
void main()
{   int prime(int m);
    int m,i;
	i=0;
    for(m=2;m<=100;m++)
	   if(prime(m))  
		{
			
			printf("%5d",m);
			i++;
			if(i%5==0) printf("n");
		}
	
	printf("n");

}
int prime(int m)
{   int k,n;
    n=(int)sqrt(m);
    for(k=2;k<=n;k++)
        if(m%k==0) return 0;
    return 1;
}

15.编写求最大公约和最小公倍函数

#include<stdio.h>
int gy(int x,int y)
{
	int gyxy,i;
	for(i=x;i>=1;i--)
       if(x%i==0&&y%i==0)
	   {gyxy=i;break;}
     return gyxy;

}
int gb(int x,int y)
{
	int gbxy,i;
	for(i=x;i<=x*y;i++)
       if(i%x==0&&i%y==0)
	   {gbxy=i;break;}
     return gbxy;

}

void main()
{

	int x,y,gyxy,gbxy;
	printf("请输入两个整数:");
	scanf("%d%d",&x,&y);
	gyxy=gy(x,y);
	gbxy=gb(x,y);
	printf("%d和%d的最大公约数是:%dn",x,y,gyxy);
	printf("%d和%d的最小公倍数是:%dn",x,y,gbxy);
	
}

16.编写求n个a的值的函数。

#include<stdio.h>
int f(int a,int n)
{   int i,t=0;
    for(i=1;i<=n;i++)
        t=t*10+a;
    return t;
}
void main()
{   int a,n,i,s=0;
    printf("请输入两个整数a,n: ");
    scanf("%d%d",&a,&n);
    for(i=1;i<=n;i++)
        s=s+f(a,i);
    printf("结果为: %dn",s);
}

17.编写求数组中元素最大值函数。

#include<stdio.h>
#define N 6
int max(int a[])
{   int i,m;
    m=a[0];
    for(i=1;i<N;i++)
        if(m<a[i])  m=a[i];
    return m;
}

void main()
{   int i,b[N];
    printf("请输入%d个整数: ",N);
    for(i=0;i<N;i++)
        scanf("%d",&b[i]);
    printf("最大数为: %dn",max(b));
}

18…编写函数排序数组元素

//(1)顺序比较法
#include<stdio.h>
void sort(int str[],int n)
{   int i,j; 
    int t;
    for(i=0;i<n-1;i++)
        for(j=i+1;j<n;j++)
            if(str[i]>str[j])
            { t=str[i]; str[i]=str[j]; str[j]=t; }
}

void main()
{   int i,n,str[100];    
    printf("请输入元素个数: ");
    scanf("%d",&n);
    printf("请输入%d个元素: ",n);
    for(i=0;i<n;i++)
        scanf("%d",&str[i]);
    sort(str,n);
    printf("排序结果为:");
    for(i=0;i<n;i++)
        printf("%d  ",str[i]);
    printf("n");
}

//(2)冒泡排序法
#include<stdio.h>
void sort(int a[],int n)
{   int i,j,t; 
    for(i=0;i<n-1;i++)
        for(j=0;j<n-1-i;j++)
            if(a[j]>a[j+1])
            { t=a[j]; a[j]=a[j+1]; a[j+1]=t; }
}

void main()
{   int i,n,a[100];    //最多100个元素
    printf("请输入元素个数: ");
    scanf("%d",&n);
    printf("请输入%d个元素: ",n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    sort(a,n);
    printf("排序结果为:");
    for(i=0;i<n;i++)
        printf("%d  ",a[i]);
    printf("n");
}

19.fibonacci数列递归函数

#include<stdio.h>
int fib(int k)
{   int f;
    if(k==1) f=0;
    else if(k==2) f=1;
    else f=fib(k-1)+fib(k-2);
    return f;
}
void main()
{   int i,n;
    printf("请输入项数: ");
    scanf("%d",&n);
    printf("前%d项fibonacci数列为:",n);
    for(i=1;i<=n;i++)
        printf("%d  ",fib(i));
    printf("n");
}

20.输入一字符串,查找字符’k’

#include<stdio.h>
void main()
{   char a[100],*p=a;
    int flag=0;
    printf("请输入一个字符串: ");
    gets(a);
    while(*p!='')
    {    if(*p=='k')
         {  flag=1;  break;  }
         p++;
    }
    if(flag==1)  printf("已找到!n");
    else printf("没找到n");   
}

21.判断字符串是否回文

#include<stdio.h>
#include<string.h>
void main()
{   int hw(char *s);
    char s[80];
    printf("请输入一个字符串: ");      gets(s);
    if(hw(s))  printf("该字符串是回文!n");
    else  printf("该字符串不是回文!n");   
} 
int hw(char *s)
{   int flag=1;
    char *p,*q;
    for( p=s,q=s+strlen(s)-1 ; p<q ; p++,q-- )
         if(*p!=*q) {  flag=0;  break;  }
    return flag;
}

22.输出所有的水仙花数(水仙花数:153= 1^3+ 5^ 3+3^3)

#include <stdio.h>
int main()
{
    int i,j,k,n;
    for(i = 100;i < 1000;i++)
    {
        j = i%10;
        k = i/10%10;
        n = i/100;
        if(j*j*j + k*k*k + n*n*n == i)
            printf("%5dn",i);
    }
    return 0;
} 

23.输出数列2、3、5、8、…(从第三项开始,每一项为前两项的和)的前二十项,且每行显示五个数

#include <stdio.h>
void main()
{ int i,a1=2,a2=3,a3;
  printf("%6d%6d%6d",a1,a2);
  for(i=3;i<=20;i++)
  { a3=a1+a2;
  printf("%6d",a3);
  a1=a2;
  a2=a3;
  if(i%5==0)
    printf("n");
   }
}

24.兀/4=1-1/3+1/5-1/7+…+(-1)^(n-1)*(1/(2n-1)),求兀

#include <stdio.h>
#include <math.h>
void main()
{ double sum=0,pi,c=1,s=1;//c为当前项,s为符号位
  int n=1;
  while(fabs(c)>=1e-6)
  { sum=sum+c;
  s=-s;
  n++;
  c=s/(2*n-1);
  }
  pi=4*sum;
  printf("pi=%lfn",pi);
}

25.从键盘输入一个正整数,判断该数是否为素数

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

26.请输入m和n,求他们的最大公约数

#include <stdio.h>
void main()
{ int i,m,n;
  scanf("%d%d",&m,&n);
  for(i=m;i>=1;i--)
  { if(m%i==0 && n%i==0)
       break;
  }
 printf("最大公约数:%dn",i);
} 

27.百元买百鸡

#include <stdio.h>
void main()
{ int a,b,c; //a,b,c分别表示公鸡、母鸡和小鸡的数量
for(a=0;a<=19;a++)
  for(b=0;b<=33;b++)
  {
  c=100-a-b;
  if(5*a+3*b+b/3==100 && c%3==0)
    printf("公鸡:%d,母鸡:%d,小鸡:%dn",a,b,c);
  }
}

28.从键盘输入一个整数n,求1!+2!+3!+…+n!

#include <stdio.h>
void main()
{ int i,j,n;
  long p,sum=0;
  scanf("%d",&n);
  for(i=1;i<=n;i++)
  {
    p=1;
    for(j=1;j<=i;j++)
      p=p*j;
    sum=sum+p;
   }
   printf("计算结果为:%dn",sum);
 }

29.输入10个学生的成绩,求平均分、最高分和最低分

#include <stdio.h>
void main()
{ int i,sum=0,max=0,min=100,c[10];
  float ave;
  for(i=0;i<10;i++)
  { 
   scanf("%d",&c[i]);
   sum=sum+c[i];
   if(c[i]>max)
     max=c[i];
     if(c[i]<min)
       min=c[i];
   }
  ave=(float)sum/10;
  printf("平均分为:%f,最高分为:%d,最低分为:%dn",ave,max,min);
}  

30.求Fibonacci数列的前30个数,将其保存在数组中,并按每行6个数输出(Fibonacci:0,1,1,2,3,5,8,13,21,34,…)

#include <stdio.h>
void main()
{ int i;
  long f[30]={0,1};
  for(i=2;i<30;i++)
    f[i]=f[i-1]+f[i-2];
  for(i=0;i<30;i++)
  {
  if(i%6==0)
    printf("n");
  printf("%10d",f[i]);
  }
}

31.输入一个字符串,求该字符串的长度(例如:"VC"的长度为2)

#include <stdio.h>
void main()
{ char a[20];
  int i=0;
  scanf("%s",a);
  while(a[i]!='')
     i++;
  printf("%s的长度为:%dn",a,i);
}

32.从键盘输入一个字符串到字符数组a中,将其中的大写字母复制到另一个字符数组b中

#include <stdio.h>
void main()
{ char a[20],b[20];
  int i=0,j=0;//i和j分别为数组a和b的下标
  gets(a);
  while(a[i]!='')
  { 
    if(a[i]>='A' && a[i]<='Z')
    {
      b[j]=a[i];
      j++;
    }
    i++;
   }
   b[j]='';
   puts(b);
}
  

33.用递归法求n!

#include <stdio.h>
int fac(int n)
{ int f;
  if(n==1)
  f=1;
  else
  f=n*fac(n-1);
  return f;
}
void main()
{
  int n,c;
  printf("请输入n的值:");
  scanf("%d",&n);
  c=fac(n);
  printf("%d!=%dn",n,c);
}

34.编写一个将字符数组中所有小写字母转换成大写字母的函数,并在main()函数中调用该函数

#include <stdio.h>
void change(char b[10])
{
  int i=0;
  while(b[i]!='')
  {
  if(b[i]>='a' && b[i]<='z')
    b[i]=b[i]-32;
  i++;
  }
}
void main()
{
char a[10];
printf("请输入一个字符串:");
gets(a);
change(a);
printf("调用函数后数组a的值:");
puts(a);
}

35.输入一行字符,统计其中字母,数字,空格及其他字符的个数

#include <stdio.h>
int letter,digit,space,others;
void main()
{
	char str[1000];
	void count(char ch[]);
	printf("请输入一个字符串(<1000个字符):");
	gets(str);
	letter=0;
	digit=0;
	space=0;
	others=0;
	count(str);
	printf("字母:%dn 数字:%dn 空格:%dn 其他:%dn",letter,digit,space,others); 
 } 
void count(char ch[])
{
	int i=0;
	while(ch[i]!='')
	{
		if((ch[i]>='a' && ch[i]<='z')|| (ch[i]>='A' && ch[i]<='Z'))
		letter++;
		else if(ch[i]>='0' && ch[i]<='9')
		digit++;
		else if(ch[i]==' ')
		space++;
		else
		others++;
		i++;
		
	}
}

36.求x和y的最大值

#include <stdio.h>
void main()
{
  int x,y,max,*px,*py;
  px=&x;
  py=&y;
  printf("请输入两个整数:");
  scanf("%d%d",px,py);
  if(*px<*py)
    max=*py;
  else
  max=*px;
  printf("max=%dn",max);
}

37.编写实现两个整数交换的自定义函数swap(),要求形参采用指针变量,在main()函数中输入两个整数,调用swap()函数后输出结果

#include <stdio.h>
void main()
{
int m,n;
void swap(int *pm,int *pn);  
printf("请输入两个整数:");
scanf("%d%d",&m,&n);
printf("交换前:m=%d,n=%dn",m,n);//输出交换前两个实参的值
swap(&m,&n);//调用函数
printf("交换后:m=%d,n=%dn",m,n);//输出交换后两个实参的值
}
void swap(int *pm,int *pn)
{
int temp; 
temp=*pm;  
*pm=*pn;  
*pn=temp;
}

38.编写求数组所有元素的平均值的自定义函数,在main()函数中输入学生人数和每个学生的成绩,调用自定义函数后输出平均分

#include <stdio.h>
void main()
{
float score[100],ave;
int i,n;
float compute(float *a,int n);
printf("请输入学生人数:");
scanf("%d",&n);
printf("请输入学生成绩:");
for(i=0;i<n;i++)
scanf("%f", &score[i]);
ave=compute(score,n);
printf("学生平均成绩为:%5.2fn",ave);
}
float compute(float *p,int n)
{
float sum=0,ave;
int i;
for(i=0;i<n;i++)
 sum=sum+*(p+i);
ave=sum/n;
return ave;
}

39.求1+2+3+…+100的和

#include <stdio.h>
void main()
{
  int sum=0,i=1;
  do
  {  
     sum=sum+i;
     i=i+1;
  }while(i<=100);
  printf("sum=%dn",sum);
}

40.编程找出1000以内的所有完数(一个数如果恰好等于它的因子之和,这个数就称为“完数” 例如6=1+2+3)

#include <stdio.h>
main()
{
  static int k[10];
  int i,j,n,s;
  for(j=2;j<1000;j++)
    {
     n=-1;
     s=j;
     for(i=1;i<j;i++)
       {if((j%i)==0)
          {  n++;
             s=s-i;
             k[n]=i;
          }
       }
  if(s==0)
   {printf("%d是一个完数:  ",j);
    for(i=0;i<n;i++)
        printf("%d,",k[i]);
    printf("%dn",k[n]);
   }
}
}

<–精力有限,就先整理这么多–>
有错误的欢迎大家在评论区批评指正?
以上这些仅供大家参考,建议大家不要照搬照抄,这对提升自己的编程能力没有任何的作用,最主要的是去理解、明白为什么这么写。
多敲代码