南师大复试编程训练九

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

#include <stdio.h>
#include <string.h>
void sort(char **p,int n)
{
    int i,j;
    char *temp;
    for(i=0; i<n-1; i++)
    {
        for(j=0; j<n-i-1; j++)
            if(strcmp(*(p+j),*(p+j+1))>0)
            {
                temp=*(p+j);
                *(p+j)=*(p+j+1);
                *(p+j+1)=temp;
            }
    }
}
int main()
{
    const int N=5;
    int i;
    char **p,*pstr[N],str[N][20];
    for(i=0; i<N; i++)
        pstr[i]=str[i];//将第i个字符串的首地址赋予指针数组pstr的第i个元素
    for(i=0; i<N; i++)
        scanf("%s",pstr[i]);
    p=pstr;
    printf("排序后:\n");
    sort(p,N);
    for(i=0; i<N; i++)
    {
        printf(pstr[i]);
        printf("\n");
    }

    printf("\n");
    return 0;
}

运行结果:

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

#include <stdio.h>

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

运行结果:

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

#include <stdio.h>

int main()
{
    char a[]="I am a student.",b[20];
    int i;
    for(i=0; *(a+i)!='\0'; i++)   //逐个值进行复制
        *(b+i)=*(a+i);
    *(b+i)='\0';
    printf("%s\n",b);
    return 0;
}
#include <stdio.h>

void copy_string(char *from,char *to)   //从from传给to
{
    while((*to=*from)!='\0')
    {
        to++;
        from++;
    }
}

int main()
{
    char a[]="I am a student.",b[20],*p1,*p2;
    p1=a;
    p2=b;
    copy_string(p1,p2);  //从p1传给p2
    printf("%s\n",b);
    return 0;
}

运行结果:

84.可变格式输出函数

#include <stdio.h>

int main()
{
    int a;
    float b;
    scanf("%d %f",&a,&b);
    char *format;    //等同于char format[]="a=%d   b=%.2f\n";
    format="a=%d   b=%.2f\n";
    printf(format,a,b);
    return 0;
}

运行结果:

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

#include <stdio.h>

int max(int a,int b)
{
    if(a>b)
        return a;
    return b;
}

int min(int a,int b)
{
    if(a<b)
        return a;
    return b;
}

int main()
{
    int (*p)(int,int);    //p为一个指向函数的指针变量
    int a=1,b=2,n,c;
    scanf("%d",&n);
    if(n==1)
        p=max;    //通过指针变量调用max函数
    else if(n==2)
        p=min;
    c=(*p)(a,b);  //p的作用是将函数max的入口地址赋给指针变量p
    if(n==1)
        printf("max=%d\n",c);
    else if(n==2)
        printf("min=%d\n",c);

    return 0;
}

运行结果:

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

#include <stdio.h>
#include <string.h>
void sort(char *name[],int n)
{
    char *temp;
    int i,j,k;
    for(i=0; i<n-1; i++)
    {
        k=i;
        for(j=i+1; j<n; j++)
            if(strcmp(name[k],name[j])>0)
                k=j;
        if(k!=i)  //不是移动字符串,而是改变指针数组的各元素的指向
        {
            temp=name[i];
            name[i]=name[k];
            name[k]=temp;
        }
    }
}

void print(char *name[],int n)
{
    int i;
    for(i=0; i<n; i++)
        printf("%s\n",name[i]); //name[i]相当于一个一维数组的地址
}

int main()
{
    char *name[]= {"Follow me","BASIC","Great Wall","FORTRAN","Computer Design"};
    int n=5;    //指针数组,每个元素存放一个地址,相当于一个指针变量
    sort(name,n);
    print(name,n);

    return 0;
}

运行结果:

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

#include <stdio.h>

int main()
{
    char *name[]= {"Follow me","BASIC","Great Wall","FORTRAN","Computer Design"};
    char **p;   //p为指向指针的指针
    int i;
    for(i=0; i<5; i++)
    {
        p=name+i;   //p先指向name[0]的地址,*p取出name[0]的值
        printf("%s\n",*p);
    }
    return 0;
}

运行结果:

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

#include <stdio.h>

int main()
{
    int a[5]= {1,3,5,7,9};
    int *num[5]= {&a[0],&a[1],&a[2],&a[3],&a[4]};
    int **p,i;
    p=num;   //p的值为&num[0]
    for(i=0; i<5; i++)
    {
        printf("%d ",**p);  //*p为&a[0],**p为a[0]
        p++;
    }
    printf("\n");
    return 0;
}

运行结果:

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

#include <stdio.h>

int main(int argc,char *argv[])   //argc代表个数
{
    while(argc>1)
    {
        ++argv;
        printf("%s\n",*argv);  //*argv[]相当于**argv,所以*argv相当于字符串首地址
        --argc;
    }
    return 0;
}

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

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

例如:命令行为 dd China Beijing

则    argv[0]    file1\0

       argv[1]    China\0

       argv[2]    Beijing\0

输出结果为   China

                     Beijing

操作过程如下:

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

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

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

#include <stdio.h>

int main(int argc,char *argv[])   //argc代表个数
{
    int sum=0;
    while(--argc>0)
        sum+=*argv[argc]-'0';
    printf("%d\n",sum);
    return 0;
}

DOS输入:dd 12 34 56 78

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

其中:

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

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

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

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

发布了462 篇原创文章 · 获赞 55 · 访问量 32万+

猜你喜欢

转载自blog.csdn.net/LY_624/article/details/105103698