实验五
任务一:

(1)计算数组a[N]中的最大数和最小数
(2)pmin->&min pmax->&max

(1)函数 find_max 功能是计算数组a[N]中的最大数;返回的是最大数的地址
(2)可以
任务二:

(1)s1的大小是80; sizeof(s1) 计算的是数组s1所占的内存; strlen(s1) 统计的是数组s1中的有效字符数
(2)不能,数组名是指针常量,不可对其赋值
(3)数组s1和s2中的内容交换

(1)s1中存放的是字符串首字符的地址; sizeof(s1) 计算指针变量s1占的内存; strlen(s1) 统计指针变量s1指向的字符串的有效字符数
(2)能替换;数组名是不可修改的地址常量,不可对其赋值;指针是变量,可以对其赋值
(3)交换两个指针指向的地址;没有交换
任务三:

第一个指的是指向有四个元素的一维数组的指针,第二个指的是有四个指针的数组
任务四:

(1)replace的功能是把文本里的字母“i”换成“*”。
(2)可以,对输出没有影响。
任务五:
#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; } char *str_trunc(char *str,char x) { char *start = str; while(*str != '\0') { if(*str == x) { *str = '\0'; break; } str++; } return start; }

删掉会把上一次输入的回车键当成字符串
任务六:
#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; } int check_id(char *str) { int length; length = strlen(str); if(length != 18) return 0; for(int i = 0; i < 17; i++) { if(str[i] < '0' || str[i] > '9') return 0; } char end = str[17]; if(!((end >= '0' && end <= '9') || end == 'X')) return 0; return 1; }

任务七
#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; } void encoder(char *str,int n) { n = n % 26; while(*str != '\0') { if(*str >= 'a'&&*str <= 'z') *str = (*str - 'a' + n)%26 + 'a'; else if(*str >= 'A'&&*str <= 'Z') *str = (*str - 'A' + n)%26 + 'A'; str++; } } void decoder(char *str,int n) { n = n % 26; while(*str != '\0') { if(*str >= 'a'&&*str <= 'z') *str = (*str - 'a' - n + 26)%26 + 'a'; else if(*str >= 'A'&&*str <= 'Z') *str = (*str - 'A' - n + 26)%26 + 'A'; str++; } }

任务八
#include<stdio.h> #include <string.h> void sort(int n,char *s[]); int main(int argc,char *argv[]) { int i; sort(argc-1,argv+1); for(i = 1;i < argc;++i) printf("hello,%s\n",argv[i]); return 0; } void sort(int n,char *s[]) { int i,j; char *tmp; for(i = 0;i < n-1;++i) for(j = 0;j < n-1-i;++j) if(strcmp(s[j],s[j+1])>0) { tmp = s[j]; s[j] = s[j+1]; s[j+1] = tmp; } }

浙公网安备 33010602011771号