6-1 sdut-C语言实验-计算组合数
计算组合数。C(n,m),表示从n个数中选择m个的组合数。
计算公式如下:
若:m=0,C(n,m)=1
否则, 若 n=1,C(n,m)=1
否则,若m=n,C(n,m)=1
否则 C(n,m) = C(n-1,m-1) + C(n-1,m).
函数接口定义:
在这里描述函数接口。例如: int fun(int n,int m);
其中 n
和 m
都是用户传入的参数(0 <= m <= n <= 20)。
int fun(int n,int m){
int cheng;
int i;
int s=1;
int x=1;
if(m==0||n==1||m==n)return 1;
else return fun(n-1,m-1)+fun(n-1,m);
}
6-2 sdut-C语言实验- n个数的排序
Qiao当上了体育委员,现在老师让他去给班级里的人排队,Qiao刚学了排序,所以他想以这种方式给班级里的人排队(从矮到高),他想知道排序完成后的结果。
函数接口定义:
void sort(int *p,int n);
其中 p
和 n
都是用户传入的参数。 p
的值为传递过来的地址; n
的为正整数(1<=n<=100)。函数不需要返回数据。
void sort(int *p,int n){
int i,j,t;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(*(p+j)>=*(p+j+1)){
t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
}
}
6-3 sdut- C语言实验——矩阵下三角元素之和
输入一个正整数n(1<=n<=10),再输入n*n的矩阵,要求求该矩阵的下三角元素之和。
函数接口定义:
int f(int (*p)[10],int n);
其中 p
和 n
都是用户传入的参数。 p
的值为地址; n
是[1, 10]区间内的个位数。函数不需要返回数据。
int f(int (*p)[10],int n){
int i,j,sum;
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
sum+=p[i][j];
}
}
return sum;
}
6-4 sdut-C语言实验- N!
long long int f(long long int n)
{
long long int fac=1;
for(long long int i=1;i<=n;i++){
fac*=i;
}
return fac;
}
6-5 sdut-C语言实验-使用函数验证哥德巴赫猜想
本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。输入一个不小于6的偶数n,找出两个素数,使它们的和为n。注意:1不是素数,2是素数。
函数接口定义:
int isPrime( int x ); void Goldbach( int n );
int prime(int p)
{
int flag=1;
if(p==1) flag=0;
else
{
for(int i=2;i<=sqrt(p);i++)
{
if(p % i == 0)
{
flag=0;
break;
}
}
}
return flag;
}
void Goldbach( int n )
{
for(int i=2;i<n;i++)
{
if(prime(i)==1 && prime(n-i)==1 && i<=(n-i))
{
printf("%d=%d+%d",n,i,n-i);
break;
}
}
}
6-6 sdut-C语言实验- 求数列的和
列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。
提示:因为自定义函数中用到数学函数,因此本题目的提交答案需要包括头文件在内的主函数和自定义函数。
#include<stdio.h>
#include<math.h>
double f(int n,int m);
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m))
{
printf("%.2lf\n",f(n,m));
}
return 0;
}
double f(int n,int m)
{
double j=n,i;
double sum=0;
for(i=0;i<m;i++)
{
sum=sum+j;
j = sqrt(j);
}
return sum;
}
6-7 递归实现顺序输出整数
本题要求实现一个函数,对一个整数进行按位顺序输出。
函数接口定义:
void printdigits( int n );
函数printdigits
应将n
的每一位数字从高位到低位顺序打印出来,每位数字占一行。
void printdigits(int n){
if(n/10==0)printf("%d\n",n);
else {
printdigits(n/10);
printf("%d\n",n%10);
}
}