天天看點

《C語言程式設計:問題與求解方法》——2.16節指派語句

本節書摘來自華章社群《c語言程式設計:問題與求解方法》一書中的第2章,第2.16節指派語句,作者:何 勤,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

2.16 指派語句

通常的表達式不會改變變量的值。那麼,如何通過運算來改變變量原來的值呢?如何通過已知的變量求出未知變量的值呢?這就要用到指派運算符 “=” (以後将其簡稱為指派号)構成的指派語句。指派運算符是具有副作用的運算符。所有可以改變變量值的運算符都稱為具有副作用的運算符(第5章将要介紹的自增運算符 ++ 和自減運算符– –也是具有副作用的運算符)。

指派語句的格式是:

變量 = 表達式;

指派語句的工作流程是:

1)計算出指派号“=”右邊表達式的值。

2)将此值存放在指派号左邊的變量中。

比如,“sales=3693.89;”的作用就是把3693.89存入變量sales中。

注意:1)指派号“=”的左邊隻能是單個變量,不能是常量(“3693.89=sales ;”是錯誤的),也不能是函數調用(“sin(x) = a/2.0;”也是錯誤的)。

2)指派号“=”右邊表達式中的變量(如果有的話)僅僅是取出它們的值來參與表達式規定的運算(前提是右邊的表達式中不出現具有副作用的運算符),變量的值通常不會改變。而指派号左邊變量的原來值,将會被表達式計算出來的新值的存入而“覆寫”掉。

【問題1】已知華氏溫度的資料在變量f中,程式設計求出相應的攝氏溫度并把它存放在變量c中。已知轉換公式是: c=(5/9)×(f–32.0),c表示攝氏溫度,f表示華氏溫度。

【問題2】已知變量x的目前值是36,變量y的目前值是72。請問執行指派語句 “x=y ;”之後,x和y的值分别是多少?執行指派語句“y=x;”(而不是“x=y;”)之後,x和y的值分别又是多少?

提示:一類極為重要的、常用的指派語句

形式如

x = 包含有變量x的表達式 ;(x可以是任何基本類型的變量)

的指派語句表示的是一種疊代關系,即指明了如何用變量x的一個舊值參與表達式所規定的運算,然後将運算結果存入指派号右邊的變量x之中,最終得到變量x的一個新值。 這一點與大家在數學中學過的方程式有着很大的差別。

比如,“i=i+1;”和“sum=sum+k;”(k可以是任意值)在數學中是無解的方程式,但是在指令型進階語言中卻是經常需要使用的指派語句。

【問題3】已知某人的工資額儲存在float型變量salary中,如何将其增加30%,并且仍然儲存在變量salary中?

答:可采用指派語句 salary=salary1.3; (注意:不能用 “salary=salary130% ;”)。

請讀者注意,數學中的方程式是不能直接轉變為指派語句的,隻有公式(等式左邊是單個的未知量,等式右邊是僅僅包含已知量的代數式)才可直接轉變為指派語句。解方程通常必須由程式設計者親自做。參見下一章例題3.2。

【例題2.6】已知三角形的兩邊及其夾角,求三角形的面積。(類型:必修題;趣味性:;難度:)

一級算法:

1 輸入三角形的兩邊x,y及其夾角alfa

2 根據已知量求三角形面積,賦給變量area //以後用符号 →area 表示指派給area

3 輸出三角形的面積

其中第2步需要進一步求精。根據求三角形面積的公式,可轉化為以下指派語句:

說明:c語言中三角函數的庫函數都使用弧度度量角度,而在日常生活中使用度數度量角度;是以在調用sin()時,必須将度數轉化為弧度。頭檔案math.h不能漏寫。

【問題1】使用第3行符号常量有何好處?

【問題2】第2行是否可以省略?為什麼 ?

【問題3】漏寫第7行會如何 ?

【問題4】第7行是否可以下移到第12行 ?為什麼 ?

【問題5】是否可将第10行和第11行互相颠倒位置 ?

【問題6】sin(alfapi/180)能否寫成sin(alfapi/180)或sin[alfa*pi/180]? 為什麼 ?

【問題7】程式設計題:已知三角形的兩邊及其夾角,求對邊長度。

【例題2.7】安全密碼生成器。

人們平常喜歡用純數字序列來作為密碼,比如用生日、紀念日、電話号碼等,這種密碼很不安全,容易破解。請編一個程式将6位純數字密碼轉化為由小寫英文字元組成的比較安全的密碼。查找ascii表可知,數字0~9的ascii碼是48~57;英文字元a~z的ascii碼是97~122。

分析:數字“0”~“9”的ascii碼值在48~57之間,26個小寫英文字元中随意任取連着的10個字元就可與之比對。例如,我們取“d”~“m”。這10個字元的ascii碼的值是100~109之間。如果把“0”~“9”順序與“d”~“m”一一對應,那麼隻要把每個輸入的值加上52即可。編寫程式如下:

程式運作後,人機對話過程如下:

請輸入6位數的數字密碼

123456

建議使用密碼:jihgfe

有了這個程式,你就可以用你的生日或熟悉的電話号碼等純數字來生成比較安全的密碼了。這個程式有很大的改進餘地。請讀者進一步完善它,輕松生成比較好記(你隻要記住你熟悉的純數字)又不易破解的密碼。

繼續閱讀