实验三
实验任务一
代码
点击查看代码
#include<stdio.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;
}
截图

ans1:score_to_grade的功能是将输入的整数分数转化为对应的等级ABCD,形参类型是int,返回值类型是char
ans2:每个case分支后都缺少break;ABCD要用单引号
实验任务二
代码
点击查看代码
#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;
}
截图

ans1:sum_digits的功能是计算输入整数n的各位数字之和
ans2:能实现,原来的使用的是循环方式,新的使用的是递归的方式
实验任务三
代码
点击查看代码
#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;
}
}
截图

ans1:power的功能是计算x的n次幂
ans2:是

实验任务四
代码
点击查看代码
#include <stdio.h>
#include<stdlib.h>
int is_prime(int n);
int main() {
int count=0;
printf("100以内的孪生素数:\n");
for(int i=2;i+2<=100;i++){
if(is_prime(i)&&is_prime(i+2)){
printf("%d %d\n",i,i+2);
count++;
}
}
printf("100以内的孪生素数共有%d对\n",count);
system("pause");
return 0;
}
int is_prime(int n) {
if(n<2){
return 0;
}
for(int i=2;i*i<=n;i++){
if(n%i==0){
return 0;
}
}
return 1;
}
截图

实验任务五
代码
点击查看代码
#include<stdio.h>
#include<stdlib.h>
int count=0;
void hanoi(int n, char A,char B, char C) {
if(n==1){
count++;
printf("%d: %c --> %c\n",1,A,C);
}
else{
hanoi(n-1,A,C,B);
count++;
printf("%d: %c --> %c\n",n,A,C);
hanoi(n-1,B,A,C);
}
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
count=0;
hanoi(n,'A','B','C');
printf("一共移动了%d次.\n\n",count);
}
return 0;
}
截图

实验任务六
代码
迭代
点击查看代码
#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;
}
if(m==0||m==n){
return 1;
}
int a=1;
int b=1;
for(int i=1;i<=m;i++){
a*=(n-(m-i));
b*=i;
}
return a/b;
}
点击查看代码
#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);
}
截图

实验任务七
代码
点击查看代码
#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;
}
截图


浙公网安备 33010602011771号