实验4
实验任务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;
printf("sizeof(x) = %d\n", sizeof(x));
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();
return 0;
}
运行截图

问题
问题1
是;
相同
问题2
是;
相同;
16;
x[0]的值与&x[0][0]相同,x[1]的值与&x[1][0]相同,说明二维数组中的每一个数组的值都是该数组中的第一个数的地址
实验任务2
代码
#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;
}
运行截图

问题
问题1
形参:int x[];
实参:x
问题2
函数input:输入n个数并赋值到数组x中;
函数compute:对数组中的数去掉一个最高值,去掉一个最低值,再取平均值
实验任务3
代码
#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("%d%d", &n, &value) != EOF)
{
init(x, n, value);
output(x, n);
printf("\n");
}
return 0;
}
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;
}
运行截图

问题
问题1
形参:int x[][N];
实参:x
问题2
不能,会报错
问题3
函数output:输出数组中的值,每输出一个数组之后换行;
函数init:对数组赋值
实验任务4
代码
#include <stdio.h>
#define N 100
void input(int x[N], int n);
double median(int x[N], 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[N], int n)
{
int i;
for (i = 0; i < n; ++i)
scanf("%d", &x[i]);
return 0;
}
double median(int x[N], int n)
{
double ans;
int i,j,temp;
for (i = 0; i < n; ++i)
{
for (j = i + 1; j < n; ++j)
{
if (x[i] > x[j])
{
temp = x[i];
x[i] = x[j];
x[j] = temp;
}
}
}
if (n % 2 == 0)
ans = (x[n / 2] + x[n / 2 - 1]) / 2.0;
else
ans = x[(n - 1) / 2];
return ans;
}
运行截图

实验任务5
代码
#include <stdio.h>
#define N 100
void input(int x[][N], int n);
void output(int x[][N], int n);
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(x, n);
printf("变换后矩阵:\n");
output(x, 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");
}
}
void rotate_to_right(int x[][N],int n)
{
int i, j;
int temp;
for (i = 0; i < n; ++i)
{
temp = x[i][n-1];
for (j = n-1; j > 0; --j)
x[i][j] = x[i][j - 1];
x[i][j] = temp;
}
}
运行截图

实验任务6
代码
#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);
dec_to_n(x, 8);
dec_to_n(x, 16);
printf("\n");
}
return 0;
}
void dec_to_n(int x, int n)
{
int s[N];
int i = 0,j;
while (x != 0)
{
s[i] = x % n;
x = x / n;
++i;
}
for (j = i - 1; j >= 0; --j)
{
if (s[j] >= 10)
printf("%c", 'A' + s[j] - 10);
else
printf("%d", s[j]);
}
printf("\n");
}
运行截图

实验任务7
代码
#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 line[N] = { 0 }, column[N] = { 0 }, diagonal[2] = { 0 };
int l = 1, c = 1, d = 1;
int i, j;
for (i = 0; i < n; ++i)
{
for (j = 0; j < n; ++j)
line[i]+=x[i][j];
}
for (i = 0; i < n-1; ++i)
{
if (line[i] == line[i + 1])
l = 1;
else
{
l = 0;
break;
}
}
for (j = 0; j < n; ++j)
{
for (i = 0; i < n; ++i)
column[j] += x[i][j];
}
for (j = 0; j < n - 1; ++j)
{
if (line[i] == line[i + 1])
l = 1;
else
{
c = 0;
break;
}
}
diagonal[0] = 0;
diagonal[1] = 0;
for (i = 0, j = 0; i < n&& j < n; ++i, ++j)
diagonal[0] += x[i][j];
for(i=0,j=n-1;i<n&&j>=0;++i,--j)
diagonal[1] += x[i][j];
if (diagonal[0] == diagonal[1])
d = 1;
else
d = 0;
if (l==1 && c==1 && d==1 && line[0]==column[0] && line[0] == diagonal[0])
return 1;
else
return 0;
}
运行截图



实验任务8
代码
#include<stdio.h>
#define N 100
int main()
{
int x[N];
int n;
int square,cube;
int i,j,k;
int a;
for (n = 0;; ++n)
{
i = 0;
a = 1;
square = n * n;
cube = n * n * n;
do{
x[i] = square % 10;
square /= 10;
++i;
} while (square != 0);
do{
x[i] = cube % 10;
cube /= 10;
++i;
} while (cube != 0);
if (i != 10)
continue;
for (j = 0; j < i-1 && a == 1; ++j)
{
for (k = j + 1; k < i; ++k)
{
if (x[j] == x[k])
{
a = 0;
break;
}
}
}
if (i == 10 && a == 1)
break;
}
printf("%d", n);
return 0;
}
运行截图

浙公网安备 33010602011771号