实验3

task1:

Q1:将分数转为等第;整型;字符型

Q2:没有break,输出等第后将自动向下运行;字符型变量用单引号

task2:

Q1:将输入中各个数字之和算出

Q2:这种算法使用迭代思想,原算法使用自然语言

task3:

Q1:计算x的n次方

Q2:是;

 if(n == 0)
    return 1;
  else if(n % 2)
    return x * power(x, n-1);
  else {
    t = power(x, n/2);
    return t*t;

t^2=t*t

task4:

 1 #include<stdio.h>
 2 #include<math.h>
 3 int is_prime(int n){
 4     int i;
 5     for(i=2;i<n;i++){
 6         if(n%i==0){
 7         return 0;
 8         break;}
 9     }
10     return 1;
11 }
12 int main(){
13     int i=0;
14     int n=1;
15     printf("100以内的孪生素数:\n");
16     for(n=2;n<100;n++){
17         if(is_prime(n)==1&&is_prime(n+2)==1){
18         
19         printf("%d %d\n",n,n+2);
20         i++;}
21     }
22     printf("100以内的孪生素数共有%d个",i);
23     return 0;
24 }

task5:

 1 #include<stdio.h>
 2 int i=0;
 3 void hanoi(int n,char from,char temp,char to){
 4     extern int i;
 5     if(n==1){
 6         printf("%d:%c-->%c\n",n,from,to);
 7         i+=1;}
 8     else{
 9         hanoi(n-1,from,to,temp);
10         printf("%d:%c-->%c\n",n,from,to);
11         i+=1;
12         hanoi(n-1,temp,from,to);
13     }
14     
15 }
16 int main(){
17     int n;
18     while(scanf("%d",&n)!=EOF){
19         extern int i;
20         hanoi(n,'a','b','c');
21         
22         printf("一共移动了%d次\n",i);
23         i=0;
24         }
25     return 0;
26 }

 task6:

6.1迭代

 1 #include <stdio.h>
 2 int func(int n, int m);   // 函数声明
 3 
 4 int main() {
 5     int n, m;
 6     int ans;
 7 
 8     while(scanf("%d%d", &n, &m) != EOF) {
 9         ans =func(n, m);   // 函数调用
10         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
11     }
12         
13     return 0;
14 }
15 
16 // 函数定义
17 // 迭代
18 int func(int n, int m){
19     
20     
21     if(m==0||n==m)
22         return 1;
23     
24     else if(n<m)
25         return 0;
26     
27     else {
28     
29     int i,j,k;
30     int down1=1,down2=1,up=1;
31         
32         for(i=1;i<=m;i++){
33             down1=i*down1;}
34             
35         for(j=1;j<=n-m;j++){
36             down2=j*down2;}        
37             
38         for(k=1;k<=n;k++){
39             up=k*up;}
40             
41         return (up/down1/down2);
42     }

6.2递归

 1 #include <stdio.h>
 2 int func(int n, int m);   // 函数声明
 3 
 4 int main() {
 5     int n, m;
 6     int ans;
 7 
 8     while(scanf("%d%d", &n, &m) != EOF) {
 9         ans = func(n, m);   // 函数调用
10         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
11     }
12         
13     return 0;
14 }
15 
16 // 函数定义
17 // 递归
18 int func(int n, int m){
19     if(m==0||n==m)
20         return 1;
21     else if(n<m)
22         return 0;
23     else{
24         return func(n-1,m)+func(n-1,m-1);
25     }
26 }

task7:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 void print_charman(int n);
 4 void head(int x);
 5 void body(int x);
 6 void leg(int x);
 7 int main()
 8 {
 9     int n;
10     printf("Enter n:");
11     scanf("%d", &n);
12     print_charman(n);
13     system("pause");
14     return 0;
15 }
16 int j, cnt = 0;
17 void print_charman(int n) {
18     int i;
19     for (i = n; i >= 1; i--) {
20         int x = (2 * i)- 1;
21         head(x);
22         body(x);
23         leg(x);
24         cnt++;
25     }
26 
27 }
28 
29 void head(int x) {
30     int i;
31     for (j = 1; j <= cnt; j++) {
32         printf("\t");
33     }
34     
35     for (i = 1; i <= x; i++) {
36         printf(" O \t");
37     }
38     printf("\n");
39 }
40 void body(int x) {
41     int i;
42     for (j = 1; j <= cnt; j++) {
43         printf("\t");
44     }
45     
46     for (i = 1; i <= x; i++) {
47         printf("<H>\t");
48     }
49     printf("\n");
50 
51 }
52 void leg(int x) {
53     int i;
54     for (j = 1; j <= cnt; j++) {
55         printf("\t");
56     }
57     
58     for (i = 1; i <= x; i++) {
59         printf("I I\t");
60     }
61     printf("\n");
62 }

 

posted @ 2024-10-26 22:41  jjjrrhhhhh  阅读(7)  评论(0编辑  收藏  举报