实验3作业
任务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
字符ABCDE应用单引号引用,在case 9~case 6语句后都没有break;
任务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);
}
}
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>
#include<stdlib.h>
int is_prime(int n);
int main()
{
int n,x=0;
printf("100以内的孪生素数:\n");
for(n=2;n<=100;n++)
{
if(is_prime(n)&&is_prime(n+2))
{
printf("%d %d\n",n,n+2);
x++;
}
}
printf("100以内的孪生素数共有%d个",x);
system("pause");
return 0;
}
int is_prime(int n)
{
int i;
for(i=2;i<=n/2;i++)
{
if(n%i==0)
break;
}
if(i>n/2)
return 1;
else
return 0;
}

任务5
迭代方式:
#include<stdio.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);
}
return 0;
}
int func(int n,int m)
{
int ans1=1,ans2=1,ans,i,j;
for(i=n-m+1;i<=n;i++)
ans1=ans1*i;
for(j=1;j<=m;j++)
ans2=ans2*j;
ans=ans1/ans2;
return ans;
}

递归方式:
#include<stdio.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);
}
return 0;
}
int func(int n,int m)
{
if(n==1&&m>1||n==0)
return 0;
if(n==1&&m<=1||m==0)
return 1;
return func(n-1,m)+func(n-1,m-1);
}

任务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 t,m,n,i;
if(a<b&&a<c)
{
t=a;
m=b;
n=c;
}
if(b<a&&b<c)
{
t=b;
m=a;
n=c;
}
if(c<a&&c<b)
{
t=c;
m=a;
n=b;
}
for(i=t;i>=1;i--)
{
if(m%i==0&&n%i==0&&t%i==0)
break;
}
return i;
}

任务7
#include<stdio.h>
#include<stdlib.h>
void print_charman(int n);
int main()
{
int n;
printf("Enter n: ");
scanf("%d",&n);
print_charman(n);
system("pause");
return 0;
}
void print_charman(int n)
{
int i,j,k,p,q;
for(p=n;p>=1;p--)
{
for(q=1;q<=(n-p);q++)
printf("\t");
for(i=1;i<=2*p-1;i++)
printf(" O \t");
printf("\n");
for(q=1;q<=(n-p);q++)
printf("\t");
for(j=1;j<=2*p-1;j++)
printf("<H>\t");
printf("\n");
for(q=1;q<=(n-p);q++)
printf("\t");
for(k=1;k<=2*p-1;k++)
printf("I I\t");
printf("\n");
}
}



浙公网安备 33010602011771号