实验五
实验8:
View Code
View Code
View Code
View Code
View Code
View Code
View Code
View Code
View Code
1 #include <stdio.h> 2 #include<string.h> 3 void sort(int n,char *x[]); 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 10 return 0; 11 } 12 void sort(int n,char *x[]){ 13 int i,j; 14 char *t; 15 for(i=0;i<n-i;i++){ 16 for(j=0;j<n-i-1;j++){ 17 if(strcmp(x[j],x[j+1])>0){ 18 t=x[j]; 19 x[j]=x[j+1]; 20 x[j+1]=t; 21 } 22 } 23 } 24 25 26 }

实验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",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 void output(int x[],int n){ 27 int i=0; 28 for(i=0;i<n;++i) 29 printf("%d",x[i]); 30 printf("\n"); 31 } 32 void find_min_max(int x[],int n,int *pmin,int *pmax){ 33 int i; 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 } 41 }

问题1:函数的作用是找出数组中最大值与最小值。
问题2:指向x[0]的地址。
实验1.2:
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 # define N 5 4 void input(int x[], int n); 5 void output(int x[], int n); 6 int* find_max(int x[], int n); 7 int main() { 8 int a[N]; 9 int* pmax; 10 printf("录入%d个数据:\n", N); 11 input(a, N); 12 printf("数据是: \n"); 13 output(a, N); 14 printf("数据处理...\n"); 15 pmax = find_max(a, N); 16 printf("输出结果:\n"); 17 printf("max = %d\n", *pmax); 18 return 0; 19 } 20 void input(int x[], int n) { 21 int i; 22 for (i = 0; i < n; ++i) 23 scanf("%d", &x[i]); 24 } 25 void output(int x[], int n) { 26 int i; 27 for (i = 0; i < n; ++i) 28 printf("%d ", x[i]); 29 printf("\n"); 30 } 31 int* find_max(int x[], int n) { 32 int max_index = 0; 33 int i; 34 for (i = 0; i < n; ++i) 35 if (x[i] > x[max_index]) 36 max_index = x[i]; 37 return &x[max_index]; 38 }
问题1:函数的功能是找到最大值的地址。返回的是最大值的地址
问题2:可以
实验2.1:
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.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 temp[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 printf("\nbefore swap: \n"); 13 printf("s1: %s\n", s1); 14 printf("s2: %s\n", s2); 15 printf("\nswapping...\n"); 16 strcpy(temp, s1); 17 strcpy(s1, s2); 18 strcpy(s2, temp); 19 printf("\nafter swap: \n"); 20 printf("s1: %s\n", s1); 21 printf("s2: %s\n", s2); 22 return 0; 23 }

问题1:s1的大小为80,sizeof统计的是数组大小,strlen统计的是字符串长度。
问题2:不能将一个字符串赋值给一个数组的地址。
问题3: 交换了。
实验2.2:
1 #define _CRT_SECURE_NO_WARNINGS 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 sleepy"; 8 char *temp; 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: %s\n", s1); 14 printf("s2: %s\n", s2); 15 printf("\nswapping...\n"); 16 temp = s1; 17 s1 = s2; 18 s2 = temp; 19 printf("\nafter swap: \n"); 20 printf("s1: %s\n", s1); 21 printf("s2: %s\n", s2); 22 return 0; 23 }

问题1:s1存放的是“Learning ......"的起始地址。sizeof(s1)计算的是字符串地址占用的字节数。strlen统计的是字符串长度。
问题2:能。区别在于2.2是将字符串的地址赋给了指针变量s1,这是合法的。
问题3:交换的是s1与s2所指向的地址。两个字符串没交换。
实验3:
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 27 return 0; 28 }

实验4:
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 while (*str) { 16 if (*str == old_char) 17 *str = new_char; 18 str++; 19 } 20 }

问题1:replace的功能是将特定字符换成设定的新字符。
问题2:可以
实验5:
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.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 return 0; 17 } 18 char* str_trunc(char* str, char x) { 19 while (*str) { 20 if (*str == x) { 21 *str = '\0'; 22 break; 23 } 24 else 25 str++; 26 } 27 return str; 28 }

实验6:
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.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 } 19 20 return 0; 21 } 22 int check_id(char* str) { 23 int i = 0; 24 char* p = str; 25 while (*str) { 26 if (*str >= '0' && *str <= '9') 27 i++, str++; 28 else 29 break; 30 } 31 if (i == 18) 32 return 1; 33 else if (i == 17 && (*(p+17) == 'x' || *(p + 17) == 'X')) 34 return 1; 35 else 36 return 0; 37 38 }

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 char words[N]; 8 int n; 9 printf("输入英文文本:"); 10 gets(words); 11 printf("输入n:"); 12 scanf("%d", &n); 13 printf("编码后的英文文本:"); 14 encoder(words, n); 15 printf("%s\n", words); 16 printf("对编码后的英文解码:"); 17 decoder(words, n); 18 printf("%s\n", words); 19 return 0; 20 } 21 void encoder(char* str, int n) { 22 char* p = str; 23 while(*p){ 24 if (*p >= 'a' && *p <= 'z') { 25 *p = 'a' + (*p - 'a' + n) % 26; 26 } 27 else if(*p>='A'&&*p<='Z') 28 *p = 'A' + (*p-'A' + n) % 26; 29 p++; 30 } 31 } 32 void decoder(char* str, int n) { 33 while (*str) { 34 if (*str >= 'a' && *str <= 'z') { 35 *str = 'a' + (*str - 'a' - n+26) % 26; 36 } 37 else if (*str >= 'A' && *str <= 'Z') { 38 *str = 'A' + (*str - 'A' - n + 26) % 26; 39 } 40 str++; 41 } 42 }




浙公网安备 33010602011771号