实验作业4

实验1

 1 #include <stdio.h>
 2 #define N 4
 3 #define M 2
 4 void test1() {
 5     int x[N] = { 1,9,8,4 };
 6     int i;
 7 
 8     printf("sizeof(x)=%d\n", sizeof(x));
 9     for (i - 0; i < N; ++i)
10     {
11         printf("%p: %d\n", &x[i], x[i]);
12         printf("x=%p\n", x);
13     }
14 }
15 void test2() {
16     int x[M][N] = { {1,9,8,4},{2,0,4,9} };
17     int i, j;
18     printf("sizeof(x)=%d\n", sizeof(x));
19     for (i = 0; i < M; ++i)
20     {
21         for (j = 0; j < N; ++j)
22         {
23             printf("%p: %d\n", &x[i][j], x[i][j]);
24         }
25 
26 
27     }
28     printf("\n");
29     printf("x=%p\n", x);
30     printf("x[0]=%p\n", x[0]);
31     printf("x[1]=%p\n", x[1]);
32     printf("\n");
33 
34 }
35 int main() {
36     printf("测试1: int型一维数组\n");
37     test1();
38 
39     printf("\n测试2: int型二维数组\n");
40     test2();
41     return 0;
42 }
View Code

image

问题一:是连续的;值是一样的。

问题二:是连续的;值是相同的;差12个字节;表示x[][N]中N的个数。

 实验2

 1 #include <stdio.h>
 2 #define N 100
 3 void input(int x[], int n);
 4 double compute(int x[], int n);
 5 
 6 int main() {
 7     int x[N];
 8     int n, i;
 9     double ans;
10     while (printf("Enter n: "), scanf("%d", &n) != EOF) {
11         input(x, n);
12         ans = compute(x, n);
13         printf("ans=%.2f\n\n", ans);
14     }
15     return 0;
16 }
17 void input(int x[], int n) {
18     int i;
19     for (i = 0; i < n; ++i)
20     {
21         scanf("%d", &x[i]);
22 
23     }
24 }
25 double compute(int x[], int n) {
26     int i, high, low;
27     double ans;
28     high = low = x[0];
29     ans = 0;
30     for (i = 0; i < n; ++i) {
31         ans += x[i];
32         if (x[i] > high)
33         {
34             high = x[i];
35         }
36         else if (x[i] < low)
37         {
38             low = x[i];
39         }
40     }
41     ans = (ans - high - low) / (n - 2);
42     return ans;
43 }
View Code

Screenshot_20251111155059

问题一:形参是intx[];int n;int i  而实参是x和n。

问题二:input的功能是多组输入;compute是去掉一个最高数和一个最小数后取平均值。

实验3

 1 #include <stdio.h>
 2 #define N 100
 3 void output(int x[][N], int n);
 4 void init(int x[][N], int n, int value);
 5 int main() {
 6     int x[N][N];
 7     int n, value;
 8     while (printf("Enter n and value: "), scanf("%d%d", &n, &value) != EOF) {
 9         init(x, n, value);  
10         output(x, n);
11         printf("\n");
12     }
13     return 0;
14 }
15 
16 void output(int x[][N], int n) {
17     int i, j;
18     for (i = 0; i < n; ++i) {
19         for (j = 0; j < n; ++j)
20             printf("%d ", x[i][j]);
21         printf("\n");
22     }
23 }
24 
25 void init(int x[][N], int n, int value) {
26     int i, j;
27     for (i = 0; i < n; ++i)
28         for (j = 0; j < n; ++j)
29             x[i][j] = value;
30 }
View Code

Screenshot_20251111155845

问题一:形参为int x[][N];int n;int i,j  而实参为x,n。

问题二:不能。

问题三:output将x[][N]按列表输出;init对二维数组x[][N]赋予value的值。

实验4

 1 #include <stdio.h>
 2 #define N 100
 3 double median(int x[], int n);
 4 void input(int x[], int n);
 5 void bubbleSort(int x[], int n);
 6 
 7 int main() {
 8     int x[N];
 9     int n;
10     double ans;
11     while (printf("Enter n: "), scanf("%d", &n) != EOF) {
12         input(x, n);
13         bubbleSort(x,n);
14         ans = median(x, n);
15         printf("ans=%g\n\n", ans);
16     }
17     return 0;
18 }
19 void input(int x[], int n) {
20     int i;
21     for (i = 0; i < n; ++i)
22     {
23         scanf("%d", &x[i]);
24     }
25 }
26 
27 
28 double median(int x[], int n) {
29    
30     
31     if (n % 2 == 0)
32     {
33         return (x[n / 2] + x[n / 2 - 1]) / 2+0.5;
34     }
35     else
36     {
37         return x[n / 2];
38     }
39 }
40 void bubbleSort(int x[], int n) {
41     int i, j, temp;
42     int isSwap;
43     for (i = 0; i < n-1; i++) {
44         isSwap = 0; 
45         for (j = 0; j < n -1- i; j++) {
46             if (x[j] > x[j + 1]) {  
47                 temp = x[j];
48                 x[j] = x[j + 1];
49                 x[j + 1] = temp;
50                 isSwap = 1;  
51             }
52         }
53         if (isSwap == 0) {
54             break;
55         }
56     }
57 }
View Code

Screenshot_20251111164440

实验5

 1 #include <stdio.h>
 2 #define N 100
 3 int m[N][N];
 4 void input(int x[][N], int n);
 5 void output(int x[][N], int n);
 6 void rotate_to_right(int x[][N], int n);
 7 int main() {
 8     int x[N][N];
 9     int n;
10     printf("Enter n: ");
11     scanf("%d", &n);
12     input(x, n);
13     printf("原始矩阵:\n");
14     output(x, n);
15     rotate_to_right(x,n);
16     for (int i = 0; i < n; i++)
17     {
18     for (int j = 0; j < n; j++)
19     {
20         x[i][j] = m[i][j];
21         }
22     }
23     printf("变换后矩阵:\n");
24     output(x, n);
25     return 0;
26 }
27 // 函数定义
28 // 功能: 输入一个n*n的矩阵x
29 void input(int x[][N], int n) {
30     int i, j;
31     for (i = 0; i < n; ++i) {
32         for (j = 0; j < n; ++j)
33             scanf("%d", &x[i][j]);
34     }
35 }
36 // 函数定义
37 // 功能: 输出一个n*n的矩阵x
38 void output(int x[][N], int n) {
39     int i, j;
40     for (i = 0; i < n; ++i) {
41         for (j = 0; j < n; ++j)
42             printf("%4d", x[i][j]);
43         printf("\n");
44     }
45 }
46 void rotate_to_right(int x[][N], int n)
47 {
48     int j,i;
49     
50     for ( i = 0; i < n; i++)
51     {
52         m[i][0]=x[i][n-1];
53         for ( j = 0; j < n-1; j++)
54         {
55             m[i][j+1]=x[i][j];
56         }
57     }
58 }
View Code

Screenshot_20251111172239

实验6

 1 #include <stdio.h>
 2 #define N 100
 3 void dec_to_n(int x, int n); 
 4 int main() {
 5     int x;
 6     while (printf("输入十进制整数: "), scanf("%d", &x) != EOF) {
 7         dec_to_n(x, 2);
 8         printf("\n");
 9         dec_to_n(x, 8);
10         printf("\n");
11         dec_to_n(x, 16);
12         printf("\n");
13     }
14     return 0;
15 }
16 void dec_to_n(int x, int n)
17 {
18     int m[N];
19     int i;
20     for ( i = 0; x > 0; i++)
21     {
22         m[i]= x % n;
23         x /= n;
24 
25     }
26     i--;
27     for (i; i >= 0; i--)
28     {
29         if (m[i] > 9)
30         {
31             switch (m[i])
32             {
33             case 10:printf("A"); break;
34             case 11:printf("B"); break;
35             case 12:printf("C"); break;
36             case 13:printf("D"); break;
37             case 14:printf("E"); break;
38             case 15:printf("F"); break;
39             }
40         }
41         else
42         {
43             printf("%d", m[i]);
44         }
45     }
46 
47 }
View Code

Screenshot_20251111174516

 

实验7

 1 #include <stdio.h>
 2 #define N 100
 3 // 函数声明
 4 void input(int x[][N], int n);
 5 void output(int x[][N], int n);
 6 int is_magic(int x[][N], int n);
 7 int main() {
 8     int x[N][N];
 9     int n;
10     while (printf("输入n: "), scanf("%d", &n) != EOF) {
11         printf("输入方阵:\n");
12         input(x, n);
13         printf("输出方阵:\n");
14         output(x, n);
15         if (is_magic(x, n))
16             printf("是魔方矩阵\n\n");
17         else
18             printf("不是魔方矩阵\n\n");
19     }
20     return 0;
21 }
22 // 函数定义
23 // 功能: 输入一个n*n的矩阵x
24 void input(int x[][N], int n) {
25     int i, j;
26 
27     for (i = 0; i < n; ++i) {
28         for (j = 0; j < n; ++j)
29             scanf("%d", &x[i][j]);
30     }
31 }
32 // 功能: 输出一个n*n的矩阵x
33 void output(int x[][N], int n) {
34     int i, j;
35     for (i = 0; i < n; ++i) {
36         for (j = 0; j < n; ++j)
37             printf("%4d", x[i][j]);
38         printf("\n");
39     }
40 }
41 // 功能: 判断一个n阶方阵是否为魔方矩阵,如果是,返回1,否则,返回0
42 int is_magic(int x[][N], int n)
43 {
44     int high[N] = { 0 };
45     int line[N] = { 0 };
46     int i, j,z=0,y=0;
47     for(i=0;i<n;i++)
48     {
49         for(j=0;j<n;j++)
50         {
51             if(x[0][0]==x[i][j]&&i!=0&&j!=0)
52             {
53                 return 0;
54             }
55         }
56     }
57     for ( i = 0; i < n; i++)
58     {
59         for ( j = 0; j < n; j++)
60         {
61             line[i] += x[i][j];
62         }
63     }
64     for ( j = 0; j < n; j++)
65     {
66         for ( i = 0; i < n; i++)
67         {
68             high[j] += x[i][j];
69         }
70     }
71     for (i=0,j=0;i<n;i++,j++)
72     {
73         y += x[i][j];
74         z += x[i][n - 1 - j];
75     }
76     if (z != y)
77     {
78         return 0;
79     }
80     for (i = 0; i < n; i++)
81     {
82         if (line[i] != high[i] || line[i] != y)
83             return 0;
84 
85     }
86     return 1;
87 
88 }
View Code

Screenshot_20251111193352

 实验8

#include <stdio.h>
#define N 100
int func();
int main()
{
    printf("%d", func());
    return 0;
}
int func() {
    int n, m, x, y, t ,X,Y;
    int a[N] ;
    int b[N] ;
    for (int i = 47;; i++)
    {
        t = 0;
        n = i * i;
        m = i * i * i;
        for ( x = 0; m> 0; x++)
        {
            a[x] = m % 10;
            m /= 10;
        }
        for (y = 0; n > 0; y++)
        {
            b[y] = n % 10;
            n /= 10;
        }
        X = --x;
        Y = --y;
        for (x=X; x >=0; x--)
        {
            for (y=Y;y>=0;y--)
            {
                if (a[x] == b[y])
                {
                    t = 1;
                    break;
                }
            }
            if (t)
            {
                break;
            }
        }
        for(x=0;x<=X;x++)
            for (int i = x+1; i<=X; i++)
            {
                if (a[x] == a[i])
                {
                    t = 1;
                    break;
                }
                if (t)
                {
                    break;
                }
            }
        for (y = 0; y <=Y; y++)
            for (int i = y+1; i<=Y; i++)
            {
                if (b[y] == b[i])
                {
                    t = 1;
                    break;
                }
                if (t)
                {
                    break;
                }
            }
        if (!t)
        {
            return i;
        }

    }

}
View Code

Screenshot_20251111210032

 

posted @ 2025-11-11 21:01  哈气的大猫  阅读(11)  评论(1)    收藏  举报