第1关:计算圆的面积
问题描述
编写一个函数,函数的功能是根据指定的半径r,计算圆的面积S,圆周率π取值3.14。
主函数中由用户输入半径r,然后调用函数计算圆的面积并输出圆的面积。
输入
一个浮点数r,表示圆的半径。
输出
按照格式“半径为r的圆的面积为:s。”的格式输出圆的面积,其中r和s为实际的浮点数,保留2位小数。
输入示例
5.0
输出示例
半径为5.00的圆的面积为78.50。
提示
设计函数时重点关注函数自身的功能,而不要考虑整个
程序的功能。
1 2 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
提示
设计函数时重点关注函数自身的功能,而不要考虑整个
程序的功能。
1 2 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
提示
设计函数时重点关注函数自身的功能,而不要考虑整个程序的功能。
1 2 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.
提示
设计函数时重点关注函数自身的功能,而不要考虑整个程序的功能。
1 2 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
提示
设计函数时重点关注函数自身的功能,而不要考虑整个程序的功能。
1 2 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; }
|