实验4
1
问题1:连续 ,相同
问题2:连续,相同,16,一行差的总字节数
2
问1:input(int x[], int n);input(x,n)
问2:函数input的功能是输入并存储数组x中的n个数值;函数compute的功能是计算数组x中去掉最大值最小值后的平均值
3
问1:output(int x[][N], int n);output(x, n)
问2:不能
问3:打印两维数组x中的所有元素;将两维数组x中的每个元素赋值为value
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;
}
void input(int x[],int n){
for(int i=0;i<n;++i)
scanf("%d",&x[i]);
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=x[j];
x[j]=x[j+1];
x[j+1]=temp;
}
}
double median(int x[],int n){
double avg;
if(n%2==0){
avg=(x[n/2-1]+x[n/2])/2.0;
}
else if(n%2!=0){
avg=x[n/2];
}
return avg;
}

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("Enter n: ");
scanf("%d", &n);
input(x, n);
printf("原始矩阵:\n");
output(x, n);
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]);
}
}
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 temp[n][1];
for(int i=0;i<n;++i)
temp[i][0]=x[i][n-1];
for(int i=n-1;i>0;--i)
for(int j=0;j<n;++j)
x[j][i]=x[j][i-1];
for(int i=0;i<n;++i)
x[i][0]=temp[i][0];
}

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 yu, i = 0;
int y[N];
int temp = x;
while (temp != 0) {
yu = temp % n;
y[i++] = yu;
temp = temp / n;
}
for (int j = i - 1; j >= 0; j--) {
if (y[j] >= 10) {
printf("%c", 'A' + y[j] - 10);
}
else {
printf("%d", y[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 i,j;
int sum;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
int a = x[i][j];
for (int k = i; k < n; k++) {
int b = (k == i) ? (j + 1) : 0;
for (int l = b; l < n; l++) {
if (x[k][l] == a) {
return 0;
}
}
}
}
}
for(i=0;i<n;i++)
sum+=x[0][i];
for(i=1;i<n;i++){
int hang=0;
for(j=0;j<n;j++){
hang += x[i][j];
}
if(sum!=hang){
return 0;
}
}
for(i=0;i<n;i++){
int lie=0;
for(j=0;j<n;j++){
lie += x[j][i];
}
if(sum!=lie){
return 0;
}
}
int diag1=0;
for(i=0;i<n;i++){
diag1+=x[i][i];
}
if(sum!=diag1){
return 0;
}
int diag2=0;
for(i=0;i<n;i++){
diag2+=x[i][n-1-i];
}
if(sum!=diag2){
return 0;
}
return 1;
}


浙公网安备 33010602011771号