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)。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
int fun(int n,int m);
int main()
{
int t,n,m,i;
scanf("%d",&t);
for(i=1;i<=t;i++)
{
scanf("%d %d",&n,&m);
printf("%d\n",fun(n,m));
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:
3
2 1
3 2
4 0
输出样例:
在这里给出相应的输出。例如:
2
3
1
int fun(int n,int m)
{
if(m==0)
return 1;
else if(n==1)
return 1;
else if(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)。函数不需要返回数据。
裁判测试程序样例:
#include <stdio.h>
void sort(int *p,int n);
int main()
{
int a[100];
int n,i;
int *p1;
while(scanf("%d",&n)!=EOF)
{
for(p1=a; p1<a+n; p1++)
scanf("%d",p1);
sort(a,n);
for(i=0; i<n-1; i++)
printf("%d ",a[i]);
printf("%d\n",a[n-1]);
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
多组输入,每组的第一行是一个正数n(1<=n<=100),第二行是n个数,表示每一个人的高度。比如:
3
176 175 174
输出样例:
174 175 176
void sort(int a[100],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[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]区间内的个位数。函数不需要返回数据。
裁判测试程序样例:
#include<stdio.h>
int f(int (*p)[10],int n);
int main()
{
int n,i,j,sum;
int a[10][10];
scanf("%d",&n);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
scanf("%d",&a[i][j]);
}
}
sum=f(a,n);
printf("%d",sum);
return 0;
}
/* 请在这里填写答案 */
输入样例:
5
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
输出样例:
75
int f(int a[10][10],int n)
{
int i,j,sum=0;
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
sum=sum+a[i][j];
}
}
return sum;
}
6-4 sdut-C语言实验- N!
给出两个数 n, m。求
和
。
计算公式:
输入数据有多组(数据组数不超过 250),到 EOF 结束。
对于每组数据,输入两个用空格隔开的整数 n, m (0 <= m <= n <= 20) 。
对于每组数据输出一行,
和
,用空格隔开。
提醒:因为n!和 m! 数据较大,定义数据类型应用 long long int,输出格式%lld
函数接口定义:
long long int f(long long int n);
其中 n
是用户传入的参数。函数须返回n!的值。
裁判测试程序样例:
#include <stdio.h>
long long int f(long long int n);
int main()
{
long long int n,m,i;
while(~scanf("%lld %lld",&n,&m))
{
long long int a,c;
a=f(n)/f(n-m);
c=f(n)/f(n-m)/f(m);
printf("%lld %lld\n",a,c);
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:
1 1
5 3
4 3
输出样例:
在这里给出相应的输出。例如:
1 1
60 10
24 4
long long int f(long long int n)
{
long long int i,x=1;
for(i=1;i<=n;i++)
{
x=x*i;
}
return x;
}
6-5 sdut-C语言实验-使用函数验证哥德巴赫猜想
本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。输入一个不小于6的偶数n,找出两个素数,使它们的和为n。注意:1不是素数,2是素数。
函数接口定义:
int isPrime( int x ); void Goldbach( int n );
其中函数isPrime当用户传入参数x为素数时返回1,否则返回0;函数Goldbach按照格式“n=p+q”输出n的素数分解,其中p≤q均为素数。又因为这样的分解不唯一(例如24可以分解为5+19,还可以分解为7+17),要求必须输出所有解中p最小的解。
裁判测试程序样例:
#include <stdio.h>
int isPrime( int x );
void Goldbach( int n );
int main()
{
int n;
scanf("%d",&n);
if(n%2==0)
Goldbach( n );
return 0;
}
/* 请在这里填写答案 */
输入样例:
80
输出样例:
80=7+73
int isPrime(int p)
{
int flag=1,i;
if(p==1)
flag=0;
else
{
for(i=2;i<=p-1;i++)
{
if(p%i==0)
{
flag=0;
break;
}
}
}
return flag;
}
void Goldbach(int n)
{
int i;
for(i=2;i<n;i++)
{
if(isPrime(i)&&isPrime(n-i))
{
printf("%d=%d+%d",n,i,n-i);
break;
}
}
}
6-6 sdut-C语言实验- 求数列的和
数列的定义如下: 数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。
提示:因为自定义函数中用到数学函数,因此本题目的提交答案需要包括头文件在内的主函数和自定义函数。
函数接口定义:
double s(double n,int m);
其中 n
和 m
都是用户传入的参数。 n
的值不超过double
的范围; m
的值不超过int的范围。函数须返回数列前m项的和。
提示:本题需要在自定义函数中使用sqrt()数学函数,因此在填写答案时需要提交完整的程序,既题目已经给定的代码部分和需要填写的答案部分。
裁判测试程序样例:
#include <stdio.h>
#include <math.h>
double s(double n,int m);
int main()
{
int a,b,m,i;
double sum,n;
while (scanf("%lf %d",&n,&m)!=EOF)
{
sum=s(n,m);
printf("%.2lf\n",sum);
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
81 4
2 2
输出样例:
94.73
3.41
#include <stdio.h>
#include <math.h>
double s(double n,int m);
int main()
{
int n,m;
double sum;
while (scanf("%d %d",&n,&m)!=EOF)
{
sum=s(n,m);
printf("%.2lf\n",sum);
}
return 0;
}
double s(double n,int m)
{
double i;
double x=0;
for(i=0;i<m;i++)
{
x=x+n;
n=sqrt(n);
}
return x;
}
6-7 递归实现顺序输出整数
本题要求实现一个函数,对一个整数进行按位顺序输出。
函数接口定义:
void printdigits( int n );
函数printdigits
应将n
的每一位数字从高位到低位顺序打印出来,每位数字占一行。
裁判测试程序样例:
#include <stdio.h>
void printdigits( int n );
int main()
{
int n;
scanf("%d", &n);
printdigits(n);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
12345
输出样例:
1
2
3
4
5
void printdigits(int n)
{
if(n<=9)
printf("%d\n",n);
else
{
printdigits(n/10);
printf("%d\n",n%10);
}
}