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


一、實驗作業

1.1 PTA題目

題目:6-5 遞歸實現順序輸出整數

設計思路

void printdigits(int n)
  定義變量i
  如果(i=n/10)!=0    printdigits(i)
  返回輸出n%10

代碼截圖

調試問題

一開始輸出語句中用%c,結果提交答案錯誤,后來發現它要輸出的還是數值

修改后,輸出的值改成了i%10,結果部分正確,因為該遞歸應返回的是n。

1.2 學生成績管理系統

1.2.1函數模塊圖及函數功能


input_output()函數用於輸入輸出
score()函數用於排序
delete()函數用於刪除
change()函數用於修改
add()函數用於增加
search()函數用於查找
num()函數用於控制學生數量

1.2.2工程文件展示

1.2.3 函數代碼部分截圖

main()函數


輸入輸出函數


排序函數

刪除函數

修改函數

增加函數

查找函數

1.2.4 調試結果展示

封面


輸入學生信息

輸出學生信息

查詢學生信息



修改學生信息



刪除學生信息

1.2.5 調試碰到問題及解決辦法

一開始總是編譯不了,編譯器提示的錯誤很多,有代碼錯誤,有文件錯誤,代碼主要是編譯器不支持的形式通過不了,比如for語句里定義變量等等,經過修改可以運行,文件的問題,主要是提示找不到文件,或者文件錯誤,后來改了頭文件,勉強可以編譯。

二、截圖本周題目集的PTA最后排名

三、閱讀代碼

1.遞歸函數實現全排列

void Swap(int *lhs, int *rhs)  
{  
    int t = *lhs;  
    *lhs = *rhs;  
    *rhs = t;  
}  
void FullPermutation(int source[], int begin, int end)  
{  
    int i;  
    if (begin >= end)  
    {  
        for (i = 0; i < end; i++)  
        {  
            printf("%d", source[i]);  
        }  
        printf("\n");  
    }  
    else  
    {  
        for (i = begin; i < end; i++)  
        {  
            if (begin != i)  
            {  
                Swap(&source[begin], &source[i]);  
            }    
            FullPermutation(source, begin + 1, end);  
            if (begin != i)  
            {  
                Swap(&source[begin], &source[i]);   
            }   
        }  
    }  
}  
int main()  
{  
    int source[30];  
    int i, count;  
    scanf("%d", &count);  
    // 初始化數組  
    for (i = 0; i < count; i++)  
    {  
        source[i] = i + 1;  
    }  
    FullPermutation(source, 0, count);  
    return 0;  
}  
Swap函數用於交換兩個形參的值,FullPermutation函數用於找每個全排列,主函數調用FullPermutation后,如果找到找到一個排列,就輸出;沒有找完一個排列,則繼續往下找下一個元素,用for循環,對元素進行交換后,遞歸排列剩余的從begin+1到end的元素,最后回溯還原。

四、本周學習總結

1.介紹本周學習內容

1.1函數的嵌套調用


1.2遞歸函數調用

1.2.1直接遞歸調用和間接遞歸調用

1.3宏定義

1.3.1格式及示例:

1.3.2宏的嵌套定義:

1.3.3宏的用途:

1.符號常亮,增加程序的靈活性
2.簡單的函數功能實現,由於宏要在一行內完成,只能實現簡單的函數功能
3.為程序書寫帶來方便

1.3.4注意事項:宏引用形式與函數調用非常相似,但兩者時間過程完全不同,宏替換在編譯預處理時完成。函數調用時,如果實參是表達式,要先計算表達式,再把結果值傳遞過去。而宏替換不做計算,直接替換過去,記住,宏只進行替換。

1.4多文件模塊

1.4.1程序文件模塊

當一個c程序由多文件模塊組成時,整個程序只允許有一個main()函數,程序的運行從main()函數開始,包含main()函數的模塊叫做主模塊,為了能調用寫在其他文件的模塊中的函數,文件包含是一個有效的方法.

1.4.2文件模塊間的通信

用到全局變量,需外部變量聲明,格式:

extern 變量名表

外部函數調用:

extern 函數類型  函數名

靜態全局變量:有特殊的作用,用於限制全局變量作用域的擴展。為了避免自己定義的全局變量影響其他人編寫的模塊,c語言的靜態全局變量可以把變量的作用范圍僅局限於當前的文件模塊中,即使其他文件模塊使用外部變量聲明,也不能使用該變量。

2.學習體會

  • 感覺c語言真的越來越難,越來越復雜了,特別是代碼量的增加,還有遞歸、指針進階、文件模塊等知識的加入,真的遠遠超出了我預想的范圍,覺得什么都不會,又不知道自己哪里不會,以前只是覺得自己的編程能力很差,現在開始懷疑自己的理解能力了,上課也不是很能聽懂,比如這次的大作業,寫學生管理系統,什么文件,什么工程,真的還沒弄明白,就迷迷糊糊要寫系統了,也不知道該從哪下手。學好c真的不是件容易事,我還是得腳踏實地,一步一步來吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM