實驗十五 指標的使用
實驗要求:
1、掌握指標的定義;
2、理解指標的含義;
3、掌握指標的基本使用;
4、能進行程式除錯,並修改程式。
特別要求:
在實驗中遇到困難時,切忌不要動不動就問老師,而是應該先思考。如果確實不能解決困難,先與坐在旁邊的同學討論,而無論這個同學在以前是否認識。如果有同學問你問題,無論你是否能解決這個問題,都應該和他討論。如果討論了仍然不能解決問題,就一起問老師。討論問題的好處在於能夠深刻的理解問題,記住問題。
程式設計
1. 指標初識
題目描述
定義int、double、float、char指標變數,要求輸出指標變數的位址(&p)、指標變數的分配的記憶體空間(sizeof(p))、指標變數(*p).
int示例程式如下:
#include
intmain()
int *p;
int a=9;
p=&a;
printf("%d\n",&p);
printf("%d\n",sizeof(p));
printf("%d\n",*p);
return 0;
/*p11_1.c*/
#include
int main()
int *p;double *a;float *b;char *c;
int p=9;double a=8.00;float b=7.0;char c=k;
p=&p;a=&a;b=&b;c=&c;
printf("%d %d %d %d\n",&p,&a,&b,&c);
printf("%d %d %d %d\n",sizeof(p),sizeof(a),sizeof(b),sizeof(c));
printf("%d %lf %f %c\n",*p,*a,*b,*c);
return 0;
2,指向字元 10分
題目描述
定義2個字元變數c1,c2, 輸入兩個字元,乙個為數字,乙個為字母,定義兩個字元指標p1,p2,讓p1指向數字字元,p2指向字母字元,然後輸出
輸入描述
兩個字元,乙個字母,乙個數字
輸出描述
數字在前,字母在後
樣例輸入
a 3
樣例輸出
3 a
/*p11_2.c*/
#include
int main()
{ char c1,c2,*p1,*p2;
p1=&c1;p2=&c2;
scanf("%c %c",&c1,&c2);
if(c2>='0' && c2<='9')
p1=&c2;
p2=&c1;
printf("%c %c\n",*p1,*p2);
return 0;
3、定義二個整型變數a、b和二個指標變數qa、qb,輸入2個整數,通過指標qa、qb,將兩個整數分別儲存到變數a、b後,通過指標qa、qb操作,使qa指向較小的整數,qb指向較大的整數,並輸出。 10分
題目描述
定義二個整型變數a、b和二個指標變數qa、qb,輸入2個整數,通過指標qa、qb,將兩個整數分別儲存到變數a、b後,通過指標qa、qb操作,使qa指向較小的整數,qb指向較大的整數,並輸出。
輸入描述
輸入2個整數給指標qa、qb
輸出描述
使qa指向較小的整數,qb指向較大的整數
樣例輸入
6 3
樣例輸出
3 6/*p11_3.c*/
#include
int main()
int a,b,*qa,*qb,t;
qa=&a;qb=&b;
scanf("%d %d",qa,qb);
if(*qa>*qb)
{ t=*qa;
*qa=*qb;
*qb=t;
printf("%d %d\n",*qa,*qb);
return 0;
4、指向最大值 10分
題目描述
定義整形變數a,b, 定義指標p,q, 輸入兩個整數,利用p,q,通過指標操作,使q指向較大的數,q指向較小的數
輸入描述
兩個整數
輸出描述
大的整數在前,小的整數在後
樣例輸入
1 2
樣例輸出
2 1
/*p11_4.c*/
#include
int main()
int a,b,*p,*q,t;
p=&a;q=&b;
scanf("%d %d",p,q);
if(*p<*q)
{ t=*p;
*p=*q;
*q=t;
printf("%d %d\n",*p,*q);
return 0;
5、使用指標的方式來按從大到小的交換兩個整數。要求編寫編寫乙個函式void swap(int *p1,int *p2),在主函式中呼叫swap函式。
輸入樣例
6 9輸出描述
9 6/*p11_5.c*/
#include
int main()
{ void swap(int *p1,int *p2);
int a,b,*p,*q;
p=&a;q=&b;
scanf("%d %d",p,q);
swap(p,q);
printf("%d %d\n",*p,*q);
return 0;
void swap(int *p1,int *p2)
{ int t;
if(*p1<*p2)
{ t=*p1;
*p1=*p2;
*p2=t;
6、題目描述
編寫函式void reverse(char* s);
將形參s所指向的字串反轉(如s指向字串為」hello world」,反轉後為」dlrow olleh」)。編寫main函式,在main中呼叫reverse函式,並輸出反轉後的字串。
輸入描述
輸入字串」hello world」,
輸出描述
輸出」dlrow olleh」
樣例輸入
hello world
樣例輸出
dlrow olleh
/*p11_6.c*/
#include
int main()
void reverse(char* s);
char *q,*p,a[100];
q=a;p=a;
gets(a);
reverse(a);
while(*q!='\0')
q++;
while(q!=p-1)
printf("%c",*(--q));
printf("\n");
return 0;
void reverse(char* s)
總結(本次實驗遇到的問題、解決方法,今後要注意的地方)
1 不同型別變數定義用『,』號,沒有用『;』
2 注意指標變數可以當陣列使用。
每日練習15
位址 128.10.0.0 是 位址。正確答案 b 你的答案 b 正確 a.a類 b.b類 c.c類 d.d類 int fun int a fun 21 結果是 正確答案 d 你的答案 a 錯誤 a.10 b8c.5 d.31 解析 答案 d 1 5,這裡1左移5位相當於1乘以2的5次方,也就是32...
SICP練習 1 練習1 1 練習1 5
練習1.1 這道題主要是關於簡單的數字運算,我們看完之後可以在 mit scheme 中進行驗算。如果環境不熟悉,可以參見 scheme 歸納 的第一篇博文。如果發現在 mit scheme 等環境上的運算結果和自己算的不一樣,也應該再仔細看看在書寫 的時候有沒有手誤。練習1.2 這是一道將表示式轉...
shell指令碼練習 15
題目 請嘗試寫乙個指令碼。呼叫指令碼,會列印當前系統時間和日期,所有已登入的使用者和系統執行時間。並將這些資訊儲存到乙個日誌檔案中。1.date 注意,區別與其他語言的獲取時間的對應選項字元 如分是 m秒是 s 獲取時間 time date y m d h m s 2.獲取當前登入使用者。w log...