实验5
实验任务1.1
源代码
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 5 4 void input(int x[],int n); 5 void output(int x[],int n); 6 void find_min_max(int x[],int n,int *pmin,int *pmax); 7 int main(){ 8 int a[N]; 9 int min,max; 10 printf("录入%d个数据:\n",N); 11 input(a,N); 12 printf("数据是:\n"); 13 output(a,N); 14 printf("数据处理...\n"); 15 find_min_max(a,N,&min,&max); 16 printf("输出结果:\n"); 17 printf("min=%d,max=%d\n",min,max); 18 system("pause"); 19 return 0; 20 } 21 void input(int x[],int n){ 22 int i; 23 for(i=0;i<n;++i){ 24 scanf("%d",&x[i]); 25 } 26 } 27 void output(int x[],int n){ 28 int i; 29 for(i=0;i<n;++i){ 30 printf("%d",x[i]); 31 printf("\n"); 32 } 33 } 34 void find_min_max(int x[],int n,int *pmin,int *pmax){ 35 int i; 36 *pmin=*pmax=x[0]; 37 for(i=0;i<n;++i){ 38 if(x[i]<*pmin) 39 *pmin=x[i]; 40 else if(x[i]>*pmax) 41 *pmax=x[i]; 42 } 43 }
运行结果截图

问题
1.找出数据中的最小值和最大值赋值给min和max;
2.指向x[0]所在的地址。
实验任务1.2
源代码
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 5 4 5 void input(int x[],int n); 6 void output(int x[],int n); 7 int *find_max(int x[],int n); 8 int main(){ 9 int a[N]; 10 int *pmax; 11 printf("录入%d个数据:\n",N); 12 input(a,N); 13 printf("数据是:\n"); 14 output(a,N); 15 printf("数据处理...\n"); 16 pmax=find_max(a,N); 17 printf("输出结果:\n"); 18 printf("max=%d\n",*pmax); 19 system("pause"); 20 return 0; 21 } 22 void input(int x[],int n){ 23 int i; 24 for(i=0;i<n;++i){ 25 scanf("%d",&x[i]); 26 } 27 } 28 void output(int x[],int n){ 29 int i; 30 for(i=0;i<n;++i) 31 printf("%d ",x[i]); 32 printf("\n"); 33 } 34 int *find_max(int x[],int n){ 35 int max_index=0; 36 int i; 37 for(i=0;i<n;++i) 38 if(x[i]>x[max_index]) 39 max_index=i; 40 41 return &x[max_index]; 42 }
运行结果截图

问题:
1.遍历数据找出最大值,并将最大值所在地址赋值给max_index;最大值所在地址指针。
2.可以。
实验任务2
源代码
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define N 80 5 int main(){ 6 char s1[N]="Learning makes me happy"; 7 char s2[N]="Learning makes me sleepy"; 8 char tmp[N]; 9 printf("sizeof(s1)vs.strlen(s1):\n"); 10 printf("sizeof(s1)=%d\n",sizeof(s1)); 11 printf("strlen(s1)=%d\n",strlen(s1)); 12 13 printf("\nbefore swap:\n"); 14 printf("s1:%s\n",s1); 15 printf("s2:%s\n",s2); 16 17 printf("\nswapping...\n"); 18 strcpy(tmp,s1); 19 strcpy(s1,s2); 20 strcpy(s2,tmp); 21 printf("\nafter swap:\n"); 22 printf("s1:%s\n",s1); 23 printf("s2:%s\n",s2); 24 system("pause"); 25 return 0; 26 }
运行结果截图

问题:
1.80;数组s1占用字节数;s1的长度。
2.不能;原因是s1[N]为字符数组,s1为数组起始地址,不可以直接用字符串进行赋值。
3.是。
实验任务2.2
源代码
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define N 80 5 int main(){ 6 char *s1="Learning makes me happy"; 7 char *s2="Learning makes me sleepy"; 8 char *tmp; 9 printf("sizeof(s1)vs.strlen(s1):\n"); 10 printf("sizeof(s1)=%d\n",sizeof(s1)); 11 printf("strlen(s1)=%d\n",strlen(s1)); 12 13 printf("\nbefore swap:\n"); 14 printf("s1:%s\n",s1); 15 printf("s2:%s\n",s2); 16 17 printf("\nswapping...\n"); 18 tmp=s1; 19 s1=s2; 20 s2=tmp; 21 printf("\nafter swap:\n"); 22 printf("s1:%s\n",s1); 23 printf("s2:%s\n",s2); 24 system("pause"); 25 return 0; 26 }
运行结果截图

问题:
1."Learning makes me happy"该字符串的起始地址;地址指针占用字节数;字符串的长度。
2.不可以;2.1中表示将字符串赋值给字符数组,2.2表示将字符串的起始地址存储在指针s1中。
3.指针中两个字符串的地址;否。
实验任务3
源代码
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main(){ 5 int x[2][4]={{1,9,8,4},{2,0,4,9}}; 6 int i,j; 7 int *ptr1; 8 int(*ptr2)[4]; 9 10 printf("输出1:使用数组名、下标直接访问二维数组元素\n"); 11 for(i=0;i<2;++i){ 12 for(j=0;j<4;++j){ 13 printf("%d",x[i][j]); 14 printf("\n"); 15 } 16 } 17 printf("\n输出2:使用指针数组ptr1(指向元素)间接访问\n"); 18 for(ptr1=&x[0][0],i=0;ptr1<&x[0][0]+8;++ptr1,++i){ 19 printf("%d",*ptr1); 20 if((i+1)%4==0) 21 printf("\n"); 22 } 23 printf("\n输出3:使用指针变量ptr2(指向一维数组)间接访问\n"); 24 for(ptr2=x;ptr2<x+2;++ptr2){ 25 for(j=0;j<4;++j) 26 printf("%d",*(*ptr2+j)); 27 printf("\n"); 28 29 } 30 31 system("pause"); 32 return 0; 33 }
运行结果截图

实验任务4
源代码
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 80 4 void replace(char *str,char oid_char,char new_char); 5 int main(){ 6 char text[N]="Programming is difficult or not,it is a question."; 7 8 printf("原始文本:\n"); 9 printf("%s\n",text); 10 replace(text,'i','*'); 11 printf("处理后文本:\n"); 12 printf("%s\n",text); 13 system("pause"); 14 return 0; 15 } 16 void replace(char *str,char old_char,char new_char){ 17 int i; 18 while(*str){ 19 if(*str==old_char) 20 *str=new_char; 21 str++; 22 } 23 }
运行结果截图

问题:
1.用“*”替换“i”。
2.可以。
实验任务5
源代码
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 80 4 char *str_trunc(char *str,char x); 5 int main(){ 6 char str[N]; 7 char ch; 8 while(printf("输入字符串:"),gets(str)!=NULL){ 9 printf("输入一个字符:"); 10 ch=getchar(); 11 printf("截断处理...\n"); 12 str_trunc(str,ch); 13 printf("截断处理后的字符串:%s\n\n",str); 14 getchar(); 15 } 16 system("pause"); 17 return 0; 18 } 19 char *str_trunc(char *str,char x){ 20 int i; 21 for(i=0;i<N;++i){ 22 if(str[i]==x) 23 str[i]='\0'; 24 } 25 return *str; 26 }
运行结果截图

问题:
1.第二组输入时开始出现错误。
2.吃掉多余的回车,保障多组输入正常。
实验任务6
源代码
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define N 5 5 int check_id(char *str); 6 int main(){ 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 system("pause"); 19 return 0; 20 } 21 int check_id(char *str){ 22 int i; 23 if(strlen(str)!=18) 24 return 0; 25 for(i=0;i<17;++i) 26 if((str[i]>='0'&&str[i]<='9')==0) 27 return 0; 28 if(str[17]=='x'||(str[17]>='0'&&str[17]<='9')) 29 return 1; 30 else 31 return 0; 32 33 }
运行结果截图

实验任务7
源代码
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define N 80 5 void encoder(char *str,int n); 6 void decoder(char *str,int n); 7 int main(){ 8 char words[N]; 9 int n; 10 printf("输入英文文本:"); 11 gets(words); 12 printf("输入n:"); 13 scanf("%d",&n); 14 printf("编译后的英文文本:"); 15 encoder(words,n); 16 printf("%s\n",words); 17 printf("对编码后的英文文本编码:"); 18 decoder(words,n); 19 printf("%s\n",words); 20 system("pause"); 21 return 0; 22 } 23 void encoder(char *str,int n){ 24 int i; 25 int m=strlen(str); 26 for(i=0;i<m;++i){ 27 if(str[i]>='a'&&str[i]<='z') 28 str[i]='a'+(str[i]-'a'+n)%26; 29 else if(str[i]>='A'&&str[i]<='Z') 30 str[i]='A'+(str[i]-'A'+n)%26; 31 } 32 } 33 void decoder(char *str,int n){ 34 int i; 35 int m=strlen(str); 36 for(i=0;i<m;++i){ 37 if(str[i]>='a'&&str[i]<='z'){ 38 int m1 = (str[i] - 'a' - n) % 26; 39 str[i] = 'a' + (m1 < 0 ? m1 + 26 : m1);} 40 else if(str[i]>='A'&&str[i]<='Z'){ 41 int m1 = (str[i] - 'A' - n) % 26; 42 str[i] = 'A' + (m1 < 0 ? m1 + 26 : m1);} 43 } 44 }
运行结果截图



实验任务8
源代码1.c
1 #include<stdio.h> 2 int main(int argc,char *argv[]){ 3 int i; 4 for(i=1;i<argc;++i) 5 printf("hello,%s\n",argv[i]); 6 return 0; 7 }
运行结果截图

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


浙公网安备 33010602011771号