#2019年春季第六次做業編程
這個做業屬於哪一個課程 | C語言程序設計 |
---|---|
這個做業要求在哪裏 | https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2888 |
我在這個課程的目標是 | 學習指針,方便我找到最大值最小值 |
這個做業在哪一個具體方面幫助我實現目標 | 指針的基本用法 |
參考文獻 | 中國大學mooc |
###6-1 求兩數平方根之和 函數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 x; x=sqrt(*a)+sqrt(*b); return x; }
##2)設計思路 此題過於簡單,流程圖無,不能夠扣個人分!!! ##3)錯誤截圖 無 ##4)正確截圖 3d
#7-1 利用指針返回多個函數值 (30 分) 讀入n個整數,調用max_min()函數求這n個數中的最大值和最小值。指針
##輸入格式: 輸入有兩行: 第一行是n值; 第二行是n個數。調試
##輸出格式: 輸出最大值和最小值。code
##輸入樣例: 在這裏給出一組輸入。例如:
5 8 9 12 0 3 ##輸出樣例: 在這裏給出相應的輸出。例如:
max = 12 min = 0
##1)實驗代碼
#include<stdio.h> void max_min(int n, int *a); int main() { int n; scanf("%d", &n); int a[n]; for(int i = 0;i < n;i++) { scanf("%d", (a + i)); } max_min(n, a); return 0; } void max_min(int n, int *a) { int t; for(int i = 0;i < n - 1;i++) { for(int j = 0;j < n - i - 1;j++) { if(*(a + j) < *(a + j + 1)) { t = *(a + j + 1); *(a + j + 1) = *(a + j); *(a + j)= t; } } } printf("max = %d\n", *(a)); printf("min = %d\n", *(a + n - 1)); }
##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 p; int min1=0,max1=n-1; int max=*(arr+n-1),min=*(arr); for(int i=0;i<n;i++) { if(*(arr+i)>max) { max1=i; max=*(arr+i); } if(*(arr+i)<min) { min1=i; min=*(arr+i); } } p=*(arr); *(arr)=*(arr+min1); *(arr+min1)=p; p=*(arr+n-1); *(arr+n-1)=*(arr+max1); *(arr+max1)=p; } void output(int *arr,int n) { for(int i=0;i<n;i++){ if(!i) printf("%3d",*(arr+i)); else printf("%3d",*(arr+i)); } }
###2)設計思路 ###3)錯誤截圖
錯誤緣由:沒有定義min1和max1做爲下標 解決方法:定義一個min1和max1 ###4)正確截圖
##爲何要用指針?有什麼用? 答:指針用起來比較方便,若是不用指針,傳送速度慢,若是經過指針,只要傳遞一個地址。 ##指針變量在內存中佔用多大的空間?它的大小由什麼決定? 答:指針變量在內存中佔用的空間是不肯定的,有的是四個字節有的是兩個字節。 他的大小有編譯器的位數決定
###學習進度表 |日期|這周所花時間|代碼行數|學到的知識點|目前比較疑惑的問題| |--------|-----:|:----:|-----:|-----:| |3/10-3/15|5|49|二維數組的淺顯運用,還有數組的強化|爲何打開文件進行寫入操做的時候要"r+"|| |3/16-3/22|5|70|選擇排序法,二維數組的運用,冒泡排序的初步瞭解|冒泡排序和選擇排序的區別|| |3/23-3/28|5|40|判斷和排序的運用|不會調試|| |3/29-4/3|6|7|指針的運用|下標不知道何時運用|
##折線圖 ###學習感悟:大多數人都說題目簡單,可是我並不這麼認爲,要求看的視頻沒看什麼,致使於不少東西不太懂
###結對編程總結:個人搭檔過個幾個星期會被我逼瘋吧,畢竟他的實力與我相差太多,可是我是不會就此而不問他的(固然 我也要本身多思考否則真是太讓搭檔失望了),對於我來講結對編程沒有缺點,