实验4
task.1:
代码:
#include<stdio.h> #define N 4 #define M 2 void test1(); void test2(); int main() { printf("测试1: int型一维数组:\n"); test1(); printf("\n测试2: int型二维数组:\n"); test2(); return 0; } 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("x=%p\n",x); printf("x[0]=%p\n",x[0]); printf("x[1]=%p\n\n",x[1]); }
图片:
问题:是;不是;
是;不是;4;int型所占空间;
task.2
代码:
#include<stdio.h> #define N 100 void input(int x[],int n); double compute(int x[],int n); int main() { int x[N],n; double ans; while(printf("Enter n:"),scanf("%d",&n)!=EOF) { input(x,n); ans=compute(x,n); printf("%.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) { double ans=0; int i,high,low; high=low=x[0]; for(i=0;i<n;i++) { if(high<x[i]) high=x[i]; else if(low>x[i]) low=x[i]; ans+=x[i]; } ans=(ans-high-low)/(n-2); return ans; }
图片:
问题:input是将数组x[N]进行赋值;compute是求出数组中最大最小值并将其去除后求数组元素平均值。
task.3
代码:
#include<stdio.h> #define N 100 void inti(int x[][N],int n,int value); void output(int x[][N],int n); int main() { int x[N][N]; int n,value; while(printf("Enter n and value:"),scanf("%d%d",&n,&value)!=EOF) { inti(x,n,value); output(x,n); printf("\n"); } return 0; } void inti(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; } 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"); } }
图片:
问题:列;
将x[][N]数组输出;将数据输入x[][N]中;
task.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]); } double median(int x[N],int n) { int i,j,t; double ans; for(i=0;i<n-1;i++) { for(j=0;j<n-1-i;j++) if(x[j]>x[j+1]) { t=x[j]; x[j]=x[j+1]; x[j+1]=t; } } if(n%2!=0) ans=x[n/2]; else ans=(x[(n-1)/2]+x[(n-1)/2+1])/2.0; return ans; }
图片:
task.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; } 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 y[N][N]; for(i=0;i<n;i++) y[i][0]=x[i][n-1]; for(i=0;i<n-1;i++) for(j=0;j<n;j++) y[j][i+1]=x[j][i]; for(i=0;i<n;i++) for(j=0;j<n;j++) x[i][j]=y[i][j]; }
图片:
task.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 j; char stock[N]; for (j = 0; x > 0; j++) { stock[j] = x % n; x /= n; } for (; j > 0; j--) { if (stock[j - 1] >= 10) { stock[j - 1] = stock[j - 1] - 10 + 'A'; printf("%c", stock[j - 1]); } else printf("%d", stock[j - 1]); } printf("\n"); }
图片:
task.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 j, i, ans = 0, csc; for (j = 0; j < n; j++) ans += x[0][j]; for (i = 1; i < n; i++) { csc = 0; for (j = 0; j < n; j++) csc += x[i][j]; if (csc != ans) return 0; } for (j = 0; j < n; j++) { csc = 0; for (i = 0; i < n; i++) csc += x[i][j]; if (csc != ans) return 0; } for (i = 0, j = 0,csc=0; i < n; i++, j++) csc += x[i][j]; if (csc != ans) return 0; for (i = n - 1, j = n - 1, csc = 0; i > -1; i--, j--) csc += x[i][j]; if (csc != ans) return 0; return 1; }
图片:
task.8
代码:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #define N 1000 int can(int x[N],int k); int main() { int n,k; printf("n为:"); for (n = 1; n < N; n++) { int t, j, ans = 0, y,p; int x[N]; t = n * n; j = n * n * n; for (k = 0; t > 0; k++) { x[k] = t % 10; t /= 10; } for (; j > 0; k++) { x[k] = j % 10; j /= 10; } for (p = 0; p < k; p++) { ans += x[p]; } y = can(x,k); if (y == 1 && ans == 45) { printf("输出:%d", n); break; } } return 0; } int can(int x[N],int k) { int q, w, sq; for (q = 0; q < k; q++) { sq = 0; for (w = 0; w < k; w++) { if (x[q] == x[w]) sq++; } if (sq > 1) return 0; } sq = 0; for (q = 0; q < k; q++) { if (x[q] == 0) sq++; if (sq > 1) return 0; } return 1; }
图片: