C語言函數嵌套調用作業
阿新 • • 發佈:2018-01-01
clu 設計思路 數組名 所有 blog 聯系 post 後來 運算
一、實驗作業
1.1 PTA題目:6-4 十進制轉換二進制
設計思路
如果n大於1 對n/2繼續進行該函數運算
輸出n%2的值
代碼截圖
調試問題
我第一次做的時候判斷的邊界條件是大於0繼續進行運算,但這樣是錯的,因為當n等於1時,n%2等於0,由於二進制是逆序輸出,又因為這個0是放在開頭的,可省略
1.2 學生成績管理系統
1.2.1 畫函數模塊圖,簡要介紹函數功能。
1.2.2 截圖展示你的工程文件
1.2.3 函數代碼部分截圖
主函數
新建
修改
輸出全部
1.2.4 調試結果展示
- 新建與輸出
- 修改及修改後
- 刪除
這個步驟我采用的是將要刪除的學生後面的所有學生向前移一位,這樣做的缺點就是最後的一個學生將會登記兩次,目前我還沒想到什麽剛好的方法
- 其他步驟因為有一些較大的錯誤,還未改正,在此無法貼出圖片
1.2.5 調試碰到問題及解決辦法。
- 1、修改學生成績的函數中,我忘了修改完後要重新計算平均分和總分了,後來運行結果不對,我才發現這個問題,然後再代碼後加了計算
- 2、我一開始把計算平均分和總分的函數寫在addition裏面,但是這樣結果卻是沒有進行計算,所以我只好在輸入完後直接計算平均分和總分
- 3、查找學生信息的結果中聯系方式會出錯,目前還沒找出它的錯誤= =
二、截圖本周題目集的PTA最後排名。
三、閱讀代碼
角谷定理:
- 輸入一個自然數,若為偶數,則把它除以2,若為奇數,則把它乘以3加1。經過如此有限次運算後,總可以得到自然數值1。求經過多少次可得到自然數1。
如:輸入22,
輸出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
STEP=16; 程序實現:
#include<stdio.h> int Fun(int m) //定義m為自然數 { printf("%4d",m); if(m==1) return 1; //當m=1的時候返回1 if(m%2==1) return Fun(m*3+1)+1;//m為奇數,返回它的三倍加1,後面的加一是步數加一 if(m%2==0) return Fun(m/2)+1; //m為偶數,返回它的一半,同理後面的加一是步數加1 } void main() { int m,n=0; printf("請輸入一個自然數:"); scanf("%d",&m); n=Fun(m); //定義步數為n,並將m的值傳遞給形參 printf("\nSTEP=%d\n ",n); }
- 該題通過遞歸,省去繁瑣的過程,較容易地得到結果
其思路大致為:首先輸入一個自然數m,調用函數Fun(int m),將m的值傳給形參。每次進行判斷如果是偶數返回Fun(m/2),是奇數返回Fun(m*3+1),遞歸調用Fun()函數,直到m=1的時候,返回1,調用結束。另外為了方便計算步數,可在判斷是奇數時,直接返回Fun(m/2)+1,偶數同理。然後利用n=Fun(m),輸出n的值即為運算的步數。
四、本周學習總結
1.介紹本周學習內容
一、指針進階
- 1、指針數組
格式:類型名 *數組名[數組長度]
優點:使用指針數組不會造成內存單元的浪費 - 2、二階指針
一般格式:類型名 * *變量名 - 3、命令行參數
一般形式:命令行 參數一,參數二,參數三,······參數n
命令名和各個參數用空格隔開,可以無參數
註意:使用命令行的程序不能在編譯器中執行 4、指針作為函數返回值
註意:不能返回在函數內部定義的局部數據對象的地址2.學習體會。
- 這周學習的知識都比較難,例如二階指針,它的運算很復雜,容易出錯,又比如鏈表,它的概念我現在也不是很了解(所以沒在總結裏寫上他= =)
指針數組是比較好用的,但使用起來也是比較復雜的,需要仔細思考好
C語言函數嵌套調用作業