实验4 c语言数组应用编程
实验任务1
1 #include <stdio.h> 2 #include<stdlib.h> 3 #define N 4 4 #define M 2 5 6 void test1() { 7 int x[N] = {1, 9, 8, 4}; 8 int i; 9 10 // 输出数组x占用的内存字节数 11 printf("sizeof(x) = %d\n", sizeof(x)); 12 13 // 输出每个元素的地址、值 14 for (i = 0; i < N; ++i) 15 printf("%p: %d\n", &x[i], x[i]); 16 17 // 输出数组名x对应的值 18 printf("x = %p\n", x); 19 } 20 21 void test2() { 22 int x[M][N] = {{1, 9, 8, 4}, {2, 0, 4, 9}}; 23 int i, j; 24 25 // 输出二维数组x占用的内存字节数 26 printf("sizeof(x) = %d\n", sizeof(x)); 27 28 // 输出每个元素的地址、值 29 for (i = 0; i < M; ++i) 30 for (j = 0; j < N; ++j) 31 printf("%p: %d\n", &x[i][j], x[i][j]); 32 printf("\n"); 33 34 // 输出二维数组名x, 以及,x[0], x[1]的值 35 printf("x = %p\n", x); 36 printf("x[0] = %p\n", x[0]); 37 printf("x[1] = %p\n", x[1]); 38 printf("\n"); 39 } 40 41 int main() { 42 printf("测试1: int型一维数组\n"); 43 test1(); 44 45 printf("\n测试2: int型二维数组\n"); 46 test2(); 47 system("pause"); 48 49 return 0; 50 }
1.是连续存放的,两者是一样的。
2.是的,是一样的,16个字节,一行又4个元素。
实验任务2
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define N 100 4 5 // 函数声明 6 void input(int x[], int n); 7 double compute(int x[], int n); 8 9 int main() { 10 int x[N]; 11 int n, i; 12 double ans; 13 14 while(printf("Enter n: "), scanf("%d", &n) != EOF) { 15 input(x, n); // 函数调用 16 ans = compute(x, n); // 函数调用 17 printf("ans = %.2f\n\n", ans); 18 } 19 system("pause"); 20 return 0; 21 } 22 23 // 函数定义 24 void input(int x[], int n) { 25 int i; 26 27 for(i = 0; i < n; ++i) 28 scanf("%d", &x[i]); 29 } 30 31 // 函数定义 32 double compute(int x[], int n) { 33 int i, high, low; 34 double ans; 35 36 high = low = x[0]; 37 ans = 0; 38 39 for(i = 0; i < n; ++i) { 40 ans += x[i]; 41 42 if(x[i] > high) 43 high = x[i]; 44 else if(x[i] < low) 45 low = x[i]; 46 } 47 48 ans = (ans - high - low)/(n-2); 49 50 return ans; 51 }
1功能:输入n个数组成的数组。
2功能:计算数据中除了最大值与最小值之外的平均值。
实验任务3
1 #include <stdio.h> 2 #include<stdlib.h> 3 #define N 100 4 5 // 函数声明 6 void output(int x[][N], int n); 7 void init(int x[][N], int n, int value); 8 9 int main() { 10 int x[N][N]; 11 int n, value; 12 13 while(printf("Enter n and value: "), scanf("%d%d", &n, &value) != EOF) { 14 init(x, n, value); // 函数调用 15 output(x, n); // 函数调用 16 printf("\n"); 17 } 18 system("pause"); 19 20 return 0; 21 } 22 23 // 函数定义 24 void output(int x[][N], int n) { 25 int i, j; 26 27 for(i = 0; i < n; ++i) { 28 for(j = 0; j < n; ++j) 29 printf("%d ", x[i][j]); 30 printf("\n"); 31 } 32 } 33 34 // 函数定义 35 void init(int x[][N], int n, int value) { 36 int i, j; 37 38 for(i = 0; i < n; ++i) 39 for(j = 0; j < n; ++j) 40 x[i][j] = value; 41 }
1 第二维
2生成n*n型的二维数组。将数组中每一个位置赋上相等的值。
实验任务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 midnum; for (i=n-1;i>=1;i--) for (j=0;j<i;j++) if(x[j]>x[j+1]) {t=x[j]; x[j]=x[j+1]; x[j+1]=t;} if (n%2==0) midnum=(double)(x[n/2-1]+x[n/2])/2; else midnum=x[n/2]; return midnum;}
实验任务5
#include<stdio.h> #include<stdlib.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); system("pause"); 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 a[N][N]; int i,j,k; for (j=0;j<n;j++) for(i=0;i<n;i++) {if(j==n-1) a[i][0]=x[i][j]; else a[i][j+1]=x[i][j];} for(j=0;j<n;j++) for(i=0;i<n;i++) x[i][j]=a[i][j];}
实验任务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){ char map[]="0123456789ABCDEF"; char ans [N]; int d,r; int cnt =0; while(1){ r=x%n; d=x/n; ans[cnt++]=map[r]; if(d==0) break; x=d; } for(--cnt;cnt>=0;--cnt) printf("%c",ans [cnt]); printf("\n");}