实验4

task1_1

 1 #include<stdio.h>
 2 #define N 4
 3 
 4 void test1(){
 5     int a[N] = {1,9,8,4};
 6     int i;
 7     printf("sieof(a) = %d\n",sizeof(a));
 8     
 9     for(i = 0;i<N;++i){
10         printf("%p:%d\n",&a[i], a[i]);
11     }
12     printf("a = %p\n",a);
13 }
14 
15 void test2(){
16     char b[N] = {'1','9','8','4'};
17     int i;
18     printf("sizeof(b) = %d\n",sizeof(b));
19     
20     for(i = 0;i<N;++i)
21     printf("%p:%c\n",&b[i],b[i]);
22     printf("b = %p\n",b);
23 }
24 int main()
25 {
26     printf("测试1:int类型一维数组\n");
27     test1();
28     printf("\n测试2:char类型一维数组\n");
29     test2();
30     return 0;
31  } 

 

 

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

 

task1_2

 1 #include <stdio.h>
 2 #define N 2
 3 #define M 4
 4 
 5 void test1() {
 6     int a[N][M] = {{1,9,8,4},{2,0,4,9}};
 7     int i,j;
 8     printf("sizeof(a)=%d\n",sizeof(a));
 9     for(i = 0;i<N;++i)
10       for(j = 0;j<M;++j)
11        printf("%p:%d\n",&a[i][j],a[i][j]);
12     printf("\n");
13     
14     printf("a = %p\n", a);
15     printf("a[0] = %p\n", a[0]);
16     printf("a[1] = %p\n", a[1]);
17     printf("\n");
18 }
19 
20 void test2() {
21     char b[N][M] = {{'1', '9', '8', '4'}, {'2', '0', '4', '9'}};
22     int i, j;
23 
24    
25     printf("sizeof(b) = %d\n", sizeof(b));
26 
27     for (i = 0; i < N; ++i)
28         for (j = 0; j < M; ++j)
29             printf("%p: %c\n", &b[i][j], b[i][j]);
30     printf("\n");
31 
32     printf("b = %p\n", b);
33     printf("b[0] = %p\n", b[0]);
34     printf("b[1] = %p\n", b[1]);
35 }
36 
37 int main() {
38     printf("测试1: int型两维数组");
39     test1();
40 
41     printf("\n测试2: char型两维数组");
42     test2();
43 
44     return 0;
45 }

 

1. int型二维数组a,在内存中按行连续存放,每个元素占用4个内存字节单元

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

 

task 2

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 #define N 80
 5 
 6 void swap_str(char s1[N], char s2[N]);
 7 void test1();
 8 void test2();
 9 
10 int main()
11 {
12     printf("测试1: 用两个一维char数组,实现两个字符串交换\n");
13     test1();
14 
15     printf("\n测试2: 用二维char数组,实现两个字符串交换\n");
16     test2();
17     return 0;
18 }
19 
20 void test1(){
21     char views1[N] = "hey,C,I hate u.";
22     char views2[N] = "hey,C,I love u.";
23     
24     printf("交换前:\n");
25     puts(views1);
26     puts(views2);
27     
28     swap_str(views1,views2);
29     
30     printf("交换后:\n");
31     puts(views1);
32     puts(views2);
33 }
34 
35 void test2(){
36     char views[2][N] = {"hey,C,I hate u.",
37                         "hey,C,I love u."};
38                         
39     printf("交换前:\n");
40     puts(views[0]);
41     puts(views[1]);
42     
43     swap_str(views[0],views[1]);
44     
45     printf("交换后:\n");
46     puts(views[0]);
47     puts(views[1]);
48 }
49 
50 void swap_str(char s1[N] , char s2[N]){
51     char tmp[N];
52     
53     strcpy(tmp,s1);
54     strcpy(s1,s2);    
55     strcpy(s2,tmp);    
56 
57 }

 

task 3_1

 1 #include <stdio.h>
 2 
 3 #define N 80
 4 
 5 int count(char x[]);
 6 
 7 int main()
 8 {
 9     char words[N+1];
10     int n;
11     
12     while(gets(words)!=NULL){
13         n = count(words);
14         printf("单词数:%d\n\n",n);
15     }
16     return 0;
17 }
18 
19 int count(char x[]){
20     int i;
21     int word_flag = 0;
22     int number = 0;
23     
24     for(i = 0;x[i]!='\0';i++){
25         if(x[i]==' ')
26           word_flag = 0;
27         else if(word_flag==0){
28             word_flag = 1;
29             number++;
30         }
31     }
32     return number;
33 }

task 3_2

 1 #include <stdio.h>
 2 #define N 1000
 3 
 4 int main() {
 5     char line[N];
 6     int word_len;  
 7     int max_len;    
 8     int end;       
 9     int i;
10 
11     while(gets(line) != NULL) {
12         word_len = 0;
13         max_len = 0;
14         end = 0;
15 
16         i = 0;
17         while(1) {
18             while(line[i] == ' ') {
19                 word_len = 0; 
20                 i++;
21             }
22 
23      
24             while(line[i] != '\0' && line[i] != ' ') {
25                 word_len++;
26                 i++;
27             }
28         
29             if(max_len < word_len) {
30                 max_len = word_len;
31                 end = i;  
32             }
33 
34             if(line[i] == '\0')
35                 break;
36         }
37 
38         printf("最长单词: ");
39         for(i = end - max_len; i < end; ++i)
40             printf("%c", line[i]);
41         printf("\n\n");
42     }
43 
44     return 0;
45 }

 

task 4

 1 #include <stdio.h>
 2 #define N 100
 3 
 4 void dec_to_n(int x, int n); 
 5 
 6 int main()
 7 {
 8     int x;
 9     printf("输入一个十进制的整数:");
10     while(scanf("%d",&x)!=EOF){
11         dec_to_n(x,2);
12         dec_to_n(x,8);
13         dec_to_n(x,16);
14         printf("\n输入一个十进制的整数:");
15     } 
16     return 0;
17 }
18 
19 void dec_to_n(int x,int n){
20     int i;
21     if(n==2){
22         int two[32];
23         for(i = 0;i<32;i++)
24           two[i] = 0;
25         int index = 0;
26         while(x>0){
27             two[index] = x%2;
28             x = x/2;
29             index++;
30         }
31         for(i = index-1;i>=0;i--)
32         printf("%d",two[i]);
33         printf("\n");
34     }
35     else if(n==8)
36       printf("%o\n",x);
37     else if(n==16)
38       printf("%X\n",x);
39 }

 

task 5

 1 #include <stdio.h>
 2 #define N 5
 3 
 4 void input(int x[], int n);
 5 void output(int x[], int n);
 6 double average(int x[], int n);
 7 void bubble_sort(int x[], int n);
 8 
 9 int main()
10 {
11     int scores[N];
12     double ave;
13     
14     printf("录入%d个分数:\n",N);
15     input(scores,N);
16     
17     printf("\n输出课程分数:\n");
18     output(scores,N);
19     
20     printf("\n课程分数处理:计算均分、排序...\n");
21     ave = average(scores,N);
22     bubble_sort(scores,N);
23     
24     printf("\n输出课程均分:%.2f\n",ave);
25     printf("\n输出课程分数(高->低):\n");
26     output(scores,N);
27     
28     return 0;
29 }
30 
31 void input(int x[], int n){
32     int i;
33     
34     for(i = 0;i<n;++i)
35     scanf("%d",&x[i]);
36 }
37 
38 void output(int x[], int n) {
39     int i;
40     
41     for(i = 0; i < n; ++i)
42         printf("%d ", x[i]);
43     printf("\n");
44 }
45 
46 double average(int x[],int n){
47     int sum,i;
double ave;
48 sum = 0; 49 for(i = 0;i<n;++i){ 50 sum = sum + x[i]; 51 } 52 ave = (sum*1.0)/n; 53 return ave; 54 } 55 56 void bubble_sort(int x[],int n){ 57 int i,round; 58 for(i = 0;i<n;i++){ 59 round = n - i; 60 for(i = 0;i<round;i++){ 61 if(x[i]<=x[i+1]){ 62 int a = x[i]; 63 x[i] = x[i+1]; 64 x[i+1] = a; 65 } 66 } 67 } 68 69 }

 

task6

#include<stdio.h>
#include<string.h>
#define N 5
#define M 20

void output(char str[][M], int n);
void bubble_sort(char str[][M], int n);

int main()
{
    char name[][M] = {"Bob","Bill","Joseph","Taylor","George"};
    int i;
    
    printf("输出初试名单:\n");
    output(name, N);
    
    printf("\n排序中...\n");
    bubble_sort(name, N);
    
    printf("\n按字典序输出名单:\n");
    output(name, N);
    
    return 0;
}

void output(char str[][M], int n){
    int i;
    
    for(i = 0;i<=n;++i)
    printf("%s\n",str[i]);
}

void bubble_sort(char str[][M], int n){
    int x,i;
    for(i = 0;i<n;++i){
        x = n - i;
        for(i = 0;i<x;++i){
            if(strcmp(str[i],str[i+1])>0){
                char arr[M];
                strcpy(arr,str[i+1]);
                strcpy(str[i+1],str[i]);
                strcpy(str[i],arr);
            }
        }
    }
}

 

 

task7

#include<stdio.h>
#include<string.h>

int main()
{
    char arr[100];
    while(scanf("%s",&arr)!=EOF){
        int flag = 0;
        int i,s;
        for(i = 0;i<strlen(arr);++i){
            for(s = i+1;s<strlen(arr);++s){
                if(arr[i]==arr[s]){
                    flag = 1;
                    break;
                }
            }
            if(flag == 1){
                break;
            }
        }
        if(flag == 1){
            printf("YES\n");
            
        }
        else if(flag == 0)
        printf("NO\n"); 
         
    }
    return 0;
}

 

task 8

#include<stdio.h>
#define N 100
#define M 4

void output(int x[][N], int n);
void rotate_to_right(int x[][N], int n);

int main()
{
    int t[][N] = {{21,12,13,24},
                   {25,16,47,38},
                   {29,11,32,54},
                   {42,21,33,10}};
    
    printf("原始矩阵:\n");
    output(t ,M);
    
    rotate_to_right(t, M);
    
    printf("变换后矩阵:\n");
    output(t, M);
    
    return 0;
}

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 mid[M];
    int i,j;
    for(i = 0;i<n;++i){
        mid[i] = x[i][M-1];
    }
    for(i = 0;i<n;++i){
        for(j = n-1;j>=1;j--){
            x[i][j] = x[i][j-1];
        }
    }
    for(i = 0;i<n;++i)
    x[i][0] = mid[i];
}

 

posted @ 2023-11-13 17:29  Gustave-Ehsy  阅读(12)  评论(0)    收藏  举报