实验5
task1_1
1 #include<stdio.h> 2 #define _CRT_SECURE_NO_WARNINGS 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 11 printf("录入%d个数据:\n", N); 12 input(a, N); 13 14 printf("数据是:\n"); 15 output(a, N); 16 17 printf("数据处理...\n"); 18 find_min_max(a, N, &min, &max); 19 printf("输出结果:\n"); 20 printf("min =%d,max = %d\n", min, max); 21 return 0; 22 23 24 } 25 void input(int x[], int n) { 26 for (int i = 0; i < n; ++i) 27 scanf_s("%d", &x[i]); 28 29 } 30 void output(int x[], int n) { 31 for (int i = 0; i < n; i++) 32 printf("%d", x[i]); 33 printf("\n"); 34 35 } 36 void find_min_max(int x[], int n, int* pmin, int* pmax) { 37 *pmin = *pmax = x[0]; 38 for (int i = 0; i < n; i++) 39 if (x[i] < *pmin) 40 *pmin = x[i]; 41 else if (x[i] > *pmax) 42 *pmax = x[i]; 43 44 }
ans1:find_min_max的用来将最大和最小值用指针指出后供再输出
ans2:当运行到45行时指向于x[0];也就是第一个数字;
task1_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 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 return 0; 20 } 21 22 void input(int x[], int n) { 23 for (int i = 0; i < n; i++) 24 scanf_s("%d", &x[i]); 25 } 26 27 void output(int x[], int n) { 28 for (int i = 0; i < n; i++) { 29 printf("%d ", x[i]); sh 30 } 31 printf("\n"); 32 } 33 34 int* find_max(int x[], int n) { 35 int max_index = 0; 36 for (int i = 1; i < n; i++) { 37 if (x[i] > x[max_index]) { 38 max_index = i; 39 } 40 } 41 return &x[max_index]; 42 }
运行结果

find_max 的作用是将指针指向于数组中最大的量
运行结果因该是对的先将ptr指向x[0];
后再进行比较当数组值大时将ptr指向较大的值
task2_1
源代码
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #define N 80 5 6 int main() { 7 char s1[N] = "Learning makes me happy"; 8 char s2[N] = "Learning makes me sleepy"; 9 char tmp[N]; 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 printf("\nbefore swap:\n"); 14 printf("s1:%s\n", s1); 15 printf("s2:%s\n", s2); 16 printf("\nswapping...\n"); 17 strcpy(tmp, s1); 18 strcpy(s1, s2); 19 strcpy(s2, tmp); 20 printf("\nafter swap:\n"); 21 printf("s1:%s\n", s1); 22 printf("s2:%s\n", s2); 23 return 0; 24 }
运行结果

ans1:s1的大小为80;sizeof表示数据在字节中内存中所占的字节数,strlen表示字符的数量
ans2:不能,因为s1是固定数组的地址,不可以被改变;
ans3:实现了交换
task2_2.
源代码
1 #define _CRT_SECURE_NO_WARNIMGS 2 #include<stdio.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 happy"; 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 printf("\nbefore swap:\n"); 13 printf("s1:s2\n", s1); 14 printf("s2:s1\n", s2); 15 printf("\nswapping...\n"); 16 tmp = s1; s1 = s2; s2 = tmp; 17 printf("\nafter swap:\n"); 18 printf("s1:%s\n", s1); 19 printf("s2:%s\n", s2); 20 return 0; 21 22 }
运行结果

ans1:s1中是首字母的地址,sizeof是s1所占的内存大小,strlen(s1)表示从L开始到\0的字符数
ans2:下方的代码是将L的地址给到s1而源代码也是这个意思;相较于task2_1这一段表示将其储存在只读区,而task2_1表示将这个字符串直接保存在数组中;
ans3:交换是指针所指的位置,两者在内存中并没有换位子;
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 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 printf("输出1:使用数组名、下标直接访问二维数组元素\n"); 9 for (i = 0; i < 2; ++i) { 10 for (j = 0; j < 4; ++j) 11 printf("%d", x[i][j]); 12 printf("\n"); 13 } 14 printf("\n输出2:使用指针变量ptr1(指向元素)间接访问\n"); 15 for (ptr1 = &x[0][0], i = 0; ptr1 < &x[0][0] + 8; ++ptr1, i++) { 16 printf("%d", *ptr1); 17 if ((i + 1) % 4 == 0) 18 printf("\n"); 19 } 20 printf("\n输出3:使用指针变量ptr2(指向元素)间接访问\n"); 21 for (ptr2 = x; ptr2 < x + 2; ++ptr2) { 22 for (j = 0; j < 4; j++) 23 printf("%d", *(*ptr2 + j)); 24 printf("\n"); 25 } 26 return 0; 27 }

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

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

task6
源代码
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #define N 5 4 int check_id(char* str); 5 int main() { 6 char* pid[N] = { 7 "31010120000721656X", 8 "3301061996X0203301", 9 "53010220051126571", 10 "510104199211197977", 11 "53010220051126133Y" 12 }; 13 for (int i = 0; i < N; ++i) 14 if (check_id(pid[i])) 15 printf("%s\tTure\n", pid[i]); 16 else 17 printf("%s\tFalse\n", pid[i]); 18 return 0; 19 } 20 int check_id(char* str) { 21 if (strlen(str) != 18) 22 return 0; 23 for (int i = 0; i < 17; i++) { 24 if (!(*(str + i) <= '9' && *(str + i) >= '0')) { 25 return 0; 26 } 27 } 28 if (!(*(str + 17) == 'X' || (*(str + 17) <= '9' && *(str + 17) >= '0'))) 29 return 0; 30 return 1; 31 }
运行结果

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

task8
源代码
1 #include<stdio.h> 2 #include <string.h> 3 #define _CRT_SECURE_NO_WARINGS 4 int main(int argc, char* argv[]) { 5 for (int h = 1; h < argc-1; h++) { 6 for (int t = 1; t < argc - h; t++) { 7 int *temp; 8 if (strcmp(argv[t], argv[t + 1] )> 0) { 9 temp = argv[t]; 10 argv[t ] = argv[t+1]; 11 argv[t+1] = temp; 12 } 13 } 14 15 } 16 17 18 19 20 int i; 21 for (i = 1; i < argc; ++i) { 22 printf("hello,%s\n", argv[i]); 23 } 24 25 26 }
运行结果


浙公网安备 33010602011771号