实验4

`#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;
printf("sizeof(x)=%d\n", sizeof(x));

for (i = 0; i < M; ++j)
	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("\n测试1:int型一维数组\n");
test1();

printf("\n测试2:int型二维数组\n");


return 0;

}`

屏幕截图 2025-11-17 083819

1.是连续存放,不相同
2.是连续存放,不相同,相差4,一个字节

`#define _CRT_SECURE_NO_WARNINGS

include<stdio.h>

define N 100

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

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;

}

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;

}`

屏幕截图 2025-11-17 085115

1.形参书写形式是int x[],int n;实参书写形式是已定义都数组名和一个整数,代表数组元素个数
2.compute函数的功能是计算数组中除最大和最小值以外元素的平均值,input函数的功能是将输入的n个整数存入数组

`#include<stdio.h>

define N 100

void output(int x[][N], int n);
void init(int x[][N], int n, int value);

int main() {
int x[N][N];
int n, value;

while (printf("Enter n and value:"), scanf_s("%d%d", &n, &value) != EOF) {
	init(x, n, value);
	output(x, n);
	printf("\n");
	
}

return 0;

}

void output(int x[][N], int n,int value) {
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;
}
`

屏幕截图 2025-11-17 090228

1.形参书写形式是int x[][N],实参书写形式是数组名x
2.不能不写
3.函数output的功能是遍历并输出二维数组X的所有元素;函数init的功能是将二维数组×的每个元素初始化为指定的值value

`#define _CRT_SECURE_NO_WARNINGS

include <stdio.h>

define N 100

// 函数声明
// 待补足
void input(int x[],int n);
double median(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;

}

// 函数定义
// 待补足
void input(int x[], int n) {

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

}

double median(int x[], int n) {
double ans;
for (int i = 0; i < n-1; ++i) {
for (int j = 0; j < (n - 1 - i); ++j) {
if ( x[j] > x[j+1]) {
int temp;
temp = x[j + 1];
x[j + 1] = x[j];
x[j] = temp;
}
}
}
if (n % 2 == 0) {
ans = 1.0*(x[n / 2] + x[n / 2 - 1]) / 2;
}
else {
ans = x[n / 2];
}
return ans;
}
`

屏幕截图 2025-11-16 164259

`#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);
// 函数rotate_to_right声明
// 待补足
void rotate_to_right(int x[][N], int n);

int main() {
int x[N][N];
int n;

printf("输入n: ");
scanf("%d", &n);
input(x, n);

printf("原始矩阵:\n");
output(x, n);

// 函数rotate_to_right调用
rotate_to_right(x, n);

printf("变换后矩阵:\n");
output(x, n);

return 0;

}

// 函数定义
// 功能: 输入一个n*n的矩阵x
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]);
}

}

// 函数定义
// 功能: 输出一个n*n的矩阵x
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");
}

}

// 函数rotate_to_right定义
// 功能: 把一个n*n的矩阵x,每一列向右移, 最右边一列绕回左边
void rotate_to_right(int x[][N], int n) {
int j, temp;
for (int i = 0; i < n; ++i) {
for(int j=n-1;j>=0;--j) {
if (j == n - 1) {
temp = x[i][j];
}
if (j == 0) {
x[i][j] = temp;
continue;
}
x[i][j] = x[i][j - 1];
}
}
return;
}
`

屏幕截图 2025-11-16 164259

`#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);
// 函数rotate_to_right声明
// 待补足
void rotate_to_right(int x[][N], int n);

int main() {
int x[N][N];
int n;

printf("输入n: ");
scanf("%d", &n);
input(x, n);

printf("原始矩阵:\n");
output(x, n);

// 函数rotate_to_right调用
rotate_to_right(x, n);

printf("变换后矩阵:\n");
output(x, n);

return 0;

}

// 函数定义
// 功能: 输入一个n*n的矩阵x
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]);
}

}

// 函数定义
// 功能: 输出一个n*n的矩阵x
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");
}

}

// 函数rotate_to_right定义
// 功能: 把一个n*n的矩阵x,每一列向右移, 最右边一列绕回左边
void rotate_to_right(int x[][N], int n) {
int j, temp;
for (int i = 0; i < n; ++i) {
for(int j=n-1;j>=0;--j) {
if (j == n - 1) {
temp = x[i][j];
}
if (j == 0) {
x[i][j] = temp;
continue;
}
x[i][j] = x[i][j - 1];
}
}
return;
}
`

屏幕截图 2025-11-16 172107

`#define _CRT_SECURE_NO_WARNINGS

include <stdio.h>

define N 100

void dec_to_n(int x, int n); // 函数声明

int main() {
int x;

while (printf("输入十进制整数: "), scanf("%d", &x) != EOF) {
    dec_to_n(x, 2);  // 函数调用: 把x转换成二进制输出
    dec_to_n(x, 8);  // 函数调用: 把x转换成八进制输出
    dec_to_n(x, 16); // 函数调用: 把x转换成十六进制输出

    printf("\n");
}

return 0;

}

// 函数定义
// 功能: 把十进制数x转换成n进制,打印输出
// 补足函数实现
void dec_to_n(int x, int n) {
if (n == 2) {
int temp[100],i=1;
while (x != 0) {
temp[i] = x % 2;
x = x / 2;
i++;
}
--i;
while (i != 0) {
printf("%d", temp[i]);
i--;
}
}
if (n == 8) {
int temp[100], i = 1;
while (x != 0) {
temp[i] = x % 8;
x = x / 8;
i++;
}
--i;
while (i != 0) {
printf("%d", temp[i]);
i--;
}
}
if (n == 16) {
int temp[100], i = 1;
while (x != 0) {
temp[i] = x % 16;
x = x / 16;
i++;
}
--i;
while (i != 0) {
if (temp[i] >= 10) {
printf("%c", 'A' + temp[i] - 10);
}
else {
printf("%d", temp[i]);
}
i--;
}
}
printf("\n");
}
`

屏幕截图 2025-11-16 221702

`#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);
// 待补足函数is_magic声明
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;

}

// 函数定义
// 功能: 输入一个n*n的矩阵x
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]);
}

}

// 功能: 输出一个n*n的矩阵x
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");
}

}

// 功能: 判断一个n阶方阵是否为魔方矩阵,如果是,返回1,否则,返回0
// 待补足函数is_magic定义
int is_magic(int x[][N], int n) {
int arr[N * N];
for (int i = 0; i < n; i++) {
for(int j=0;j<n;j++){
int xianzaishiji = x[i][j];
arr[xianzaishiji] = 1;
}
}
for (int i = 1; i <= n * n; i++) {
if (arr[i] == 1)
continue;
else
return 0;
}

int sum=0;
for (int i = 0; i <= n-1; i++) {
    sum += x[0][i];
}
for (int i = 0; i <= n-1; i++) {
    int aus = 0;
    for (int j = 0; j <= n-1; j++) {
        aus += x[j][i];
    }
    if (sum == aus)
        continue;
    else if (sum != aus)
        return 0;        
}
for (int i = 0; i <= n-1; i++) {
    int aus = 0;
    for (int j = 0; j <= n-1; j++) {
        aus += x[i][j];
    }
     if (sum != aus)
        return 0;
}
int anm = 0;
for (int i = 0; i <= n-1; i++) {     
    anm += x[i][i];
}
if (sum != anm)
    return 0;
int aum = 0;
for (int i = 0; i <= n-1; i++) {
            aum += x[i][n-i-1];    
}
if (sum != aum)
    return 0;
return 1;

}

`

屏幕截图 2025-11-17 083603

posted @ 2025-11-17 09:30  duan_yu  阅读(5)  评论(0)    收藏  举报