Program3
任务1
任务1代码
#include<stdio.h>
#include<stdlib.h>
char score_to_grade(int score);
int main(){
int score;
char grade;
while(scanf("%d",&score)!=EOF){
grade=score_to_grade(score);
printf("分数:%d,等级:%c\n\n",score,grade);
}
return 0;
}
char score_to_grade(int score){
char ans;
switch(score/10){
case 10:
case 9: ans='A';break;
case 8: ans='B';break;
case 7: ans='C';break;
case 6: ans='D';break;
default: ans='E';
}
return ans;
}
任务1截图
Q1:score_to_garde作为一个函数讲分数转换成ABCDE字符等级;其中形参类型是,返回值类型是字符型常量。
Q2:(1)应用字符型常量应使用单引号;
(2)每个可能性后面应使用break函数,否则将全部运行一遍。
任务2
任务2代码
#include<stdio.h>
int sum_digits(int n);
int main(){
int n;
int ans;
while(printf("Enter n:"),scanf("%d",&n)!=EOF){
ans =sum_digits(n);
printf("n=%d,ans=%d\n\n",n,ans);
}
return 0;
}
int sum_digits(int n){
int ans=0;
while(n!=0){
ans+=n%10;
n/=10;
}
return ans;
}
任务2截图
Q1:sum_digits的功能是作为函数将每个位数上的数字求和;
Q2:能实现。原函数使用的是迭代,新的使用的是递归。
任务3
任务3代码
#include<stdio.h>
int power(int x, int y);
int main(){
int x,n;
int ans;
while(printf("Enter x and n:"),scanf("%d%d",&x,&n)!=EOF){
ans=power(x,n);
printf("n=%d,ans=%d\n\n",n,ans);
}
return 0;
}
int power(int x,int n){
int t;
if(n==0)
return 1;
else if(n%2)
return x*power(x,n-1);
else{
t=power(x,n/2);
return t*t;
}
}
任务3截图
Q1:计算一个数的乘方;
Q2:是递归函数;
任务4
任务4代码
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int is_prime(int n);
int main(){
int i,sum=0,j;
printf("100以内的孪生素数:");
for(i=2;i<=100;i++){
if(is_prime(i))
{j=i+2;
if(is_prime(j))
{printf("%d %d",i,j);
printf("\n");
sum++;}}
}
printf("100以内的孪生素数共有%d对",sum);
system("pause");
return 0;
}
int is_prime(int n){
int k;
for(k=2;k<=sqrt(1.0*n);k++)
if(n%k==0)
return 0;
return 1;
}
任务4截图
任务5
任务5代码
#include<stdio.h>
#include<stdlib.h>
int count=0;
void hanoi(int n,char from,char temp,char to);
void moveplate(int n,char from,char to);
int main()
{
int n;
while(scanf("%u",&n)!=EOF)
{count=0;
hanoi(n,'A','B','C');
printf("\n一共移动了%d次.\n",count);}
system("pause");
return 0;
}
void hanoi(int n,char from,char temp,char to)
{
if(n==1)
moveplate(n,from,to);
else
{
hanoi(n-1,from,to,temp);
moveplate(n,from,to);
hanoi(n-1,temp,from,to);
}
}
void moveplate(int n,char from,char to)
{
printf("%u:%c-->%c\n",n,from,to);
count++;
}
任务5截图
任务6
任务6代码
#include<stdio.h>
#include<stdlib.h>
int func(int n , int m );
int main(){
int n ,m;
int ans;
while(scanf("%d %d",&n ,&m )!=EOF)
{
ans = func(n, m);
printf("n=%d,m=%d,ans=%d\n\n",n,m,ans);
}
system("pause");
return 0;
}
int func(int n,int m){
int k;
if(m==0)
return 1;
if(n<m)
return 0;
else{
if(m==1)
return n;
k=func(n-1,m)+func(n-1,m-1);
return k;
}
}
#include<stdio.h>
#include<stdlib.h>
int func(int n , int m );
int main(){
int n ,m;
int ans;
while(scanf("%d %d",&n ,&m )!=EOF)
{
ans = func(n, m);
printf("n=%d,m=%d,ans=%d\n\n",n,m,ans);
}
system("pause");
return 0;
}
int func(int n,int m){
if (m > n)
return 0;
else if (m == 0 || m == n) return 1;
return func(n - 1, m) + func(n - 1, m - 1);
}
任务6截图
任务7
任务7代码
#include<stdio.h>
#include<stdlib.h>
int gcd(int a,int b,int c);
int main(){
int a,b, c,ans;
while(scanf("%d%d%d",&a,&b,&c)!=EOF){
ans = gcd(a,b,c);
printf("最大公约数:%d\n\n",ans);
}
system("pause");
return 0;
}
int gcd(int a ,int b , int c)
{
int i;
i=a<b?(a<c?a:c):(b<c?b:c);
for(;i>=1;i--){
if(a%1==0&&b%i==0&&c%i==0)
return i;}
return 1;
}
任务7截图