① c語言define用法是什麼
1、簡單的define定義#define MAXTIME 1000
一個簡單的MAXTIME就定義好了,它代表1000,如果在程序裡面寫if(i<MAXTIME){.........}
編譯器在處理這個代碼之前會對MAXTIME進行處理替換為1000。
這樣的定義看起來類似於普通的常量定義CONST,但也有著不同,因為define的定義更像是簡單的文本替換,而不是作為一個量來使用,這個問題在下面反映的尤為突出。
2、define的「函數定義」
define可以像函數那樣接受一些參數,#define max(x,y) (x)>(y)?(x):(y);
這個定義就將返回兩個數中較大的那個,看到了嗎?因為這個「函數」沒有類型檢查,就好像一個函數模板似的,當然,它絕對沒有模板那麼安全就是了。可以作為一個簡單的模板來使用而已。
C語言中無參宏定義的一般形式:
#define 宏名 字元串,其中的「#」表示這是一條預處理命令。凡是以「#」開頭的均為預處理命令。「define」為宏定義命令。「標識符」為所定義的宏名。「字元串」可以是常數、表達式、格式串等。
例如:#define M (a+b)它的作用是指定標識符M來代替表達式(a+b)。在編寫源程序時,所有的(a+b)都可由M代替,而對源程序作編譯時,將先由預處理程序進行宏代換,即用(a+b)表達式去置換所有的宏名M,然後再進行編譯。
② 剛開始學c語言, 求下面題的正解。
以下是一個 C 語言的計算示例,用於輸入腰圍和體重,計算脂肪含量,並輸出相應信息。
#include <stdio.h>
int main() {
float waist_circumference, weight;
float waist_inch, weight_pound, fat_percentage;
printf("請輸入你的腰圍(單位:cm):");
scanf("%f", &waist_circumference);
printf("請輸入你的體重(單位:kg):");
scanf("%f", &weight);
// 將厘米轉換為英寸,將公斤轉換為磅
waist_inch = waist_circumference / 2.54;
weight_pound = weight * 2.2;
// 計算脂肪含量
fat_percentage = (waist_inch * 4.15 - weight_pound * .082 - 76.76) * 1.;
// 判斷脂肪含量是否在正常值范圍內
if (fat_percentage >= 12 && fat_percentage <= 20) {
printf("你的脂肪含量處於男性正常范圍內。\n");
} else if (fat_percentage > 20 && fat_percentage <= 30) {
printf("你的脂肪含量處於女性正常范圍內。\n");
} else if (fat_percentage == 23) {
printf("你的脂肪含量是公認的完美身材脂肪比例。\n");
} else {
printf("你的脂肪含量不在正常范圍內。\n");
}
return ;
}
在運行程序之前,請確保你的 C 編譯器已正確安裝。在大多數情況下,你只需要將該示常式序復制到文本編輯器中,並將其另存為.c文件,最後使用 C 編譯器編譯即可。
輸入提示將要求你輸入腰圍和體重(單位為厘米和千克),然後程序將自動計算出你的脂肪含量,並顯示相應內容。請注廳前意,在此戚伏汪示高仔例中,我們已經針對輸入值的單位進行了轉換,以便計算其脂肪含量,你可以通過修改變數和常數來適應不同的輸入數據和單位。
希望對你有所幫助!
③ 怎麼學好英語
你好,很高興為你解答:
1、首先、培養積極主動的動機。
動機對於英語學習來說特別重要。學習是學生的任務,然而為了完成任務而應付學習的動機絕對是不正確的,我們的目的就是想斗困讓學生通過英語掌握一些交際的手段,看到外面世界的廣大,從而了解一個完全不同的異域世界。
因此,一個良稿搭好的動機才是學生學好英語,或者說一切功課的關鍵。如果在學習英語的時候沒有積極性,那麼學習英語的時候就不能長久的堅持,所以學習效果還是質量都會打折扣。
2、其次、培養興趣。
除了動機以外,興趣也很重要。有些學生總覺得學習英語很鍵銷拿難,全是些單詞,句子,所以總是一提到英語就頭暈目眩,退而避之,從而形成了一種對英語的排斥心理。其實,正如我們在玩耍時會發現其中一些有趣之處一樣,當我們對英語有了一定程度的了解後,也能從中找到有趣的地方。
3、最後,要勤奮。
那些英語成績好的同學,勤奮是很重要的一個因素。沒有一個人是天生就會一項技能的,想有些成就,只能靠自己努力。所以要學生,第一、上課認真聽講,做好記錄,抓住這35分鍾的效率。第二、課後及時復習,有問題及時詢問老師或同學。可想而知,他們的成功完全靠的是自己後天的努力,要勤奮的鍛煉才做得到。
④ 請問C語言與C#有什麼區別
一、難易程度的區別。
c#屬於.net framework中的一個產品,簡單易用,但開發出來的東西目前還需要安裝運行庫才能供別人使用。c語高攔腔言是一種古老難用的語言,目前可能在嵌入式系統用的比較多,另外大學會有這門課。相關的還有c++,可以做系統的底層開發,也不容易掌握。
二、內容上的區別。
C語言面向過程,開發非託管程序,編譯成exe是二進制可執行戚衫文件,不可跨平台。
C#面向對象,開發託管程序,編譯成exe是中間語言,需要在.NET平台上進行二次動態編譯,之後才能執行,可跨平台。
三、特點上的區別。
C語言誕生得非常早,當時人們普遍還習慣用匯編語言編寫軟體,而且沒有什麼統一,衡悄通用的操作系統,基本上軟體都是從0開始寫的。C#是一種安全的、穩定的、簡單的、優雅的,由C和C++衍生出來的面向對象的編程語言。它在繼承C和C++強大功能的同時去掉了一些它們的復雜特性。
⑤ C語言的入門書籍推薦~~~
第一、不要盲目的亂買書,所有的書都是千篇一律,但大多都是雞肋,經典的一本足矣!
推薦《C primer plus》
第二、有計劃的看完上面推薦的這本書!
像我剛學的時候是 二天看完一章,標記好重要的筆記!第三天把章後的編程題自己敲一遍,第四天把後面的作業全部自己做一遍!到了指針後是三天看完一小節,因為指針在C語言中舉足輕重,一定要理解了一小節再看下一小節!一天看不懂看兩天,切不可今天看不懂就不看了!可以說沒學好指針你就沒學好C語言!
第三、當你看完上面的書,能獨立做完所有的章作練習題時,可以說你已經對C語言有了個大概的了解了!
這時候你可以買一本《C和指針》好好的仔細研讀一遍!有助你加強對指針的了解!!看完了上面的書後,再看看《C陷阱與缺陷》 !
書不求多而求精,市面上的書好多都是誤人子弟的!
看完了上面的書,你可以去看一下《C++ primer plus》同樣的計劃 看完這本書!
你再去看數據結構
要再往下的話 再去買一本孫鑫的VC程序設計
…………
看完了VC的話別以為自己畢業了。
推薦你去看 匯編 因為你看完了匯編 對你了解內存機制,存儲原理有很大的幫助,對你在代碼優代,結構安排上有很大的作用!
⑥ 一道簡單C語言指針問題編程題!麻煩高手幫我改的簡單容易理解,英文單詞別很多還難!麻煩了
因為某種原因,本人共考過2次筆試,3次上機。其中筆試在70左右,3次上機均為滿分,
看著大批的同學在為三級發愁不知道如何准備和應考。我想我應該把經驗和學習的方法寫下
來,這些方法保證你能過三級。但是不保證你能獲得高分並學到知識,所以請各位計算機系
與愛好電腦的高手或自認為是高手的同志們就此打住。OK!
以網路技術為例(其他三門的方法相似),我把方法總結為:細看書,做筆記,多復習。
第一階段:看網路技術教材,詳細地做筆記(20天).
第一邊看書你要看得特別仔細,把所有你認為重要的地方全抄到筆記本上,包括重要的
表格和插圖。第一次看不懂的地方可以跳過去等過兩天再回頭看一遍。每天看新的知識之前
都將前兩天看的再復習一遍,強化記憶。
我把全書的重要程度劃分了一下:第一,七,八章 了解(看看做做筆記就行了);
第二,四章 理解(看懂主要的知識點);第三,五,六章 掌握(看懂所有的知識點);
其中又以以下章節為重點:2.2 進程 2.3 存儲管理 2.4 文件管理 2.5 設備管理
(我當時這一節的題都掛了) 3.5 雙絞線 VS 同軸電纜 3.6 OSI VS TCP/IP 4.3 乙太網
4.5 組網技術 4.8 網路互連 5.3 IP協議 6.4 加密技術 其中有些內容必須理解並掌握,
要是不理解,背也要背下來。如:OSI協議和TCP/IP協圓答議的各層的名字,各種傳輸介質和各種
乙太網的參數等。
另外所有教材橘扒慧上沒有的內容不用看,因為考試出的題沒有一道是書本之外的。
===> 要點一:堅持就是勝利,每天堅持看2個小時,至少能看15頁。
===> 要點二:該抄就抄,好記性不如壞筆頭。
===> 要點三:注意課後作業題,那可能就是原題。
這一階段完成後,應該能夠理解大部分的知識點。還要能夠很快的在書中找到某個知識
點的位置。
第二階段:復習重點章節(5天)
這一次復習的重點在那些需要理解和掌握的內容上,如果你看懂了,合上書想一遍,看
不懂就多看兩遍,有些重點一定此敬要記住。而且要把筆記本大聲地讀上兩遍,達到更加熟練。
===> 要點一:看懂不一定會記住,一定要在腦海中形成印象,合上書能寫下來。
===> 要點二:名詞術語要注意。
===> 要點三:縮略語。凡是在書上出現過兩遍的,一定要記下中英文解釋。
例如:CDMA/CD,MFLOPS等。
第三階段:復習不重要的章節和作題(5天)
有人也許要問,既然不重要還復習它干什麼。錯!出題人不能用重點湊成一百分要適當的
加點其他內容。於是只有在這些不重要的章節裡面出了,這些題大概佔20分左右。得分的方法
是將所有不太重要的章節再看一遍,越是你認為不可能出的,越要把它抄下來,記一記。而且
要特別注意數字,如ATM的傳輸速率,單模光纖所使用的光的波長等。(上次最嘔吐的的一道
題是,信號從發送站經過衛星到接收站的傳輸延遲的典型值是多少?我按照同步地球衛星到地
球的距離,光的傳輸速度,算到百毫秒的量級,但是算不出具體的值,於是猜了一個250ms。
答案居然是540ms。暈倒~!)
還有就是模擬題的問題,我認為現在市面上的模擬題都太差了,考的全沒有,不考的全有
了,說實話還不如我出的呢。所以題不用多做,只要把書看好就行,最後幾天可以做幾套,熟
悉一下題型,掌握一下時間就夠了,多做全是浪費。
以上方法我一個同學上次照著我說的做了,結果筆試考分比我還高。所以不管你聰明不聰
明,只要你照我說的做了,一定能通過。
一句話:要是不過你拿我是問。
上機部分現在只有一到c語言編程題,非常簡單。但我認為最重要的是能夠編譯程序和調試
程序,也就是說,一道題你能在紙上寫下來還不夠,一定要能夠在機器上運行出結果才行,因為
編譯系統及機器的不同,有的對的程序也可能產生大量的錯誤。只要你能把錯誤找出來就差不多
能過了。
因此我把方法總結為:多思考,多上機,捉蟲子。(以譚浩強的《c語言設計》第二版為例)
第一階段:看書,做筆記。(15天)
有人說那本書那麼厚,15天能看完嗎?錯!誰說讓你們看完了,你要是只是想過三級。只用
看前140頁就足夠了。也就是,第一章,了解,第二,三章理解,第五,六,七章掌握,第八,
第十章隨便看一下就行了。因為c上機只要求你填一個函數,所以函數那一章不用看太仔細,只
要知道函數是干什麼用的,它們之間是如何調用的就行了。至於指針,所有的考題全都能用數組
做出來,用指針只不過是簡單一點,容易出錯一點而已,我是強烈建議不用指針。第九章和第十
一章以後一概不用看。
===> 要點一:勤記,把所有重要的東西都記在筆記本上。如轉義字元的定義等。
===> 要點二:每天上機調試兩個程序(可以是例題或作業題)
===> 要點三:堅持,再堅持。
第二階段:做課後作業題並上機調試。(10天)
現在書你已看完,練習題也可能做出了一些。現在就是要把前幾章特別是五六七三章的課後
題一定要自己思考一下,做出來後再上機調試,是在做不出來,就看看答案,看懂後,再在機器
上調試一下也行。
重要例題:例 4.10 4.12 5.4 5.5 5.6 5.7 5.8 6.6 6.8 6.10 7.2 7.2 7.8 7.9
重要習題:4.5 4.9 5.5 5.7 5.8 6.1~6.10 7.1~7.14
===> 要點一:做題時使用N-S流程圖。
===> 要點二:每道題不管多麼簡單,一定要調試直到正確為止。如習題2.4(2)我有幾個同
學都是能編出來,但是怎麼都運行不正確。
===> 要點三:每天上機作五道題以上,最好在TC2.0環境下。
第三階段:繼續調試重要程序,看一本書(5天)
繼續調試程序直到熟練,然後看一本書,書名我先不說,可能許多同學都知道。但我不贊成
看這本書,而且我勸你到最後幾天再看,挑出一部分典型的題看一下,自己做做,看是否正確,
熟悉一下題型,不要完全依賴那本書。那樣可能因為一點小錯誤你找不出來就掛了。我們班的女
生們第一次因為這個原因掛的可不是少數。
還是那句話:要是你上機不過找我是問。
········回顧過去的大學生活,計算機等級考試最令人難忘。筆者斗膽在這里賣弄一下過去兩年(准確的說是一年半)里通過全國計算機等級考試二到四級的經歷,以自己的感受泡製一份全國計算機等級考試全攻略,希望對後來的朋友們尤其是剛剛邁入大學校門的師弟師妹們有所幫助。
考證路上,有兩點需要特別注意。一是一次只能報考一個等級(包括筆試和上機)的考試。一個級別中有不同類別,考生只能選擇其中一類。另外,考試單科合格者,成績只保留到下一個考試周期。所以不想找麻煩的話就要認真准備,爭取一次OK,否則會對信心造成打擊。
一級考試
對於一級考試,其實沒什麼好說的,大部分人不必報考這一級別,既浪費金錢又浪費生命。因而筆者強烈建議不要考這一級別。如果你不得不參加這一級別考試的話,筆者在表示同情之餘建議你在熟悉常用軟體之餘研究一下WPS,在以後的全國計算機等級考試(一級)中 ,WPS將成為一門單獨的考試科目。
二級考試
二級考試是大部分人都必須參加的。二級考試的內容包括基礎知識和程序設計兩大部分。 基礎知識主要包括電腦基本知識,DOS基本知識和基本操作,WINDOWS的基本概念與操作。關於這部分知識有點水準的輔導書就會有詳細的介紹,只要把書好好看看就沒什麼問題。DOS中的文件、目錄、路徑的概念及使用是必考部分,要留意。(相關閱讀:如何應付新大綱二級考試的公共基礎知識)
二級考試的重中之重是程序部分。要對語言的基礎知識熟練掌握,尤其要留意基礎概念和基本方法(選擇法、冒泡法等),要能看懂書上給的程序。一般來說,如果能獨立做出大部分課後題就一切OK了。對語言的工夫應該下在平時,多想,多練,多上機。自己考慮作一些小程序會有很大幫助的(別人崇敬的目光就會讓你覺得很有價值)。二級DOS類考試的上機考試包括三個部分的內容,即DOS操作題,程序修改題和程序編制題。如果你的C語言有一定水準的話,較難的部分就是程序修改題了,畢竟了解陌生人的思路是一件比較難的事。因此平時要多讀一些程序,自己編程時注意要盡量符合規范,否則很容易吃虧。當然多上機練習是取得好成績的不二法門。關於輔導書大連理工出版社和南開出版社的都相當不錯。
三級考試
三級是一個比較麻煩的等級。它共有四個類別,可以大致分兩種。 三級PC上機是考匯編程序,其他三個類別考C程序。如果不是對自己特別有信心的話一般不要報考PC技術。畢竟學習匯編語言也是不小的負擔 ,而且對報考四級沒什麼幫助(四級不考匯編!)。對於其他三種主要看自己的興趣了。相對來說資料庫要難一點(對數學系的除外)。三級的四個類別各有側重,比較麻煩的是對於四級來說都太片面了,所以幫助不大。因此基礎比較好的,直考四級也是可以考慮的。(相關閱讀:通過計算機等級考試三級網路的經驗)
筆試部分是三級的難點,所要記憶的內容比二級增加很多。要注意對基本理論和基礎概念的掌握,有利於知識網路的形成,減少記憶負擔。
由於三級剛剛改革不久,各個出版社出版的輔導書都很難貼近考試。這種情況下多看書就成了最好的選擇。從近兩次考試的情況看,出題也很接近課本(尤其是網路技術,有部分教材原話)。三級上機考試難度比二級提高並不大,較復雜的部分如文件讀寫,函數調用等通常題目已給出,因而所考的依然是比較基本和典型的演算法。
四級考試
四級是最後一級,也是知識最復雜的一級。報考四級是需要一點信心和勇氣的,你報考四級後身邊幾乎不可避免的出現一片質疑聲(當我報四級時老師竟然告訴我本校從來沒人通過),這時候一定要相信自己。(相關閱讀:幫你全面了解全國計算級等級考試-四級)
四級通過的人數的確是非常少(相對三級),但要看到四級報考人數也是最少的。四級知識量是巨大的(看看那厚厚的教材就知道了),難點主要是離散數學和計算機英語。對於離散數學,如果有機會旁聽一下計算機專業的核心課程《離散數學》會很有幫助的。要記住一定要作一定數量的習題!僅僅通過識記是無法提高水平的。
計算機英語沒有想像中的困難,常用的單詞只有幾百個,只要把近5、6年的試題中英語題過一遍就差不多了。手頭最好有一本專業詞典,大部分單詞在文曲星上查不到 。相對來說英語題比較簡單,只要單詞認識就OK了。
筆試中比較新鮮的是論述題。建議買一本歷年試題及參考答案(每年國家考試中心都出版),仔細研究一下,掌握答題方法。比較幸運的是論述題通常有四道,可以選擇自己最有把握的。由於四級考試已經舉行多年,各出版社出的輔導書都比較扣題。筆者強烈推薦大連理工出版社出版的《全國計算機等級考試題典(四級)》。這本書貼近考試,解答詳盡,對順利過級會有很大幫助!一定要做歷年試題(5年以內),確實是有一定復現率的!
四級上機考試和三級差不多,只有一道編程題,注意別緊張,一定要存檔,否則會變為0分。當時跟我一個考場的同學就有人因為慌亂忘記存檔,造成下午的考試沒有通過。(相關閱讀:全國計算機四級考試經驗談)
結束語:最後,不管面對任何考試都需要對自己要信心,相信即使只有一個人通過,那個人也一定是自己!這時你就成功一半了。預祝每一位考生能夠在9月的考試中取得理想的成績!
計算機考試備忘錄
首先是報考時間問題。雖說大學有四年,但是如果你要考研究生的話(大部分人都會考的),從大三下學期就該開始准備了,所以留給等級考試的時間其實只有兩年半而已(四次機會)。因此,如果你是大一的新生,應該考慮報考明年四月的考試。因為全國計算機等級考試是面對非專業人士的,所以難度並不太高(當然也不很容易,否則聽我嘮叨什麼)。如果你的學校沒有一級必考之類的變態規定話,就應該堅決跳過一級從二級開考(時間寶貴,不應該為沒意義的事浪費半年時光)。平心而論,二級知識非常基礎,只要認真准備(你有整整一個寒假的時間准備)過關是很容易的(即使你的計算機基礎很差)。
雖然三級證書一樣可以拿到學位證,並且越級考試也是被許可的,但筆者不提倡直接報考三級(即使你的計算機基礎很好)。直接過三級雖然是一件很酷的事,但這要擔相當的風險,一旦失誤(這是很可能的事,畢竟三級是有一定難度的),你就不得不與剛通過二級的同學一起考試。除非你的神經有下水管道那麼粗,不然會有很大壓力,而且對信心的打擊不容忽視。如果你對自己的計算機水平很有自信的話,二級證書到手後跳過三級直考四級倒是可以考慮的,那樣風險和效率比較均衡。
另一個比較重要的問題是計算機語言的選擇問題。筆者強烈推薦學習C語言。C語言不但本身邏輯清楚,實用性強而且擴展性很強,方便以後學習C++,C#等語言。如果你有獅子一樣的雄心,更應該選擇C語言,要注意到四級和高級程序員考試都要求C語言!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@計算機三級考試馬上就要到了,然而很多朋友對計算機上機考試卻仍舊十分茫然,
參加這次考試的人有很大一部分是上次機試沒有通過的朋友,甚至還有一些考了兩次機試都沒有通過的……
這其中不乏一些C語言學的很不錯的高手,大部分人到現在都不明白為什麼自己親手編的程序卻是0分……
究竟是什麼原因呢?不就是那100道題目嗎?翻來覆去的看也沒有發現自己的程序有什麼錯誤啊,看資料,用模擬盤模擬也是滿分啊,可為什麼正式考試就是0分呢?
於是很多人甚至把通過上機考試當成一件*運氣的事了,甚至有的朋友對上機考試感到十分恐懼
然而這其中真正的原因……
大家不妨和我一起看一下考試中心命題組的正確答案~
順便提醒一下大家在考試的時候要注意的問題,希望對大家有所幫助。
第一條:審題要仔細!正式考試的時候會遇到很多面熟的題目,這些題目有的似乎和
平常資料中看到的一樣,然而,千萬不要見到面熟的題目而沾沾自喜,因為有很多的
「陷阱」會使你審題的時候就出錯~!
我們看一道所有人都做過的的 「數字題目」 。
考試中心命題組第23題:
已知在文件in.dat中存有N個實數,(N<200),函數readdat()是讀取這N個實數並存入數組xx中。
請編制函數CalValue(),其功能要求:
1、求出這N個實數的整數部分平均值aver;
2、分別求出這N個實數中其整數部分值小於平均值ever的數的整數部分值之和sumint與小數部分之和sumdec
最後調用函數WriteDat()把所求的結果輸出到文件OUT8.dat中。
這一題看起來很眼熟,然而你仔細看~!
1、aver是整數部分的平均值~!不是普通的哦!
2、整數部分值小於平均值ever的數的整數部分值之和sumint與小數部分之和sumdec!!
呼~,原來這么復雜~!稍不留心就錯了~,結果就想當然的……0分
考試中心命題組第4題
函數ReadDat()實現從文件ENG.IN中讀取一篇英文文章存入到字元
串數組xx中;請編制函數ComWord()分別計算出10個不區分大小寫
的英文單詞的首字母(b,c,f,s,n,r,u,e,o,p)的頻數並依次存入
整型數組yy[0]至yy[9]中,最後調用函數WriteDat( )把結果yy
輸出到文件PS1.OUT中。
這題也很眼熟,然而你仔細看~!
英文單詞的首字母,呵呵,不是平常的字母的個數,是作為單詞的首字母的個數啊,暈~
上面兩道題目並沒有在其他資料上見過,考試的時候也不一定會出,
這里僅僅是給大家提個醒兒,正式考試一定要仔細審題,嚴格按照題目的要求去做,
不要受以前做過的題目的影響。
第二條:一定要考慮除零、溢出、類型轉換、精度等細節問題~!!
雖然我們在平時學C語言的時候老師都提醒過,可是真正到了編程序的時候,
卻沒有幾個人會考慮。這些細節問題似乎並不直接影響題目的輸出結果,
然而,因為溢出和類型轉換錯誤而造成考試得不到滿分的可是大有人在啊!
我們看下面一道最害人的題目~!!,很多朋友考了這道題目都沒有過。
下面來看看你為什麼是0分~!
考試中心命題組64題:
請編制函數encryptChar(),按給定的替代關系對數組xx中的所有字元進行替代,
仍存入數組xx的對應的位置上,最後調用函數WriteDat()把結果xx輸出到文件PS8.DAT中。
替代關系:f(p)=p*11 mod 256 (p是數組中某一個字元的ASCII值,f(p)是計算後新字元的ASCII值),
如果原字元小於等於32或大於130,則該字元不變,否則將f(p)所對應的字元進行替代。
這道題目所有的人都做過,但幾乎就沒有人做對,包括南開無憂在內~!
原因就在於這一句!
無憂:int f; f=(xx[i][k]*11)%256;
南開:char *pf; *pf=*pf*11%256;
表面看來,好象兩個都對,
請你在TC下運行一下下面的代碼,看一下結果你就知道了是怎麼回事了……:
main()
{
char nk='E',*nkp,wuyou='E';
int wy;
nkp=&nk;
*nkp=*nkp*11%256;
wy=wuyou*11%256;
printf("%c %c %c %c\n",nk,*nkp,wuyou,wy);
printf("%d %d %d %d\n",nk,*nkp,wuyou,wy);
}
看到結果了么?是不是很吃驚啊?
≈ ≈ E ≈
-9 -9 69 247
大家看到了,南開的結果是負數,連原來的變數nk都變成了負數,這顯然錯了。
無憂的聰明一點,知道int比char大,定義了個int,對了。
南開錯誤原因就是在TC2.0中char型變數只有一個位元組,根本容納不下'E'*11,
所以產生了溢出,上次考這道題目沒過的同學是不是有所啟發呢?
這里給出考試中心命題組的答案:
void encryptChar(){
int i,k,ch;
for(i=0;i<maxline;i++)
for(k=0;k<strlen(xx[i]);k++){
ch=xx[i][k];
ch=(ch*11)%256;
if(!(ch<=32||ch>=130))xx[i][k]=ch;
}
}
似乎一個例子不能說明什麼,那就把上面的數字題目的答案給大家看看:
考試中心命題組23題答案:
int i;
long val;
float dec;
for(i=0;i<N;i++){
val=(long)xx[i];
aver+=xx[i]-val;
}
aver/=(double)N;
for(i=0;i<N;i++){
val=(long)xx[i];
dec=xx[i]-val;
if(dec>aver){
sumint+=val;
sumdec+=(xx[i]-val);
}
}
看到了吧,首先,val的定義,不是我們習慣的int,而是能容納更大數的 long ,
這樣在求和的時候就不會溢出,無憂和南開的答案沒有吧~
再看,算aver平均值的細節,不是我們平常習慣的aver/=N,更不是無憂的1.0* sum/N,
而是aver/=(double)N,所以大家在考試的時候要時刻注意你的變數類型,特別是在一些求平均值的題目中,千萬要注意,用sum/n的時候,sum的類型一定不要用整形。
第三條:不要使用快捷鍵!!很多人在使用TC的時候習慣於用F9,CTRL+F9或者其他的熱鍵,
首先F9隻是編譯了,並沒有運行程序,考試一定要運行一下你的程序才會有輸出文件,
否則一定是0分。
熱鍵在考試的時候是很危險的,因為UCDOS的熱鍵和TC的沖突,CTRL+F9變成了全形半形轉換,
如果不小心按了,會導致你的程序有中文字元,編譯的時候出錯,而且很難查找排除錯誤~!
所以建議大家在考試的時候使用ALT+紅色字母 來調出菜單進行編譯調試等步驟,建議步驟為:
寫完代碼後用ALT+F,S存檔,然後ALT+C,M編譯,然後ALT+R,R運行,這樣就萬無一失了。
第四條:不要載入任何輸入法
上機考試用的DOS環境內存十分有限,如果你載入了任何一個輸入法,都有可能造成編譯程序的時候出現out of memory 內存不足的情況,到那時就麻煩了。
程序只要寫的對就可以,不要畫蛇添足的加註釋,沒有人看的~!
第五條:不要提前交卷!考場一般使用NOVELL網路,有的時候存在網路狀況不好而連接失敗等問題,
這時,如果你已經提前交卷的話就不太好了。另外也可以防止別人有意無意的改動你的程序。
第六條:考試時候的一些技巧。
1、進入TC以後如果想查看題干要求,不用退出TC,直接用F12就可以顯示出來。
2、用F12顯示題目之後可以通過CTRL+BACKSPACE把題目定在屏幕上。
3、編譯運行之後,可以通過type out.dat或edit out.dat或tc out.dat查看輸出文件。
(千萬不要改動!不然影響考試結果。如果不小心改動,再重新編譯運行一次你的程序就可以了)
4、如果考試的時候不小心改動了代碼的主函數或其他部分,可以進入考生目錄下的warn隱藏目錄,
把里邊的備份文件復制到考生目錄。步驟:
在考生目錄下輸入cd warn
輸入 *.c ..輸入cd ..
就可以了
5、如果調試的時候不小心死循環了,可以通過CTRL+C或CTRL+BREAK來終止,如果連按多次都沒反應,
不要慌,立即找監考老師說明情況,可以重新啟動機器繼續答原題,你的程序還在,時間也是繼續剛才的。
所以這也提醒大家,運行程序之前一定要先存檔。
⑦ c程序設計中碰到的英譯漢的問題
接受那些不是為程序使用的數據可能導致系統失敗。
應採取以下措施來減少數據輸入錯誤。
如果實用的話應該引入顯式轉型以使設計者的意圖更為明顯。可以創造一些數學或邏輯方面的混合有符號、無符號變數。
意料之外的結果。在有符號的16位整數計數制情況下,十六進制數FFFF就是-1;而在無符號的16位整數計數制下卻是65535。這一點區別會改變結果。
【這些在程序設計方面屬於需要了解的背景知識,在計算機組成方面會詳細講,包括反碼、補碼及用反碼補碼進行加減乘除運算】
⑧ 求C語言俄羅斯方塊代碼
俄羅斯方塊C源代碼
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<time.h>
#defineZL4 //坐標增量,不使游戲窗口靠邊
#defineWID36 //游戲窗口的寬度
#defineHEI20 //游戲窗口的高度
inti,j,Ta,Tb,Tc; //Ta,Tb,Tc用於記住和轉換方塊變數的值
inta[60][60]={0}; //標記游戲屏幕各坐標點:0,1,2分別為空、方塊、邊框
intb[4]; //標記4個"口"方塊:1有,0無,類似開關
intx,y,level,score,speed; //方塊中心位置的x,y坐標,游戲等級、得分和游戲速度
intflag,next; //當前要操作的方塊類型序號,下一個方塊類型序號
voidgtxy(intm,intn); //以下聲明要用到的自編函數
voidgflag(); //獲得下一方塊序號
voidcsh(); //初始化界面
voidstart(); //開始部分
voidprfk(); //列印方塊
voidclfk(); //清除方塊
voidmkfk(); //製作方塊
voidkeyD(); //按鍵操作
intifmov(); //判斷方塊能否移動或變體
void clHA(); //清除滿行的方塊
voidclNEXT(); //清除邊框外的NEXT方塊
intmain()
{csh();
while(1)
{start();//開始部分
while(1)
{prfk();
Sleep(speed); //延時
clfk();
Tb=x;Tc=flag;//臨存當前x坐標和序號,以備撤銷操作
keyD();
y++;//方塊向下移動
if(ifmov()==0){y--;prfk();dlHA();break;}//不可動放下,刪行,跨出循環
}
for(i=y-2;i<y+2;i++){if(i==ZL){j=0;}} //方塊觸到框頂
if(j==0){system("cls");gtxy(10,10);printf("游戲結束!");getch();break;}
clNEXT(); //清除框外的NEXT方塊
}
return0;
}
voidgtxy(intm,intn)//控制游標移動
{COORDpos;//定義變數
pos.X=m;//橫坐標
pos.Y=n;//縱坐標
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
voidcsh()//初始化界面
{gtxy(ZL+WID/2-5,ZL-2);printf("俄羅斯方塊");//列印游戲名稱
gtxy(ZL+WID+3,ZL+7);printf("*******NEXT:");//列印菜單信息
gtxy(ZL+WID+3,ZL+13);printf("**********");
gtxy(ZL+WID+3,ZL+15);printf("Esc:退出遊戲");
gtxy(ZL+WID+3,ZL+17);printf("↑鍵:變體");
gtxy(ZL+WID+3,ZL+19);printf("空格:暫停游戲");
gtxy(ZL,ZL);printf("╔");gtxy(ZL+WID-2,ZL);printf("╗");//列印框角
gtxy(ZL,ZL+HEI);printf("╚");gtxy(ZL+WID-2,ZL+HEI);printf("╝");
a[ZL][ZL+HEI]=2;a[ZL+WID-2][ZL+HEI]=2;//記住有圖案
for(i=2;i<WID-2;i+=2){gtxy(ZL+i,ZL);printf("═");}//列印上橫框
for(i=2;i<WID-2;i+=2){gtxy(ZL+i,ZL+HEI);printf("═");a[ZL+i][ZL+HEI]=2;}//下框
for(i=1;i<HEI;i++){gtxy(ZL,ZL+i);printf("║");a[ZL][ZL+i]=2;}//左豎框記住有圖案
for(i=1;i<HEI;i++){gtxy(ZL+WID-2,ZL+i);printf("║");a[ZL+WID-2][ZL+i]=2;}//右框
CONSOLE_CURSOR_INFOcursor_info={1,0};//以下是隱藏游標的設置
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
level=1;score=0;speed=400;
gflag();flag=next;//獲得一個當前方塊序號
}
voidgflag() //獲得下一個方塊的序號
{srand((unsigned)time(NULL));next=rand()%19+1; }
voidstart()//開始部分
{gflag();Ta=flag;flag=next;//保存當前方塊序號,將下一方塊序號臨時操作
x=ZL+WID+6;y=ZL+10;prfk();//給x,y賦值,在框外列印出下一方塊
flag=Ta;x=ZL+WID/2;y=ZL-1;//取回當前方塊序號,並給x,y賦值
}
voidprfk()//列印俄羅斯方塊
{for(i=0;i<4;i++){b[i]=1;}//數組b[4]每個元素的值都為1
mkfk();//製作俄羅斯方塊
for(i=x-2;i<=x+4;i+=2)//列印方塊
{for(j=y-2;j<=y+1;j++){if(a[i][j]==1&&j>ZL){gtxy(i,j);printf("□");}}}
gtxy(ZL+WID+3,ZL+1); printf("level:%d",level); //以下列印菜單信息
gtxy(ZL+WID+3,ZL+3); printf("score:%d",score);
gtxy(ZL+WID+3,ZL+5); printf("speed:%d",speed);
}
voidclfk()//清除俄羅斯方塊
{for(i=0;i<4;i++){b[i]=0;}//數組b[4]每個元素的值都為0
mkfk();//製作俄羅斯方塊
for(i=x-2;i<=x+4;i+=2)//清除方塊
{for(j=y-2;j<=y+1;j++){if(a[i][j]==0&&j>ZL){gtxy(i,j);printf("");}}}
}
voidmkfk()//製作俄羅斯方塊
{a[x][y]=b[0];//方塊中心位置狀態:1-有,0-無
switch(flag)//共6大類,19種小類型
{case1:{a[x][y-1]=b[1];a[x+2][y-1]=b[2];a[x+2][y]=b[3];break;}//田字方塊
case2:{a[x-2][y]=b[1];a[x+2][y]=b[2];a[x+4][y]=b[3];break;}//直線方塊:----
case3:{a[x][y-1]=b[1];a[x][y-2]=b[2];a[x][y+1]=b[3];break;}//直線方塊:|
case4:{a[x-2][y]=b[1];a[x+2][y]=b[2];a[x][y+1]=b[3];break;}//T字方塊
case5:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x-2][y]=b[3];break;}//T字順時針轉90度
case6:{a[x][y-1]=b[1];a[x-2][y]=b[2];a[x+2][y]=b[3];break;}//T字順轉180度
case7:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x+2][y]=b[3];break;}//T字順轉270度
case8:{a[x][y+1]=b[1];a[x-2][y]=b[2];a[x+2][y+1]=b[3];break;}//Z字方塊
case9:{a[x][y-1]=b[1];a[x-2][y]=b[2];a[x-2][y+1]=b[3];break;}//Z字順轉90度
case10:{a[x][y-1]=b[1];a[x-2][y-1]=b[2];a[x+2][y]=b[3];break;}//Z字順轉180度
case11:{a[x][y+1]=b[1];a[x+2][y-1]=b[2];a[x+2][y]=b[3];break;}//Z字順轉270度
case12:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x-2][y-1]=b[3];break;}//7字方塊
case13:{a[x-2][y]=b[1];a[x+2][y-1]=b[2];a[x+2][y]=b[3];break;}//7字順轉90度
case14:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x+2][y+1]=b[3];break;}//7字順轉180度
case15:{a[x-2][y]=b[1];a[x-2][y+1]=b[2];a[x+2][y]=b[3];break;}//7字順轉270度
case16:{a[x][y+1]=b[1];a[x][y-1]=b[2];a[x+2][y-1]=b[3];break;}//倒7字方塊
case17:{a[x-2][y]=b[1];a[x+2][y+1]=b[2];a[x+2][y]=b[3];break;}//倒7字順轉90度
case18:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x-2][y+1]=b[3];break;}//倒7字順轉180度
case19:{a[x-2][y]=b[1];a[x-2][y-1]=b[2];a[x+2][y]=b[3];break;}//倒7字順轉270度
}
}
voidkeyD()//按鍵操作
{if(kbhit())
{intkey;
key=getch();
if(key==224)
{key=getch();
if(key==75){x-=2;}//按下左方向鍵,中心橫坐標減2
if(key==77){x+=2;}//按下右方向鍵,中心橫坐標加2
if(key==72)//按下向上方向鍵,方塊變體
{if(flag>=2&&flag<=3){flag++;flag%=2;flag+=2;}
if(flag>=4&&flag<=7){flag++;flag%=4;flag+=4;}
if(flag>=8&&flag<=11){flag++;flag%=4;flag+=8;}
if(flag>=12&&flag<=15){flag++;flag%=4;flag+=12;}
if(flag>=16&&flag<=19){flag++;flag%=4;flag+=16;}}
}
if(key==32)//按空格鍵,暫停
{prfk();while(1){if(getch()==32){clfk();break;}}} //再按空格鍵,繼續游戲
if(ifmov()==0){x=Tb;flag=Tc;} //如果不可動,撤銷上面操作
else{prfk();Sleep(speed);clfk();Tb=x;Tc=flag;} //如果可動,執行操作
}
}
intifmov()//判斷能否移動
{if(a[x][y]!=0){return0;}//方塊中心處有圖案返回0,不可移動
else{if((flag==1&&(a[x][y-1]==0&&a[x+2][y-1]==0&&a[x+2][y]==0))||
(flag==2&&(a[x-2][y]==0&&a[x+2][y]==0&&a[x+4][y]==0))||
(flag==3&&(a[x][y-1]==0&&a[x][y-2]==0&&a[x][y+1]==0))||
(flag==4&&(a[x-2][y]==0&&a[x+2][y]==0&&a[x][y+1]==0))||
(flag==5&&(a[x][y-1]==0&&a[x][y+1]==0&&a[x-2][y]==0))||
(flag==6&&(a[x][y-1]==0&&a[x-2][y]==0&&a[x+2][y]==0))||
(flag==7&&(a[x][y-1]==0&&a[x][y+1]==0&&a[x+2][y]==0))||
(flag==8&&(a[x][y+1]==0&&a[x-2][y]==0&&a[x+2][y+1]==0))||
(flag==9&&(a[x][y-1]==0&&a[x-2][y]==0&&a[x-2][y+1]==0))||
(flag==10&&(a[x][y-1]==0&&a[x-2][y-1]==0&&a[x+2][y]==0))||
(flag==11&&(a[x][y+1]==0&&a[x+2][y-1]==0&&a[x+2][y]==0))||
(flag==12&&(a[x][y-1]==0&&a[x][y+1]==0&&a[x-2][y-1]==0))||
( flag==13 && ( a[x-2][y]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) ||
( flag==14 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x+2][y+1]==0 ) ) ||
(flag==15 && ( a[x-2][y]==0 && a[x-2][y+1]==0 && a[x+2][y]==0 ) ) ||
(flag==16 && ( a[x][y+1]==0 && a[x][y-1]==0 && a[x+2][y-1]==0 ) ) ||
( flag==17 && ( a[x-2][y]==0 && a[x+2][y+1]==0 && a[x+2][y]==0 ) ) ||
(flag==18 && ( a[x][y-1]==0 &&a[x][y+1]==0 && a[x-2][y+1]==0 ) ) ||
(flag==19 && ( a[x-2][y]==0 && a[x-2][y-1]==0
&&a[x+2][y]==0))){return1;}
}
return0; //其它情況返回0
}
voidclNEXT() //清除框外的NEXT方塊
{flag=next;x=ZL+WID+6;y=ZL+10;clfk();}
void clHA() //清除滿行的方塊
{intk,Hang=0; //k是某行方塊個數,Hang是刪除的方塊行數
for(j=ZL+HEI-1;j>=ZL+1;j--)//當某行有WID/2-2個方塊時,則為滿行
{k=0;for(i=ZL+2;i<ZL+WID-2;i+=2)
{if(a[i][j]==1)//豎坐標從下往上,橫坐標由左至右依次判斷是否滿行
{k++; //下面將操作刪除行
if(k==WID/2-2) { for(k=ZL+2;k<ZL+WID-2;k+=2)
{a[k][j]=0;gtxy(k,j);printf("");Sleep(1);}
for(k=j-1;k>ZL;k--)
{for(i=ZL+2;i<ZL+WID-2;i+=2)//已刪行數上面有方塊,先清除再全部下移一行
{if(a[i][k]==1){a[i][k]=0;gtxy(i,k);printf("");a[i][k+1]=1;
gtxy(i,k+1);printf("□");}}
}
j++;//方塊下移後,重新判斷刪除行是否滿行
Hang++;//記錄刪除方塊的行數
}
}
}
}
score+=100*Hang; //每刪除一行,得100分
if(Hang>0&&(score%500==0||score/500>level-1)) //得分滿500速度加快升一級
{speed-=20;level++;if(speed<200)speed+=20; }
}
⑨ 計算機二級C語言考試內容有那些
C語言考試內容如下:
一、C 語言程序的結構
1. 程序的構成,main 函數和其他函數。
2. 頭文件,數據說明,函數的開始和結束標志以及程序中的注釋。
3. 源程序的書寫格式。
4. C 語言的風格。
二、數據類型及其運算
1.C 的數據類型(基本類型,構造類型,指針類型,無值類型)及其定義方法。
2. C 運算符的種類、運算優先順序和結合性。
3. 不同類型數據間的轉換與運算。
4. C 表達式類型(賦值表達式,算術表達式,關系表達式,邏輯表達式,條件表達式,逗號表達式)和求值規則。
三、基本語句
1. 表達式語句,空語句,復合語句。
2. 輸入輸出函數的調用,正確輸入數據並正確設計輸出格式。
四、選擇結構程序設計
1. 用 if 語句實現選擇結構。
2. 用 switch 語句實現多分支選擇結構。
3. 選擇結構的嵌套。
五、循環結構程序設計
1. for 循環結構。
2. while 和 do-while 循環結構。
3. continue 語句和 break 語句。
4. 循環的嵌套。
六、數組的定義和引用
1. 一維數組和二維數組的定義、初始化和數組元素的引用。
2. 字元串與字元數組。
七、函數
1. 庫函數的正確調用。
2. 函數的定義方法。
3. 函數的類型和返回值。
4. 形式參數與實際參數,參數值的傳遞。
5. 函數的正確調用,嵌套調用,遞歸調用。
6. 局部變數和全局變數。
7. 變數的存儲類別(自動,靜態,寄存器,外部),變數的作用域和生存期。
八、編譯預處理
1. 宏定義和調用(不帶參數的宏,帶參數的宏)。
2. 「文件包含」處理。
九、指針
1. 地址與指針變數的概念,地址運算符與間址運算符。
2. 一維、二維數組和字元串的地址以及指向變數、數組、字元串、函數、結構體的指針變數的定義。通過指針引用以上各類型數據。
3. 用指針作函數參數。
4. 返回地址值的函數。
5. 指針數組,指向指針的指針。
十、結構體(即「結構」)與共同體(即「聯合」)
1. 用 typedef 說明一個新類型。
2. 結構體和共用體類型數據的定義和成員的引用。
3. 通過結構體構成鏈表,單向鏈表的建立,結點數據的輸出、刪除與插入。
十一、位運算
1. 位運算符的含義和使用。
2. 簡單的位運算。
十二、文件操作
1. 文件類型指針
2. 文件的打開與關閉
3. 文件的讀寫
拓展資料:
C語言是一種計算機程序設計語言,它既具有高級語言的特點,又具有匯編語言的特點。全國計算機等級考試有二級c語言這個考試的項目。
考試要求:
1. 熟悉Visual C++6. 0集成開發環境。2. 掌握結構化程序設計的方法,具有良好的程序設計風格。3. 掌握程序設計中簡單的數據結構和演算法並能閱讀簡單的程序。4. 在Visual C++6. 0集成環境下,能夠編寫簡單的C程序,並具有基本的糾錯和調試程序的能力。
參考鏈接:網路-二級C語言
⑩ C++Primer Plus和C++Primer有什麼區別
一、出版時間不同
1、C++Primer Plus:是2015年人民郵電出版社出版的圖書,作者是 [美]普拉塔(Prata,S.)。
2、C++Primer:是2006年6月1日人民郵電出版社出版圖書,作者StanleyB. LippmanBarbaraE. Moo JoséeLaJoie 。
二、內容不同
1、C++Primer Plus:針對C++初學者,從C語亮謹言基礎知識開始介紹,然後在此基礎上詳細闡肆核述C++新增的特性,因此不要求讀者有較多C語言方面的背景知識。本書可作為高等院校C++課程的教材,也可供初學者自學C++時使用。
2、C++Primer:內容是C++大師Stanley B. Lippman豐富的實踐經驗和C++標准委員會原負責人Josée Lajoie對C++標准深入理解的完美裂鍵掘結合,已經幫助全球無數程序員學會了C++。
三、特點不同
1、C++Primer Plus:全書分17章和10個附錄,分別介紹了C++程序的運行方式、基本數據類型、復合數據類型、循環和關系表達式、分支語句和邏輯操作符、函數重載和函數模板、內存模型和名稱空間。
2、C++Primer:對C++基本概念和技術全面而且權威的闡述,對現代C++編程風格的強調,使本書成為C++初學者的最佳指南;對於中高級程序員,本書也是不可或缺的參考書。