第1关:计算圆的面积
问题描述
编写一个函数,函数的功能是根据指定的半径r,计算圆的面积S,圆周率π取值3.14。
主函数中由用户输入半径r,然后调用函数计算圆的面积并输出圆的面积。
输入
一个浮点数r,表示圆的半径。
输出
按照格式“半径为r的圆的面积为:s。”的格式输出圆的面积,其中r和s为实际的浮点数,保留2位小数。
输入示例
5.0
输出示例
半径为5.00的圆的面积为78.50。
提示
设计函数时重点关注函数自身的功能,而不要考虑整个
程序的功能。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | #include <stdio.h>
 #define PI 3.14
 
 float GetArea(float r);
 
 int main() {
 
 float r;
 float s;
 scanf("%f",&r);
 s=GetArea(r);
 printf("半径为%.2f的圆的面积为%.2f。",r,s);
 return 0;
 }
 
 float GetArea(float r) {
 
 return PI*r*r;
 }
 
 | 
 第2关:排列与组合
问题描述
请分别设计并编写三个函数,分别实现以下功能:
函数1:用于计算非负整数n的阶乘,注意0! = 1! = 1。
函数2:根据排列公式计算排列Amn。
函数3:根据组合公式计算组合Cmn。
其中,排列A和组合C的计算公式如下:
,
主函数中由用户输入两个非负整数m和n(为确保在计算阶乘的过程中不会产生溢出,假定用户输入的m和n值不会超过15),调用函数计算并输出排列Amn和组合Cmn的值。
输入
用一个空格分开的两个两个非负整数m和n,输入数据保证0≤n≤m≤15。
输出
参照示例分两行分别输出排列和组合的值。
输入示例
5 2
输出示例
A(5,2)=20
C(5,2)=10
提示
设计函数时重点关注函数自身的功能,而不要考虑整个
程序的功能。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 
 | #include<stdio.h>int GetFactorial(int n);
 int GetArray(int m,int n);
 int GetCombine(int m,int n);
 int main(){
 int m,n,Array,Combine;
 scanf("%d %d",&m,&n);
 Array=GetArray(m,n);
 Combine=GetCombine(m,n);
 printf("A(%d,%d)=%d\nC(%d,%d)=%d",m,n,Array,m,n,Combine);
 return 0;
 }
 int GetFactorial(int n){
 int i,Factorial=1;
 if(n!=0&&n!=1){
 for(i=2;i<=n;i++){
 Factorial*=i;
 }
 }
 return Factorial;
 }
 int GetArray(int m,int n){
 return GetFactorial(m)/GetFactorial(m-n);
 }
 int GetCombine(int m,int n){
 return GetFactorial(m)/(GetFactorial(n)*GetFactorial(m-n));
 }
 
 | 
 第3关:费波拉契数列
问题描述
设计并编写一个函数,用迭代的方法计算费波拉契数列的第n(n≥1)项。
主函数中读入由用户输入的整数n,利用循环反复调用函数计算并输出费波拉契数列的前n项。
输入
一个正整数n(n≥1)。
输出
分n行输出费波拉契数列的前n项。
输入示例
5
输出示例
Fib(1) = 1
Fib(2) = 1
Fib(3) = 2
Fib(4) = 3
Fib(5) = 5
提示
设计函数时重点关注函数自身的功能,而不要考虑整个程序的功能。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 | #include<stdio.h>void GetFib(int n);
 int main(){
 int n;
 scanf("%d",&n);
 GetFib(n);
 return 0;
 }
 void GetFib(int n){
 int i;
 int Fn=0,F1=1,F2=1;
 for(i=0;i<n;i++){
 if(i==0||i==1)
 printf("Fib(%d) = %d\n",i+1,F1);
 else{
 Fn=F1+F2;
 printf("Fib(%d) = %d\n",i+1,Fn);
 F1=F2;
 F2=Fn;
 }
 }
 }
 
 | 
 第4关:加密字符串
问题描述
请设计并编写一个函数,用于加密单个字符,字符加密的规则是:
对于任意的字母(包括大写和小写字母)字符,替换为其后的第3个字母,如a替换为d,而x则替换为a,y替换为b,z替换为c;
对于非字母字符,不作任何处理。
主函数中使用循环依次读取用户输入的一行字符(“\n”是单行输入的结束标记),调用函数加密后输出加密后的字符。
提示:每次循环过程中只处理其中的单个字符。
输入
一行字符串。
输出
加密后的一行字符串。
输入示例
I went to the zoo with Marry last Sunday.
输出示例
L zhqw wr wkh crr zlwk Pduub odvw Vxqgdb.
提示
设计函数时重点关注函数自身的功能,而不要考虑整个程序的功能。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 
 | #include <stdio.h>#include <string.h>
 #include <stdlib.h>
 char* encrypt(char str[100]);
 int main(){
 char str[100],str1[100];
 char ch;
 int i=0;
 while((ch=getchar())!='\n'){
 str[i]=ch;
 i++;
 }
 str[i]='\0';
 strcpy(str1,encrypt(str));
 for(i=0;str1[i]!='\0';i++){
 putchar(str1[i]);
 }
 return 0;
 }
 char* encrypt(char str[100]){
 int i=0;
 while(str[i]!='\0'){
 if(str[i]>='a' && str[i]<='w'||str[i]>='A' && str[i]<='W'){
 str[i]+=3;
 }
 else if(str[i]>='x' && str[i]<='z'||str[i]>='X' && str[i]<='Z'){
 str[i]=str[i]-('x'-'a');
 }
 i++;
 }
 return str;
 }
 
 | 
 第5关:水仙花数
问题描述
水仙花数是指一个三位数,其百位数、十位数和个位数的立方和就等于该数本身,例如153就是一个水仙花数,因为13+53+33=153。
请设计并编写一个函数,其功能是判定一个整数是否是水仙花数。
主函数中负责找到并输出所有的水仙花数。
输入
无。
输出
输出所有的水仙花数,每两个水仙花数之间用一个空格分开。
输入示例
无。
输出示例
153 370 371 407
提示
设计函数时重点关注函数自身的功能,而不要考虑整个程序的功能。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 | #include <stdio.h>#include <math.h>
 int judgenum(int num){
 int i,a,b,c;
 a=num/100;
 b=num%100/10;
 c=num%10;
 if(pow(a,3)+pow(b,3)+pow(c,3)==num)
 return 1;
 else
 return 0;
 }
 int main(){
 int i;
 for(i=100;i<=999;i++){
 if(judgenum(i)){
 printf("%d ",i);
 }
 }
 return 0;
 }
 
 |