1、写一个求阶乘的函数,在主函数输入一个整数,并输出该整数的阶乘。
//
//功能描述 :阶乘
//返回值 :void
//编写日期 :2018年11月24日
//
#include "stdio.h"
long double jiecheng(long double n)
{
if (n==1||n==0)
{
return 1;
}
else
{
return n*jiecheng(n-1);
}
}
void main()
{
long double n,m;
printf("请输入需要求的阶乘\n");
scanf("%lf",&n);
m=jiecheng(n);
printf("%.0lf的阶乘为%.0lf\n",n,m);
}
2、用一个函数求一元二次方程(a,b,c三个系数)的根(提示可能:实根、等根、虚根),并输出结果。从主函数中输入a,b,c的值。
//
//功能描述 :求根
//返回值 :void
//编写日期 :2018年11月24日
//
#include "stdio.h"
#include "math.h"
void qiugen(int a,int b,int c,double *m,double *n)
{
*m=(-b+sqrt(b*b-4*a*c))/(2*a);
*n=(-b-sqrt(b*b-4*a*c))/(2*a);
}
void output(double *m,double *n)
{
if (*m==*n)
{
printf("有两个等根为 %lf\n",*m);
}
else
{
printf("两个不同的根为%.0lf %.0lf\n",*m,*n);
}
}
void main()
{
int a,b,c;
double x1,x2;
printf("请依序输入x二次方的系数,x一次方的系数和常数项\n");
scanf("%d%d%d",&a,&b,&c);
if (b*b-4*a*c<0)
{
printf("此方程有两个虚根\n");
}
else
{
qiugen(a,b,c,&x1,&x2);
output(&x1,&x2);
}
}
3、用一个函数完成四则运算中的四种运算,从主函数中输入两个整数以及运算符,并输出运算之后的结果。
//
//功能描述 :四则运算
//返回值 :void
//编写日期 :2018年11月26日
//
#include "stdio.h"
long double yunsuan(double a,char b,double c)
{
long double i;
switch (b)
{
case '+': i=a+c; break;
case '-': i=a-c; break;
case '*': i=a*c; break;
case '/': i=a/c; break;
}
return i;
}
void main()
{
double a,c;
char b;
printf("请输入表达式\n");
scanf("%lf%c%lf",&a,&b,&c);
printf("%lf%c%lf=%lf",a,b,c,yunsuan(a,b,c));
}
4、写一个判断闰年的函数,在主函数输入一个年份,并输出是否是闰年的信息。
//
//功能描述 :判断闰年
//返回值 :void
//编写日期 :2018年11月24日
//
#include "stdio.h"
void panduan (int year,int *m)
{
if (( year % 4 == 0 && year % 100 != 0 )||year % 400 == 0 )
{
*m = 1;
}
else
*m = 0;
}
void main()
{
int year ,n;
printf("请输入年份\n");
scanf("%d",&year);
panduan(year ,&n);
if ( n == 1 )
{
printf("%d是闰年\n",year);
}
else
{
printf("%d不是闰年\n",year);
}
}
5、写一个求圆面积的函数,在主函数输入圆的半径,并输出圆的面积。
//
//功能描述 :圆的面积
//返回值 :void
//编写日期 :2018年11月24日
//
#include "stdio.h"
#define m 3.1415926
void syuan(double r,long double *s)
{
*s = m * r * r;
}
void main()
{
double r;
long double n;
printf("请输入圆的半径\n");
scanf("%lf",&r);
syuan(r,&n);
printf("圆的面积为%lf\n",n);
}
6、猴子吃桃问题, 小猴摘了很多桃子,第一天吃了一半又多吃一个,第二天又吃掉余下的一半再多吃一个,以后每天早上都吃了前一天剩下的一半零一个。如此下去,到第十天只剩一个桃子可以吃。写一个求第x天剩余的桃子个数的函数。从主函数中输入具体的x值,并输出相应的桃子个数。
//
//功能描述 :有多少桃子
//返回值 :void
//编写日期 :2018年11月24日
//
#include "stdio.h"
int houzi(int n)
{
int i = 1;
if (n == 9||n==10)
{
return 1;
}
else
return 2 * ( houzi (n+1) + 1 );
}
void main()
{
int m;
printf("请输入需要求第几天的桃子数\n");
scanf("%d",&m);
while (m>10)
{
printf( "错误输入请重新输入\n");
scanf("%d",&m);
}
printf("%d\n",houzi (m));
}
7、m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指定的函数中。
函数接口如下:int fun(int score[],int m,int below[])
//
//功能描述 :求低于平均分的人数和分数
//返回值 :void
//编写日期 :2018年11月24日
//
#include "stdio.h"
int fun(int *score,int m,int *below)
{
double sum=0,aver;
int i,j=0;
for (i=0;(score+i)<=(score+m-1);i++)
{
sum+=*(score+i);
}
aver=sum/m;
for (i=0;(score+i)<=(score+m-1);i++)
{
if (*(score+i)<aver)
{
*(below+j)=*(score+i);
j++;
}
}
return j;
}
void main()
{
int score[200],m,below[200],i,l;
printf("请输入需要输入多少个人的成绩\n");
scanf("%d",&m);
printf("请输入他们的成绩\n");
for (i=0;i<m;i++)
{
scanf("%d",score+i);
}
l=fun (score,m,below);
printf("低于平均分的人数为%d人\n",l);
printf("低于平均分的分数为\n");
for (i=0;i<l;i++)
{
printf("%-3d",*(below+i));
}
printf("\n");
}
8、请编写函数void fun(int x,int pp[],int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。
函数接口如下:void fun(int x, int pp[ ], int *n)
//
//功能描述 :求奇数可以整除一个数的数
//返回值 :void
//编写日期 :2018年11月24日
//
#include "stdio.h"
void fun(int x,int *pp,int *n)
{
int i,j=0;
for (i=1;i<=x;i+=2)
{
if (x%i==0)
{
*(pp+j)=i;
j++;
}
}
*n=j;
}
void main()
{
int x,pp[100],n,i;
printf("请输入一个数\n");
scanf("%d",&x);
fun (x,pp,&n);
printf("这些奇数可以整除%d\n",x);
for (i=0;i<n;i++)
{
printf("%-3d",*(pp+i));
}
printf("\n");
}
9、请编写一个函数void fun(char *tt,int pp[]),统计在tt字符中"a"到"z"26个字母各自出现的次数,并依次放在pp所指的数组中。
函数接口如下:void fun(char *tt, int pp[])
//
//功能描述 :求字母a到z的个数
//返回值 :void
//编写日期 :2018年11月24日
//
#include "stdio.h"
void fun(char *tt,int *pp)
{
int i;
for (i=0;*(tt+i);i++)
{
if (*(tt+i)>='a'&&*(tt+i)<='z')
{
(*(pp+*(tt+i)-'a'))++;
}
}
}
void main()
{
char tt[200];
int pp[26]={0},i;
printf("请输入字符串\n");
gets(tt);
fun (tt,pp);
printf("字母a到z的个数依次为\n");
for (i=0;i<26;i++)
{
printf("%-3d",*(pp+i));
}
printf("\n");
}
10、请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。
函数接口如下:void fun(int m, int k, int xx[])
//
//功能描述 :求大于一个整数的素数
//返回值 :void
//编写日期 :2018年11月24日
//
#include "stdio.h"
void fun(int m, int k, int *xx)
{
int i,p,j=0;
for (i=m+1;j<k;i++)
{
for (p=2;p<i;p++)
{
if (i%p==0)
break;
}
if (p==i)
{
*(xx+j)=i;
j++;
}
}
}
void main()
{
int m,k,xx[1000],i;
printf("请依次输入整数m和个数k\n");
scanf("%d%d",&m,&k);
fun (m,k,xx);
printf("大于%d的%d个素数依次为\n",m,k);
for (i=0;i<k;i++)
{
printf("%-3d",*(xx+i));
}
printf("\n");
}
11、写一个逆序存放字符串的函数,在主函数中输入字符串,并输出逆序后的字符串。
//
//功能描述 :逆序存放字符串
//返回值 :void
//编写日期 :2018年11月24日
//
#include "stdio.h"
void nixu (char *l,char *k,int g)
{
int i;
*(k+g)='\0';
for (i=0;*(l+i);i++)
{
*(k+g-i-1)=*(l+i);
}
}
void main()
{
char l[1000],k[1000];
int i=0;
printf("请输入你的字符串\n");
gets(l);
while(*(l+i))
{
i++;
}
nixu (l,k,i);
puts(k);
}
12、利用递归函数调用方式,将主函数所输入的5个字符,以逆序打印输出。
//
//功能描述 :递归逆序
//返回值 :void
//编写日期 :2018年11月24日
//
#include "stdio.h"
void nixu (int p,char *l)
{
if (p>0&&p<=5)
{
printf("%c",*(l+p-1));
nixu (p-1,l);
}
}
void main()
{
int i;
char l[5];
printf("请输入五个字符\n");
for (i=0;i<5;i++)
{
scanf("%c",l+i);
}
printf("逆序后为\n");
nixu (5,l);
printf("\n");
}
13、编写函数fun,它的功能是:求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整数,并将他们保存在数组中,并统计这些数的个数。在主函数中输出这些数以及个数。
//
//功能描述 :1到100之内能被7或者11整除,但不能同时被7和11整除的所有整数
//返回值 :void
//编写日期 :2018年11月25日
//
#include "stdio.h"
void fun (int *q,int *a)
{
int i,j=0;
for (i=1;i<=100;i++)
{
if ((i%7==0||i%11==0)&&!(i%7!=0&&i%11!=0))
{
*(a+j)=i;
j++;
}
}
*q=j+1;
}
void main()
{
int a[100],i,n;
fun (&n,a);
printf("1到100之内能被7或者11整除,但不能同时被7和11整除的所有整数有%d个\n",n);
for (i=0;i<n-1;i++)
{
printf("%-3d",*(a+i));
}
printf("\n");
}
14、编写一个函数,实现在一个已经排好序的数组中插入一个数。在主函数中输入有序的数组,以及待插入的数,并输出插入该数之后的数组。
///
//功能描述 :按照原来的规律插入一个数
//返回值 :void
//编写日期 :2018年11月25日
#include "stdio.h"
void charu(int *a,int d)
{
int i=0,j;
while(d>*(a+i))
{
i++;
if(i==10)
break;
}
for(j=10;j>=i+1;j--)
{
*(a+j)=*(a+j-1);
}
*(a+i)=d;
}
void main()
{
int a[11]={1,8,11,15,56,78,89,95,100,120};
int d,k;
printf("排好序的数为\n");
for (k=0;k<10;k++)
{
printf("%-5d",*(a+k));
}
printf("\n");
printf("请输入需要插入的数\n");
scanf("%d",&d);
charu(a,d);
printf("插入后为\n");
for (k=0;k<=10;k++)
{
printf("%-5d",*(a+k));
}
printf("\n");
}
15、编写一个函数,实现一个二维数组的行列互换即矩阵的转置。在主函数中输入矩阵,并输出转置后的矩阵。
//
//功能描述 :转置矩阵
//返回值 :void
//编写日期 :2018年11月25日
//
#include "stdio.h"
void Change(int a[][100],int b[][100],int n,int m)
{
int i,j;
for (i=0;i<=n-1;i++)
{
for (j=0;j<=m-1;j++)
{
*(*(b+j)+i)=*(*(a+i)+j);
}
}
}
void main()
{
int a[100][100],b[100][100],m,n,i,j;
printf("请输入需要输入矩阵得行数和列数\n");
scanf("%d%d",&n,&m);
printf("请输入你的矩阵\n");
for (i=0;i<=n-1;i++)
{
for (j=0;j<=m-1;j++)
{
scanf("%d",*(a+i)+j);
}
}
Change(a,b,n,m);
printf("转置后的矩阵为\n");
for (i=0;i<=m-1;i++)
{
for (j=0;j<=n-1;j++)
{
printf("%-3d",*(*(b+i)+j));
}
printf("\n");
}
}
16、猴子吃桃问题, 小猴摘了很多桃子,第一天吃了一半又多吃一个,第二天又吃掉余下的一半再多吃一个,以后每天早上都吃了前一天剩下的一半零一个。如此下去,到第十天只剩一个桃子可以吃。写一个求从第1天到第10天剩余的桃子数目的函数(这十个值放入一维数组中)。在主函数中输出这十天的桃子个数。
//
//功能描述 :有多少桃子
//返回值 :void
//编写日期 :2018年11月25日
//
#include "stdio.h"
void houzi(int *a)
{
int i = 1,j=9;
*(a+10)=1;
*(a+j)=1;
for (;j>0;j--)
{
*(a+j-1)=2*((*(a+j))+1);
}
}
void main()
{
int a[11],i;
houzi (a);
for (i=0;i<=10;i++)
{
printf("第%d天还剩余%d个桃子\n",i,*(a+i));
}
}
17、请编写一个函数void fun(char a[],char[],int n),其功能是:删除一个字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。
函数接口如下:void fun(char a[],char b[], int n)
//
//功能描述 :删除一个字符串中指定下标的字符
//返回值 :void
//编写日期 :2018年11月25日
//
#include "stdio.h"
void fun(char *a,char *b,int *n)
{
int i,j;
for (j=0,i=0;*(a+i);i++)
{
if (i==*n)
continue;
*(b+j)=*(a+i);
j++;
}
*(b+j)='\0';
}
void main()
{
char a[1000],b[1000];
int n;
printf("请输入原来的字符串\n");
gets(a);
printf("请输入需要删除的字符的下标\n");
scanf("%d",&n);
fun (a,b,&n);
printf("删除后的字符串为\n");
puts (b);
}
18、请编写一个函数int fun(int *s,int t,int *k),将s数组中的最大元素的下标存放在k所指的储存单元中。
函数接口如下:void fun (int *s, int t, int *k)
//
//功能描述 :找出数组中最大的数的下标
//返回值 :void
//编写日期 :2018年11月25日
//
#include "stdio.h"
void fun (int *s, int t, int *k)
{
int i;
*k=0;
for (i=0;i<t;i++)
{
if (*(s+i)>*(s+(*k)))
*k=i;
}
}
void main()
{
int s[1000],k,t,i;
printf("请输入需要输入几个数\n");
scanf("%d",&t);
printf("请输入你的数组\n");
for (i=0;i<t;i++)
{
scanf("%d",s+i);
}
fun (s,t,&k);
printf("最大数的下标为%d\n",k);
}
19、写一个判断素数的函数,在主函数输入一个整数,并输出是否素数的信息
//
//功能描述 :判断素数
//返回值 :void
//编写日期 :2018年11月25日
//
#include "stdio.h"
void panduan (int n, int *t)
{
int i;
for (i=2;i<n;i++)
{
if (n%i==0)
break;
}
if (i==n)
*t=1;
else
*t=0;
}
void main()
{
int n,t;
printf("请输入需要判断的数\n");
scanf("%d",&n);
panduan (n,&t);
if (t==1)
{
printf("是素数\n");
}
else
{
printf("不是素数\n");
}
}
20、写两个函数,分别求两个正数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。两个正数由键盘输入。
///
//功能描述 :求最大公约数和最小公倍数
//返回值 :void
//编写日期 :2018年11月25日
#include "stdio.h"
int Gy(int a,int b)
{
int c;
while (a!=0)
{
c=b%a;
b=a;
a=c;
}
return b;
}
int Lcm(int a,int b)
{
int c;
c=b/a;
return c;
}
void main()
{
int a,b,c,s,d,t;
printf("请输入两个数\n");
scanf("%d%d",&a,&b);
if(a>b)
{
t=a,a=b,b=t;
}
s=a*b;
c=Gy(a,b);
d=Lcm(c,s);
printf("最大公约数为%d最小公倍数为%d\n",c,d);
}