au0812

导航

 

task1.1

问题一:找出数组中的最大值和最小值;

问题二:指向一个x[0]的地址;

taks1.2

问题一:找出数组中最大值的地址,返回这个最大值的地址;

问题二:可以;

task2.1

问题一:80,sizeof统计的是系统为这个字符数组分配的字节个数总共为N=80个,strlen统计的是字符数组的字符个数包括空格;

问题二:不可以,

image

 编译器说我我试图把一个字符串常量直接赋值给一个char数组,而字符串常量与char数组不能用=赋值;

问题三:交换了,

image

 ;

task2.2

问题一:s1存放的是字符串首字母的地址,sizeof计算的是指针变量s1本身占用的内存字节数,strlen统计的是字符串的长度;

问题二:可以,2.2中运用了指针,先是定义了一个指向字符型数据的指针,然后把首字母的地址赋值给指针变量,这样就可以通过指针访问字符串。而2.1只是单纯定义了一个字符型数组,不能先定义后赋值;

问题三:交换的是s1与s2所指向的地址,字符串常量在内存中并没有交换;

task4

问题一:replace的功能是将字符串数组中的old-char变为new-char;

问题二:可以;

task5

 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 // 函数str_trunc定义
25 // 功能: 对字符串作截断处理,把指定字符自第一次出现及其后的字符全部删除, 并返回字符串地址
26 // 待补足...
27 // xxx
28 char *str_trunc(char *str,char x){
29     int i;
30     for(i=0;*(str+i)!='\0';i++){
31         if(*(str+i)==x)
32         break;
33     }
34     *(str+i)='\0';
35     return str;
36 }
View Code

截图

image

 问题:去掉之后多组输入就无法正常运行,原因是系统将回车当成了第二次输入的字符串,getchar()的作用就是存放回车;

task6

 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     for(int i=0;i<N;i++){    
30     if(strlen(str)!=18)
31     return 0;
32 }
33     for(int j=0;j<18;j++){
34         if(*(str+j)<'0'||*(str+j)>'9'&&*(str+j)!='X')
35         return 0;
36     }
37 
38 for(int i=0;i<N;i++){
39     for(int j=0;j<17;j++){
40         if(*(str+j)=='X')
41         return 0;
42     }
43 }
44  return 1;
45     
46 }
View Code

 

截图

image

 task7

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 80
 4 void encoder(char *str, int n); // 函数声明
 5 void decoder(char *str, int n); // 函数声明
 6 
 7 int main() {
 8     char words[N];
 9     int n;
10 
11     printf("输入英文文本: ");
12     gets(words);
13 
14     printf("输入n: ");
15     scanf("%d", &n);
16 
17     printf("编码后的英文文本: ");
18     encoder(words, n);      // 函数调用
19     printf("%s\n", words);
20 
21     printf("对编码后的英文文本解码: ");
22     decoder(words, n); // 函数调用
23     printf("%s\n", words);
24 
25     return 0;
26 }
27 
28 /*函数定义
29 功能:对str指向的字符串进行编码处理
30 编码规则:
31 对于a~z或A~Z之间的字母字符,用其后第n个字符替换; 其它非字母字符,保持不变
32 */
33 void encoder(char *str, int n) {
34    for(int i=0;i<strlen(str);i++){
35        if(*(str+i)>='a'&&*(str+i)<='z'){
36            *(str+i)+=n;
37        
38        if(*(str+i)>'z'){
39            *(str+i)-=26;
40        }
41 }
42    }
43    for(int i=0;i<strlen(str);i++){
44        if(*(str+i)>='A'&&*(str+i)<='Z'){
45            *(str+i)+=n;
46        
47        if(*(str+i)>'Z'){
48            *(str+i)-=26;
49        }
50 }
51    }
52 }
53 
54 /*函数定义
55 功能:对str指向的字符串进行解码处理
56 解码规则:
57 对于a~z或A~Z之间的字母字符,用其前面第n个字符替换; 其它非字母字符,保持不变
58 */
59 void decoder(char *str, int n) {
60     for(int i=0;i<strlen(str);i++){
61        if(*(str+i)>='a'&&*(str+i)<='z'){
62            *(str+i)-=n;
63        
64        if(*(str+i)<'a'){
65            *(str+i)+=26;
66        }
67 }
68    }
69    for(int i=0;i<strlen(str);i++){
70        if(*(str+i)>='A'&&*(str+i)<='Z'){
71            *(str+i)-=n;
72        
73        if(*(str+i)<'A'){
74            *(str+i)+=26;
75        }
76 }
77    }
78 }
View Code

 

image

 task8

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

 

image

 

posted on 2025-12-08 19:32  南信大Au  阅读(0)  评论(0)    收藏  举报