实验5

实验1

源代码1

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

问题1:用指针指向最大数和最小数的地址 实现输出

问题2:x[0]

源代码2

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

问题1:返回最大数的索引

问题2:可以

实验2

源代码1

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

运行结果

问题1:80,数组字符数,实际字符数

问题2:不能

问题3:可以

源代码2

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

运行结果

问题1:Learning makes me happy的地址 地址所占字符数 表示的字符串的字符数

问题2:可以

问题3:地址,没有

实验3

源代码

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

运行结果

问题1:二维数组的第一行即二维数组x的x[0]元素的地址

问题2:int *ptr[4];表示一个含有四个元素的指针数组 存放的都是地址

实验4

源代码

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

运行结果

 

 问题1:replace的功能是将句子中的i换成*

问题2:可以

实验5

源代码

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

运行结果

问题:第二次的字符串自动输入为换行符,吸收输入一个字符后的换行符

实验6

源代码

 

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

运行结果

实验7

源代码

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

运行结果

实验8

源代码

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

运行结果

 

posted @ 2024-12-08 21:13  yuanjialiang  阅读(4)  评论(0编辑  收藏  举报