题目:阶乘和函数
题目描述
设计一个计算阶乘和的函数,用于求1!+2!+...+n!并返回结果。
其中n是函数的参数。
程序的开始部分及main函数已经写好如下:
#include <stdio.h>
double factSum(int n);
int main(){
int n;
scanf("%d",&n);
printf("%.0f",factSum(n));
return 0;
}你只需完成所需函数并提交该函数的代码。请不要重复提交main函数。
输入描述
输入正整数n,测试数据保证n是正整数
输出描述
输出1!+2!+...+n!的结果
样例输入
5
样例输出
153
题解
double factSum(int n){
double sum=0;
double m;
for(int i=1;i<n+1;i++){
m=1;
for(int j=i;j>0;j--){
m*=j;
}
sum+=m;
}
return sum;
}
题目:矩阵平均值函数
题目描述
设计一个计算double型矩阵平均值的函数,该函数返回参数指定的矩阵的平均值。
main函数已经写好如下:
int main(){
int n;
scanf("%d",&n);
double a[n][5];
int i,j;
for(i=0;i<n;i++)
for(j=0;j<5;j++){
scanf("%lf",&a[i][j]);
}//函数调用,传递矩阵行数及数组名
double avg = avgArray(n,a);
printf("%.2f\n",avg);
return 0;
}
你只需完成所需函数并提交该函数的代码,其他代码已经写好。请不要重复提交main函数。
输入描述
第一行输入正整数n,测试数据保证n为正整数
接下来输入n行5列的所有数组元素
输出描述
输出二维数组的平均值,小数点后保留两位数字
样例输入
3
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
样例输出
4.00
题解
double avgArray(int n,double a[][5]){
double sum=0;
for(int i=0;i<n;i++){
for(int j=0;j<5;j++){
sum+=a[i][j];
}
}
double re=sum/n/5;
return re;
}
题目:查找次大(第二大)字符串函数
题目描述
设计一个函数,该函数用于查找n个(n大于等于3)字符串中的次大(第二大)字符串并返回其指针。
main函数已经写好如下:
int main(){
int n,i;
scanf("%d",&n);
getchar(); //处理掉输入n之后的换行符
char s[n][101];
for(i=0;i<n;i++)
gets(s[i]);
//调用函数,传递字符串的个数及二维数组名
char *pStr = findStr(n,s);
puts(pStr);
return 0;
}你只需完成所需函数并提交该函数的代码,其他代码已经写好,stdio.h和string.h已包含。请不要重复提交main函数。
输入描述
第一行输入正整数n,测试数据保证n大于等于3。
从第二行起分n行输入n个不同的字符串。
输出描述
输出n个字符串中第二大的字符串
样例输入
3
abc
abd
aba
样例输出
abc
题解
char *findStr(int n,char s[][101]){
char *max=s[0];
char *maxnd=s[1];
int p=0;
for(int i=0;i<n;i++){
if(strcmp(max,s[i])<0){
p=i;
max=s[i];
}
if(strcmp(maxnd,s[i])>0) maxnd=s[i];
}
for(int i=0;i<n;i++){
if(i==p) continue;
if(strcmp(maxnd,s[i])<0) maxnd=s[i];
}
return maxnd;
}
题目:找假币
题目描述
现在有n枚硬币,其中有一枚是假的,假的硬币比真币轻,但也只轻一点点,而假币和真币的外观是一模一样的,从外观上无法辨别硬币的真假,请写程序找出假币。
程序的要求:
必须使用递归调用函数实现
递归函数原型必须为:int findFakeCoin(int *p, int low, int high)
程序中必须包含函数:int getSum(int *p, int start, int end)
main函数已经写好,请编写程序剩余部分的代码并提交。
main函数如下:
int main()
{
int coins[N];
int m;
int index;
int getSum(int *p, int start, int end);
int findFakeCoin(int *p, int low, int high);
scanf("%d", &m);
for (int i = 0; i < m; ++i)
{
scanf("%d", &coins[i]);
}
index = findFakeCoin(coins, 0, m - 1);
printf("%d", index);
return 0;
}
输入描述
第一行为硬币的个数。
第二行为各个硬币的重量。
输出描述
输出数据为假币所在的位置。
样例输入
8
2 2 2 2 2 2 2 1
样例输出
7
题解
int getSum(int* p, int start, int end){
int sum = 0;
for (int i = start; i <= end; i++){
sum += *(p + i);
}
return sum;
}
int findFakeCoin(int* p, int low, int high){
if (low > high)return low;
int mid = low + (high - low) / 2;
if ((low + high) % 2 == 0){
int lsum = getSum(p, low, mid-1);
int rsum = getSum(p, mid + 1, high);
if (lsum < rsum) return findFakeCoin(p, low, mid - 1);
else if (lsum > rsum) return findFakeCoin(p, mid + 1, high);
else return mid;
}else{
int lsum = getSum(p, low, mid);
int rsum = getSum(p, mid + 1, high);
if (lsum < rsum) return findFakeCoin(p, low, mid);
else if (lsum > rsum) return findFakeCoin(p, mid + 1, high);
}
}
标签:24,11,return,函数,int,double,贵州大学,low,main
From: https://blog.csdn.net/2403_87165681/article/details/144223583