实验三
test 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;
}
截图:

问题一:将分数转化为等级制;
问题二:没有break语句终止,ans的赋值始终为E;
字符类型常量用' ' 来界定,题中使用的是双引号;
test 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;
}
截图:

问题一:该数每个数位上的数字之和;
问题二:能;第一种就是普通循环运算;
第二种就是递归迭代,最后得到一个能够摆脱迭代的值;
test 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;
}
}
截图:

问题一:计算x的n次幂;
问题二:是;
n = 0时,power(x,n)=1;
n%2=0时,power(x,n)=power(x,n/2)*power(x,n/2);
n%2≠0时,power(x,n)=x*power(x,n-1);
test 4
代码:
#include<stdio.h>
#include<stdlib.h>
int is_prime(int i);
int main(){
int sum=0,i;
printf("100以内的孪生素数:\n");
for(i =2;i<100;++i){
if(is_prime(i)&&is_prime(i+2)){
printf("%d %d\n",is_prime(i),is_prime(i+2));
++sum;
}
}
printf("100以内的孪生素数共有%d个",sum);
system("pause");
return 0;
}
int is_prime(int i){
int f;
for(f = 2;f <=i/2;++f){
if(i%f == 0)
break;}
if(f>i/2)
return i;
return 0;
}
截图:

小结:
- 把i打成1了,而且一开始的考虑很复杂,多先思考!
test 5
代码:
#include<stdio.h>
#include<stdlib.h>
void hanoi(unsigned int n,char from,char temp,char to);
void moveplate(unsigned int n,char from,char to);
int i=0;
int main(){
unsigned n;
while(scanf("%u",&n)!=EOF)
{
i=0;
hanoi(n,'A','B','C');
printf("\n一共移动了%d次\n",i);
}
system("pause");
return 0;
}
void hanoi(unsigned int n,char from,char temp,char to){
if(n == 1)
moveplate(n,from,to);
else
{
hanoi(n-1,from,to,temp);
moveplate(n,from,to);
hanoi(n-1,temp,from,to);
}
}
void moveplate(unsigned int n,char from,char to){
printf("%u:%c-->%c\n",n,from,to);
i++;
}
截图:

test 6
代码:
#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){
double up=1,down=1;
int i;
if(m==0)
return 1;
for(i=n;i>=(n-m+1);--i)
up*=i;
for(i=m;i>=1;--i)
down*=i;
return up/down;
}
截图:

代码二:
#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(m==0||m==n)
return 1;
else if(m>n)
return 0;
else
return func(n-1,m)+ func(n-1, m-1);
}
截图:

test 7
代码:
#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,min=a;
if(min>b)
min=b;
if(min>c)
min=c;
for(i=min;i>=1;--i){
if(a%i==0&&b%i==0&&c%i==0){ break; }
}
return i;
}
// 函数定义
// 待补足...
截图:


浙公网安备 33010602011771号