任务1:

#include<stdio.h>
#define N 4
#define M 2

void test1()
{
int x[N]={1,9,8,4}    ;
int i;
printf("sizeof(x) = %d\n", sizeof(x));


for (i = 0; i < N; ++i)
{
    
printf("%p: %d\n", &x[i], x[i]);

}
printf("x = %p\n", x);
}
void test2()
{
    int x[M][N] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
int i, j;
    
    for (i = 0; i < M; ++i)    
for (j = 0; j < N; ++j)

printf("%p: %d\n", &x[i][j], x[i][j]);
printf("\n");
printf("x = %p\n", x);
printf("x[0] = %p\n", x[0]);
printf("x[1] = %p\n", x[1]);
printf("\n");

}
int main()
{
    
printf("测试1: int型一维数组\n");
test1();
printf("\n测试2: int型二维数组\n");
test2();
    
}

问题1:

一维数组x是连续存放的。x代表它对应的值,&x[0]代表他的地址

问题2:是“按行连续存放的”,x,x[0],&x[0]字面上不一样,差值是十六是因为x的数据的大小是16

 

任务2;

#include <stdio.h>
#define N 100
// 函数声明
void input(int x[], int n) 
{ int i;
for(i = 0; i < n; ++i)
scanf("%d", &x[i]);
}
double compute(int x[], int n) 
{    
int i, high, low;
double ans;
high = low = x[0];
ans = 0;
for(i = 0; i < n; ++i) 
{
ans += x[i];
if(x[i] > high)
high = x[i];
else if(x[i] < low)
low = x[i];
}
ans = (ans - high - low)/(n-2);
return ans;
}
int main() {
int x[N];
int n, i;
double ans;
while(printf("Enter n: "), scanf("%d", &n) != EOF) {
input(x, n); 
ans = compute(x, n); 
printf("ans = %.2f\n\n", ans);
}
return 0;
}

 

问题1:作为形参的时候是x[i],作为实参的时候是&x[i]

问题2:input的作用是将数组中的数一一赋值用于后续使用

compute的作用是去掉一个最大的数和最小的数然后将剩余的数求平均值

 

任务3:

#include <stdio.h>
#define N 100
void output(int x[][N], int n) {
int i, j;
for(i = 0; i < n; ++i) {
for(j = 0; j < n; ++j)
printf("%d ", x[i][j]);
printf("\n");
}
}
void init(int x[][N], int n, int value) 
{
int i, j;
for(i = 0; i < n; ++i)
for(j = 0; j < n; ++j)
x[i][j] = value;
}

int main() {
int x[N][N];
int n, value;
while(printf("Enter n and value: "), scanf("%d%d", &n, &value) != EOF) {
init(x, n, value); 
output(x, n); 
printf("\n");
}
return 0;
}

 

问题1:第二维不可以省略

问题2:output的作用是将一个二维数组输出

init的作用是给这个数组的每一个元素赋一个相同的值

任务4:

#include<stdio.h>
#define N 100

float median(int x[],int n)
{
    float as;
    int i,j;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-i+1;j++)
        {
        int temp=0;
        if(x[j]>x[j+1])
        {
            temp=x[j];
            x[j]=x[j+1];
            x[j+1]=temp;
        }    
        }
        if(n%2==0)
        {
            as=(x[n/2]+x[n/2+1])/2;
        }
        else
        {
            as=x[n/2+1];
        }
    }
    
    
return as;    
}
void input(int x[],int n)
{   int i;
    for(i=0;i<n;i++)
    {   int d=0;
        scanf("%d" , &d);
        x[i]=d;
    }
}
void pr(int x[],int n){
    
    for(int i=0;i<n;i++)
    {
         printf("&d",&x[i]);
     }
}
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);
     pr(x,n);
    }
return 0;

}

 任务5:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 100

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

    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < n; ++j)
            printf("%4d", x[i][j]);
        printf("\n");
    }
}
void rotate_to_right(int x[][N], int n)
{
    int c;
    int r;
    int a[N];
    for (r = 0; r < n; r++)
    {
        a[r] = x[r][n - 1];
    }
    for (c = n - 2; c >= 0; c--)
    {
        for (r = 0; r < n; r++)
        {
            x[r][c + 1] = x[r][c];
        }
    }
    for (r = 0; r < n; r++)
    {
        x[r][0] = a[r];
    }
}

int main() {
         int x[N][N];
         int n;
     printf("输入n: ");
     scanf("%d", &n);
     input(x, n);
    printf("原始矩阵:\n");
      output(x, n);
      rotate_to_right(x, n);
    printf("变换后矩阵:\n");
      output(x, n);
        return 0;

}

 任务6:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 100

void dec_to_n(int x, int n)
{
    int res[100];
    int i;
    for (i = 0; x != 0; i++)
    {
        res[i] = x % n;
        x /= n;
    }
    for (i -= 1; i >= 0; i--)
    {
        if (res[i] >= 10)
            printf("%c", res[i] - 10 + 'A');
        else
            printf("%d", res[i]);
    }
    printf("\n");
}

int main(){
            int x;
            while (printf("输入十进制整数: "), scanf("%d", &x) != EOF) {
                dec_to_n(x, 2);
                dec_to_n(x, 8);
                dec_to_n(x, 16);
                printf("\n");
            }
           return 0;
}

 任务7:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 100

void input(int x[][N], int n);
void output(int x[][N], int n);
int is_magic(int x[][N], int n);

int main() {
       int x[N][N];
        int n;
            while (printf("输入n: "), scanf("%d", &n) != EOF) {
                 printf("输入方阵:\n");
                input(x, n);
                printf("输出方阵:\n");
                output(x, n);
        if (is_magic(x, n))
                    printf("是魔方矩阵\n\n");
               else
                   printf("不是魔方矩阵\n\n");
    }
            return 0;
}
void input(int x[][N], int n) {
   int i, j;
       for (i = 0; i < n; ++i) {
                for (j = 0; j < n; ++j)
                    scanf("%d", &x[i][j]);
    }
}
void output(int x[][N], int n) {
    int i, j;
           for (i = 0; i < n; ++i) {
               for (j = 0; j < n; ++j)
                   printf("%4d", x[i][j]);
               printf("\n");
    }
    
}

 int is_magic(int x[][N], int n)
 {
         int i, j;
         int real = 0, test = 0;
        for (i = 0, j = 0; i < n; i++, j++)
            {
                 real += x[i][j];
            }
         for (i = 0, j = n - 1; j >= 0; i++, j--)
           {
            test += x[i][j];
            }
         if (test != real)
             return 0;
        test = 0;
        for (i = 0; i < n; i++)
         {
                for (j = 0; j < n; j++)
                       test += x[i][j];
                 if (test != real)
                         return 0;
                 test = 0;
             }
         for (j = 0; j < n; j++)
            {
                for (i = 0; i < n; i++)
                         test += x[i][j];
                 if (test != real)
                         return 0;
                 test = 0;
            }
        return 1;
    }