实验5

实验任务1.1

源代码

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define N 5
 4 void input(int x[],int n);
 5 void output(int x[],int n);
 6 void find_min_max(int x[],int n,int *pmin,int *pmax);
 7 int main(){
 8    int a[N];
 9    int min,max;
10    printf("录入%d个数据:\n",N);
11    input(a,N);
12    printf("数据是:\n");
13    output(a,N);
14    printf("数据处理...\n");
15    find_min_max(a,N,&min,&max);
16    printf("输出结果:\n");
17    printf("min=%d,max=%d\n",min,max);
18    system("pause");
19    return 0;
20  }
21 void input(int x[],int n){
22    int i;
23    for(i=0;i<n;++i){
24    scanf("%d",&x[i]);
25      }
26  }
27 void output(int x[],int n){
28   int i;
29   for(i=0;i<n;++i){
30      printf("%d",x[i]);
31      printf("\n");
32     }
33 }
34 void find_min_max(int x[],int n,int *pmin,int *pmax){
35     int i;
36     *pmin=*pmax=x[0];
37     for(i=0;i<n;++i){
38         if(x[i]<*pmin)
39             *pmin=x[i];
40         else if(x[i]>*pmax)
41             *pmax=x[i];
42     }
43 }

运行结果截图

2

问题

1.找出数据中的最小值和最大值赋值给min和max;

2.指向x[0]所在的地址。

实验任务1.2

源代码

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define N 5
 4 
 5 void input(int x[],int n);
 6 void output(int x[],int n);
 7 int *find_max(int x[],int n);
 8 int main(){
 9    int a[N];
10    int *pmax;
11    printf("录入%d个数据:\n",N);
12    input(a,N);
13    printf("数据是:\n");
14    output(a,N);
15    printf("数据处理...\n");
16    pmax=find_max(a,N);
17    printf("输出结果:\n");
18    printf("max=%d\n",*pmax);
19    system("pause");
20    return 0;
21 }
22 void input(int x[],int n){
23     int i;
24     for(i=0;i<n;++i){
25        scanf("%d",&x[i]);
26     }
27 }
28 void output(int x[],int n){
29     int i;
30     for(i=0;i<n;++i)
31         printf("%d ",x[i]);
32     printf("\n");
33 }
34 int *find_max(int x[],int n){
35     int max_index=0;
36     int i;
37     for(i=0;i<n;++i)
38         if(x[i]>x[max_index])
39             max_index=i;
40 
41     return &x[max_index];
42 }

运行结果截图

22

问题:

1.遍历数据找出最大值,并将最大值所在地址赋值给max_index;最大值所在地址指针。

2.可以。

实验任务2

源代码

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #define N 80
 5 int main(){
 6    char s1[N]="Learning makes me happy";
 7    char s2[N]="Learning makes me sleepy";
 8    char tmp[N];
 9    printf("sizeof(s1)vs.strlen(s1):\n");
10    printf("sizeof(s1)=%d\n",sizeof(s1));
11    printf("strlen(s1)=%d\n",strlen(s1));
12 
13    printf("\nbefore swap:\n");
14    printf("s1:%s\n",s1);
15    printf("s2:%s\n",s2);
16 
17    printf("\nswapping...\n");
18    strcpy(tmp,s1);
19    strcpy(s1,s2);
20    strcpy(s2,tmp);
21    printf("\nafter swap:\n");
22    printf("s1:%s\n",s1);
23    printf("s2:%s\n",s2);
24    system("pause");
25    return 0;
26 }

运行结果截图

2.1

问题:

1.80;数组s1占用字节数;s1的长度。

2.不能;原因是s1[N]为字符数组,s1为数组起始地址,不可以直接用字符串进行赋值。

3.是。

实验任务2.2

源代码

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #define N 80
 5 int main(){
 6    char *s1="Learning makes me happy";
 7    char *s2="Learning makes me sleepy";
 8    char *tmp;
 9    printf("sizeof(s1)vs.strlen(s1):\n");
10    printf("sizeof(s1)=%d\n",sizeof(s1));
11    printf("strlen(s1)=%d\n",strlen(s1));
12 
13    printf("\nbefore swap:\n");
14    printf("s1:%s\n",s1);
15    printf("s2:%s\n",s2);
16 
17    printf("\nswapping...\n");
18    tmp=s1;
19    s1=s2;
20    s2=tmp;
21    printf("\nafter swap:\n");
22    printf("s1:%s\n",s1);
23    printf("s2:%s\n",s2);
24    system("pause");
25    return 0;
26 }

运行结果截图

2.2

问题:

1."Learning makes me happy"该字符串的起始地址;地址指针占用字节数;字符串的长度。

2.不可以;2.1中表示将字符串赋值给字符数组,2.2表示将字符串的起始地址存储在指针s1中。

3.指针中两个字符串的地址;否。

实验任务3

源代码

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 int main(){
 5     int x[2][4]={{1,9,8,4},{2,0,4,9}};
 6     int i,j;
 7     int *ptr1;
 8     int(*ptr2)[4];
 9 
10     printf("输出1:使用数组名、下标直接访问二维数组元素\n");
11     for(i=0;i<2;++i){
12         for(j=0;j<4;++j){
13             printf("%d",x[i][j]);
14         printf("\n");
15         }
16     }
17     printf("\n输出2:使用指针数组ptr1(指向元素)间接访问\n");
18     for(ptr1=&x[0][0],i=0;ptr1<&x[0][0]+8;++ptr1,++i){
19        printf("%d",*ptr1);
20        if((i+1)%4==0)
21            printf("\n");
22     }
23     printf("\n输出3:使用指针变量ptr2(指向一维数组)间接访问\n");
24     for(ptr2=x;ptr2<x+2;++ptr2){
25        for(j=0;j<4;++j)
26            printf("%d",*(*ptr2+j));
27        printf("\n");
28     
29     }
30 
31    system("pause");
32    return 0;
33 }

运行结果截图

3.1

实验任务4

源代码

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define N 80
 4 void replace(char *str,char oid_char,char new_char);
 5 int main(){
 6    char text[N]="Programming is difficult or not,it is a question.";
 7 
 8    printf("原始文本:\n");
 9    printf("%s\n",text);
10    replace(text,'i','*');
11    printf("处理后文本:\n");
12    printf("%s\n",text);
13    system("pause");
14    return 0;
15 }
16 void replace(char *str,char old_char,char new_char){
17     int i;
18     while(*str){
19         if(*str==old_char)
20             *str=new_char;
21         str++;
22     }
23 }

运行结果截图

4

问题:

1.用“*”替换“i”。

2.可以。

实验任务5

源代码

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define N 80 
 4 char *str_trunc(char *str,char x);
 5 int main(){
 6    char str[N];
 7    char ch;
 8    while(printf("输入字符串:"),gets(str)!=NULL){
 9         printf("输入一个字符:");
10         ch=getchar();
11         printf("截断处理...\n");
12         str_trunc(str,ch);
13         printf("截断处理后的字符串:%s\n\n",str);
14         getchar();
15    }
16    system("pause");
17    return 0;
18 }
19 char *str_trunc(char *str,char x){
20     int i;
21     for(i=0;i<N;++i){
22         if(str[i]==x)
23             str[i]='\0';
24     }
25     return *str;
26 }

运行结果截图

5

问题:

1.第二组输入时开始出现错误。

2.吃掉多余的回车,保障多组输入正常。

实验任务6

源代码

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #define N 5 
 5 int check_id(char *str);
 6 int main(){
 7     char *pid[N]={"31010120000721656x",
 8                   "3301061996x0203301",
 9                   "53010220051126571",
10                   "510104199211197977",
11                   "53010220051126133Y"};
12     int i;
13     for(i=0;i<N;++i)
14         if(check_id(pid[i]))
15             printf("%s\tTrue\n",pid[i]);
16         else
17             printf("%s\tFalse\n",pid[i]);
18    system("pause");
19    return 0;
20 }
21 int check_id(char *str){
22     int i;
23     if(strlen(str)!=18)
24         return 0;
25     for(i=0;i<17;++i)
26         if((str[i]>='0'&&str[i]<='9')==0)
27             return 0;
28     if(str[17]=='x'||(str[17]>='0'&&str[17]<='9'))
29          return 1;
30     else
31         return 0;
32 
33 }

运行结果截图

6

实验任务7

源代码

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #define N 80 
 5 void encoder(char *str,int n);
 6 void decoder(char *str,int n);
 7 int main(){
 8    char words[N];
 9    int n;
10    printf("输入英文文本:");
11    gets(words);
12    printf("输入n:");
13    scanf("%d",&n);
14    printf("编译后的英文文本:");
15    encoder(words,n);
16    printf("%s\n",words);
17    printf("对编码后的英文文本编码:");
18    decoder(words,n);
19    printf("%s\n",words);
20    system("pause");
21    return 0;
22 }
23 void encoder(char *str,int n){
24     int i;
25     int m=strlen(str);
26     for(i=0;i<m;++i){
27         if(str[i]>='a'&&str[i]<='z')
28             str[i]='a'+(str[i]-'a'+n)%26;
29         else if(str[i]>='A'&&str[i]<='Z')
30             str[i]='A'+(str[i]-'A'+n)%26;
31     }
32 }
33 void decoder(char *str,int n){
34     int i;
35     int m=strlen(str);
36     for(i=0;i<m;++i){
37         if(str[i]>='a'&&str[i]<='z'){
38             int m1 = (str[i] - 'a' - n) % 26;
39             str[i] = 'a' + (m1 < 0 ? m1 + 26 : m1);}
40         else if(str[i]>='A'&&str[i]<='Z'){
41             int m1 = (str[i] - 'A' - n) % 26;
42             str[i] = 'A' + (m1 < 0 ? m1 + 26 : m1);}
43     }
44     }

运行结果截图

7.1

7.2

7.3

实验任务8

源代码1.c

1 #include<stdio.h>
2 int main(int argc,char *argv[]){
3     int i;
4     for(i=1;i<argc;++i)
5         printf("hello,%s\n",argv[i]);
6     return 0;
7 }

运行结果截图

8.1

源代码2.c

 1 #include<stdio.h>
 2 #include<string.h>
 3 void sort(int n,char *s[]);
 4 int main(int argc,char *argv[]){
 5     int i;
 6     sort(argc-1,argv+1);
 7     for(i=1;i<argc;++i)
 8         printf("hello,%s\n",argv[i]);
 9     return 0;
10 }
11 void sort(int n,char *s[]){
12    int i,j;
13    char *tmp;
14    for(i=0;i<n-1;++i){
15        for(j=0;j<n-1-i;++j){
16            if(strcmp(s[j],s[j+1])>0){
17               tmp=s[j];
18               s[j]=s[j+1];
19               s[j+1]=tmp;
20            }
21        }
22    
23    }
24 }

运行结果截图

8.2

 

 

 

 

 

 

 

posted @ 2025-12-08 16:42  wsh12345  阅读(0)  评论(0)    收藏  举报