实验3
实验3
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;
}
-
运行截图:
![image]()
-
问题回答:
1.判断输入分数的范围;形参类型为整形;返回值为字符型
2.case被穿透,返回值不匹配
task2:
- 源代码:
#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;
}
-
运行截图:
![image]()
-
问题回答:
1.将输入的数字各位相加,输出综合
2.可以,一种为迭代,一种是递归
task3:
- 源代码:
#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;
}
}
-
运行截图:
![image]()
-
问题回答:
1.计算x的n次幂
2.是,![7a26ea2e37e76b3282d8176d55580269_720]()
- a.正确,把t省略,逻辑没有改变
b.原来的性能更强,经过该函数后所有的计算都被重复计算一次,原本6次,改后47次
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){
int k=classify_triangle(a,b,c);
if(k==0){
printf("不能构成三角形\n");
}
else if(k==1){
printf("普通三角形\n");
}
else if(k==2){
printf("等边三角形\n");
}
else if(k==3){
printf("等腰三角形\n");
}
else if(k==4){
printf("直角三角形\n");
}
}
return 0;
}
int classify_triangle(int a,int b,int c){
int sign;
for(int i=0;i<5;i++){
if(a+b<=c||a+c<=b||b+c<=a||a<=0||b<=0||c<=0){
sign=0;
}
else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a){
sign=4;
}
else if(a==b&&b==c&&a==c){
sign=2;
}
else if(a==b||b==c||a==c){
sign=3;
}
else{
sign=1;
}
}
return sign;
}
-
运行截图:
![image]()
-
问题回答:
task5:
- 源代码:
a:
#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 first=1;
int sec=1;
for(int i=n;i>n-m;i--)
first*=i;
for(int i=1;i<=m;i++)
sec*=i;
return first/sec;
}
b:
#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||m==0){
return 1;
}
else if(m>n){
return 0;
}
else if(m==1){
return n;
}
else{
return func(n-1,m)+func(n-1,m-1);
}
}
-
运行截图:
a:
![image]()
b:
![image]()
-
问题回答:
task6:
- 源代码:
#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;
if(b<min){
min=b;
}
if(c<min){
min=c;
}
for(int i=min;i>0;i--){
if(a%i==0&&b%i==0&&c%i==0){
return i;
}
}
return 0;
}
-
运行截图:
![image]()
-
问题回答:
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){
if(n!=0){
int max=1;
for(int i=1;i<n;i++){
max+=2;
}
int cnt=0;
for(int i=0;i<n;i++){
for(int k=0;k<cnt;k++){
printf(" ");
}
for(int j=0;j<max-2*i;j++){
printf(" O ");
printf(" ");
}
printf("\n");
for(int k=0;k<cnt;k++){
printf(" ");
}
for(int j=0;j<max-2*i;j++){
printf(" <H> ");
printf(" ");
}
printf("\n");
for(int k=0;k<cnt;k++){
printf(" ");
}
for(int j=0;j<max-2*i;j++){
printf(" I I ");
printf(" ");
}
printf("\n");
cnt++;
}
}
}
-
运行截图:
![image]()
![image]()
![image]()
-
问题回答:












浙公网安备 33010602011771号