【C语言基础一百题10】71-86题指针和函数

    技术2024-10-27  32

    【程序71】 题目:输入3个数a,b,c,按大小顺序输出。 1.程序分析:利用指针方法。 2.程序源代码: /*pointer*/

    #include void main() { int n1,n2,n3; int *pointer1,*pointer2,*pointer3; printf("please input 3 number:n1,n2,n3:"); scanf("%d,%d,%d",&n1,&n2,&n3); pointer1=&n1; pointer2=&n2; pointer3=&n3; if(n1>n2) swap(pointer1,pointer2); if(n1>n3) swap(pointer1,pointer3); if(n2>n3) swap(pointer2,pointer3); printf("the sorted numbers are:%d,%d,%d/n",n1,n2,n3); } swap(int * p1,int* p2); {int p; p=*p1;*p1=*p2;*p2=p; } ----------------------------------------------------------------------------- 【程序72】 题目:利用指针获取输入数组,并利用指针输出该数组

    1.程序分析:注意指针的地址作用 2.程序源代码:

    #include

    void main()

    {

    int a[10];

    int i;

    int *p;

    for(i=0;i<10;i++)

    scanf("%d",(a+i));

    for(p=a;p

    printf("%d",*p); // printf("%d",*p++);

    }

    -----------------------------------------------------------------------------

    【程序73】 题目:将数组a中n个整数按相反顺序存放

    1. 程序分析:将a[0]与a[n-1]对换,用两个指针分别指向头和尾

    2. 程序源代码:

    #include

    void main()

    {

    int array[10]={1,2,3,4,5,6,7,8,9,11};

    int *p,*q;

    int temp,i;

    p=array;

    q=&array[9];

    for(i=0;i<5;i++,p++,q--)

    {

    temp=*p;

    *p=*q;

    *q=temp;

    }

    for(p=array;p

    printf("%4d",*p++);

    printf("/n");

    }

    -----------------------------------------------------------------------------

    【程序74】 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 1.程序分析: 2.程序源代码: #include

    void maxminexchange(int *a,int n)

    {

    int *p,*q;

    int max,min,i,temp;

    max=a[0];

    min=a[0];

    for(i=0;i

    {

    if(a[i]>max){max=a[i];p=a+i;}

    if(a[i]

    }

    temp=a[0];

    a[0]=*p;

    *p=temp;

    temp=a[n-1];

    a[n-1]=*q;

    *q=temp;

    }

    void main()

    {

    int array[15]={2,1,12,3,23,4,5,6,4,6,2,8,7,2,9};

    maxminexchange(array,15);

    int *p=array;

    while(p

    printf("%4d",*p++);

    } ----------------------------------------------------------------------------- 【程序75】 题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 1.程序分析: 2.程序源代码: #include

    void pushback(int *a,int n,int m)

    {

    int temp[50];

    int *p=a+n-m;

    int i=0,j;

    while(p

    {

    temp[i++]=*p++;

    }

    for(i=0;i

    {

    for(j=n-2;j>=0;j--)

    a[j+1]=a[j];

    }

    for(i=0;i

    a[i]=temp[i];

    }

    void main()

    {

    int array[20]={3,4,6,7,8,9,12,13,15,18,2,1,76,23,35,36,12,18,67,34};

    pushback(array,20,3);

    int *p=array;

    while(p

    printf("%4d",*p++);

    } -----------------------------------------------------------------------------

    【程序76】 题目:有一个班,3个学生,各学4门课,计算总平均分数,以及第n个学生的成绩,查找有一门以上课程不及格的学生,打印出他们的全部课程的成绩。

    1. 程序分析:这道题的目的在于练习二维数组指针的传参

    2. .程序源代码:

    #include

    void average(float *p,int n);

    void search(float (*p)[4],int n);

    void search_fail(float (*p)[4],int n);

    void main()

    {

    float score[3][4]={{65,47,70,60},{80,57,90,81},{90,99,100,98}};

    average(score[0],12);

    search(score,2);

    search_fail(score,3);

    }

    void average(float *p,int n)

    {

    float *p_end;

    float sum=0,aver;

    p_end=p+n-1;

    for(;p<=p_end;p++)

    sum=sum+(*p);

    aver=sum/n;

    printf("average=%5.2f/n",aver);

    }

    void search(float (*p)[4],int n)

    {

    int i;

    printf("the score of No.%d are:/n",n);

    for(i=0;i<4;i++)

    printf("%5.2f",*(*(p+n)+i));

    printf("/n");

    }

    void search_fail(float (*p)[4],int n)

    {

    int i,j,flag;

    for(j=0;j

    {

    flag=0;

    for(i=0;i<4;i++)

    if(*(*(p+j)+i)<60)flag=1;

    if(flag==1)

    {

    printf("No.%d fails his scores are:/n",j+1);

    for(i=0;i<4;i++)

    printf("%5.1f",*(*(p+j)+i));

    printf("/n");

    }

    }

    } ----------------------------------------------------------------------------- 【程序77】 题目:将字符串a复制为字符串b 1.程序分析:熟悉字符指针的用法 2.程序源代码:

    #include

    void main()

    {

    char a[]="I am a boy.";

    char b[20];

    int i;

    for(i=0;*(a+i)!='/0';i++)

    *(b+i)=*(a+i);

    *(b+i)='/0';

    printf("string a is:%s/n",a);

    printf("string b is:");

    for(i=0;b[i]!='/0';i++)

    printf("%c",b[i]);

    printf("/n");

    }

    //char *a 和char a[]的不同,下边这道题开始的时候定义char *b=”…”;b表示字符串常量的首地//址,如果要改变字符数组的值就要以数组的形式定义。

    #include

    void copy_string(char *from,char *to)

    {

    int i=0;

    for(;(*from)!='/0';from++,to++)

    {*to=*from;}

    *to='/0';

    }

    void main()

    {

    char a[]="I am a teacher";

    char b[]="you are a student";

    printf("/nstring a=%s/nstring b=%s/n",a,b);

    copy_string(a,b);

    printf("/nstring a=%s/nstring b=%s/n",a,b);

    }

    -----------------------------------------------------------------------------

    【程序78】 题目:计算字符串中子串出现的次数 1.程序分析: 2.程序源代码: #include "string.h" #include "stdio.h" void main() { char str1[20],str2[20],*p1,*p2; int sum=0; printf("please input two strings/n"); scanf("%s%s",str1,str2); p1=str1;p2=str2; while(*p1!='/0') { if(*p1==*p2) {while(*p1==*p2&&*p2!='/0') {p1++; p2++;} } else p1++; if(*p2=='/0') sum++; p2=str2; } printf("%d",sum); getchar();

    }

    ----------------------------------------------------------------------------- 【程序79】 题目:字符串排序。 1.程序分析: 2.程序源代码: main() { char *str1[20],*str2[20],*str3[20]; char swap(); printf("please input three strings/n"); scanf("%s",str1); scanf("%s",str2); scanf("%s",str3); if(strcmp(str1,str2)>0) swap(str1,str2); if(strcmp(str1,str3)>0) swap(str1,str3); if(strcmp(str2,str3)>0) swap(str2,str3); printf("after being sorted/n"); printf("%s/n%s/n%s/n",str1,str2,str3); } char swap(char *p1,char*p2) { char *p[20]; strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p); } -----------------------------------------------------------------------------

    【程序80】 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 1. 程序分析: 2.程序源代码: #define nmax 50 main() { int i,k,m,n,num[nmax],*p; printf("please input the total of numbers:"); scanf("%d",&n); p=num; for(i=0;i*(p+i)=i+1; i=0; k=0; m=0; while(m{ if(*(p+i)!=0) k++; if(k==3) { *(p+i)=0; k=0; m++; } i++; if(i==n) i=0; } while(*p==0) p++; printf("%d is left/n",*p); } ----------------------------------------------------------------------------- 【程序81】 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。 1.程序分析: 2.程序源代码:

    #include void main() { int len; char *str[20]; printf("please input a string:/n"); scanf("%s",str); len=length(str); printf("the string has %d characters.",len); } length(char *p) { int n; n=0; while(*p!='/0') { n++; p++; } return n; }

    -----------------------------------------------------------------------------

    【程序82】 题目:设一个函数process,在调用它的时候,每次实现不同的功能,输入a,b两个数,第一次调用process时找出a,b中大者,第二次找出小者,第三次求a,b和。(利用指针函数) 1.程序分析: 2.程序源代码:

    #include

    void process(int x,int y,int(*fun)(int,int));

    void main()

    {

    int max(int,int);

    int min(int,int);

    int add(int,int);

    int a,b;

    printf("enter a and b:");

    scanf("%d,%d",&a,&b);

    printf("Max=");

    process(a,b,max);

    printf("min=");

    process(a,b,min);

    printf("sum=");

    process(a,b,add);

    }

    int max(int x,int y)

    {

    int z;

    if(x>y)z=x;

    else z=y;

    return z;

    }

    int min(int x,int y)

    {

    int z;

    if(x

    else z=y;

    return z;

    }

    int add(int x,int y)

    {

    int z;

    z=x+y;

    return z;

    }

    void process(int x,int y,int(*fun)(int,int))

    {

    int result;

    result=(*fun)(x,y);

    printf("%d/n",result);

    }

    ----------------------------------------------------------------------------- 【程序83】 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数) 1.程序分析: 2.程序源代码: #include "stdio.h" void main() { float peven(),podd(),dcall(); float sum; int n; while (1) { scanf("%d",&n); if(n>1) break; } if(n%2==0) { printf("Even="); sum=dcall(peven,n); } else { printf("Odd="); sum=dcall(podd,n); } printf("%f",sum); } float peven(int n) { float s; int i; s=1; for(i=2;i<=n;i+=2) s+=1/(float)i; return(s); } float podd(int n) { float s; int i; s=0; for(i=1;i<=n;i+=2) s+=1/(float)i; return(s); } float dcall(float (*fp), int n) { float s; s=(*fp)(n); return(s); } -----------------------------------------------------------------------------

    【程序84】 题目:有若干个学生的成绩(每个学生有4门课程),要求在用户输入学生序号以后,输出该学生的全部成绩,用指针返回值。

    1.程序分析:加深一下指针返回值和指针引用二维数组的理解 2.程序源代码

    #include

    float *search(float(*pointer)[4],int n);

    void main()

    {

    float score[3][4]={{60,70,80,45},{56,67,88,89},{89,90,95,100}};

    float *p;

    int i,m;

    printf("enter the number of student:");

    scanf("%d",&m);

    printf("The scores of No.%d are:/n",m);

    p=search(score,m);

    for(i=0;i<4;i++)

    printf("%5.2f/t",*(p+i));

    }

    float *search(float(*pointer)[4],int n)

    {

    float *pt;

    pt=*(pointer+n);

    return pt;

    }

    -----------------------------------------------------------------------------

    【程序85】 题目: 练习一道指向指针的指针

    1.程序分析:

    2.程序源代码

    (1)

    #include

    Void main()

    {

    static 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;

    for(i=0;i<5;i++)

    {printf(“%d/t”,* *p);p++;}

    }

    (2)

    #include

    Void main()

    {

    char *name[]={“Follow me”,”BASIC”,”GreatWall”};

    char **p;

    int I;

    for(i=0;i<3;i++)

    {p=name+i;printf(“%s/n”,*p);}

    }

    -----------------------------------------------------------------------------

    【程序86】 题目:两个字符串连接程序 1.程序分析: 2.程序源代码: #include "stdio.h" main() {char a[]="acegikm"; char b[]="bdfhjlnpq"; char c[80],*p; int i=0,j=0,k=0; while(a[i]!='/0'&&b[j]!='/0') {if (a[i]{ c[k]=a[i];i++;} else c[k]=b[j++]; k++; } c[k]='/0'; if(a[i]=='/0') p=b+j; else p=a+i; strcat(c,p); puts(c); }

    最新回复(0)