⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c指针答案.txt

📁 关于C语言 指针 部分的习题及答案 供大家参考
💻 TXT
📖 第 1 页 / 共 3 页
字号:

  { for(j=0;j<5;j++)

      printf("%4d",a[i][j]);

    printf("\n");

  }

}

 

void change(int *p)                        /*交换函数*/

{ int i,j,temp;

  int *pmax,*pmin;

  pmax=p;

  pmin=p;

  for(i=0;i<5;i++)           /*找最大值和最小值的地址,并赋给pmax,pmin*/

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

    { if(*pmax<*(p+5*i+j)) pmax=p+5*i+j;

      if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;

    }

  temp=*(p+12);                            /*将最大值换给中心元素*/

  *(p+12)=*pmax;

  *pmax=temp;

  temp=*p;                                 /*将最小值换给左上角元素*/

  *p=*pmin;

  *pmin=temp;

  pmin=p+1;

  for(i=0;i<5;i++)                         /*找第二最小值的地址赋给pmin*/

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

      if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))  pmin=p+5*i+j;

  temp=*pmin;                              /*将第二最小值换给右上角元素*/

  *pmin=*(p+4);

  *(p+4)=temp;

  pmin=p+1;

  for(i=0;i<5;i++)                         /*找第三最小值的地址赋给pmin*/

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

      if(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))

         pmin=p+5*i+j;                     /*将第三最小值换给左下角元素*/

  temp=*pmin;

  *pmin=*(p+20);

  *(p+20)=temp;

  pmin=p+1;

  for(i=0;i<5;i++)                         /*找第四最小值的地址赋给pmin*/

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

      if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=

          (p+20))&&(*pmin>*(p+5*i+j)))  pmin=p+5*i+j;

  temp=*pmin;                              /*将第四最小值换给右下角元素*/

  *pmin=*(p+24);

  *(p+24)=temp;

}

 

运行结果:

Input matrix: 

35 34 33 32 31↙

3O 29 28 27 26↙

25 24 23 22 21↙

15 14 13 12 ll↙

Now, matrix:

11 34 33 32 12

30 29 28 27 26

25 24 35 22 21

20 l9 18 17 16

13 23 15 31 14

 

返  回

 

10.11在主函数中输入10个等长的字符串。用另一个函数对它们排序,然后在主函数输出这10个已排好的字符串。

解:程序如下:(xt10-11.c)

#include <stdio.h>

#include <string.h>

main()

{ void sort(char s[10][6]);

  int i;

  char str[10][6];

  printf("Input 10 strings:\n");

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

    scanf("%s",str[i]);

  sort(str);

  printf("Now, the sequence is:\n");

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

    printf("%s\n",str[i]);

}

 

void sort(char s[10][6])

{ int i,j;

  char *p,temp[10];

  p=temp;

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

    for(j=0;j<9-i;j++)

      if(strcmp(s[j],s[j+1])>0 )

      { strcpy(p,s[j]);

        strcpy(s[j],s[+j+1]);

        strcpy(s[j+1],p);

      }

}

 

运行结果:

Input 10 strings: 

China↙

Japan↙

Korea↙

Egypt↙

Nepal↙

Burma↙

Ghana↙

Sudan↙

Italy↙

Libya↙

Now, the sequence is:

Burma

China

Egypt

Ghana

Italy

Japan

Korea

Libya

Nepal

Sudan

 

返  回

 

10.12用指针数组处理上一题目,字符串不等长。

解:程序如下:(xt10-12.c)

#include <stdio.h>

#include <string.h>

main()

{ void sort(char *p[]);

  int i;

  char *p[10],str[10][20];

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

    p[i]=str[i];        /*将第i个字符串的首地址赋予指针数组p的第i个元素*/

  printf("Input 10 strings:\n");

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

    scanf("%s",p[i]);

  sort(p);

  printf("Now, the sequence is:\n");

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

     printf("%s\n",p[i]);

}

 

void sort(char *p[])

{ int i,j;

  char *temp;

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

    for(j=0;j<9-i;j++)

      if(strcmp(*(p+j),*(p+j+1))>0)

      { temp=*(p+j);

        *(p+j)=*(p+j+1);

        *(p+j+1)=temp;

      }

}

 

运行情况如下:

Input 10 strings:

China↙

Japan↙

Yemen↙

Pakistan↙

Mexico↙

Korea↙

Brazil↙

Iceland↙

Canada↙

Mongolia↙

Now, the sequence is:

Brazil

Canada

China

Iceland

Japan

Korea

Mexico

Mongolia

Pakistan

Yemen

 

返  回

 

10.13 写一个用矩形法求定积分的通用函数,分别求:
           ,   ,   
(说明:sin、cos、exp 已在系统的数学函数库中,程序开头要用 #include <math.h> )。

解:程序如下:(xt10-13.c)

#include <stdio.h>

#include <math.h>

main()

{ float integral(float (*p)(float),float a,float b,int n);

  float a1,b1,a2,b2,a3,b3,c,(*p)(float);

  float fsin(float);                     /*声明fsin函数*/

  float fcos(float);                     /*声明fcos函数*/

  float fexp(float);                     /*声明fexp函数*/

  int n=20;

  printf("Input a1,b1: ");               /*输入求sinx定积分的下限和上限*/

  scanf("%f,%f",&a1,&b1);

  printf("Input a2,b2: ");               /*输入求cosx定积分的下限和上限*/

  scanf("%f,%f",&a2,&b2);

  printf("Input a3,b3: ");               /*输入求定积分的下限和上限*/

  scanf("%f,%f",&a3,&b3);

  p=fsin;

  c=integral(p,a1,b1,n);                 /*求出sinx的定积分*/

  printf("The integral of sin(x) is: %f\n",c);

  p=fcos;

  c=integral(p,a2,b2,n);                 /*求出cosx的定积分*/

  printf("Tht integral of cos(x) is: %f\n",c);

  p=fexp;

  c=integral(p,a3,b3,n);                 /*求出ex的定积分*/

  printf("The integral of exp(x) is: %f\n",c);

}

 

float integral(float(*p)(float),float a,float b,int n)

                                         /*用矩形法求定积分的通用函数*/

{ int i;

  float x,h,s;

  h=(b-a)/n;

  x=a;

  s=0;

  for(i=1;i<=n;i++)

  { x=x+h;

    s=s+(*p)(x)*h;

  }

  return(s);

}

 

float fsin(float x)                      /*计算sinx的函数*/

{ return sin(x);}

 

float fcos(float x)                      /*计算cosx的函数*/

{return cos(x);}

 

float fexp(float x)                      /*计算ex的函数*/

{return exp(x);}

 

运行情况如下,

Input a1,b1:0,1↙

Input a2,b2: -l,1↙

Input a3,b3: 0,2↙

The integral of sin(x) is: O.480639

The integral of cos(x) is: 1.681539

The integral of exp(x) is: 6.713833

 

    说明:sin、cos和exp是系统提供的数学函数。在程序中定义3个函数fsin、fCOS和fexp分别用来计算sin(x)、cos(x)和exp(x)的值,在main函数中要声明这3个函数。在main函数中定义p为指向函数的指针变量,定义形式是“float(*p)(float)”,表示p指向的函数有一个实型形参,p可指向返回值为实型的函数。在main函数中有“p=fsin;”,表示将fsin函数的人口地址赋给p。在调用integral函数时,用p作为实参,把fsin函数的人口地址传递给形参p(形参p也定义为指向函数的指针变量),这样形参P也指向fsin函数,(*p)(x)就相当于fsin(x)。fsin(x)的值就是sinx的值。因此通过调用integral函数求出了sinx的定积分。求其余两个函数定积分的情况与此类似。

 

返  回

 

10.14将n个数按输入顺序的逆序排列,用函数实现。

解:程序如下:(xt10-14.c)

#include <stdio.h>

main()

{ void sort(int *p,int m);

  int i,n;

  int *p,num[20];

  printf("input n: ");

  scanf("%d",&n);

  printf("please input these numbers:\n");

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

    scanf("%d",&num[i]);

  p=&num[0];

  sort(p,n);

  printf("Now, the sequence is:\n");

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

    printf("%d ",num[i]);

}

 

void sort(int *p,int m)

{ int i;

  int temp,*p1,*p2;

  for(i=0;i<m/2;i++)    

  { p1=p+i;

    p2=p+(m-1-i);

    temp=*p1;

    *p1=*p2;

    *p2=temp;

  }

}

 

运行结果:

input n: l0↙

please input these numbers:

l0 9 8 7 6 5 4 3 2 1 ↙

Now,the sequence is:

1 2 3 4 5 6 7 8 9 10 

 

返  回

 

10.15有一个班4个学生,5门课。(1)求第一门课的平均分;(2)找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;(3)找出平均成绩在90分以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个要求。

解:程序如下:(xt10-15.c)

#include <stdio.h>

main()

{ void avsco(float *psco,float *pave);

  void avcour1(char *pcou,float *psco);    

  void fali2(char course[5][10],int num[4],float score[4][5],float aver[4]);

  void good(char course[5][10],int num[4],float score[4][5],float aver[4]);

  int i,j,*pnum,num[4];

  float score[4][5],aver[4],*psco,*pave;

  char course[5][10],*pcou;

  printf("Input course: \n");

  pcou=course[0];

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

    scanf("%s",course[i]);

  printf("Input NO. and scoures: \n");

  printf("NO.");

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

    printf(",%s",course[i]);

  printf("\n");

  psco=&score[0][0];

  pnum=&num[0];

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

  { scanf("%d",pnum+i);

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

      scanf(",%f",psco+5*i+j);

  }

  pave=&aver[0];

  printf("\n\n");

  avsco(psco,pave);                      /*求出每个学生的平均成绩*/

  avcour1(pcou,psco);                    /*求出第一门课的平均成绩*/

  printf("\n\n");

  fali2(pcou,pnum,psco,pave);            /*找出2门课不及格的学生*/

  printf("\n\n");

  good(pcou,pnum,psco,pave);             /*找出成绩好的学生*/

}

 

void avsco(float *psco,float *pave)      /*求每个学生的干均成绩的函数*/

{ int i,j;

  float sum,average;

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

  { sum=0.0;

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

    sum=sum+(*(psco+5*i+j));             /*累计每个学生的各科成绩*/

    average=sum/5;                       /* 计算平均成绩*/

    *(pave+i)=average;

  }

}

 

void avcour1(char *pcou,float *psco)     /*第一门课的平均成绩的函数*/

{ int i;

  float sum,average1;

  sum=0.0;

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

    sum=sum+(*(psco+5*i));               /*累计每个学生的得分*/

  average1=sum/4;                        /*计算平均成绩*/

  printf("course 1: %s ,average score: %6.2f. \n", pcou,average1);

}

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -