任务1
代码1.
1 #include<stdio.h> 2 #define N 5 3 void input(int x[],int n); 4 void output(int x[],int n); 5 void fin_min_max(int x[],int n,int *pmin,int *pmax); 6 7 int main(){ 8 int a[N]; 9 int min,max; 10 11 printf("录入%d个数据:\n",N); 12 input(a,N); 13 14 printf("数据是:\n"); 15 output(a,N); 16 17 printf("数据处理...\n"); 18 find_min_max(a,N,&min,&max); 19 20 printf("输出结果:\n"); 21 printf("min=%d,max=%d\n",min,max); 22 23 return 0; 24 } 25 26 void input(int x[],int n){ 27 int i; 28 for(i=0;i<n;++i) 29 scanf("%d",&x[i]); 30 } 31 32 void output(int x[],int n){ 33 int i; 34 for(i=0;i<n;++i) 35 printf("%d",x[i]); 36 printf("\n"); 37 } 38 39 void find_min_max(int x[],int n,int *pmin, int *pmax){ 40 int i; 41 *pmin=*pmax=x[0]; 42 43 for(i=0;i<n;++i) 44 if(x[i]<*pmin) 45 *pmin=x[i]; 46 else if(x[i]>*pmax) 47 *pmax=x[i]; 48 49 }View Code
运行结果
1.find_min_max功能是找到五个数据中的最大值和最小值
2,pmin,pmax指向x[0]的地址
代码1.2
1 #include<stdio.h> 2 #define N 5 3 void input(int x[],int n); 4 void output(int x[],int n); 5 int *find_max(int x[],int n); 6 7 int main(){ 8 int a[N]; 9 int *pmax; 10 11 printf("录入%d个数据:\n",N); 12 input(a,N); 13 14 printf("数据是:\n"); 15 output(a,N); 16 17 printf("数据处理...\n"); 18 pmax=find_max(a,N); 19 20 printf("输出结果:\n"); 21 printf("max=%d\n",*pmax); 22 23 return 0; 24 } 25 26 void input(int x[],int n){ 27 int i; 28 for(i=0;i<n;++i) 29 scanf("%d",&x[i]); 30 } 31 32 void output(int x[],int n){ 33 int i; 34 for(i=0;i<n;++i) 35 printf("%d",x[i]); 36 printf("\n"); 37 } 38 39 int *find_max(int x[],int n){ 40 int max_index=0; 41 int i; 42 43 for(i=0;i<n;++i) 44 if(x[i]>x[max_index]) 45 max_index=i; 46 47 return &x[max_index]; 48 }View Code
运行结果
1.find_max的功能返回最大值的地址;
2.可以实现,ptr为指针可以储存最大值的地址;
任务2
代码2.1
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #define N 80 5 6 int main(){ 7 char s1[N] = "Learning makes me happy"; 8 char s2[N] = "Learning nakes me sleep"; 9 char tmp[N]; 10 11 printf("sizeof(s1) vs. strlen(s1): \n"); 12 printf("sizeof(s1) = %d\n",sizeof(s1)); 13 printf("strlen(s1) = %d\n",strlen(s1)); 14 15 printf("\nbefore swap: \n"); 16 printf("s1: %s\n", s1); 17 printf("s2: %s\n", s2); 18 19 printf("\nswapping...\n"); 20 strcpy(tmp, s1); 21 strcpy(s1, s2); 22 strcpy(s2, tmp); 23 24 printf("\nafter swap: \n"); 25 printf("s1: %s\n", s1); 26 printf("s2: %s\n", s2); 27 28 system("pause"); 29 return 0; 30 }View Code
结果
1.sizeof(s1)计算的是预处理命令中N决定的,为80字节,sizeof(s1)计算的s1占据的内存空间,strlen(s1)统计的是字符串的长度;
2.s1是数组名常量,不能修改;
3.用中间量tmp,将字符数组s1,s2中的内容进行了交换;
代码2.2
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #define N 80 5 6 int main(){ 7 char *s1 = "Learning makes me happy"; 8 char *s2= "Learning nakes me sleep"; 9 char *tmp; 10 11 printf("sizeof(s1) vs. strlen(s1): \n"); 12 printf("sizeof(s1) = %d\n",sizeof(s1)); 13 printf("strlen(s1) = %d\n",strlen(s1)); 14 15 printf("\nbefore swap: \n"); 16 printf("s1: %s\n", s1); 17 printf("s2: %s\n", s2); 18 19 printf("\nswapping...\n"); 20 tmp = s1; 21 s1 = s2; 22 s2 = tmp; 23 24 printf("\nafter swap: \n"); 25 printf("s1: %s\n", s1); 26 printf("s2: %s\n", s2); 27 28 system("pause"); 29 return 0; 30 }View Code
1.s1是指针变量,存放的是首地址,sizeof(s1)计算的s1占据的内存空间,strlen(s1)统计的是字符串的长度;
2.可以修改,指针变量可以赋值;
3.交换的是地址;
task3.
代码3
1 #include<stdio.h> 2 3 int main(){ 4 int x[2][4] = {{1,9,8,4},{2,0,4,9}}; 5 int i,j; 6 int *ptr1; 7 int(*ptr2)[4]; 8 9 printf("输出1:使用数组名、下标直接访问二维数组元素\n"); 10 for(i=0;i<2;++i){ 11 for(j=0;j<4;++j) 12 printf("%d",x[i][j]); 13 printf("\n"); 14 } 15 16 printf("\n输出2:使用指针变量ptr1(指向元素)间接访问\n"); 17 for(ptr1=&x[0][0],i=0;ptr1<&x[0][0]+8;++ptr1,++i){ 18 printf("%d",*ptr1); 19 20 if((i+1)%4==0) 21 printf("\n"); 22 } 23 24 printf("\n输出3:使用指针变量ptr2(指向一维数组)间接访问\n"); 25 for(ptr2=x;ptr2<x+2;++ptr2){ 26 for(j=0;j<4;++j) 27 printf("%d",*(*ptr2+j)); 28 printf("\n"); 29 } 30 31 return 0; 32 }
图片
任务4
1 #include<stdio.h> 2 #define N 80 3 4 void replace(char *str,char old_char,char new_char); 5 6 int main(){ 7 char text[N]="Programming is difficult or not, it is a question."; 8 9 printf("原始文本:\n"); 10 printf("%s\n",text); 11 12 replace(text,'i','*'); 13 14 printf("处理后文本:\n"); 15 printf("%s\n",text); 16 17 return 0; 18 } 19 void replace(char *str,char old_char,char new_char){ 20 int i; 21 22 while(*str){ 23 if(*str==old_char) 24 *str=new_char; 25 str++; 26 } 27 }
图片
1.replace作用将old_char全部转化为new_char;
2.可以,两者是等价的
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 char *str_trunc(char *str,char x){ 25 int i,j; 26 for (i=0;i<N;i++){ 27 if(str[i]==x){ 28 str[i]='\0'; 29 break; 30 } 31 } 32 return str; 33 }
图片
删去line18行后
读取确认的回车键‘\n’,不然‘\n’会被下一次循环读取;
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 int check_id(char *str) { 27 int len = strlen(str); 28 if (len != 18) { 29 return 0; 30 } 31 int i; 32 for ( i = 0; i < 17; ++i) { 33 if (!isdigit(str[i])) { 34 return 0; 35 } 36 } 37 if (isdigit(str[17]) || (toupper(str[17]) == 'X')) { 38 return 1; 39 } else { 40 return 0; 41 } 42 }
图片
task7
1 #include <stdio.h> 2 #define N 80 3 void encoder(char *str, int n); 4 void decoder(char *str, int n); 5 6 int main() { 7 char words[N]; 8 int n; 9 10 printf("输入英文文本: "); 11 gets(words); 12 13 printf("输入n: "); 14 scanf("%d", &n); 15 16 printf("编码后的英文文本: "); 17 encoder(words, n); 18 printf("%s\n", words); 19 20 printf("对编码后的英文文本解码: "); 21 decoder(words, n); 22 printf("%s\n", words); 23 24 return 0; 25 } 26 27 28 void encoder(char *str, int n) { 29 while(*str!='\0'){ 30 if(*str >= 'a'&&*str <= 'z') 31 { 32 *str = (*str-'a'+n)%26+'a'; 33 } 34 if(*str >= 'A'&&*str <= 'Z') 35 { 36 *str = (*str-'A'+n)%26+'A'; 37 } 38 str++; 39 } 40 } 41 42 43 void decoder(char *str, int n) { 44 while(*str!='\0'){ 45 if(*str >= 'a'&&*str <= 'z') 46 { 47 *str = (*str-'a'-n+26)%26+'a'; 48 } 49 if(*str >= 'A'&&*str <= 'Z') 50 { 51 *str = (*str-'A'-n+26)%26+'A'; 52 } 53 str++; 54 } 55 }
图片
task8
1 #include<stdio.h> 2 3 int main(int argc, char *argv[]){ 4 int i; 5 6 for(i=1;i<argc;++i) 7 printf("hello,%s\n",argv[i]); 8 9 return 0; 10 }
task8.1
1 #include<stdio.h> 2 #include<string.h> 3 4 void sort(int argc, char *argv[]); 5 6 int main(int argc, char *argv[]){ 7 int i; 8 9 sort(argc,argv); 10 11 for(i=1;i<argc;++i) 12 printf("hello,%s\n",argv[i]); 13 14 return 0; 15 } 16 17 void sort(int argc, char *argv[]){ 18 int i,j; 19 char *temp; 20 for(i = 0; i < argc-1 ; i++ ){ 21 for(j = 0; j< argc-1-i; j++){ 22 if(strcmp(argv[j],argv[j+1])>0){ 23 temp = argv[j]; 24 argv[j] = argv[j+1]; 25 argv[j+1] = temp; 26 } 27 } 28 } 29 }
图片
标签:int,s1,char,实验,str,printf,include From: https://www.cnblogs.com/YamadaRyo1314/p/18580980