1. 程式人生 > >C語言博客作業--函數嵌套調用

C語言博客作業--函數嵌套調用

成長 錯誤 信息管理 崩潰 博客 malloc 部分 才會 include

一、實驗作業

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 調試結果展示

輸入學生信息與成績信息:技術分享圖片
修改學生成績信息:技術分享圖片


刪除學生成績信息:技術分享圖片
按照總分排行:技術分享圖片
修改分數後再按照總分排行:技術分享圖片
退出:技術分享圖片
輸入非法指令:技術分享圖片
輸入學號非整數和輸入學號不足12位:技術分享圖片
輸入學號重復:技術分享圖片
輸入電話號碼錯誤:技術分享圖片
輸入電話號碼第一位可以是+號:技術分享圖片
修改學生成績輸入學號錯誤和該學號沒有被輸入過:技術分享圖片
刪除學生成績輸入學號錯誤和該學號沒有被輸入過:技術分享圖片

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語言博客作業--函數嵌套調用