第八章 指针实验
C程序?qū)嶒?yàn)報(bào)告
實(shí)驗(yàn)項(xiàng)目:
1、指針基礎(chǔ)及指針運(yùn)算
2、數(shù)據(jù)交換
3、字符串反轉(zhuǎn)及字符串連接
4、數(shù)組元素奇偶排列
姓名:曹時(shí)仙? 實(shí)驗(yàn)地點(diǎn):教學(xué)樓514教室? 實(shí)驗(yàn)時(shí)間:2019.6.12
一、實(shí)驗(yàn)?zāi)康呐c要求
1、掌握指針的概念和定義方法
2、掌握指針的操作符和指針的運(yùn)算
3、掌握指針與數(shù)組的關(guān)系
4、掌握指針與字符串的關(guān)系
5、熟悉指針作為函數(shù)的參數(shù)以及返回指針的函數(shù)
6、了解函數(shù)指針
?二、實(shí)驗(yàn)內(nèi)容
一、指針基礎(chǔ)及指針運(yùn)算(8.3.1)
1、問題的簡(jiǎn)單描述:
(1)定義一個(gè)整形指針變量p,使它指向一個(gè)整形變量a,定義一個(gè)浮點(diǎn)型指針q,使它指向一個(gè)浮點(diǎn)型變量b,同時(shí)定義另外一個(gè)整形變量c并賦初值3。
(2)使用指針變量,調(diào)用scanf函數(shù)分別輸入a和b的值。
(3)通過指針間接訪問并輸出a、b的值。
(4)按十六進(jìn)制方式輸出p、q的值以及a、b的地址。
(5)將p指向c,通過p間接訪問c的值并輸出。
(6)輸出p的值及c的地址,并與上面的結(jié)果進(jìn)行比較。
2、實(shí)驗(yàn)代碼:
#include<stdio.h> int main() {int *p,a,c=3;float *q,b;p=&a;q=&b;printf("Please Input the Value of a,b:");scanf("%d,%f",p,q);printf("Result: \n");printf(" %d, %f\n",a,b);printf(" %d, %f\n",*p,*q);printf("The Address of a, b: %p,%p\n",&a,&b);printf("The Address of a, b:%p,%p\n",p,q);p=&c;printf("c=%d\n ", p);printf("The Address of c :%x ,%x\n",p,&c);return 0; }3、運(yùn)行效果:
4、問題分析:
該題運(yùn)行效果不與課本上的相同,是因?yàn)榈刂繁緛砭筒煌?#xff0c;該題難度不大,主要是掌握了指針的最基本知識(shí)就能做出來。
二、數(shù)據(jù)交換(8.3.2)
1、問題的簡(jiǎn)單描述:
(1)定義兩個(gè)函數(shù),分別為void swap1(int a,int b)和void swap2(int?a,int?b),用于交換a,b的值。
(2)從主函數(shù)中分別輸入兩個(gè)整形變量a、b。
(3)從主函數(shù)中分別調(diào)用上述兩個(gè)交換函數(shù),并打印輸出交換后a、b的結(jié)果。
2、實(shí)驗(yàn)代碼:
#include<stdio.h> void swap1(int x,int y); void swap2(int *x,int *y); int main() {int a,b;printf("Please Input a=:");scanf("%d",&a);printf("\n b=:");scanf("%d",&b);swap1(a,b);printf("\nAfter Call swap1: a=%d b=%d\n",a,b);swap2(&a,&b);printf("\nAfter Call swap2 :a=%d b=%d\n",a,b);return 0; } void swap1(int x, int y) { int temp; temp=x; x=y; y=temp; } void swap2(int *x,int *y) {int temp;temp=*x;*x=*y;*y=temp; }3、運(yùn)行效果:
4、問題分析:
無
三、字符串反轉(zhuǎn)及字符串連接
1、問題的簡(jiǎn)單描述:
(1)定義兩個(gè)字符指針,通過gets()函數(shù)輸入兩個(gè)字符串。
? (2)定義一個(gè)函數(shù)char?reverse(char?str),通過指針移動(dòng)方式將字符串反轉(zhuǎn)。
? (3)A定義一個(gè)函數(shù)char?link(char?str1,char *str2),通過指針移動(dòng)方式將兩個(gè)字符串連接起來。
? (4)從主函數(shù)中分別調(diào)用上述函數(shù),輸入字符串并打印輸出結(jié)果。
2、實(shí)驗(yàn)代碼:
#include<stdio.h> char *reverse(char *str); char *link(char *str1, char *str2); int main() {char str[30], str1[30],*str2;printf("Input Reversing Charcter String: ");gets(str);str2=reverse(str);printf("\nOutput Reversed Character String: ");puts(str2);printf("Input String1: ");gets(str);printf("\nInput String2:");gets(str1);str2=link(str,str1);puts(str2);return 0;} char *reverse(char *str) {char *p,*q,temp;p=str,q=str;while(*p!='\0')p++;p--;while(q<p){temp=*q;*q=*p;*p=temp;p--,q++;}return str; } char *link(char *str1,char *str2) {char *p=str1,*q=str2;while(*p !='\0')p++;while(*q !='\0'){*p=*q;p++,q++;}*p='\0';return str1; }3、運(yùn)行效果:
4、問題分析:
這題個(gè)人感覺難度挺大,主要是一開始我還不知道怎樣才是指針做相向運(yùn)動(dòng),后來知道了,問題就基本解決了。
四、數(shù)組元素奇偶排列(8.3.3)
1、問題的簡(jiǎn)單描述:
(1)定義一個(gè)整形一維數(shù)組,任意輸入數(shù)組的元素,其中包含奇數(shù)和偶數(shù)。
(2)定義一個(gè)函數(shù),實(shí)現(xiàn)將數(shù)組元素奇數(shù)在左,偶數(shù)在右的排列。
(3)在上訴定義的函數(shù)中,不允許再增加新的數(shù)組。
(4)從主函數(shù)中分別調(diào)用上述函數(shù),打印輸出結(jié)果。
2、實(shí)驗(yàn)代碼:
#include<stdio.h> #define N 10 void arrsort(int a[],int n); int main() {int a[N],i;for(i=0;i<N;i++)scanf("%d",&a[i]);arrsort(a,N);for(i=0;i<N;i++)printf("%d ",a[i]); } void arrsort(int a[],int n) {int *p,*q,temp;p=a;q=a+n-1;while(p<q){while((*p%2)!=0)p++;while((*q%2)==0)q--;if(p>q)break;temp=*p;*p=*q;*q=temp;p++,q--;} }3、運(yùn)行效果:
4、問題分析:
一開始只是想好如何判斷一個(gè)數(shù)是奇數(shù)還是偶數(shù),之后的空就可以和之前的題目差不多了。
三、實(shí)驗(yàn)小結(jié)
本章?lián)f是C語言的靈魂所在,玩好指針就說明C語言學(xué)的精通,不過指針確實(shí)也不是那么容易學(xué),在上這個(gè)理論課的時(shí)候就發(fā)現(xiàn)了,難度較大。不過在實(shí)驗(yàn)課上收獲不少,掌握了指針的移動(dòng),指針向前、向后、相向移動(dòng)都有著不小的作用。
轉(zhuǎn)載于:https://www.cnblogs.com/shixian/p/11014983.html
總結(jié)
- 上一篇: scala继承
- 下一篇: iscsi-分区类型