实验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 }

结果;

问提    用指针的最大值和最小值的地址来实现输出

下【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 可以 数组字符数 实际字符数

问题哦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;learn 的地址  地址所占字符数 表示字符串的字符数

问题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 }

结果;

实验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 }

结果;

问题一;将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  }

结果

问题;自动输入换行符,吸收输入字符后的一个换行符

posted @ 2024-12-08 22:28  九泪纵横  阅读(6)  评论(0编辑  收藏  举报