谢谢啦
第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");
}
}
不能达到目的,修改如下
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都可以
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");
}