任务1-1

1.把数组中最大最小值赋给相应地址变量
2.min和max的地址
任务1-2

1.找到数组最大值,返回最早出现的最大值元素的地址。
2.可以
任务2

1.80Byte,s1占用字节数,s1实际上在\0截断前的占用字节数
2.不行。s1是地址常量。应该使用strcpy函数进行字符串拷贝赋值。
3.是。内容真的被交换了

1.新定义的字符串常量"Learning makes me happy"的首字符地址
这个地址的字节数
s1开头的字符串实际长度
可以。1是s1作为新定义的字符数组s1[ ]的首位元素地址,是地址常量。后者是char地址变量(指针)
常量不能赋值。变量可以。
交换s1s2存放的地址。只是指针指向的位置变了,字符串常量内存中不变位置。
任务3

数组名下标是利用数组的连续内存性质直接访问;元素指针每次++移动一个sizeof(int)字节大小;行指针每完成一行循环++移动sizeof(int)*N字节大小。
任务4

1.把字符数组里面的旧字符换成新字符
2.可以
任务5
1 #include <stdio.h> 2 #define N 80 3 char *str_trunc(char *str, char x); 4 int main() { 5 char str[N]; 6 char ch; 7 while(printf("ÊäÈë×Ö·û´®: "), gets(str) != NULL) { 8 printf("ÊäÈëÒ»¸ö×Ö·û: "); 9 ch = getchar(); 10 printf("½Ø¶Ï´¦Àí...\n"); 11 str_trunc(str, ch); // º¯Êýµ÷Óà 12 printf("½Ø¶Ï´¦ÀíºóµÄ×Ö·û´®: %s\n\n", str); 13 getchar(); 14 } 15 return 0; 16 } 17 char *str_trunc(char *str, char x){ 18 char *ptr=str; 19 while(true){ 20 if(*ptr==x){ 21 *ptr='\0'; 22 return str; 23 } 24 ptr++; 25 } 26 }

会出现下一次字符串为空。因为回车键被错误读取识别。getchar()用来吸收多余的\n
任务6
1 #include <stdio.h> 2 #include <string.h> 3 #define N 5 4 int check_id(char *str); // 函数声明 5 int main() 6 { 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 return 0; 19 } 20 int check_id(char *str) { 21 char *p=str; 22 int i; 23 if(strlen(str)!=18)return 0; 24 for(i=0;i<17;i++){ 25 if(!(*(p+i)>='0'&&*(p+i)<='9')) 26 return 0; 27 } 28 if(! ( (*(p+i)>='0'&&*(p+i)<='9') ||(*(p+i)=='X') ) ) 29 return 0; 30 return 1; 31 }

任务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 void encoder(char *str, int n) { 23 int i; 24 for(i=0;*(str+i);i++){ 25 if(*(str+i)>='a'&&*(str+i)<='z') 26 *(str+i)='a'+((int)*(str+i)-'a'+n)%26; 27 if(*(str+i)>='A'&&*(str+i)<='Z') 28 *(str+i)='A'+((int)*(str+i)-'A'+n)%26; 29 } 30 } 31 /*函数定义 32 功能:对str指向的字符串进行解码处理 33 解码规则: 34 对于a~z或A~Z之间的字母字符,用其前面第n个字符替换; 其它非字母字符,保持不变 35 */ 36 void decoder(char *str, int n) { 37 int i; 38 for(i=0;*(str+i);i++){ 39 if(*(str+i)>='a'&&*(str+i)<='z') 40 *(str+i)='a'+((int)*(str+i)-'a'+26-n)%26; 41 if(*(str+i)>='A'&&*(str+i)<='Z') 42 *(str+i)='A'+((int)*(str+i)-'A'+26-n)%26; 43 } 44 }

8
1 #include <stdio.h> 2 #include <string.h> 3 int main(int argc, char *argv[]) { 4 int i; 5 char *t; 6 for(i=argc;i>1;--i) 7 for(j=2;j<=i;j++){ 8 if(strcmp(argv[j],argv[j-1])<0){ 9 t=argv[j]; 10 argv[j]=argv[j-1]; 11 argv[j-1]=t; 12 } 13 } 14 15 for(i = 1; i < argc; ++i) 16 printf("hello, %s\n", argv[i]); 17 return 0; 18 }
浙公网安备 33010602011771号