1. 程式人生 > 其它 >習題11(指標)

習題11(指標)

1、讀程式題:對以下程式語句分析輸出語句的輸出,並對錯誤的語句分析其錯誤原因。

#include <stdio.h>

void main()

{

int x=12,a[3]={1,5,8},*p1=&x,**p2=&p1,*p3[3]={&x,a,a+1};

float y=9.9,*p4=&y;

char s[]="fighting!",*ps=s;//去掉s前面的&

printf("%d,%d,%d,%d\n",x,*p1,**p3,**p2);//12,12,12,12

printf("%d,%d,%d\n",*a,*p3[1],*(*(p3+1)));//1,1,1

printf("%d,%d,%d\n",*(a+1),*p3[2],**(p3+2));//5,5,5

printf("%.1f,%.1f,%.1f\n",y,*p4,*&y);//9.9,9.9,9.9

++ps;

printf("%c,%c\n",*s,*ps++);//f,i

printf("%d,%d\n",ps-s,ps==s+2);//2,1

printf("%c\n",*s+1);//*s++ 常量不能自加

printf("%x",p1+p2);//地址不能相加,沒意義。

}

2、程式改錯題:以下程式功能是任意輸入三個整數按大到小的順序輸出。

#include <stdio.h>

void main()

{

void sort3(int *q1,int *q2,int *q3);

int a,b,c,*p1,*p2,*p3;

printf("請輸入三個整數:");

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

p1=&a;p2=&b;p3=&c;

sort3(p1,p2,p3);

printf("大到小是:%d %d %d\n",a,b,c);

}

void swap(int *pt1,int *pt2)

{

int temp;

temp=*pt1;

*pt1=*pt2;

*pt2=temp;

}

void sort3(int *q1,int *q2,int *q3)

{

void swap(int *pt1,int *pt2);

if(*q1<*q2) swap(q1,q2);

if(*q1<*q3) swap(q1,q3);

if(*q2<*q3) swap(q2,q3);

}

3、編寫函式pfact:功能為求任意一個正整數的階乘,結果用指標變數的方式傳回。

程式設計實現:求n!。

#include <stdio.h>

void pfact(int n,long *pn)

{

int i;

for(i=1,*pn=1;i<=n;i++)

{

*pn=*pn*i;

}

}

void main()

{

int x,len;

long *plen=&len;

printf("請輸入一個正整數:");

scanf("%ld",&x);

pfact(x,plen);

printf("%d!是:%ld",x,len);

}

4、編寫函式pflower:功能為判斷一個數是否是水仙花數。水仙花數指的是一個三位正整數,其每一位的數字的立方之和等於其本身。如153=+水仙花數。形參要求是指標變數。

程式設計實現:輸出所有的水仙花數。

#include <stdio.h>

#include <math.h>

int pflower(int n,int *pm)

{

int a,b,c;

a=n/100;

c=n%10;

b=(n-100*a-c)/10;

if(n==pow(a,3)+pow(b,3)+pow(c,3))

*pm=1;

else

*pm=0;

}

void main()

{

int i,len,*plen=&len;

printf("輸出三位數的水仙花數:");

for(i=100;i<1000;i++)

{

pflower(i,plen);

if(len==1)

printf("%d ",i);

}

}

小胖專屬學習分享