C語言博客作業--函數嵌套調用
阿新 • • 發佈:2017-12-31
成長 錯誤 信息管理 崩潰 博客 malloc 部分 才會 include
刪除學生成績信息:![技術分享圖片](http://image.bubuko.com/info/201712/20171231220729980657.png)
按照總分排行:![技術分享圖片](http://image.bubuko.com/info/201712/20171231220730081247.png)
修改分數後再按照總分排行:![技術分享圖片](http://image.bubuko.com/info/201712/20171231220730280473.png)
退出:![技術分享圖片](http://image.bubuko.com/info/201712/20171231220730481653.png)
輸入非法指令:![技術分享圖片](http://image.bubuko.com/info/201712/20171231220730581266.png)
輸入學號非整數和輸入學號不足12位:![技術分享圖片](http://image.bubuko.com/info/201712/20171231220730684786.png)
輸入學號重復:![技術分享圖片](http://image.bubuko.com/info/201712/20171231220730782446.png)
輸入電話號碼錯誤:![技術分享圖片](http://image.bubuko.com/info/201712/20171231220730981672.png)
輸入電話號碼第一位可以是+號:![技術分享圖片](http://image.bubuko.com/info/201712/20171231220731081285.png)
修改學生成績輸入學號錯誤和該學號沒有被輸入過:![技術分享圖片](http://image.bubuko.com/info/201712/20171231220731187735.png)
刪除學生成績輸入學號錯誤和該學號沒有被輸入過:
一、實驗作業
1.1 十進制轉換二進制
設計思路
如果n==1 輸出1 即遞歸出口
否則如果n>1
dectobin(n/2) 即遞歸函數
輸出n%2的結果
否則輸出0 即為輸入n時直接為0的情況
代碼截圖
調試問題
一開始將遞歸出口寫錯錯將n==0當作遞歸出口但是還需要判斷n直接為0的情況,所以遞歸出口應該是n==1的時候。
1.2 學生成績管理系統
1.2.1 畫函數模塊圖,簡要介紹函數功能
1.2.2 截圖展示你的工程文件
1.2.3 函數代碼部分截圖
- 本系統代碼總行數:278
1.2.4 調試結果展示
輸入學生信息與成績信息:
修改學生成績信息:
刪除學生成績信息:
![技術分享圖片](http://image.bubuko.com/info/201712/20171231220729980657.png)
按照總分排行:
![技術分享圖片](http://image.bubuko.com/info/201712/20171231220730081247.png)
修改分數後再按照總分排行:
![技術分享圖片](http://image.bubuko.com/info/201712/20171231220730280473.png)
退出:
![技術分享圖片](http://image.bubuko.com/info/201712/20171231220730481653.png)
輸入非法指令:
![技術分享圖片](http://image.bubuko.com/info/201712/20171231220730581266.png)
輸入學號非整數和輸入學號不足12位:
![技術分享圖片](http://image.bubuko.com/info/201712/20171231220730684786.png)
輸入學號重復:
![技術分享圖片](http://image.bubuko.com/info/201712/20171231220730782446.png)
輸入電話號碼錯誤:
![技術分享圖片](http://image.bubuko.com/info/201712/20171231220730981672.png)
輸入電話號碼第一位可以是+號:
![技術分享圖片](http://image.bubuko.com/info/201712/20171231220731081285.png)
修改學生成績輸入學號錯誤和該學號沒有被輸入過:
![技術分享圖片](http://image.bubuko.com/info/201712/20171231220731187735.png)
刪除學生成績輸入學號錯誤和該學號沒有被輸入過:
![技術分享圖片](http://image.bubuko.com/info/201712/20171231220731306880.png)
1.2.5 調試碰到問題及解決辦法
在新建文件的時候編譯不被通過,顯示新建文件中的函數不被識別,只能重新建立一個工程把東西都復制過去。
二、截圖本周題目集的PTA最後排名
三、閱讀代碼
1.
用遞歸實現二分查找
#include <stdio.h> int r_search(int arr[], int low, int high, int k); int main( ) { int key,index,n,i; scanf("%d",&n); int a[n]; for(i=0;i<n;i++){ scanf("%d",&a[i]); } printf("輸入要查找的關鍵字:\n"); scanf("%d", &key); index = r_search(a, 0, n-1, key); if(index >= 0) printf("關鍵字所在位置是:%d \n", index); else printf("沒有找到關鍵字\n"); return 0; } int r_search(int arr[], int low, int high, int k) { int i,mid; if (low>high) i=-1; else { mid=(low+high)/2; if(arr[mid]==k) i=mid; else if(arr[mid]>k) i=r_search(arr, low,mid-1,k); else i=r_search(arr, mid+1,high,k); } return i; }
用遞歸實現二分查找在形式上更為簡潔,將二分查找封裝成函數,不同情況下進入不同的遞歸式子,可讀性高。
四、本周學習總結
1.介紹本周學習內容
- 函數的嵌套調用:
函數裏面還嵌套著函數稱為函數的嵌套調用,比如:
- 宏定義:
它用來將一個標識符定義為一個字符串,該標識符被稱為宏名,被定義的字符串稱為替換文本。簡單的宏定義格式為#define <宏名> <字符串>
比如#define pi 3.14159265
,帶參數的宏定義格式為#define <宏名>(<參數表>) <宏體>
比如#define A(x) x
,宏定義只用來做替換。比如
該題答案為A,宏定義不會幫助我們添加括號,只是單純的替換,這一點容易錯。同時宏定義也能實現簡單的函數功能,十分簡潔。 - 工程文件間的聯系
工程文件間的聯系用到全局變量的話就需要外部聲明,變量聲明格式為extern 變量名表
,外部函數調用格式為extern 函數類型 函數名
- 動態內存的申請與釋放:
malloc函數為動態內存的申請,它需要頭文件#include<stdlib.h>
,原型為void *malloc(size_t size)
,參數size代表需要動態申請的內存的字節數,若內存申請成功,函數返回申請到的內存的起始地址,若申請失敗,返回NULL。
free函數為動態內存的釋放,它也需要頭文件#include<stdlib.h>
,原型為void free(void *ptr)
,必須提供內存的起始地址,無返回值。
註意點:malloc與free是配對使用的,編譯器不會幫助我們釋放內存,所以要記住申請了動態內存後一定要釋放。
2.學習體會
本周寫了一個學生信息管理系統的工程,做了非常多天,代碼量也達到了278行,感覺寫的難度還是有點大的,特別是在於工程的健壯性,讓我必須將很多輸入都改成字符型,才能保證在輸入不同類型數據時,程序不至於崩潰。現在學習的難度也越多越高,動態內存的申請與釋放,以及要學習的鏈表,更是讓人頭痛。打代碼還是要腳踏實地,一個一個打,實踐出真知,一直看書是看不明白的,只有打代碼時遇到問題去解決了以後,之後再遇到這種問題才會解決。千裏之行,始於足下,只有認真對待每一次作業,才能越來越進步,越來越成長。
C語言博客作業--函數嵌套調用