实验5
实验任务1
task1_1.c
问题1:找到最大值和最小值。
问题2:pmin,pmax都指向a[0]。
运行结果:

task1_2.c
问题1:find_max功能是找到最大值,返回的是最大值对应数组的地址
问题2:可以。
运行结果:

实验任务2
task2_1.c
问题1:sizeof(s1)计算的是数组s1所占字节数,strlen(s1)统计的是数组s1有多少字符
问题2:不能,数组不能直接赋值。
问题3:交换了。
运行结果:

task2_2.c
问题1:s1存放的是字符串的地址,sizeof(s1)计算的是地址占的内存,strlen(s1)统计的是字符数。
问题2:可以。task2_1.c中的line6是将字符串给到一个数组,task2_2.c中的line6是将字符串从指针的起始位置开始赋值。
问题3:交换的是s1和s2存储的地址,在内存中未交换。
运行结果:

实验任务3
问题1:指向一个二维数组的指针
问题2:指向4个指针的数组
运行结果:

实验任务4
问题1:将字符串中的指定字符替换为其他字符。
问题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 char *str_trunc(char *str, char x) { 24 int i; 25 for(i=0;*str!=x;i++,str++){} 26 *str = '\0'; 27 return str; 28 }
运行结果:

问题1:多次输入时,只有第一次可以正常输入.。line18是为了清空已存储的字符串。
实验任务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 // 函数定义 26 // 功能: 检查指针str指向的身份证号码串形式上是否合法 27 // 形式合法,返回1,否则,返回0 28 int check_id(char *str) { 29 int i; 30 if(strlen(str)!=18) return 0; 31 for(i=0;i<17;i++) { 32 if(str[i]<'0'||str[i]>'9') return 0; 33 } 34 if((str[17]<'0'||str[17]>'9')&&str[17]!='X'){ 35 return 0; 36 } 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 int main() { 6 char words[N]; 7 int n; 8 printf("输入英文文本: "); 9 gets(words); 10 printf("输入n: "); 11 scanf("%d", &n); 12 printf("编码后的英文文本: "); 13 encoder(words, n); 14 printf("%s\n", words); 15 // 函数调用 16 printf("对编码后的英文文本解码: "); 17 decoder(words, n); // 函数调用 18 printf("%s\n", words); 19 return 0; 20 } 21 /*函数定义 22 功能:对str指向的字符串进行编码处理 23 编码规则: 24 对于a~z或A~Z之间的字母字符,用其后第n个字符替换; 其它非字母字符,保持不变 25 */ 26 void encoder(char *str, int n) { 27 int i; 28 char s; 29 for (i=0;str[i]!='\0';i++) { 30 if (str[i]>'a'&&str[i]<='z') { 31 s=(str[i]-'a'+n+26)%26+'a'; 32 } 33 else if (str[i]>='A'&&str[i]<='Z') { 34 s=(str[i]-'A'+n+26)%26+'A'; 35 } 36 else { 37 s=str[i]; 38 } 39 str[i]=s; 40 } 41 } 42 /*函数定义 43 功能:对str指向的字符串进行解码处理 44 解码规则: 45 对于a~z或A~Z之间的字母字符,用其前面第n个字符替换; 其它非字母字符,保持不变 46 */ 47 void decoder(char *str, int n) { 48 int i; 49 char s; 50 for (i=0;str[i]!='\0';i++) { 51 if (str[i]>'a'&&str[i]<='z') { 52 s=(str[i]-'a'-n+26)%26+'a'; 53 } 54 else if (str[i]>='A'&&str[i]<='Z') { 55 s=(str[i]-'A'-n+26)%26+'A'; 56 } 57 else { 58 s=str[i]; 59 } 60 str[i]=s; 61 } 62 }
运行结果



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


浙公网安备 33010602011771号