2019春第六週做業

這個做業屬於哪一個課程 C語言程序設計II
這個做業要求在哪裏 2019年春季學期第六週做業
我在這個課程的目標是 我但願可以經過學習C語言的知識,編寫程序
這個做業在哪一個具體方面幫助我實現目標 這個做業讓我知道了怎樣將指針做爲參數傳入自定義函數中使用
參考文獻 sqrt函數

1、本週完成的做業

題目1. 6-1 求兩數平方根之和 (10 分)

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

函數接口定義:編程

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

1).實驗代碼

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

2). 設計思路

3).本題調試過程碰到問題及解決辦法

遇到的問題:編譯錯誤,在調用指針變量時把它當成了普通變量
解決的辦法:查看錯誤信息,發現是指針a,b,在使用時漏了*

4).運行結果截圖

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

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

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

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

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

5
8 9 12 0 3

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

max = 12
min = 0

1).實驗代碼

#include<stdio.h>

void max_min(int n, int number[10000], int *max, int *min);
 

int main(void)
 {
   int i, n, max, min;
    scanf("%d", &n);
   int number[10000];
   
   for(i = 0;i < n;i ++)
     scanf("%d", &number[i]);
  
  max_min(n, number, &max, &min);
  printf("max = %d\nmin = %d", max, min);
  
  return 0;
 }
 
 void max_min(int n, int number[10000], int *max, int *min)
 {
   *max = number[0];
   *min = number[0];
   for(int i = 0;i < n;i ++)
   {
     if(*max < number[i])
       *max = number[i];
       
     if(*min > number[i])
       *min = number[i];
       
   }
 }

2). 設計思路

3).本題調試過程碰到問題及解決辦法

遇到的問題:編譯錯誤,函數聲明頭沒有加分號
解決的辦法:致使了後面的函數都不能被調用,加上分號

4).運行結果截圖

題目3. 6-3 最小數放前最大數放後 (10 分)

爲一維數組輸入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)
{
  for(int i = 0;i < n;i ++)
   scanf("%d", arr+i);
}
void max_min(int *arr,int n)
{
  int max, min, medium = 0, a, b, i;
   max = arr[0];
   min = arr[0];
   for(i = 0;i < n;i ++)
   {
     if(max < arr[i])
      {
       max = arr[i];
       a = i;
      }
     if(min > arr[i])
       {
         min = arr[i];
         b = i;
       }
   }
   medium = arr[a];
   arr[a] = arr[n-1];
   arr[n-1] = medium;
   
   medium = arr[b];
   arr[b] = arr[0];
   arr[0] = medium;
   
}
void output(int *arr,int n)
{
  for(int i = 0;i < n;i ++)
   printf(" %d ", arr[i]);
}

2). 設計思路

3).本題調試過程碰到問題及解決辦法

遇到的問題:答案格式錯誤,在最後輸出時沒有理解題意
解決的辦法:發現是答案格式錯誤後,搭檔一眼就看出了個人錯誤在輸出的部分,我寫的" %d ",搭檔指出後修改"%3d"

4).運行結果截圖

思考題:

1.爲何要使用指針?它有什麼用?

答:在查閱資料後我得出:指針的做用相似於書本上的便籤,方便了咱們查找所須要的數據。

引用:做個比喻,假設將電腦存儲器當成一本書,一張內容記錄了某個頁碼加上行號的便利貼,能夠被當成是一個指向特定頁面的指針;根據便利粘貼面的頁碼與行號,翻到那個頁面,把那個頁面的那一行文字讀出來,就至關因而對這個指針進行反參考的動做。

2.指針變量在內存中暫用多大的空間?它的大小由什麼決定?

答:在查閱資料後發現大部分的意見都是,在一般狀況下16位cpu上是16位 = 2字節,32位cpu上是32位 = 4字節,64位cpu上是64位 = 8字節,指針的大小其實是由CPU的尋址位數決定,而不是字長參考資料1 參考資料2參考資料3

題目1. 挑戰做業

接着上週的挑戰做業繼續,本週, 咱們須要考慮若是 「子數組」 並不要求是一個矩形, 而是聯通的元素便可 (上下或左右相鄰即視爲聯通), 那解法會是怎麼樣呢?

具體要求請參看鄒欣老師博客 現代程序設計做業

1).設計思路

第一步 輸入二維數組
第二步 循環進行相鄰(上下或左右)的元素的比較(難點)
第三步 循環比較大小的同時也不斷將最大的元素的地址存儲在另外一個數組中
第四步 輸出最大矩形子數組的和

2、學習進度條

周/日期 這周所花的時間 代碼行數 學到的知識點簡介 目前比較迷惑的問題
3/2-3/8 20h 300行 數組,指針的大體意義,文件入門 數組串的使用,指針
3/9-3/15 25h 400行 二維數組,文件與數組的結合運用 雙for循環的流程圖(再不上課,光自學感受太艱難了)
3/16-3/22 22h 450行 一維數組,二維數組,幾種數組排序法 字符串使用
3/23-3/29 20h 350行 字符串的定義及其使用 指針的具體使用
3/30-4/5 15h 340行 指針變量的定義,使用,初始化及其基本運算,指針做爲函數參數的做用;使用指針實現函數調用返回多個值 指針在運行時內存的變化

3、學習感悟

心得:

(1) 學習內容:
1. 指針變量的定義,使用,初始化及其基本運算
2. 指針做爲函數參數的做用
3. 使用指針實現函數調用返回多個值
收穫:
(2) 難點:指針與數組的混合運用,再做爲函數參數被調用
解決的方法:經過學委的講述,理清了指針,數組和他們被調用時所起的做用,理解了型參與實參之間的關係。

4、結對編程

1.結對編程過程

本次的隨機分配的搭檔是個鴿子,因此我又去找個人上一個搭檔了,本週的做業都挺簡單的,全程寫下來很流暢,除了在一些小的細節上有停頓,不過也都是由於本身的粗心纔會犯這樣的錯誤。在出現我看不懂的錯誤提示時,搭檔教了我如何讀懂錯誤提示,並找出錯誤的地方。

2.結對編程的優缺點

優勢:1.能夠將本身知道而搭檔不知道的知識教給搭檔。
2.提供不一樣的思路
3. 一塊兒找錯效率更高
缺點: 有時搭檔並不會提早看題目去理解題意,只是等到結對編程的時侯再開始看題,浪費告終對編程的時間,效率下降了。

完成做業的消耗時間:5h

相關文章
相關標籤/搜索