任务1-1
//验证性实验:指针变量作为函数参数,指针变量作为函数的返回值 #include<stdio.h> #define N 5 void input(int x[],int n); void output(int x[],int n); void find_min_max(int x[],int n,int *pmin,int *pamx); int main() { int a[N]; int min,max; printf("录入%d个数据:\n",N); input(a,N); printf("数据是:\n"); output(a,N); printf("数据处理...\n"); find_min_max(a,N,&min,&max); printf("输出结果:\n"); printf("min = %d,max = %d\n",min,max); return 0; } void input(int x[],int n) { int i; for(i=0;i<n;i++) { scanf("%d",&x[i]); } } void output(int x[],int n) { int i; for(i=0;i<n;i++) { printf("%d ",x[i]); } printf("\n"); } void find_min_max(int x[],int n,int *pmin,int *pmax) { int i; *pmin = *pmax = x[0]; for(i=1;i<n;i++) { if(x[i]<*pmin) *pmin = x[i]; else if(x[i]>*pmax) *pmax = x[i]; } }
功能:找到最大数和最小数
pmin指向pmax的地址,pmax指向数组第一个元素的地址
任务1-2
#include<stdio.h> #define N 5 void input(int x[],int n); void output(int x[],int n); int *find_max(int x[],int n); int main() { int a[N]; int *pmax; printf("录入%d个数据:\n",N); input(a,N); printf("数据是:\n"); output(a,N); printf("数据处理...\n"); pmax = find_max(a,N);//函数指针 printf("输出结果:\n"); printf("max = %d\n",*pmax); return 0; } void input(int x[],int n) { int i; for(i=0;i<n;i++) { scanf("%d",&x[i]); } } void output(int x[],int n) { int i; for(i=0;i<n;i++) { printf("%d ",x[i]); } printf("\n"); } int *find_max(int x[],int n) { int max_index = 0; int i; for(i=1;i<n;i++) { if(x[i]>x[max_index]) max_index = i; } return &x[max_index]; }
find_max返回最大值的地址
可以
任务2-1
//验证性实验,对比使用字符数组、字符指针变量处理字符串的区别 #include<stdio.h> #include<string.h> #define N 80 int main() { char s1[] = "Learning makes me happy"; char s2[] = "Learning makes me sleepy"; char tmp[N]; printf("sizeof(s1) vs strlen(s1):\n"); printf("sizeof(s1) = %d\n",sizeof(s1)); printf("strlen(s1) = %d\n",strlen(s1)); printf("\nbefore swap:\n"); printf("s1:%s\n",s1); printf("s2:%s\n",s2); printf("\nswapping:\n"); strcpy(tmp,s1); strcpy(s1,s2); strcpy(s2,tmp); printf("\nafter swap:\n"); printf("s1:%s\n",s1); printf("s2:%s\n",s2); return 0; }
数组s1大小是24,sizeof计算的是数组的长度,strlen计算的是数组内'\0'以前的元素个数
可以
交换
任务2-2
#include<stdio.h> #include<string.h> #define N 80 int main() { char *s1 = "Learning makes me happy"; char *s2 = "Learning makes me sleepy"; char *tmp; printf("sizeof(s1) vs strlen(s1):\n"); printf("sizeof(s1) = %d\n",sizeof(s1)); printf("strlen(s1) = %d\n",strlen(s1)); printf("\nbefore swap:\n"); printf("s1:%s\n",s1); printf("s2:%s\n",s2); printf("\nswapping:\n"); tmp = s1; s1 = s2; s2 = tmp; printf("\nafter swap:\n"); printf("s1:%s\n",s1); printf("s2:%s\n",s2); return 0; }
s1存放的是字符串首地址,sizeof()计算的是地址内存字节数,strlen(s1)统计的是s1字符串元素的个数
交换的是地址,在内存存储单元没有交换
任务3
//验证性实验,使用指针变量输出二维数组的元素,加深对指向数组元素的指针变量,和指向一维数组的指针变量的理解 #include<stdio.h> int main() { int x[2][4] = {{1,9,8,4},{2,0,4,9}}; int i,j; int *ptr1;//指针变量,存放int类型数据的地址 int (*ptr2)[4];//指针变量,指向包含4个int元素的一维数组 printf("\n输出1:使用数组名、下标直接访问二维数组元素\n"); for(i=0;i<2;i++) { for(j=0;j<4;j++) { printf("%d",x[i][j]); } printf("\n"); } printf("\n输出2:使用指向元素的指针变量p间接访问二维数组元素\n"); for(ptr1 = &x[0][0],i = 0;ptr1<&x[0][0]+8;++ptr1,++i) { printf("%d",*ptr1); if((i+1)%4 ==0) printf("\n"); } printf("\n输出3:使用指向一维数组的指针变量q间接访问二维数组元素\n"); for(ptr2 = x;ptr2<x+2;++ptr2) { for(j=0;j<4;j++) { printf("%d",*(*ptr2+j)); } printf("\n"); } return 0; }
ptr1表示指向一个含有四个元素数组的指针
ptr表示的是数组,这个数组存放了四个指针
任务4-1
//用指针变量处理字符串的应用 #include<stdio.h> #define N 80 void replace(char*str,char old_char,char new_char); int main() { char text[N] = "C programing is difficult or not, it is a qusetion"; printf("原始文本:\n"); printf("%s\n",text); replace(text,'i','*');//函数调用,注意字符形参写法,单引号不能少 printf("处理后文本:\n"); printf("%s",text); return 0; } //函数定义 void replace(char*str,char old_char,char new_char) { int i; while(*str) { if(*str==old_char) { *str = new_char; } str++; } }
功能:将字符串中的某一元素用一特定元素替换
可以
任务4-2
//从键盘输入一个字符串及一个指定字符,把这个字符自第一次出现及以后的所有字符删除,结果仍然保存在原串中 #include<stdio.h> #define N 80 void str_trunc(char*str,char x); int main() { char str[N]; char ch; printf("输入字符串:"); gets(str); printf("输入一个字符:"); ch = getchar(); printf("截断处理...\n"); str_trunc(str,ch); printf("截断处理后的字符串:%s\n",str); return 0; } void str_trunc(char*str,char x) { while(*str) { if(*str==x) *str = '\0'; str++; } *str = '\0'; }
任务5-1
//验证性实验,使用指针数组对字符串排序 #include<stdio.h> #include<string.h> //冒泡排序实现版本 void sort(char*name[],int n); int main() { char*course[4] = {"C Program", "C++ object oriented program", "Operating System", "Data Structure and Algorithms" }; int i; sort(course,4); for(i=0;i<4;i++) printf("%s\n",course[i]); return 0; } void sort(char*name[],int n) { int i,j; char*tmp; for(i=0;i<n-1;i++) { for(j=0;j<n-1-i;j++) { if(strcmp(name[j],name[j+1])>0) { tmp = name[j]; name[j] = name[j+1]; name[j+1] = tmp; } } } }
任务5-2
//选择排序算法实现版本 #include<stdio.h> #include<string.h> void sort(char*name[],int n); int main() { char*course[4] = {"C Program", "C++ object oriented program", "Operating System", "Data Structure and Algorithms" }; int i; sort(course,4); for(i=0;i<4;i++) printf("%s\n",course[i]); return 0; } void sort(char*name[],int n) { int i,j,k; char*tmp; for(i=0;i<n-1;i++) { k = i; for(j=i+1;j<n;j++) { if(strcmp(name[j],name[k])<0) k = j; } if(k!=i) { tmp = name[i]; name[i] = name[k]; name[k] = tmp; } } }
任务6
//用指针作为函数参数,编写函数check_id,该函数的功能是:判断一个身份证号码在格式上是否合法,如果合法,返回1,否则返回0,在main函数 //中调用check_id()对一组身份证号码做形式上的检查 #include<stdio.h> #include<string.h> #define N 5 int check_id(char*str);//函数声明 int main() { char *pid[N] = {"31010120000721656x", "330106199609203301", "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指向的身份证号码串形式上是否合法 //形式合法,返回一,否则返回0 int check_id(char*str) { if(strlen(str)!=18) return 0; else if(*(str+17)=='x'||*(str+17)<='9'&&*(str+17)>='0') return 1; else return 0; }
任务7
//编写程序实现对一段英文文本进行加密和解密 #include<stdio.h> #define N 80 #include<string.h> void encoder(char *str);//函数声明 void decoder(char *str);//函数声明 int main() { char words[N]; printf("输入英文文本"); gets(words); printf("编码后的英文文本"); encoder(words); printf("%s\n",words); printf("对编码后的英文文本解码"); decoder(words); printf("%s\n",words); return 0; } void encoder(char *str) { int count = strlen(str); int i; for(i=0;i<count;i++) { if((*(str+i)<='Z'&&*(str+i)>='A')||(*(str+i)>='a'&&*(str+i)<='z')) { if(*(str+i) == 'Z') *(str+i) = 'A'; else if(*(str+i) == 'z') *(str+i) = 'a'; else *(str+i) += 1; } else continue; } } void decoder(char *str) { int count = strlen(str); int i; for(i=0;i<count;i++) { if((*(str+i)<='Z'&&*(str+i)>='A')||(*(str+i)>='a'&&*(str+i)<='z')) { if(*(str+i) == 'a') *(str+i) = 'z'; else if(*(str+i) == 'A') *(str+i) = 'Z'; else *(str+i) -= 1; } else continue; } }
任务8
#include<stdio.h> #include<string.h> int main(int argc,char* argv[]) { int i,j,k; char *t; for(i=1;i<argc-1;++i) { k=i; for(j=i+1;j<argc;++j) if(strcmp(argv[j],argv[k])<0) k=j; if(k!=1){ t=argv[i]; argv[i]=argv[k]; argv[k]=t; } } for(i = 1; i < argc; ++i) { printf("hello,%s\n",argv[i]); } return 0; }
标签:int,s1,char,第五次,实验,str,printf,include From: https://www.cnblogs.com/hychychyc/p/17869400.html