实验4 数组
四、实验结论
1. 实验任务1
task1_1
1 #include <stdio.h> 2 #define N 4 3 4 int main() 5 { 6 int a[N] = {2, 0, 2, 2}; 7 char b[N] = {'2', '0', '2', '2'}; 8 int i; 9 10 printf("sizeof(int) = %d\n", sizeof(int)); 11 printf("sizeof(char) = %d\n", sizeof(char)); 12 printf("\n"); 13 14 // 输出数组a中每个元素的地址、值 15 for (i = 0; i < N; ++i) 16 printf("%p: %d\n", &a[i], a[i]); 17 18 printf("\n"); 19 20 // 输出数组b中每个元素的地址、值 21 for (i = 0; i < N; ++i) 22 printf("%p: %c\n", &b[i], b[i]); 23 24 printf("\n"); 25 26 // 输出数组名a和b对应的值 27 printf("a = %p\n", a); 28 printf("b = %p\n", b); 29 30 return 0; 31 }

① int型数组a,在内存中是连续存放的,每个元素占用4个内存字节单元
② char型数组b,在内存中是连续存放的,每个元素占用1个内存字节单元
③ 数组名a对应的值和&a[0]是一样的,数组名b对应的值和&b[0]是一样的
task1_2
1 #include <stdio.h> 2 #define N 2 3 #define M 3 4 5 int main() 6 { 7 int a[N][M] = {{1, 2, 3}, {4, 5, 6}}; 8 char b[N][M] = {{'1', '2', '3'}, {'4', '5', '6'}}; 9 int i, j; 10 11 // 输出二维数组a中每个元素的地址和值 12 for (i = 0; i < N; ++i) 13 for (j = 0; j < M; ++j) 14 printf("%p: %d\n", &a[i][j], a[i][j]); 15 16 printf("\n"); 17 18 // 输出二维数组a中每个元素的地址和值 19 for (i = 0; i < N; ++i) 20 for (j = 0; j < M; ++j) 21 printf("%p: %c\n", &b[i][j], b[i][j]); 22 23 return 0; 24 }

① int型二维数组a,在内存中是"按行连续存放"的,每个元素占用4个内存字节单元
② char型二维数组b,在内存中是"按行连续存放"的,每个元素占用1个内存字节单元
2. 实验任务2
1 #include <stdio.h> 2 3 int days_of_year(int year, int month, int day); // 函数声明 4 5 int main() 6 { 7 int year, month, day; 8 int days; 9 10 while(scanf("%d%d%d", &year, &month, &day) != EOF) // 按下Ctrl+Z终止 11 { 12 days = days_of_year(year, month, day); // 函数调用 13 printf("%4d-%02d-%02d是这一年的第%d天.\n\n", year, month, day, days); 14 } 15 16 return 0; 17 } 18 19 20 int days_of_year(int year, int month, int day) 21 { 22 int s=0,flag=0,i; 23 if((year%4==0&&year%100!=0)||year%400==0) 24 { 25 flag=1; 26 } 27 if (month<=7) 28 { 29 for(i=1;i<=month-1;i++) 30 { 31 if(i==2) 32 { 33 if(flag==1) 34 s+=29; 35 else 36 s+=28; 37 } 38 else if(i%2==1) 39 { 40 s+=31; 41 } 42 else 43 { 44 s+=30; 45 } 46 } 47 s+=day; 48 } 49 if(month>=8) 50 { 51 for(i=1;i<=7;i++) 52 { 53 if(i==2) 54 { 55 if(flag==1) 56 s+=29; 57 else 58 s+=28; 59 } 60 else if(i%2==1) 61 { 62 s+=31; 63 } 64 else 65 { 66 s+=30; 67 } 68 } 69 for(i=8;i<=month-1;i++) 70 { 71 if(i%2==1) 72 { 73 s+=31; 74 } 75 else 76 { 77 s+=30; 78 } 79 s+=day; 80 } 81 } 82 return s; 83 }

3. 实验任务3
1 #include <stdio.h> 2 #define N 5 3 4 // 函数声明 5 void input(int x[], int n); 6 void output(int x[], int n); 7 double average(int x[], int n); 8 void sort(int x[], int n); 9 10 int main() 11 { 12 int scores[N]; 13 double ave; 14 15 printf("录入%d个分数:\n", N); 16 input(scores, N); 17 18 printf("\n输出课程分数: \n"); 19 output(scores, N); 20 21 printf("\n课程分数处理: 计算均分、排序...\n"); 22 ave = average(scores, N); 23 sort(scores, N); 24 25 printf("\n输出课程均分: %.2f\n", ave); 26 printf("\n输出课程分数(高->低):\n"); 27 output(scores, N); 28 29 return 0; 30 } 31 32 // 函数定义 33 // 输入n个整数保存到整型数组x中 34 void input(int x[], int n) 35 { 36 int i; 37 38 for(i=0; i<n; ++i) 39 scanf("%d", &x[i]); 40 } 41 42 // 输出整型数组x中n个元素 43 void output(int x[], int n) 44 { 45 int i; 46 47 for(i=0; i<n; ++i) 48 printf("%d ", x[i]); 49 50 printf("\n"); 51 } 52 53 // 计算整型数组x中n个元素均值,并返回 54 // 补足函数average()实现 55 double average(int x[], int n) 56 { 57 double s=0.0,aver; 58 int i; 59 for(i=0;i<n;++i) 60 { 61 s+=x[i]; 62 } 63 aver=s/n; 64 return aver; 65 66 } 67 68 // 对整型数组x中的n个元素降序排序 69 // 补足函数sort()实现 70 void sort(int x[], int n) 71 { 72 int i,j,temp; 73 for(i=0;i<n-1;++i) 74 { 75 for(j=0;j<n-i-1;++j) 76 { 77 if(x[j]<x[j+1]) 78 { 79 temp=x[j]; 80 x[j]=x[j+1]; 81 x[j+1]=temp; 82 } 83 } 84 } 85 }

4. 实验任务4
1 #include <stdio.h> 2 void dec2n(int x, int n); // 函数声明 3 4 int main() 5 { 6 int x; 7 8 printf("输入一个十进制整数: "); 9 scanf("%d", &x); 10 11 dec2n(x, 2); // 函数调用: 把x转换成二进制输出 12 dec2n(x, 8); // 函数调用: 把x转换成八进制输出 13 dec2n(x, 16); // 函数调用: 把x转换成十六进制输出 14 15 return 0; 16 } 17 18 // 函数定义 19 // 功能: 把十进制数x转换成n进制,打印输出 20 // 补足函数实现 21 void dec2n(int x, int n) 22 { 23 int i=0,c=0,t; 24 int a[100]; 25 while(x!=0) 26 { 27 a[i]=x%n; 28 c+=1; 29 x=x/n; 30 i+=1; 31 } 32 33 for(t=c-1;t>=0;t--) 34 { 35 if(a[t]<10) 36 printf("%d",a[t]); 37 else if(a[t]==10) 38 printf("A"); 39 else if(a[t]==11) 40 printf("B"); 41 else if(a[t]==12) 42 printf("C"); 43 else if(a[t]==13) 44 printf("D"); 45 else if(a[t]==14) 46 printf("E"); 47 else if(a[t]==15) 48 printf("F"); 49 50 } 51 printf("\n"); 52 }


5. 实验任务5
1 #include<stdio.h> 2 int main() 3 { 4 int a[100][100]; 5 int i,j,k=0,n; 6 printf("Enter n:"); 7 while(scanf("%d",&n)!=EOF) 8 { 9 for(i=0;i<n;++i) 10 { 11 for(k=0;k<i;k++) 12 { 13 a[i][k]=k+1; 14 } 15 for(j=i;j<n;j++) 16 { 17 a[i][j]=i+1; 18 } 19 } 20 for(i=0;i<n;i++) 21 { 22 for(j=0;j<n;j++) 23 { 24 printf("%d ",a[i][j]); 25 } 26 printf("\n"); 27 } 28 printf("\n"); 29 printf("Enter n:"); 30 } 31 return 0; 32 }

6. 实验任务6
1 #include <stdio.h> 2 #define N 80 3 4 int main() 5 { 6 char views1[N] = "hey, c, i hate u."; 7 char views2[N] = "hey, c, i love u."; 8 9 char temps[N]; 10 int i=0; 11 printf("original views:\n"); 12 puts(views1); 13 puts(views2); 14 printf("\n"); 15 while(views1[i]!='\0') 16 { 17 temps[i]=views1[i]; 18 views1[i]=views2[i]; 19 views2[i]=temps[i]; 20 i+=1; 21 } 22 printf("swapping.....\n\n"); 23 puts(views1); 24 puts(views2); 25 26 return 0; 27 }

7. 实验任务7
1 #include <stdio.h> 2 #include <string.h> 3 4 #define N 5 5 #define M 20 6 7 void bubble_sort(char str[][M], int n); // 函数声明 8 9 int main() 10 { 11 char name[][M] = {"Bob", "Bill", "Joseph", "Taylor", "George"}; 12 int i; 13 14 printf("输出初始名单:\n"); 15 for (i = 0; i < N; i++) 16 printf("%s\n", name[i]); 17 18 printf("\n排序中...\n"); 19 bubble_sort(name, N); // 函数调用 20 21 printf("\n按字典序输出名单:\n"); 22 for (i = 0; i < N; i++) 23 printf("%s\n", name[i]); 24 25 return 0; 26 } 27 void bubble_sort(char str[][M], int n) 28 { 29 int i; 30 char temp[20]; 31 for(i=0;i<n-1;i++) 32 { 33 if(strcmp(str[i],str[i+1])>0) 34 { 35 strcpy(temp,str[i]); 36 strcpy(str[i],str[i+1]); 37 strcpy(str[i+1],temp); 38 } 39 } 40 }


浙公网安备 33010602011771号