实验4

发布时间 2023-11-13 17:33:48作者: 飘窗的轩

任务1

1. int型数组a,在内存中是连续存放的,每个元素占用4个内存字节单元,数组名a对应的值,和&a[0]一样
2. char型数组b,在内存中是连续存放的,每个元素占用1个内存字节单元,数组名b对应的值,和&b[0]一样

3. int型二维数组a,在内存中按行连续存放,每个元素占用4个内存字节单元
    数组名a的值、a[0]的值、 &a[0][0]的值,在数字字面值上一样
4. char型二维数组b,在内存中按行连续存放,每个元素占用1个内存字节单元
    数组名b的值、b[0]的值、 &b[0][0]的值,在数字字面值上一样
5. 对于二维数组,a[0], a[1]的值之间相差4
    b[0]和b[1]的值,它们之间相差1
    相差一个sizeof(int)和sizeof(char)

任务2

因为test1中,view代表一个一维数组
而在test2中代表一个二维数组,view[x]则是一个一维数组

任务3

 1 #include <stdio.h>
 2 #define N 80
 3 int count(char x[]);
 4 int main() {
 5     char words[N + 1];
 6     int n;
 7     while (gets(words) != NULL) {
 8         n = count(words);
 9         printf("单词数: %d\n\n", n);
10     }
11     return 0;
12 }
13 int count(char x[]) {
14     int i;
15     int word_flag = 0; // 用作单词标志,一个新单词开始,值为1;单词结束,值为0
16     int number = 0; // 统计单词个数
17     for (i = 0; x[i] != '\0'; i++) {
18         if (x[i] == ' ')
19             word_flag = 0;
20         else if (word_flag == 0) {
21             word_flag = 1;
22             number++;
23         }
24     }
25     return number;
26 }

 

 

task3_2

 

 1 #include <stdio.h>
 2 #define N 1000
 3 int main() {
 4     char line[N];
 5     int word_len; // 记录当前单词长度
 6     int max_len; // 记录最长单词长度
 7     int end; // 记录最长单词结束位置
 8     int i;
 9     while (gets(line) != NULL) {
10         word_len = 0;
11         max_len = 0;
12         end = 0;
13         i = 0;
14         while (1) {
15             // 跳过连续空格
16             while (line[i] == ' ') {
17                 word_len = 0; // 单词长度置0,为新单词统计做准备
18                 i++;
19             }
20             // 在一个单词中,统计当前单词长度
21             while (line[i] != '\0' && line[i] != ' ') {
22                 word_len++;
23                 i++;
24             }
25             // 更新更长单词长度,并,记录最长单词结束位置
26             if (max_len < word_len) {
27                 max_len = word_len;
28                 end = i; // end保存的是单词结束的下一个坐标位置
29             }
30             // 遍历到文本结束时,终止循环
31             if (line[i] == '\0')
32                 break;
33         }
34         // 输出最长单词
35         printf("最长单词: ");
36         for (i = end - max_len; i < end; ++i)
37             printf("%c", line[i]);
38         printf("\n\n");
39     }
40     return 0;
41 }

 

 

 

任务4

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

 

任务5