6-1 递归求Fabonacci数列
分数 5
全屏浏览题目
切换布局
作者 C课程组
单位 浙江大学
本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:
f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。
函数接口定义:
int f( int n );
函数f
应返回第n
个Fabonacci数。题目保证输入输出在长整型范围内。建议用递归实现。
裁判测试程序样例:
#include <stdio.h> int f( int n ); int main() { int n; scanf("%d", &n); printf("%d\n", f(n)); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
6
输出样例:
8
1. int f( int n ) 2. { 3. if(n<=1) 4. { 5. return n; 6. } 7. else 8. { 9. return f(n-2)+f(n-1); 10. } 11. }
6-2 求一组数中的最大值、最小值和平均值
分数 5
全屏浏览题目
切换布局
作者 王跃萍
单位 东北石油大学
编写函数,求一组数中的最大值、最小值和平均值。
函数接口定义:
float fun(int a[],int n,int *max,int *min);
其中 a
、n
、max
和 min
都是用户传入的参数。函数求a
数组中n
个元素的最大值、最小值和平均值。最大值和最小值分别通过max
和 min
带回,函数返回平均值 。
裁判测试程序样例:
#include <stdio.h> float fun(int a[],int n,int *max,int *min); int main() { int x[10],i,m,n; float p; for(i=0;i<10;i++) scanf("%d",&x[i]); p=fun(x,10,&m,&n); printf("max=%d,min=%d,average=%.2f\n",m,n,p); return 0; } /* 请在这里填写答案 */
输入样例:
2 5 4 8 6 9 1 3 7 0
输出样例:
max=9,min=0,average=4.50
1. float fun(int a[],int n,int *max,int *min) 2. { 3. double sum; 4. int j=0; 5. int k=0; 6. for(int i=0;i<n;i++) 7. { 8. sum=sum+a[i]; 9. if(a[i]>a[j]) 10. { 11. j=i; 12. } 13. if(a[i]<a[k]) 14. { 15. k=i; 16. } 17. } 18. double avg=sum/n; 19. *max=a[j]; 20. *min=a[k]; 21. return avg; 22. }
6-3 歌唱比赛打分
分数 7
全屏浏览题目
切换布局
作者 周强
单位 青岛大学
某歌唱比赛计分规则是:对于评委给出的分数,去掉一个最高分,去掉一个最低分,剩余分数求算术平均值并保留2位小数,作为选手最终得分。
本题要求实现这样一个计分函数。
评委给出的分数存在数组中,分数均为0~100
之间的整数,并且保证评委人数在3~20
之间。
函数接口定义:
double getScore(int *score, int total);
其中score
和total
是传入的参数,score
是评委打分数组的首地址,total
是评委人数;
函数将选手的得分以double
类型返回,注意:函数返回的分数只需保证小数点后至少2位精确数字即可,打印2位小数得分的操作由函数调用者进行。
裁判测试程序样例:
/* 此测试程序仅为示例,实际的测试程序可能不同,不要仅针对样例的输入和输出编写函数,而是要根据题意要求编写函数 */ #include <stdio.h> double getScore(int *score, int total); int main(){ int score[5] = {92, 90, 99, 95, 98}; /* 仅为示例,实际的测试程序中,数组大小和元素数值都可能与样例不同 */ printf("%.2f\n", getScore(score, 5) ); /* getScore( )函数只负责返回分值,由main函数中的代码负责按照2位小数打印输出 */ return 0; } /* 你所编写的函数代码将被嵌在这里,注意:不要提交你编写的用于测试的main( )函数,否则无法通过编译 */
输入样例:
对于本题给出的裁判测试程序样例,没有输入。实际的裁判程序可能有输入。
输出样例:
1. 对于本题给出的裁判测试程序样例,只有一行输出如下。实际的裁判程序可能有其他输出情况。 2. 95.00
1. double getScore(int *score, int total) 2. { 3. long int max=-1,min=101; 4. long double sum=0; 5. for(int i=0;i<total;i++) 6. { 7. if(max<score[i]) 8. { 9. max=score[i]; 10. } 11. if(min>score[i]) 12. { 13. min=score[i]; 14. } 15. } 16. for(int i=0;i<total;i++) 17. { 18. sum=sum+score[i]; 19. } 20. return (sum-max-min)/(total-2); 21. }
6-4 学生成绩比高低
分数 8
全屏浏览题目
切换布局
作者 周强
单位 青岛大学
学生结构体定义如下:
1. struct Student{ 2. int sid; 3. int C; 4. int English; 5. };
其中sid
是学号,C
是C语言课程成绩,English
是英语课程成绩。学生的成绩按照这样的规则比较:
- 先比较两门课的总成绩,总成绩高的为优;
- 若总成绩相同,再比较C语言成绩,C语言成绩高的为优;
- 若C语言成绩也相同,则说明两名学生成绩相等。
编写函数实现成绩的比较。
函数接口定义:
int compareScore(const struct Student *s1, const struct Student *s2);
其中s1
和s2
是传入的参数,分别指向两名学生的结构体变量。函数返回值为int
型,
- 若
s1
所指学生成绩优于s2
所指学生,返回1
; - 若
s2
所指学生成绩优于s1
所指学生,返回-1
; - 若两学生成绩相等,返回
0
。
裁判测试程序样例:
/* 此测试程序仅为示例,实际的测试程序可能不同。 注意:实际的测试程序可能有多组输入、进行多次比较,输入格式也有可能不同, 因此不要针对测试程序样例编写代码,而应当编写符合题目要求的函数 */ #include <stdio.h> struct Student{ int sid; int C; int English; }; int compareScore(const struct Student *s1, const struct Student *s2); int main(){ struct Student zs, ls; scanf("%d%d%d", &zs.sid, &zs.C, &zs.English); scanf("%d%d%d", &ls.sid, &ls.C, &ls.English); int r; r = compareScore(&zs, &ls); if(r < 0) printf("Less\n"); else if(r > 0) printf("Greater\n"); else printf("Equal\n"); return 0; } /* 你所编写的函数代码将被嵌在这里 */
输入样例1:
对于样例测试程序的输入格式:
1. 1 95 90 2. 2 90 91
输出样例1:
对于样例测试程序的输出格式:
Greater
输入样例2:
对于样例测试程序的输入格式:
1. 1 90 95 2. 2 95 90
输出样例2:
对于样例测试程序的输出格式:
Less
1. int compareScore(const struct Student *s1, const struct Student *s2) 2. { 3. if(s1->C+s1->English>s2->C+s2->English) 4. { 5. return 1; 6. } 7. else if(s1->C+s1->English<s2->C+s2->English) 8. { 9. return -1; 10. } 11. else 12. { 13. if(s1->C>s2->C) 14. { 15. return 1; 16. } 17. else if(s1->C<s2->C) 18. { 19. return -1; 20. } 21. else 22. { 23. return 0; 24. } 25. } 26. }