這個做業屬於哪一個課程 | C語言程序設計Ⅱ |
---|---|
這個做業要求在哪裏 | https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2888 |
我在這個課程的目標是 | 可以使用c語言實現基本的程序設計,以致最後可以設計出較大的項目 |
這個做業在哪一個具體方面幫助我實現目標 | 幫我搞清楚了指針是什麼,指針的用法,以及指針與數組等的聯繫 |
參考文獻 | C語言程序設計(第3版); http://c.harson.co |
函數fun的功能是:求兩數平方根之和,做爲函數值返回。例如:輸入12和20,輸出結果是:y = 7.936238。程序員
函數接口定義:編程
double fun (double *a, double *b);
其中 a
和 b
是用戶傳入的參數。函數求 a指針和b 指針所指的兩個數的平方根之和,並返回和。數組
裁判測試程序樣例:數據結構
#include<stdio.h> #include <math.h> double fun (double *a, double *b); int main ( ) { double a, b, y; scanf ("%lf%lf", &a, &b ); y=fun(&a, &b); printf ("y=%.2f\n", y ); return 0; }
/* 請在這裏填寫答案 */
輸入樣例:函數
12 20
輸出樣例:學習
y=7.94
double fun (double *a, double *b) { double sum; sum=sqrt (*a)+sqrt (*b); return sum; }
無測試
讀入n個整數,調用max_min()函數求這n個數中的最大值和最小值。優化
輸入格式:
輸入有兩行: 第一行是n值; 第二行是n個數。設計
輸出格式:
輸出最大值和最小值。3d
輸入樣例:
在這裏給出一組輸入。例如:
5 8 9 12 0 3
輸出樣例:
在這裏給出相應的輸出。例如:
max = 12 min = 0
#include<stdio.h> void max_min(int *p,int n); int main () { int n,i,max,min; int a[100]; scanf ("%d",&n); max_min(a,n); return 0; } void max_min(int *p,int n) { int i,max=0,min,t; for (i=0; i<n; i++) { scanf ("%d",&*(p+i)); } min=*p; for(i=0; i<n; i++) { if (*(p+i)<min) { t=*(p+i); min=t; *(p+i)=min; } if (*(p+i)>max) { t=*(p+i); max=t; *(p+i)=max; } } printf ("max = %d\n",max); printf ("min = %d\n",min); }
無
(本題一開始我並無看見這道題,而後直接去看了預習做業,預習做業終於寫完後,被告知還有這道題目,而後看了之後,由於作了預習做業,因此這道題跟預習做業很類似,就仿照着寫了出來。)
爲一維數組輸入10個整數;將其中最小的數與第一個數對換,將最大的數與最後一個數對換;輸出數組元素。。
函數接口定義:
void input(int *arr,int n); void max_min(int *arr,int n); void output(int *arr,int n);
三個函數中的 ar
r和n
都是用戶傳入的參數。n
是元素個數。
input函數的功能是輸入 n
個元素存到指針arr
所指向的一維數組中。
max_min函數的功能是求指針arr
所指向的一維數組中的最大值和最小值,其中最小的數與第一個數對換,將最大的數與最後一個數對換。
output函數的功能是在一行中輸出數組元素,每一個元素輸出佔3列。
裁判測試程序樣例:
#include<stdio.h> void input(int *arr,int n); void max_min(int *arr,int n); void output(int *arr,int n); int main() { int a[10]; input(a,10); max_min(a,10); output(a,10); return 0; }
/* 請在這裏填寫答案 */
輸入樣例:
5 1 4 8 2 3 9 5 12 7
輸出樣例:
1 5 4 8 2 3 9 5 7 12
void input(int *arr,int n) { int i; for (i=0; i<n; i++) { scanf ("%d",&*(arr+i)); } } void max_min(int *arr,int n) { int i,p; int d=0,x=*arr; int s,k,t,w; for (i=0; i<n; i++) { if (*(arr+i)<x) { x=*(arr+i); s=i; } } t=*(arr+s); *(arr+s)=*arr; *arr=t; for (p=0; p<n; p++) { if (*(arr+p)>d) { d=*(arr+p); k=p; } } w=*(arr+k); *(arr+k)=*(arr+(n-1)); *(arr+(n-1))=w; } void output(int *arr,int n) { int i; for (i=0; i<n; i++) { printf ("%3d",*(arr+i)); } }
如圖,當一會兒將數組,自定義函數,指針全混在一塊兒,就出了不少差錯,圖中我將自定義函數中的形參又在函數定義中定義了一下,致使編譯錯誤。
解決方法:去掉自定義函數定義中的n,*arr變量的定義。
1.爲何要使用指針?它有什麼用?
1).速度快,節約內存等優勢
2).能夠和彙編比效率(甚至能夠作到「編譯器自動優化的代碼比80%彙編高手手工優化的彙編代碼都好」);
3).好比若是你想經過函數改變一個變量的值,就得用指針而不能用值傳遞。還有在不少時候變量,特別是對象的數據量實在太大,程序員就會用指針來作形參,只須要傳遞一個地址就行,大大提升了效率;
4).指針是一種類型,這種類型的對象有一種*運算,能夠把指針自己的值當地址,指針指向的類型做爲類型,去解釋這個地址的內容。這種運算也叫"非關聯化"。這些都僅僅是從類型,語義來說.站在高一層:"去操做另外一個對象",纔是其存在的思想來源,顯式的是指針隱式的是引用(使用C++中引用的概念)。而他們都是引用(使用類型系統的概念).
5).爲函數提供修改調用變元的手段;
6).支持C++動態分配子程序;
7).能夠改善某些子程序的效率;
8).爲動態數據結構(如二叉樹、鏈表)提供支持。
2.指針變量在內存中暫用多大的空間?它的大小由什麼決定?
佔用空間大小跟當前CPU的尋址位數 和編譯器的 位數有關;
C指針3種:指向簡單變量,指向結構體變量,指向函數;
指向類型, 基本都等於址寬度.
16位地址系統, 用段、偏移表示一個地址,
當只用偏移的時候(段內)稱NEAR指針, 當段、偏移都用的時候(跨段), 稱FAR指針,
FAR指針佔用空間大於NEAR指針.
周/日期 | 這周所花的時間 | 代碼行數 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
3/2-3/8 | 三天六小時 | 50 | 一、定義、運用文件指針;二、如何打開、關閉文件三、如何讀出指定文件中的數據;四、如何向指定文件中寫入數據; | 字符、字符串有什麼區別?兩者輸入、輸出有沒有很大不一樣?什麼纔算字符串?什麼算字符?在文件中兩者有沒有差異? |
3/9-3/15 | 四天三小時 | 180 | 一、運用二維數組解決問題,矩陣的判斷;二、對一組數的全部子數組求和 | 如何在輸出時利用數組的性質 |
3/16-3/22 | 三天八小時 | 210 | 一、二維數組加深理解,二維數組與矩陣;二、選擇排序法解決問題;三、二分查找法 | 二分查找法這周沒練習,只是看看書上例題大體懂了,不知道真正應用時可否掌握。 |
3/23-3/29 | 三天兩小時 | 120 | 一、判斷回;文二、字符數組的概念及其簡單運用;三、一些簡單的與字符數組相關的暫時沒接觸補充知識,一些函數,用法等。 | 在做業運用文件指針時,一開始老是出現從文件裏輸不出來結果,打印不出來,後來發現可能與本身輸入時格式未搞好,原本不該該出現的空格出現了,致使打印不出來結果。文件指針還不是很熟練 |
3/30-4/5 | 兩天 | 150 | 一、指針的含義,變量、地址、指針變量等間的關係;二、指針變量的初始化,運用指針作一些簡單運算;三、指針與數組之間的關係 | 在用指針處理字符串時,應怎樣定義指針變量 |
本週做業不難,只是預習題稍有難度,這道預習題目剛開始看到的時候能夠說一點都不會。而後我就在那裏看來看去。看了好大一會,才意識到預習題目確定是要預習過相關知識就能夠寫出來,而後就把課本看了看。在開始寫時,我對自定義函數的運用又犯暈,而後就又把課本翻到前面,看了自定義函數聲明、應用等等。總之在剛開始時毫無頭緒,在看了課本後能一點一點作,打完後,本身看着代碼不少,但其中原理很簡單,很好理解。就以爲有的時候代碼長不必定難。
這周結對編程人員有所變更,都是本身互相決定的結對隊友。在編程過程當中會更有話說,能放開地交談。我和個人隊友就是同桌,在討論時老是出現低級錯誤,連編譯都過不去,兩我的想對策總比一我的要好。
時間 | 累計代碼行數 | 累計博客字數 |
---|---|---|
第一週 | 80 | 275 |
第二週 | 50 | 883 |
第三週 | 180 | 1303 |
第四周 | 210 | 1849 |
第五週 | 120 | 1988 |
第六週 | 150 | 2717 |