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

image

 问题1:函数score_to_grade的作用是按照分数划分等级(0-59:E,60-69:D,70-79:C,80-89:B,90-100:A)

问题2:如果修改代码,不管输入什么分数都会输出“等级:E”(如:输入90,依旧会显示等级为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;
}

image

 问题1:函数sum_digits的作用是计算输入数的每一位数相加的总和

问题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;
}
}

image

 问题1:函数power的作用是计算x的n次幂

问题2:函数power是递归函数

image

 实验任务4:

#include <stdio.h>
int is_prime(int i);

int main()
{
int s = 0;
printf("100以内的孪生素数:\n");
for (int i = 3; i <= 98; i++)
{
if (is_prime(i) == 1)
{
printf("%d %d\n",i,i+2);
s++;
}
}
printf("100以内的孪生素数有%d个", s);
}

int is_prime(int i)
{
int ans = 0;
int ans1 = 0;
int ans2 = 0;
int j = 2;
while (j < i && i % j != 0)
{
j++;
}
if (j == i)
{
ans1 = 1;
}
j = 2;
while (j < i+2 && (i+2) % j != 0)
{
j++;
}
if (j == i + 2)
{
ans2 = 1;
}
if (ans1 == 1 && ans2 == 1)
return 1;
else
return 0;
}

image

 实验任务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 a = 1 ;
// for (int i = 1; i <= m; i++)
// {
// a = a * (n + 1 - i) / i;
// }
// return a;
//}

int func(int n, int m)
{
if (n == 1||m == 0||n == m)
return 1;
if (m == 1)
return n;
if (m > n)
return 0;
return func(n - 1, m) + func(n - 1, m - 1);
}

image

 实验任务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;
min = a > b ? b : a;
min = min > c ? c : min;
for (int i = min; i > 0; i--)
{
if (a % i == 0 && b % i == 0 && c % i == 0)
{
return i;
}
}
}

image

 实验任务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); // 函数调用

return 0;
}
void print_charman(int n)
{
for (int i = 0; i < n ; i++)
{
for (int j = 0; j < i; j++)
{
printf("\t");
}
for (int k = (n - i) * 2 - 1; k > 0; k--)
{
printf(" O\t");
}
printf("\n");
for (int j = 0; j < i; j++)
{
printf("\t");
}
for (int k = (n - i) * 2 - 1; k > 0; k--)
{
printf("<H>\t");
}
printf("\n");
for (int j = 0; j < i; j++)
{
printf("\t");
}
for (int k = (n - i) * 2 - 1; k > 0; k--)
{
printf("I I\t");
}
printf("\n");
}
}

image

 

image

 

posted @ 2025-10-26 20:19  陈江流  阅读(2)  评论(0)    收藏  举报