复试编程训练九

太过爱你忘了你带给我的痛 2023-05-28 09:58 133阅读 0赞

81.用指向指针的指针的方法,对5个字符串排序并输出(指针)

  1. #include <stdio.h>
  2. #include <string.h>
  3. void sort(char **p,int n)
  4. {
  5. int i,j;
  6. char *temp;
  7. for(i=0; i<n-1; i++)
  8. {
  9. for(j=0; j<n-i-1; j++)
  10. if(strcmp(*(p+j),*(p+j+1))>0)
  11. {
  12. temp=*(p+j);
  13. *(p+j)=*(p+j+1);
  14. *(p+j+1)=temp;
  15. }
  16. }
  17. }
  18. int main()
  19. {
  20. const int N=5;
  21. int i;
  22. char **p,*pstr[N],str[N][20];
  23. for(i=0; i<N; i++)
  24. pstr[i]=str[i];//将第i个字符串的首地址赋予指针数组pstr的第i个元素
  25. for(i=0; i<N; i++)
  26. scanf("%s",pstr[i]);
  27. p=pstr;
  28. printf("排序后:\n");
  29. sort(p,N);
  30. for(i=0; i<N; i++)
  31. {
  32. printf(pstr[i]);
  33. printf("\n");
  34. }
  35. printf("\n");
  36. return 0;
  37. }

运行结果:

20200323161426506.PNG

82.输出二维数组任一行任一列的元素值(指针)

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a[3][4]= {1,3,5,7,9,11,13,15,17,19,21,23};
  5. int (*p)[4],i,j; //指针变量p指向包含4个整型元素的一维数组
  6. p=a;
  7. scanf("%d %d",&i,&j);
  8. printf("a[%d][%d]=%d\n",i,j,*(*(p+i)+j)); //输出a[i][j]
  9. return 0;
  10. }

运行结果:

20200326102234278.PNG

83.将字符串a复制为字符串b,然后输出字符串b(指针)

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char a[]="I am a student.",b[20];
  5. int i;
  6. for(i=0; *(a+i)!='\0'; i++) //逐个值进行复制
  7. *(b+i)=*(a+i);
  8. *(b+i)='\0';
  9. printf("%s\n",b);
  10. return 0;
  11. }
  12. #include <stdio.h>
  13. void copy_string(char *from,char *to) //从from传给to
  14. {
  15. while((*to=*from)!='\0')
  16. {
  17. to++;
  18. from++;
  19. }
  20. }
  21. int main()
  22. {
  23. char a[]="I am a student.",b[20],*p1,*p2;
  24. p1=a;
  25. p2=b;
  26. copy_string(p1,p2); //从p1传给p2
  27. printf("%s\n",b);
  28. return 0;
  29. }

运行结果:

20200326103728989.PNG

84.可变格式输出函数

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a;
  5. float b;
  6. scanf("%d %f",&a,&b);
  7. char *format; //等同于char format[]="a=%d b=%.2f\n";
  8. format="a=%d b=%.2f\n";
  9. printf(format,a,b);
  10. return 0;
  11. }

运行结果:

20200326104711147.PNG

85. 通过指针变量访问它所指向的函数

  1. #include <stdio.h>
  2. int max(int a,int b)
  3. {
  4. if(a>b)
  5. return a;
  6. return b;
  7. }
  8. int min(int a,int b)
  9. {
  10. if(a<b)
  11. return a;
  12. return b;
  13. }
  14. int main()
  15. {
  16. int (*p)(int,int); //p为一个指向函数的指针变量
  17. int a=1,b=2,n,c;
  18. scanf("%d",&n);
  19. if(n==1)
  20. p=max; //通过指针变量调用max函数
  21. else if(n==2)
  22. p=min;
  23. c=(*p)(a,b); //p的作用是将函数max的入口地址赋给指针变量p
  24. if(n==1)
  25. printf("max=%d\n",c);
  26. else if(n==2)
  27. printf("min=%d\n",c);
  28. return 0;
  29. }

运行结果:

20200326111125866.PNG

86.将若干字符串按字母顺序(由小到大)输出(指针数组)

  1. #include <stdio.h>
  2. #include <string.h>
  3. void sort(char *name[],int n)
  4. {
  5. char *temp;
  6. int i,j,k;
  7. for(i=0; i<n-1; i++)
  8. {
  9. k=i;
  10. for(j=i+1; j<n; j++)
  11. if(strcmp(name[k],name[j])>0)
  12. k=j;
  13. if(k!=i) //不是移动字符串,而是改变指针数组的各元素的指向
  14. {
  15. temp=name[i];
  16. name[i]=name[k];
  17. name[k]=temp;
  18. }
  19. }
  20. }
  21. void print(char *name[],int n)
  22. {
  23. int i;
  24. for(i=0; i<n; i++)
  25. printf("%s\n",name[i]); //name[i]相当于一个一维数组的地址
  26. }
  27. int main()
  28. {
  29. char *name[]= {"Follow me","BASIC","Great Wall","FORTRAN","Computer Design"};
  30. int n=5; //指针数组,每个元素存放一个地址,相当于一个指针变量
  31. sort(name,n);
  32. print(name,n);
  33. return 0;
  34. }

运行结果:

20200326125718867.PNG

87. 使用指向指针数据的指针变量

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char *name[]= {"Follow me","BASIC","Great Wall","FORTRAN","Computer Design"};
  5. char **p; //p为指向指针的指针
  6. int i;
  7. for(i=0; i<5; i++)
  8. {
  9. p=name+i; //p先指向name[0]的地址,*p取出name[0]的值
  10. printf("%s\n",*p);
  11. }
  12. return 0;
  13. }

运行结果:

20200326134046653.PNG

88.用指向指针数据的指针变量输出整形数组各元素的值

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a[5]= {1,3,5,7,9};
  5. int *num[5]= {&a[0],&a[1],&a[2],&a[3],&a[4]};
  6. int **p,i;
  7. p=num; //p的值为&num[0]
  8. for(i=0; i<5; i++)
  9. {
  10. printf("%d ",**p); //*p为&a[0],**p为a[0]
  11. p++;
  12. }
  13. printf("\n");
  14. return 0;
  15. }

运行结果:

20200326135251785.PNG

89.指针数组作main函数的形参

  1. #include <stdio.h>
  2. int main(int argc,char *argv[]) //argc代表个数
  3. {
  4. while(argc>1)
  5. {
  6. ++argv;
  7. printf("%s\n",*argv); //*argv[]相当于**argv,所以*argv相当于字符串首地址
  8. --argc;
  9. }
  10. return 0;
  11. }

int main(int argc,char *argv[])

//argc是指命令行中参数的个数;argv是一个指向字符串的指针数组

例如:命令行为 dd China Beijing

则 argv[0] dd\0

argv[1] China\0

argv[2] Beijing\0

输出结果为 China

Beijing

操作过程如下:

首先,Windows+R打开DOS,找到工程的运行文件,打开\bin\Debug,下面有exe文件

在DOS中进入Debug,输入:dd China Beijing (其中dd为工程的运行文件)

20200326150836860.PNG

90.字符数组作main函数形参二

  1. #include <stdio.h>
  2. int main(int argc,char *argv[]) //argc代表个数
  3. {
  4. int sum=0;
  5. while(--argc>0)
  6. sum+=*argv[argc]-'0';
  7. printf("%d\n",sum);
  8. return 0;
  9. }

DOS输入:dd 12 34 56 78

运行结果输出:16(为1+3+5+7=16)

20200326151651343.PNG

其中:

argv[0] 为 12 ; *argv[0] 为 1

argv[1] 为 34 ; *argv[1] 为 3

argv[2] 为 56 ; *argv[2] 为 5

argv[3] 为 78 ; *argv[3] 为 7

发表评论

表情:
评论列表 (有 0 条评论,133人围观)

还没有评论,来说两句吧...

相关阅读

    相关 复试编程训练

    41.给一个百分制成绩,要求输出等级‘A’,‘B’,‘C’,‘D’,‘E’。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为