2019春第六週做業

2019春第六週做業

這個做業屬於哪一個課程 C語言程序設計Ⅱ
這個做業要求在哪裏 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2888
我在這個課程的目標是 可以使用c語言實現基本的程序設計,以致最後可以設計出較大的項目
這個做業在哪一個具體方面幫助我實現目標 幫我搞清楚了指針是什麼,指針的用法,以及指針與數組等的聯繫
參考文獻 C語言程序設計(第3版); http://c.harson.co

1、本週完成的做業

題目1. 6-1 求兩數平方根之和

函數fun的功能是:求兩數平方根之和,做爲函數值返回。例如:輸入12和20,輸出結果是:y = 7.936238。程序員

函數接口定義:編程

double fun (double *a, double *b);

其中 ab是用戶傳入的參數。函數求 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

1)、實驗代碼

double fun (double *a, double *b)
{
    double sum;
    sum=sqrt (*a)+sqrt (*b);
    
    return sum;
}

2)、設計思路

3)、本題調試過程碰到的問題及解決方法

測試

4)、運行結果圖

題目2. 7-1 利用指針返回多個函數值

讀入n個整數,調用max_min()函數求這n個數中的最大值和最小值。優化

輸入格式:
輸入有兩行: 第一行是n值; 第二行是n個數。設計

輸出格式:
輸出最大值和最小值。3d

輸入樣例:
在這裏給出一組輸入。例如:

5
8 9 12 0 3

輸出樣例:
在這裏給出相應的輸出。例如:

max = 12
min = 0

1)、實驗代碼

#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);
}

2)、設計思路

3)、本題調試過程碰到的問題及解決方法


(本題一開始我並無看見這道題,而後直接去看了預習做業,預習做業終於寫完後,被告知還有這道題目,而後看了之後,由於作了預習做業,因此這道題跟預習做業很類似,就仿照着寫了出來。)

4)、運行結果圖

預習做業 6-3 最小數放前最大數放後

爲一維數組輸入10個整數;將其中最小的數與第一個數對換,將最大的數與最後一個數對換;輸出數組元素。。

函數接口定義:

void input(int *arr,int n);
void max_min(int *arr,int n);
void output(int *arr,int n);

三個函數中的 arr和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

1)、實驗代碼

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));
    }
}

2)、設計思路


3)、本題調試過程碰到的問題及解決方法

如圖,當一會兒將數組,自定義函數,指針全混在一塊兒,就出了不少差錯,圖中我將自定義函數中的形參又在函數定義中定義了一下,致使編譯錯誤。
解決方法:去掉自定義函數定義中的n,*arr變量的定義。

4)、運行結果圖

思考題:(分值等同於編程題)

1.爲何要使用指針?它有什麼用?
1).速度快,節約內存等優勢
2).能夠和彙編比效率(甚至能夠作到「編譯器自動優化的代碼比80%彙編高手手工優化的彙編代碼都好」);
3).好比若是你想經過函數改變一個變量的值,就得用指針而不能用值傳遞。還有在不少時候變量,特別是對象的數據量實在太大,程序員就會用指針來作形參,只須要傳遞一個地址就行,大大提升了效率;
4).指針是一種類型,這種類型的對象有一種*運算,能夠把指針自己的值當地址,指針指向的類型做爲類型,去解釋這個地址的內容。這種運算也叫"非關聯化"。這些都僅僅是從類型,語義來說.站在高一層:"去操做另外一個對象",纔是其存在的思想來源,顯式的是指針隱式的是引用(使用C++中引用的概念)。而他們都是引用(使用類型系統的概念).
5).爲函數提供修改調用變元的手段;
6).支持C++動態分配子程序;
7).能夠改善某些子程序的效率;
8).爲動態數據結構(如二叉樹、鏈表)提供支持。

2.指針變量在內存中暫用多大的空間?它的大小由什麼決定?
佔用空間大小跟當前CPU的尋址位數 和編譯器的 位數有關;
C指針3種:指向簡單變量,指向結構體變量,指向函數;
指向類型, 基本都等於址寬度.
16位地址系統, 用段、偏移表示一個地址,
當只用偏移的時候(段內)稱NEAR指針, 當段、偏移都用的時候(跨段), 稱FAR指針,
FAR指針佔用空間大於NEAR指針.

2、學習進度條

周/日期 這周所花的時間 代碼行數 學到的知識點簡介 目前比較迷惑的問題
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 一、指針的含義,變量、地址、指針變量等間的關係;二、指針變量的初始化,運用指針作一些簡單運算;三、指針與數組之間的關係 在用指針處理字符串時,應怎樣定義指針變量

3、學習感悟

本週做業不難,只是預習題稍有難度,這道預習題目剛開始看到的時候能夠說一點都不會。而後我就在那裏看來看去。看了好大一會,才意識到預習題目確定是要預習過相關知識就能夠寫出來,而後就把課本看了看。在開始寫時,我對自定義函數的運用又犯暈,而後就又把課本翻到前面,看了自定義函數聲明、應用等等。總之在剛開始時毫無頭緒,在看了課本後能一點一點作,打完後,本身看着代碼不少,但其中原理很簡單,很好理解。就以爲有的時候代碼長不必定難。

結對編程感想

這周結對編程人員有所變更,都是本身互相決定的結對隊友。在編程過程當中會更有話說,能放開地交談。我和個人隊友就是同桌,在討論時老是出現低級錯誤,連編譯都過不去,兩我的想對策總比一我的要好。

表格-折線圖

時間 累計代碼行數 累計博客字數
第一週 80 275
第二週 50 883
第三週 180 1303
第四周 210 1849
第五週 120 1988
第六週 150 2717

相關文章
相關標籤/搜索