C语言程序设计指针雨数组三道题?

谢谢啦

第1题

原程序不能实现pt1指向a和b的大者,pt2指向小者的目的,

应该把指向int型的指针p改成int型,只需改变相应的交换程序,其它不用变.

改正后的完整的C语言程序如下(改动的地方见注释)

#include<stdio.h>

void swap(int *p1,int *p2)

{

 int p;//这里定义int型变量p

 p=*p1;*p1=*p2;*p2=p;//这里改变相应的交换程序

}

void main(void)

{

 int a,b;int *pt1,*pt2;

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

 pt1=&a;pt2=&b;

 if(a<b) swap(pt1,pt2);

 printf("%d,%d \n",*pt1,*pt2);

}

第2题

第一空填 -1

第二空填 *sn

#include<stdio.h>

void fun(float *sn,int n)

{

 float s=0.0,w,f=-1.0;

 int i=0;

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

 {

  f=-1*f;//这里第一空填 -1

  w=f/(2*i+1);

  s+=w;

 }

 *sn=s;//这里第二空填 *sn

}

int main()//补充的主函数

{

 float sn;

 int n=10;

 fun(&sn,n);

 printf("数列的前%d项计算结果S=%f",n+1,sn);

 return 0;

}

第3题

分析 用二维数组指针p打印二维数组的每一行字符串

#include "stdio.h"

main()

{

 char a[4][5]={"ABCD","EFGH","IJKL","MNOP"};

 char (*p)[5];

 int i,j;

 p=a;

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

 {

  for(j=0;j<4;j++) printf("%c",*(*(p+i)+j));

  printf("\n");

 }

}

将程序第9行中的"%c"改成"%s",则改变后的程序如下(改动的地方见注释)

#include "stdio.h"

main()

{

 char a[4][5]={"ABCD","EFGH","IJKL","MNOP"};

 char (*p)[5];

 int i,j;

 p=a;

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

 {

  printf("%s",*(p+i));//这里去掉for_j循环

  printf("\n");

 }

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-06-03
第一题:
不能达到目的,修改如下
void swap(int** p1, int** p2)
{
int *p = *p1;
*p1 = *p2;
*p2 = p;
}
相应的main里swap调用改成
swap(&pt1, &pt2);

第二题:
-1
*sn

主函数:
int main()
{
float sn;
fun(&sn, 10);
printf("前%d和为:%f\n", 10, sn);
return 0;
}

第三题:
第9行整行改成
printf("%s", p[i]); //a[i],p+i都可以
第2个回答  2021-06-03

1、reference of pointer as parameters


void swap1(int*& p1, int*& p2) {

    int *p;

    p = p1; p1 = p2; p2 = p;

}

2、

f = -1.0 *f; 

*sn = s;

3、

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

        printf("%s ", *(p+i));

        printf("\n");

    }