实验4

任务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

 

 1 #include <stdio.h>
 2 #include<stdlib.h>
 3 #define N 5
 4 
 5 // 函数声明 
 6 void input(int x[], int n);
 7 void output(int x[], int n);
 8 double average(int x[], int n);
 9 void bubble_sort(int x[], int n);
10 
11 int main() {
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     bubble_sort(scores, N);
24     
25     printf("\n输出课程均分: %.2f\n", ave);
26     printf("\n输出课程分数(高->低):\n");
27     output(scores, N);
28     system("pause");
29     return 0;
30 }
31 
32 // 函数定义
33 // 输入n个整数保存到整型数组x中 
34 void input(int x[], int n) {
35     int i;
36     
37     for(i = 0; i < n; ++i)
38         scanf("%d", &x[i]); 
39 }
40 
41 // 输出整型数组x中n个元素 
42 void output(int x[], int n) {
43     int i;
44     
45     for(i = 0; i < n; ++i)
46         printf("%d ", x[i]);
47     printf("\n");
48 }
49 
50 double average(int x[], int n)
51 {
52     int i;
53     int sum=0;
54     for(i=0;i<n;i++)
55     {
56         sum+=x[i];
57     }
58     return sum*1.0/n;
59 }
60 
61 
62 
63 void bubble_sort(int x[], int n)
64 {
65     int i,j;
66     for(i=0;i<n-1;i++)
67     {
68         for(j=0;j<n-i-1;j++)
69         {
70             if(x[j]<x[j+1])
71             {
72                 int temp;
73                 temp=x[j];
74                 x[j]=x[j+1];
75                 x[j+1]=temp;
76             }
77         }
78     }
79 }

任务6

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include<stdlib.h>
 4 #define N 5
 5 #define M 20
 6 
 7 // 函数声明
 8 void output(char str[][M], int n);
 9 void bubble_sort(char str[][M], int n);
10 
11 int main() {
12     char name[][M] = {"Bob", "Bill", "Joseph", "Taylor", "George"};
13     int i;
14 
15     printf("输出初始名单:\n");
16     output(name, N);
17 
18     printf("\n排序中...\n");
19     bubble_sort(name, N);  // 函数调用 
20 
21     printf("\n按字典序输出名单:\n");
22     output(name, N);
23     system("pause");
24     return 0;
25 }
26 
27 // 函数定义
28 // 功能:按行输出二维数组中的字符串
29 void output(char str[][M], int n) {
30     int i;
31 
32     for(i = 0; i < n; ++i)
33         printf("%s\n", str[i]);
34 }
35 
36 void bubble_sort(char str[][M], int n)
37 {
38     int i,j;
39     for(i=0;i<n-1;i++)
40     {
41         for(j=0;j<n-i-1;j++)
42         {
43             if(strcmp(str[j],str[j+1])>0)
44             {
45                 char temp[][M]={0};
46                 strcpy(temp[0],str[j]);
47                 strcpy(str[j],str[j+1]);
48                 strcpy(str[j+1],temp[0]);
49             }
50         }
51     }
52 }

任务7

 1 #include <stdio.h>
 2 #include <string.h>
 3 int chongfu(char *a,int n);
 4 int main(){
 5     char a[100];
 6     while(gets(a)!='\0'){
 7         if(chongfu(a,strlen(a))){
 8             printf("YES\n");
 9         }else{
10             printf("NO\n");
11         }
12     }
13 }
14 int chongfu(char a[],int n){
15     int flag=0;
16     for(int i=0;i<n;i++){
17         for(int k=i+1;k<n;k++){
18             if(a[i]==a[k]){
19                 flag=1;
20                 break;
21             }
22         }
23         if(flag==1){
24             break;
25         }
26     }
27     if(flag==1){
28         return 1;
29     }else{
30         return 0;
31     }
32 }

任务8

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #define N 100
 4 #define M 4
 5 
 6 // 函数声明
 7 void output(int x[][N], int n);
 8 void rotate_to_right(int x[][N], int n);
 9 
10 
11 int main() {
12     int t[][N] = { {21, 12, 13, 24},
13                   {25, 16, 47, 38},
14                   {29, 11, 32, 54},
15                   {42, 21, 33, 10} };
16 
17     printf("原始矩阵:\n");
18     output(t, M); // 函数调用
19 
20     rotate_to_right(t, M); // 函数调用
21 
22     printf("变换后矩阵:\n");
23     output(t, M); // 函数调用
24 
25     return 0;
26 }
27 
28 // 函数定义
29 // 功能: 输出一个n*n的矩阵x
30 void output(int x[][N], int n) {
31     int i, j;
32 
33     for (i = 0; i < n; ++i) {
34         for (j = 0; j < n; ++j)
35             printf("%4d", x[i][j]);
36 
37         printf("\n");
38     }
39 }
40 
41 void rotate_to_right(int x[][N], int n)
42 {
43     int temp[N];
44     int i, j;
45     for (i = 0; i < n; i++)
46     {
47         temp[i] = x[i][n-1];
48     }
49     for (i = n-1; i > 0 ; i--)
50     {
51         for (j =0; j < n ; j++)
52         {
53             x[j][i] = x[j][i - 1];
54         }
55     }
56     for (i = 0; i < n; i++)
57     {
58         x[i][0] = temp[i];
59     }
60 }

 

posted @ 2023-11-13 17:30  飘窗的轩  阅读(23)  评论(0)    收藏  举报