实验三
task1:
#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,程序会一直运行直到score/10的结果符合default结果,在输出E。若去掉char ans,则程序上一个循环运行出的结果会被带到下一个循环并运行,影响最终结果。
task2:
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,能。第一种运用迭代算法,第二种运用递归算法。
task3:
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,是递归模式。
task4:
int is_prime(int n){
if(n==1) return 0;
if(n==2) return 1;
if(n%2==0) return 0;
for(int i=3;i*i<=n;i++){
if(n%i==0) return 0;
}
return 1;
}
int main(){
int count;
count=0;
printf("100以内的孪生素数:\n");
int n;
for(n=1;n<=100;n++){
if(is_prime(n)&&is_prime(n+2)){
printf("%d %d\n",n,n+2);
count++;
}
}
printf("100以内的孪生素数共有:%d个",count);
return 0;
}

task5:
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<m) return 0;
if(m==0||m==n) return 1;
int a=1,b=1;
int ans;
int i,j;
for(i=0;i<m;i++){
a*=(n-i);
}
for(j=0;j<m;j++){
b*=(m-j);
}
ans =a/b;
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<m) return 0;
if(m==0||m==n) return 1;
int ans;
ans=func(n-1,m)+func(n-1,m-1);
return ans;
}

task6:
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 i;
if(a<b&&a<c) i=a;
if(b<a&&b<c) i=b;
if(c<b&&c<a) i=c;
while(i!=0){
if((a%i==0)&&(b%i==0)&&(c%i==0)) {
return i;
break;
}
i--;
}
}

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


浙公网安备 33010602011771号