wangchi12321

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

task 1:

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

问题一:⼀维int型数组x在内存中是连续存放的​​。数组名x的值(即数组首地址)与&x[0]在数值上完全相同。通过test1的输出可见,元素地址连续递增(例如每个地址相差4字节,假设sizeof(int)=4 ),且x的地址与x[0]地址一致。

问题二:

    1.⼆维int型数组x是按⾏连续存放的​​。通过test2的输出可见,第一行元素地址连续递增后,第二行元素地址紧随其后,且每行首地址差为N * sizeof(int)(如N=4时差16字节)。

    2.数组名xx[0]&x[0][0]的地址值在字⾯上相同​​,但类型不同:

x
      的类型是
int (*)[N]
    (指向⼀维数组的指针)
x[0]
      的类型是
int *
    (指向整型的指针)
&x[0][0]
      的类型是
int *
    (指向整型的指针)
3.x[0]
x[1]
      相差
N * sizeof(int)
      字节​​。例如,当
N=4
sizeof(int)=4
      时,差值为
4 * 4 = 16
    字节。这一差值表示⼀⾏数据的字节长度,即​​二维数组中每⾏的存储跨度​​。

task 3:

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

问题一:输入数组;求均值;

task 3:

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

 

task 4:

#include <stdio.h>
#define N 100

double median(int x[], int n);
void input(int x[], int n);

int main(){
    int x[N];
    int n;
    double ans;
    
    while(printf("Enter n: "), scanf("%d", &n) != EOF){
        input(x,  n);
        ans = median(x, n);
        printf("ans = %g\n\n", ans);
    }
    
    return 0;
}

double median(int x[], int n){
    int i, j;
     
    for(i = 0; i < n-1; i++)
        for(j = 0; j < n-i-1; j++)
            if(x[j] > x[j+1]){
                int temp = x[j];
                x[j] = x[j+1];
                x[j+1] = temp;
            }
        printf("\n");
        
    if(n % 2) 
        return x[n/2];
    else
        return (x[n/2-1] + x[n/2])/2.0;
}

void input(int x[], int n){
    int i;
    
    for(i=0; i < n; ++i) 
        scanf("%d", &x[i]);
}

task5:

 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 void rotate_to_right(int x[][N], int n);
 7 
 8 int main(){
 9     int x[N][N];
10     int n;
11     
12     printf("Enter n: ");
13     scanf("%d", &n);
14     input(x, n);
15     
16     printf("原始矩阵:\n");
17     output(x, n);
18     rotate_to_right(x, n);
19     
20     printf("变换后矩阵:\n");
21     output(x, n);
22     
23     return 0; 
24 }
25 
26 void input(int x[][N], int n) {
27     int i, j;
28     
29     for (i = 0; i < n; ++i) {
30         for (j = 0; j < n; ++j)
31             scanf("%d", &x[i][j]);
32     }
33 }
34 
35 void output(int x[][N], int n) {
36     int i, j;
37     
38     for (i = 0; i < n; ++i) {
39         for (j = 0; j < n; ++j)
40             printf("%4d", x[i][j]);
41         printf("\n");
42     }
43 }
44 
45 void rotate_to_right(int x[][N], int n){
46     int i, j;
47     
48     for (i = 0; i < n; ++i) {
49         int temp = x[i][n-1];  
50         for (j = n-1; j > 0; --j)
51             x[i][j] = x[i][j-1];  
52         x[i][0] = temp; 
53     }
54 }

task 6:

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 void dec_to_n(int x, int n);
 5 
 6 int main(){
 7     int x;
 8     
 9     while(printf("输入十进制整数:"), scanf("%d", &x) != EOF){
10         dec_to_n(x, 2);
11         dec_to_n(x, 8);
12         dec_to_n(x, 16);
13         
14         printf("\n");
15     }
16     
17     return 0;
18 }
19 
20 void dec_to_n(int x, int n){
21     int i, d;
22     char map[] = "0123456789ABCDEF";
23     
24     int count = 0;
25     char a[N];
26     
27     do{
28         i = x%n;
29         d = x/n;
30         a[count]    = map[i];
31         count++;    
32         x=d;
33     }while(x > 0);
34     
35     for (--count;count >= 0; --count) {
36         printf("%c", a[count]);
37     }
38     printf("\n"); 
39     
40 }

 

posted on 2025-04-20 23:46  卡希勒  阅读(4)  评论(0)    收藏  举报