程式設計師考試補課筆記-第二天 (轉)
因為前天老師摸到我們的底的關係,所以今天要補一補前面的基礎部份。他先是列出一個資料型別的表,如下:
| 整型
| 字元型
| 基本型別 | | 實型(浮點型)<
| | 列舉型別 | 雙精度型
|
資料型別< | 陣列型別
| 構造型別< 結構體型別 (結構)
| | 共用體型別 (聯合)
| 指標型別
| 空型別
上面這個表,基本型別是我們平常用得最多的,包括整型、字元型、實型(浮點型),就從這裡最常用的資料型別說起吧。
說起C語言的資料內容就要說說裡存放的資料是究竟怎麼一回事,大家應該都知道計算機只可以處理二進位制的數吧,因為是的關係(二態器件),這些只能有兩種表示的狀態,所以運用到計算機裡就顯得特別有用了。從現在開始我們要知道計算機處理的所有資料都是二進位制數,那麼他究竟是怎麼運算的呢?老師先給一些十進位制數轉換為二進位制數的幾道題我們做,這些小兒科當然是沒問題啦,很簡單的就做了出來。老師當然知道我們是會做的了,但是其實是想我們在做這些題目的時候找出更簡單的轉換方法。例:
10111012 =(93)10 很簡單的就可以計算出來了,我的方法就是傳統的計算方法。它們都有自己的位權,第一位就是20,第二位是21,跟著的都如些類推,將有1的地方乘上該位的數跟著相加起來就等於93了。這裡說說其實二進位制的次方特別好算,就像我們的一樣階梯上去的,1-2-4-8-16-32-64-128-256-512-1024……你知道這規律嗎,如果知道是不是計算起來特別別好辦呢!
不過老師在這裡提出了一個更好的方法,起碼比一個一個加上去也快多了。就是將那個要轉換的數變為全都是1111111,你知道這個數是多少嗎?其實就是有一技巧在裡面,把它看成10000000 減 1吧!那麼是不是很快就知道10000000是多少呢,沒錯就是128嘛,再減1就是127了,在些基礎上試著將原來的那個二進位制數位為零的那兩個數求出來,第一個零在第二位,所以是2,第二個零在第六位,所以是32,將其加起來被127減去就可以得出93了,是不是很簡單方便呢(學到東西快交學費啊,哈哈~!)。你知道計算機裡二進位制有什麼幾種運算嗎?我在這裡告訴你,其實就只有這麼的一種,就是加法運算(你不要告訴我你連二進位制的加法也不會運算,其實就是蓬二制一嘛)。為什麼這樣說呢?其實二進位制也有減法運算和乘除,但是計算機裡有一種叫補碼的方法,可以將減法運算變為加法運算,至於怎麼實現教師也沒有再深入講下去了(在些補充,乘法也是利用移位來實現轉為加法的)。
現在轉入到C語言的整型資料裡,C語言的整型資料是2位元組的,就是16位,最多可以65536,他的範圍是 -32768 到 32767 。C語言裡分有符號型別和無符號型別,如果是沒有符號的整數型別的範圍就是0 到 65535 了。關於字元型資料,如果嚴格來說C語言里根本沒有字元這種型別,因為他所儲存的是它的ASCII碼。直接可以用來和其它的資料型別運算,比如:
main()
{
char s='A';
int i=2;
s=s+i;
printf("%d",s); /*這裡可以直接輸出其ASCII碼*/
printf("%c",s); /*這裡的結果因為上面的語句改變了字元s的字元,輸出的是'C'*/
}
那麼更不要說字串了,所以字串在C語言裡也只是用陣列來表示,和其它的高階語言不同,有其的字串型別,而且還是字元和字串結合在同一種型別裡。現在該說一下實型資料了,字型型別通常用在有小數位的一些資料。就像這題一樣:
S=1/1+1/3-1/5+1/7……1/2n-1
這個是我寫的:
main()
{
int n,i,s;
int r=1;
printf("please input: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s=s+r/(2*i-1);
r=-1*r;
}
printf("%d",s);
}
這個是考試裡的:
void fun(float *sn, int n)
{
float s=0.0,w,f=-1.0;
int i=0;
for(i=0;i
f=___*f; /*這裡填 -1 */
w=f / (2*i+1);
s+=w;
}
____=s; /*這裡填 *sn */
}
考試裡的兩個空我都做對了,可是自己寫的那個程式就有大問題了,就是答案用了整型資料,從答可知答案應該是小數啊,真的一時的糊塗就可以至命啊!我們幾乎所有人都是錯了這點,當然也要另類的錯法,就是用回來以前QB的一些運算子,^ 這個是QB裡的次方運算子,這可真的鬧出了。之後是要我們編一個主來這個函式。
我是我做的
main()
{
float s;
int n;
printf("please input:");
scanf("%d",&n);
fun(&s,n);
printf("%f",s);
}
這是這麼幾條簡單的語句,不過就難道了幾乎所有人(除了我)。你知道他們的答案嗎?讓我給大家展示出來吧
main()
{
float *ss;
int n;
printf("Please input:");
scanf("%d",&n);
fun(*ss,n); /*這裡出了問題*/
printf("%f",*ss);
}
他可以還沒有了解到C語言裡的函式引數的問題吧,既沒有定義一個可以存放結果的變數,引數方面也用錯了,如果真的要用指標也得要指標指向一個儲存單元才行吧。而且還不是傳了地址,他而是試圖傳一個指標指向單元進函式里,這是絕對錯誤的。因為該呼叫的函式是地址,好了,下面給他的程式更正一下。如下:
main()
{
float *ss,s; /*這裡多定義一個單精度的變數*/
int n;
ss=&s;
printf("Please input:");
scanf("%d",&n);
fun(*ss,n); /*這裡出了問題*
printf("%f",*ss);
}
好了,就這樣這條程式就完全正確了,不過要是為了節省空間就用我寫的那條吧,因為不要多開消一個指標變數。今天寫得特別的長,也特別的嗅,望大家見諒了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992822/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 程式設計師考試補課筆記-第六天 (轉)程式設計師筆記
- 程式設計師考試補課筆記-第一天 (轉)程式設計師筆記
- 程式設計師考試補課筆記-第七天 (轉)程式設計師筆記
- 程式設計師考試補課筆記-第十天 (轉)程式設計師筆記
- 程式設計師考試補課筆記-第十一天 (轉)程式設計師筆記
- 程式設計師考試補課筆記-第十二天 (轉)程式設計師筆記
- 初級程式設計師考試大綱 (轉)程式設計師
- 高階程式設計師考試經驗 (轉)程式設計師
- 高階程式設計師考試大綱 (轉)程式設計師
- 2003年中級程式設計師考試日記--下午題(一) (轉)程式設計師
- 2003年中級程式設計師考試日記--上午題(二) (轉)程式設計師
- 2003年中級程式設計師考試日記--下午題(二) (轉)程式設計師
- 2001年高階程式設計師考試心得 (轉)程式設計師
- PHP程式設計考試PHP程式設計
- 軟體設計師考試要求及考試範圍
- java程式設計師程式設計筆試基礎學習Java程式設計師筆試
- 四. 文字程式設計--Windows程式設計課程學習筆記程式設計Windows筆記
- 5 月書訊 | 程式設計師的歷史課,是時候補補了程式設計師
- web 考試筆記Web筆記
- 程式設計師修煉之道-筆記程式設計師筆記
- 《Python語言程式設計》課程筆記Python程式設計筆記
- 12個程式設計師筆試面試寶典程式設計師筆試面試
- Java程式設計師的筆試題10道Java程式設計師筆試
- 程式設計師怎麼高效做筆記程式設計師筆記
- 歷年軟體設計師考試試題分析
- 程式設計師級資格與水平考試大綱(2003年) (轉)程式設計師
- 一個C++程式設計師的Delphi學習筆記 (轉)C++程式設計師筆記
- UI設計課程筆記(三)UI筆記
- 一個程式設計師的讀書筆記:程式設計的反思程式設計師筆記
- 寫給程式設計師的管理入門課程(轉)程式設計師
- 程式設計師校招筆試經驗小分享程式設計師筆試
- 程式設計師C語言經典筆試題程式設計師C語言筆試
- 【北京之旅】--程式設計師應聘技巧之筆試程式設計師筆試
- 中軟國際Java程式設計師筆試題Java程式設計師筆試
- 《程式設計師》試刊二卷首語 (轉)程式設計師
- Coursera課程筆記----C++程式設計----Week3筆記C++程式設計
- Coursera課程筆記----C程式設計進階----Week 5筆記C程式程式設計
- 浙大翁愷《C語言程式設計》課程筆記C語言程式設計筆記