C#本質論學習 ☞三
一、先來看一個詭異的程式
C++書上的一個題,拿出來剖析一下,用C#的觀點重新來做
本程式 的目的是求一個數所有的質因數, 沒有使用子函式的呼叫,第一個for使用的極其詭異,但是也保持了與第二個for的良好的連線,但是實現的過程是比較複雜的,深入的理解是有些困難的。藉助本例說一下子函式和引數的作用。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QualityFactor
{
class Program
{
static void Main()
{
int a, i;
a = int.Parse(Console.ReadLine());
start:for (; a > 1; )
{
for (i = 2; i <= a; i++)
{ /*把i的值先設為2可以把所有的偶數中的2都找出來,但是那個i++感覺就有點浪費了,再遇到i 是大於2的偶數的話就不執行了*/
if (a % i == 0)
{
Console.Write("{0}、", i);
a /= i;
goto start;
//如果滿足條件跳出第二層迴圈,從標示的位置繼續執行,這感覺是比較好的,在C++上可以用break跳出。
}
}
}
}
}
}
大家幫忙算一下時間複雜度吧,有點亂。
作為改進吧,將上面的兩個for迴圈變為一個
int a, i;
a = int.Parse(Console.ReadLine());
for (i = 2; i <= a; i++)
{
if (a % i == 0)
{
Console.Write("{0}、", i);
a /= i;
i--;
}
}
在沒有子函式的呼叫的時候,這個程式只能解決這一件事情,而且相信大家對這個程式的雜亂程度會很頭疼了。改進的那個感覺還行,但是新的方法往往是具有很強的實用性和強大的功能的,那就一起來學習另外的基本的方法吧,子函式和引數的應用。
二、子函式和引數
子函式的使用:可以提高程式碼的重用,減少重複程式碼,增強程式碼的可讀性,不知道拯救了多少人的時間,這是最重要的。另外對於軟體的升級和程式的改進都是有好處的,相信很多的程式設計師都很是瞭解了。
引數的宣告:在C#中 引數的行為和命名規範和區域性變數一模一樣的,形參與主函式中的實參是對應的關係 這樣才能進行值或者是地址的傳遞。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QualityFactor
{
class Program
{
//判斷是否為素數的函式宣告需要呼叫實參如果,引數定義不可以省略
static bool PrimeNum(int m)
{
int i;
bool returnvalue = true;
//returnvalue 的應用解決了返回值的難題,如果在迴圈中執行返回值的話不太合適
//我弄了很久,最後提醒的是“ 並非所有的程式碼路徑都返回值”,為了保險起見吧,
//還是用一個標記表示為好。也希望大師講解!!
if (m == 2)
{
returnvalue=true;
}
else
{
for (i = 2; i < Math.Sqrt(m); i++)
{
if (m % i == 0)
{
returnvalue = false;//如果不是素數returnvalue為false。否則為true
}
}
}
return returnvalue;
}
static void Main()
{
int a,i;
Console.Write("請輸入要分解的a的值 a=");
a = int.Parse(Console.ReadLine());
for (i = 2; i <= a; i++)
{
if (PrimeNum(i)&&a%i==0)
{/*判斷素數和能被a整除的數*/
a /= i;
Console.Write("{0}、",i);
i--;
}
}
}
}
}
雖然從長度上來講的話,用子函式會長了點,但是在一個函式中的其他場合還是比較用幫助的,你可以清楚的明吧函式每個部分的含義,如果在主函式的最後要判斷素數,或者輸出素數就可以方便的呼叫了。
另外如果子函式的數目比較多的話,必須得對子函式進行提前宣告。。這是C++中的用法,對於C#來說也是一個好習慣。。
好吧,就到這了,希望能拋磚引玉 ,希望大家能體會到點什麼。。
相關文章
- C#本質論學習 ☞二C#
- C#本質論學習 ☞ 四C#
- 學習的本質
- Block學習①--block的本質BloC
- ASP.NET本質論ASP.NET
- ASP.NET Core 框架本質學習ASP.NET框架
- 《C#本質論》讀書筆記<四>值型別再解析C#筆記型別
- 數論學習筆記 (2):質數筆記
- AJAX學習必備三本書
- 【C#學習筆記】獲得本機IPC#筆記
- 學習作業系統的三本書作業系統
- 透過三消看遊戲本質遊戲
- Category的本質<三>關聯物件Go物件
- 三個因素是軟體本質?
- Asp.net本質論之應用程式物件ASP.NET物件
- 《軟體開發本質論》讀書筆記筆記
- 學習進度條__軟體工程概論第三週學習計劃軟體工程
- python學習----5本書,三個人各借一本,多少種借法Python
- 論文學習
- Zero-shot Learning零樣本學習 論文閱讀(三)——Semantic Autoencoder for Zero-Shot Learning
- 蛋白質深度學習深度學習
- 優思學院|質量大師的那些名言(三)【質量是一種習慣】
- 動作遊戲的本質及相關設計方法論遊戲
- c# button學習C#
- C#學習4C#
- c#影片學習C#
- 嘗試討論線性方程組相關數學原理、機器學習模型引數求解的數學本質機器學習模型
- [gRPC via C#] gRPC本質的探究與實踐RPCC#
- 學習筆記----圖論學習中筆記圖論
- 好的書要讀三遍——《Learning hard C#學習筆記》書評兼論讀書方法C#筆記
- 學習分享:對極幾何、基本矩陣、本質矩陣(持續更新)矩陣
- ETL學習心得:探求資料倉儲關鍵環節ETL的本質
- ZGC論文學習GC
- 遊戲設計的本質(一):數值的本質遊戲設計
- C#泛型學習C#泛型
- c#學習網站C#學習網站
- c# 陣列學習C#陣列
- c# 學習要點C#