实验三
task_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;
}

ans1:score_to_grade的作用,将分数转换成对应的等级 形参类型为int,返回值的类型为char
an2: 1.由于ans是char的类型,所以等级要用‘’,2.缺少break,导致ans不管怎样,最后值都是E.
task_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;
}

ans1:sum_digits的功能是定义函数,将整数n的各位数字相加。
ans2:能实现相同的输出,上面的循环算法,下面的是递归算法
点击查看代码
int sum_digits(int n){
if(n<10)
return n;
return sum_digits(n/10)+n%10;
}
task_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;
}
}

ans1:power()的功能是计算x的n次幂
ans2: power是递归函数,其递归模式是

task4
点击查看代码
#include <stdio.h>
int classify_triangle(int a, int b, int c);
int main() {
int a, b, c;
while (scanf("%d%d%d", &a, &b, &c) != EOF) {
switch (classify_triangle(a, b, c)) {
case 0:
printf("不能构成三角形\n\n");
break;
case 1:
printf("普通三角形\n\n");
break;
case 2:
printf("等边三角形\n\n");
break;
case 3:
printf("等腰三角形\n\n");
break;
case 4:
printf("直角三角形\n\n");
break;
default:
printf("未知错误\n\n");
}
}
return 0;
}
int classify_triangle(int a, int b, int c) {
if (a + b <= c || a + c <= b || b + c <= a)
return 0;
if (a == b && b == c)
return 2;
int a2 = a * a, b2 = b * b, c2 = c * c;
if (a2 + b2 == c2 || a2 + c2 == b2 || b2 + c2 == a2)
return 4;
if (a == b || b == c || a == c)
return 3;
return 1;
}

task5
1.迭代
点击查看代码
#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 i;
int a1 = 1, a2 = 1, a3 = 1;
int a;
for(i=1;i<=n;i++){
a1*=i;
}
for(i=1;i<=m;i++){
a2*=i;}
for(i=1;i<=(n-m);i++){
a3*=i;
}
a=a1/a2/a3;
return a;
}

2.递归
点击查看代码
点击查看代码
#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 i;
int min = a;
if (b<min) min = b;
if (c<min) min = c;
for(i=min;i >= 1; i--){
if (a % i == 0 && b % i == 0 && c % i == 0)
return i;
}
}

task_7
点击查看代码
#include <stdio.h>
void print_charman(int n);
int main() {
int n;
printf("input n: ");
scanf("%d", &n);
print_charman(n);
return 0;
}
void print_charman(int n) {
int i,j ;
for ( i = 0; i < n; i++) {
int cnt = 2 * n - 1 - 2 * i;
int fs = ((2 * n - 1) - cnt) * 4 / 2;
for ( j = 0; j < fs; j++) {
printf(" ");
}
for ( j = 0; j < cnt; j++) {
printf(" O ");
}
printf("\n");
for ( j = 0; j < fs; j++) {
printf(" ");
}
for ( j = 0; j < cnt; j++) {
printf("<H> ");
}
printf("\n");
for ( j = 0; j < fs; j++) {
printf(" ");
}
for ( j = 0; j < cnt; j++) {
printf("I I ");
}
printf("\n");
}
}
浙公网安备 33010602011771号