实验三
实验1
点击查看代码
#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;
}

问题1:将成绩按等第输出。形参是整形,返回值是字符。
问题2:单个字符应该用单引号,缺少break导致ans始终赋值为E。
实验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;
}

问题1:求一个数字各位数码之和。
问题2:能,迭代从简单到复杂,递归从复杂到简单。
实验3
点击查看代码
#include<stdio.h>
int power(int x,int n);
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;
}
}

问题1:计算x的n次幂。
问题2:

实验4
点击查看代码
#include<stdio.h>
int su(int n){
int i;
if(n==1)return 0;
if(n==2||n==3) return 1;
else if(n%2==0) return 0;
for(i=3;i<n;i++){
if(n%i==0){return 0;
break;
}
}
if(n==i) return 1;
}
int main(){printf("100以内的孪生素数:\n");
int t=0;
for(int i=1;i<99;i+=2){
if(su(i)&&su(i+2)){
printf("%d %d\n",i,i+2);t++;}
}
return 0;
}

实验5
点击查看代码
#include<stdio.h>
int func(int m,int n);
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);
}
return 0;
}
int func(int n,int m){
if(n<m)return 0;
else if(n==m||m==0) return 1;
else return func(n-1,m)+func(n-1,m-1);
}
/*int func(int n,int m){
int t=1;
if(n<m)return 0;
else if(n==m||m==0)return 1;
else{for(int i=n;i>n-m;i--){
t*=i;
}
for(int i=1;i<=m;i++){
t/=i;
}
}
return t;
}*/

实验6
点击查看代码
#include<stdio.h>
int gcd(int a,int b, int c);
int main(){
int a,b,c;
int ans;
while(scanf("%d%d%d",&a,&b,&c)!=EOF){
ans=gcd(a,b,c);
printf("最大公约数:%d\n\n",ans);
}
return 0;
}
int gcd(int a,int b,int c){
int min=a,ans;
if(a>b)min=b;
if(a>c)min=c;
for(int i=1;i<min;i++){
if(a%i==0&&b%i==0&&c%i==0)ans=i;
}
return ans;
}

实验7
点击查看代码
#include<stdio.h>
#include<stdlib.h>
void printf_charman(int n);
int main(){
int n;
printf("Enter n:");
scanf("%d",&n);
printf_charman(n);
return 0;
}
void printf_charman(int n){
int m=n;
while(n--){
for(int i=1;i<m-n;i++)printf("\t"); for(int i=0;i<2*n+1;i++)printf(" O \t");printf("\n");
for(int i=1;i<m-n;i++)printf("\t"); for(int i=0;i<2*n+1;i++)printf("<H>\t");printf("\n");
for(int i=1;i<m-n;i++)printf("\t"); for(int i=0;i<2*n+1;i++)printf("I I\t");printf("\n");
}
}


浙公网安备 33010602011771号