实验5
任务1
task1 1功能是将数组最小值的地址赋值给pmin,最大值的地址赋值给pmax.
2 都指向的是数组第一个数
task2 1功能是寻找数组中最大的数,返回的是输入的数据里面最大的数字
2不可以,return的是一个指针变量,这里应该返回的是指针变量所指的地址中的数字
任务2
task1 1s1大小为80,sizeof计算的是数组s1提前申请的总内存为80,strlen计算的是数组s1实际所占用的内存为23
2不能替换,因为数组不可以赋值
3交换
task2 1字符串,预计占用的内存空间,实际占有的内存空间
2可以,原式用的数组,这里用的指针代替
3交换的指针变量,字符串不交换
任务3

任务4
1将text中所有的i转换成*
2可以
任务5
#include <stdio.h> #define N 80 char *str_trunc(char *str, char x); int main() { char str[N]; char ch; while(printf("输入字符串: "), gets(str) != NULL) { printf("输入一个字符: "); ch = getchar(); printf("截断处理...\n"); str_trunc(str, ch); // 函数调用 printf("截断处理后的字符串: %s\n\n", str); getchar(); } return 0; } // 函数str_trunc定义 // 功能: 对字符串作截断处理,把指定字符自第一次出现及其后的字符全部删除, 并返回字符串地址 // 待补足... // xxx char *str_trunc(char *str, char x){ int i; for(i=0;str[i]!='\0';i++) {if(str[i]==x) str[i]='\0'; } return str; }

输出完成后跳过第二次循环的字符串输入过程,直接开始输入字符。防止代码错乱导致直接开始字符输入
任务6
#include <stdio.h> #include <string.h> #define N 5 int check_id(char *str); // 函数声明 int main() { char *pid[N] = {"31010120000721656X", "3301061996X0203301", "53010220051126571", "510104199211197977", "53010220051126133Y"}; int i; for (i = 0; i < N; ++i) if (check_id(pid[i])) // 函数调用 printf("%s\tTrue\n", pid[i]); else printf("%s\tFalse\n", pid[i]); return 0; } // 函数定义 // 功能: 检查指针str指向的身份证号码串形式上是否合法 // 形式合法,返回1,否则,返回0 int check_id(char *str) { // 补足函数实现 { // ... int i; if(strlen(str)!=18) return 0; for(i=0;i<17;i++){ if(str[i]<'0'||str[i]>'9') return 0; } if(!(str[17]=='X'||(str[17]>='0'&&str[17]<='9'))) return 0; } return 1; }

任务7
#include <stdio.h> #define N 80 void encoder(char *str, int n); // 函数声明 void decoder(char *str, int n); // 函数声明 int main() { char words[N]; int n; printf("输入英文文本: "); gets(words); printf("输入n: "); scanf("%d", &n); printf("编码后的英文文本: "); encoder(words, n); // 函数调用 printf("%s\n", words); printf("对编码后的英文文本解码: "); decoder(words, n); // 函数调用 printf("%s\n", words); return 0; } /*函数定义 功能:对str指向的字符串进行编码处理 编码规则: 对于a~z或A~Z之间的字母字符,用其后第n个字符替换; 其它非字母字符,保持不变 */ void encoder(char *str, int n) { // 补足函数实现 // ××× int i; while(str[i]!='\0') { if(str[i]>='a'&&str[i]<='z') str[i]='a'+(str[i]-'a'+n)%26; else if(str[i]>='A'&&str[i]<='Z') { str[i]='A'+(str[i]-'A'+n)%26; } i++; } } /*函数定义 功能:对str指向的字符串进行解码处理 解码规则: 对于a~z或A~Z之间的字母字符,用其前面第n个字符替换; 其它非字母字符,保持不变 */ void decoder(char *str, int n) { // 补足函数实现 // ××× int i; while(str[i]!='\0') { if(str[i]>='a'&&str[i]<='z') str[i]='a'+(str[i]-'a'-n)%26; else if(str[i]>='A'&&str[i]<='Z') { str[i]='A'+(str[i]-'A'-n)%26; } i++; } }

(这个为什么编码的时候可以从y得到a,解码的时候解不回去啊?)
任务8
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { int i,j; char *temp; for(i=0;i<argc-1;i++) for(j=1;j<argc-1-i;j++) if(strcmp(argv[j],argv[j+1]) > 0){ temp=argv[j]; argv[j]=argv[j+1]; argv[j+1]=temp; } for(i = 1; i < argc; ++i) printf("hello, %s\n", argv[i]); return 0; }
浙公网安备 33010602011771号