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
",*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("
");
}
}
将程序第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("
");
}
}
第一题:
不能达到目的,修改如下
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("
");}
厉竿柿2473 :答:应该把指向int型的指针p改成int型,只需改变相应的交换程序,其它不用变.改正后的完整的C语言程序如下(改动的地方见注释)include<stdio.h> void swap(int *p1,int *p2){ int p;//这里定义int型变量p p=*p1;*p1=*...
厉竿柿2473 :答:第三题A x[3]为3无疑问,B p1为x[3]的地址 ++是后++不需考虑 也是3 C p1为x[2]地址,后面的++无论括号与否都是表达式执行完最后执行,D 先++之后也是x[3]的地址 明显正确。所以只有C错误 答案为C 这个题库...
厉竿柿2473 :答:第一题 :这里边数组的指针变量的每加1是指地址指向下一个数组元素 p首先指向a 即a的首元素a[0]的地址 由于a数组是int变量 int变量占2字节 故a数组的下一个元素即a[1]的地址值就是194+2 ,也就是p+1的值, 当然...
厉竿柿2473 :答:数组是指针常量,是不可以自增或自减的,因为常量的值不可以改变。而指针是指针变量,和其他变量的概念一样,只不过指针存放的值是地址值。数组和指针实现一个1-10的加法:main(){ int str[10];int *p;int i,j=0;...
厉竿柿2473 :答:int sum[3][5],s;init(sum,3,5);dsp(sum,3,5);s=max(sum,3,5);printf("\n%d\n",s);mult2(sum,3,5);dsp(sum,3,5);getch();} 3 include <stdio.h> include <malloc.h> int dsp(int s[],int...
厉竿柿2473 :答:1. int (*p)[3], p = a + 2 ()优先级先于[],因此p先是指针,是什么指针呢?由[]知道是一个指向数组的指针,因此他其实简单来说就是个指向长度为三的一维数组的指针。如果是数组b[3],那么b实际上代表的就...
厉竿柿2473 :答:max = *(array+i);else min = *(array+i);} return (max-min);} //第四题函数,两个等长数组相加,保存在第三个数组 void add( double result[], double arg1[], double arg2[], int len ){ int i=0;...
厉竿柿2473 :答:指针一、选择题1、以下程序的运行结果是( B ) sub(int x,int y,int *z) { *z=y-x; } void main() { int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%4d,%4d,%4d\n",a,b,c); }...
厉竿柿2473 :答:首先m[12]={0,2,4,6,8,10,12,14,16,18,20,22} 语句 if(k<3) p[k]=m+2*k*k;的计算过程序,当k=0时,p[0]=m也就是指针p[0]指向的是数组m的开始 当k=1时,p[1]=m+2;因此p[1]指向m+2的...
厉竿柿2473 :答:int (*pt)[3]; 定义了一个数组指针,也就是定义了一个指向有三个元素的指针,即该指针,每次自加1,地址跳过三个int pt=a; 就是让pt指向a[0],注意a[0]是一个数组地址,里面有三个元素 对于A选项,pt[0][0...