实验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 }

 

posted @ 2022-05-04 09:24  liuxianer  阅读(31)  评论(0)    收藏  举报