本文目錄一覽:
- 1、c語言的,第一題,謝謝,請解釋一下
- 2、C語言程序改錯題(分析程序功能,指出題中的錯點,對錯誤進行分析並改正)
- 3、c語言中switch幾道題。請幫忙分析並說明解答原因
- 4、c語言編程題第一題 求答案 和步驟分析
- 5、譚浩強的c語言第七章數組中有一道題:
- 6、c語言 能不能幫忙解釋一下第一題各選項 對常量這片不太懂 謝謝
c語言的,第一題,謝謝,請解釋一下
這道題目重點是考查循環過程的掌握及數組下標的控制,細心一點應該不難喲。
第一個FOR循環是將三個數組元素初始化為0.
雙重FOR循環是對相應數組元素進行操作,循環完了後三個元素值分別是2,2,0.
故最終輸入結果應為2吧。
C語言程序改錯題(分析程序功能,指出題中的錯點,對錯誤進行分析並改正)
林銳的高質量C/C++編程
你看了這本書會有些認識的.
下面是本書的前言部分…..
軟件質量是被大多數程序員掛在嘴上而不是放在心上的東西!
除了完全外行和真正的編程高手外,初讀本書,你最先的感受將是驚慌:“哇!我以前捏造的C++/C程序怎麼會有那麼多的毛病?”
別難過,作者只不過比你早幾年、多幾次驚慌而已。
請花一兩個小時認真閱讀這本百頁經書,你將會獲益匪淺,這是前面N-1個讀者的建議。
一、編程老手與高手的誤區
自從計算機問世以來,程序設計就成了令人羨慕的職業,程序員在受人寵愛之後容易發展成為毛病特多卻常能自我臭美的群體。
如今在 Internet 上流傳的“真正”的程序員據說是這樣的:
(1) 真正的程序員沒有進度表,只有討好領導的馬屁精才有進度表,真正的程序員會讓領導提心弔膽。
(2) 真正的程序員不寫使用說明書,用戶應當自己去猜想程序的功能。
(3) 真正的程序員幾乎不寫代碼的注釋,如果注釋很難寫,它理所當然也很難讀。
(4) 真正的程序員不畫流程圖,原始人和文盲才會幹這事。
(5) 真正的程序員不看參考手冊,新手和膽小鬼才會看。
(6) 真正的程序員不寫文檔也不需要文檔,只有看不懂程序的笨蛋才用文檔。
(7) 真正的程序員認為自己比用戶更明白用戶需要什麼。
(8) 真正的程序員不接受團隊開發的理念,除非他自己是頭頭。
(9) 真正的程序員的程序不會在第一次就正確運行,但是他們願意守着機器進行若干個 30 小時的調試改錯。
(10) 真正的程序員不會在上午 9:00 到下午 5:00 之間工作,如果你看到他在上午 9:00 工作,這表明他從昨晚一直干到現在。
……
具備上述特徵越多,越顯得水平高,資格老。所以別奇怪,程序員的很多缺點竟然可以被當作優點來欣賞。就象在武俠小說中,那些獨來獨往、不受約束且帶點邪氣的高手最令人崇拜。我曾經也這樣信奉,並且希望自己成為那樣的“真正”的程序員,結果沒有得到好下場。
我從讀大學到博士畢業十年來一直勤奮好學,累計編寫了數十萬行 C++/C 代碼。有這樣的苦勞和疲勞,我應該稱得上是編程老手了吧?
我開發的軟件都與科研相關(集成電路 CAD 和 3D 圖形學領域),動輒數萬行程序,技術複雜,難度頗高。這些軟件頻頻獲獎,有一個軟件獲得首屆中國大學生電腦大賽軟件展示一等獎。在 1995 年開發的一套圖形軟件庫到 2000 年還有人買。羅列出這些“業績”,可以說明我算得上是編程高手了吧?
可惜這種個人感覺不等於事實。
讀博期間我曾用一年時間開發了一個近 10 萬行 C++ 代碼的 3D 圖形軟件產品,我內心得意表面謙虛地向一位真正的軟件高手請教。他雖然從未涉足過 3D 圖形領域,卻在幾十分鐘內指出該軟件多處重大設計錯誤。讓人感覺那套軟件是用紙糊的華麗衣服,扯一下掉一塊,戳一下破個洞。我目瞪口呆地意識到這套軟件毫無實用價值,一年的心血白化了,並且害死了自己的軟件公司。
人的頓悟通常發生在最心痛的時刻,在沮喪和心痛之後,我作了深刻反省,“面壁”半年,重新溫習軟件設計的基礎知識。補修“內功”之後,又覺得腰板硬了起來。博士畢業前半年,我曾到微軟中國研究院找工作,接受微軟公司一位資深軟件工程師的面試。他讓我寫函數 strcpy 的代碼。
太容易了吧?
錯!
這麼一個小不點的函數,他從三個方面考查:
( 1 )編程風格;
( 2 )出錯處理;
( 3 )算法複雜度分析(用於提高性能)。
在大學裡從來沒有人如此嚴格地考查過我的程序。我化了半個小時,修改了數次,他還不盡滿意,讓我回家好好琢磨。我精神抖擻地進“考場”,大汗淋漓地出“考場”。這“高手”當得也太窩囊了。我又好好地反省了一次。
我把反省後的心得體會寫成文章放在網上傳閱,引起了不少軟件開發人員的共鳴。我因此有幸和國產大型 IT 企業如華為、上海貝爾、中興等公司的同志們廣泛交流。大家認為提高質量與生產率是軟件工程要解決的核心問題。高質量程序設計是非常重要的環節,畢竟軟件是靠編程來實現的。
我們心目中的老手們和高手們能否編寫出高質量的程序來?
不見得都能!
就我的經歷與閱歷來看,國內大學的計算機教育壓根就沒有灌輸高質量程序設計的觀念,教師們和學生們也很少自覺關心軟件的質量。勤奮好學的程序員長期在低質量的程序堆中滾爬,吃盡苦頭之後才有一些心得體會,長進極慢,我就是一例。
現在國內 IT 企業擁有學士、碩士、博士文憑的軟件開發人員比比皆是,但他們在接受大學教育時就“先天不足”,豈能一到企業就突然實現質的飛躍。試問有多少軟件開發人員對正確性、健壯性、可靠性、效率、易用性、可讀性(可理解性)、可擴展性、可復用性、兼容性、可移植性等質量屬性了如指掌?並且能在實踐中運用自如?。“高質量”可不是幹活小心點就能實現的!
我們有充分的理由疑慮:
( 1 )編程老手可能會長期用隱含錯誤的方式編程(習慣成自然),發現毛病後都不願相信那是真的!
( 2 )編程高手可以在某一領域寫出極有水平的代碼,但未必能從全局把握軟件質量的方方面面。
事實證明如此。我到上海貝爾工作一年來,陸續面試或測試過近百名“新”“老”程序員的編程技能,質量合格率大約是 10 %。很少有人能夠寫出完全符合質量要求的 if 語句,很多程序員對指針、內存管理一知半解, …… 。
領導們不敢相信這是真的。我做過現場試驗:有一次部門新進 14 名碩士生,在開歡迎會之前對他們進行“ C++/C 編程技能”摸底考試。我問大家試題難不難?所有的人都回答不難。結果沒有一個人及格,有半數人得零分。競爭對手公司的朋友們也做過試驗,同樣一敗塗地。
真的不是我“心狠手辣”或者要求過高,而是很多軟件開發人員對自己的要求不夠高。
要知道華為、上海貝爾、中興等公司的員工素質在國內 IT 企業中是比較前列的,倘若他們的編程質量都如此差的話,我們怎麼敢期望中小公司拿出高質量的軟件呢?連程序都編不好,還談什麼振興民族軟件產業,豈不胡扯。
我打算定義編程老手和編程高手,請您別見笑。
定義 1 :能長期穩定地編寫出高質量程序的程序員稱為編程老手。
定義 2 :能長期穩定地編寫出高難度、高質量程序的程序員稱為編程高手。
根據上述定義,馬上得到第一推論:我既不是高手也算不上是老手。
在寫此書前,我閱讀了不少程序設計方面的英文著作,越看越羞慚。因為發現自己連編程基本技能都未能全面掌握,頂多算是二流水平,還好意思談什麼老手和高手。希望和我一樣在國內土生土長的程序員朋友們能夠做到:
( 1 )知錯就改;
( 2 )經常溫故而知新;
( 3 )堅持學習,天天向上。
二、本書導讀
首先請做附錄B的C++/C試題(不要看答案),考查自己的編程質量究竟如何。然後參照答案嚴格打分。
( 1)如果你只得了幾十分,請不要聲張,也不要太難過。編程質量差往往是由於不良習慣造成的,與人的智力、能力沒有多大關係,還是有葯可救的。成績越差,可以進步的空間就越大,中國不就是在落後中趕超發達資本主義國家嗎?只要你能下決心改掉不良的編程習慣,第二次考試就能及格了。
( 2)如果你考及格了,表明你的技術基礎不錯,希望你能虛心學習、不斷進步。如果你還沒有找到合適的工作單位,不妨到上海貝爾試一試。
( 3)如果你考出85分以上的好成績,你有義務和資格為你所在的團隊作“C++/C編程”培訓。希望你能和我們多多交流、相互促進。半年前我曾經發現一顆好苗子,就把他挖到我們小組來。
( 4)如果你在沒有任何提示的情況下考了滿分,希望你能收我做你的徒弟。
編程考試結束後,請閱讀本書的正文。
本書第一章至第六章主要論述C++/C編程風格。難度不高,但是細節比較多。別小看了,提高質量就是要從這些點點滴滴做起。世上不存在最好的編程風格,一切因需求而定。團隊開發講究風格一致,如果制定了大家認可的編程風格,那麼所有組員都要遵守。如果讀者覺得本書的編程風格比較合你的工作,那麼就採用它,不要只看不做。人在小時候說話發音不準,寫字潦草,如果不改正,總有後悔的時候。編程也是同樣道理。
第七章至第十一章是專題論述,技術難度比較高,看書時要積極思考。特別是第七章“內存管理”,讀了並不表示懂了,懂了並不表示就能正確使用。有一位同事看了第七章後覺得“野指針”寫得不錯,與我切磋了一把。可是過了兩周,他告訴我,他忙了兩天追查出一個Bug,想不到又是“野指針”出問題,只好重讀第七章。
光看本書對提高編程質量是有限的,建議大家閱讀本書的參考文獻,那些都是經典名著。
如果你的編程質量已經過關了,不要就此滿足。如果你想成為優秀的軟件開發人員,建議你閱讀並按照 CMMI 規範做事,讓自己的綜合水平上升一個台階。上海貝爾的員工可以向網絡應用事業部軟件工程研究小組索取 CMMI 有關資料,最好能參加培訓。
三、版權聲明
本書的大部分內容取材於作者一年前的書籍手稿(尚未出版),現整理彙編成為上海貝爾網絡應用事業部的一個規範化文件,同時作為培訓教材。
由於 C++/C 編程是眾所周知的技術,沒有秘密可言。編程的好經驗應該大家共享,我們自己也是這麼學來的。作者願意公開本書的電子文檔。
版權聲明如下:
( 1 )讀者可以任意拷貝、修改本書的內容,但不可以篡改作者及所屬單位。
( 2 )未經作者許可,不得出版或大量印發本書。
( 3 )如果競爭對手公司的員工得到本書,請勿公開使用,以免發生糾紛。
預計到 2002 年 7 月,我們將建立切合中國國情的 CMMI 3 級解決方案。屆時,包括本書在內的約 1000 頁規範將嚴格受控。
歡迎讀者對本書提出批評建議 。
另外,團IDC網上有許多產品團購,便宜有口碑
c語言中switch幾道題。請幫忙分析並說明解答原因
第一題 因各case語句均無break語句,所以最後執行y=0。
第二題 x++是先使用後自增,所以x++==2不成立,且為運算,從而,後續的 ++y==2條件判斷被短路(未執行),所以輸出時,x=2,y=1
第三題 和第二題的區別就是條件的不同。
對於(x++==2 || ++y==2) ,因x++是先使用後自增,所以x++==2不成立,++y是先自增後使用,條件++y==2成立。所以輸出時,x=7,y=2
c語言編程題第一題 求答案 和步驟分析
#include stdio.h//頭文件
int main()//主函數
{
int score[20], i, maxsc, maxp;//定義變量,成績數組,最大成績及位置
for(i = 0; i 20; i++)//循環輸入20個成績
{
scanf(“%d”, score[i]);
}
maxsc = score[0], maxp = 0;//初始化為0
for(i = 1; i 20; i++)//循環更新查找最大成績及序號
{
if(score[i]maxsc)//當前成績比保存的最高成績高,更新最高成績
{
maxsc = score[i];
maxp = i;
}
}
printf (“%d %d\n”, maxsc, maxp+1);//輸出
return 0;
}
譚浩強的c語言第七章數組中有一道題:
對平面魔方的構造,分為三種情況:N為奇數、N為4的倍數、N為其它偶數(4n+2的形式)
⑴ N 為奇數時,最簡單
(1) 將1放在第一行中間一列;
(2) 從2開始直到n×n止各數依次按下列規則存放:
按 45°方向行走,如向右上
每一個數存放的行比前一個數的行數減1,列數加1
(3) 如果行列範圍超出矩陣範圍,則迴繞。
例如1在第1行,則2應放在最下一行,列數同樣加1;
(4) 如果按上面規則確定的位置上已有數,或上一個數是第1行第n列時,
則把下一個數放在上一個數的下面。
⑵ N為4的倍數時
採用對稱元素交換法。
首先把數1到n×n按從上至下,從左到右順序填入矩陣
然後將方陣的所有4×4子方陣中的兩對角線上位置的數關於方陣中心作對
稱交換,即a(i,j)與a(n+1-i,n+1-j)交換,所有其它位置上的數不變。
(或者將對角線不變,其它位置對稱交換也可)
⑶ N 為其它偶數時
當n為非4倍數的偶數(即4n+2形)時:首先把大方陣分解為4個奇數(2m+1階)子方陣。
按上述奇數階魔方給分解的4個子方陣對應賦值
上左子陣最小(i),下右子陣次小(i+v),下左子陣最大(i+3v),上右子陣次大(i+2v)
即4個子方陣對應元素相差v,其中v=n*n/4
四個子矩陣由小到大排列方式為 ① ③
④ ②
然後作相應的元素交換:a(i,j)與a(i+u,j)在同一列做對應交換(jt或jn-t+2),
a(t-1,0)與a(t+u-1,0);a(t-1,t-1)與a(t+u-1,t-1)兩對元素交換
其中u=n/2,t=(n+2)/4 上述交換使每行每列與兩對角線上元素之和相等。
snjsj 我的程序算法:
這個魔方陣的算法可以對除2以外的任意階數的方陣進行輸出,結果保存在運行程序的目錄下面的Magic.txt文件中,用ie或者寫字板打開以保持格式的一致(主要是回車符在記事本中為黑方框,認不出來)。當然具體的程序中,有內存空間以及變量範圍的約束,我試過了,100以內的是可以的。
偶數階的算法都是建立在奇數階的基礎之上,設方陣的階數為n,則魔方陣常數(即每列每行以及對角線元素之和)為n*(n*n+1)/2。
請對照程序代碼看,否則可能看不懂,可以一邊看一邊用筆對小階的進行演算。
先說奇數階的算法,這是最容易的算法:
n=2*m+1,m為自然數
1)將數字1填在(0,(n+1)/2) ;要注意c中是從下標0開始
2)從左上往右下依次填。
3)由2),列的下標出界(超過n-1)時,行加1,以n為摸的餘數為應填的列數;
4)由2),行的下標出界(超過n-1)時,列加1,以n為摸的餘數為應填的行數;
5)由2),行列都未出界,但已添上其他數,應在當前位置左橫移一個位置進行填數。
然後是偶數階:
分兩種情況,一種是n%4==2,一種是n%4==0
前一種:n=2*(2*m+1),m為自然數
1)將n階方陣分為四個小魔方陣ABCD如下排列:
B C
D A
因為n*n=4*(2*m+1)*(2*m+1),
記u=n/2=2*m+1,分為1~u*u,u*u+1~2*u*u,2*u*u+1~3*u*u,3*u*u+1~4*u*u
即在調用子函數的時候分別如下面傳遞參數:
A(0),B(u*u),C(2*u*u),D(3*u*u)
分別在ABCD中按照前面的填法把奇數階填好(注意加上所傳參數作為基數,每一個元素都要加上這個值),最後做如下交換:
(1)B中第0~(m-1)-1行中元素與C中相對應元素交換
(2)D中第(n-1)-m+1~(n-1)共m行的每行中的元素與A中相對應元素交換
(3)交換D:(u+m,m)與A中對應元素(矩陣中心值)
(4)交換D:(n-1,m)與A中對應元素(實際為矩陣最大值n*n)
所謂對應位置,指相對於小魔方陣的左頂角的相對的行列位置
上面的這些你可以用數學進行證明,利用魔方陣常數(注意n階的和u階的關係)
後一種:n=4*m,m為自然數
因為行列都是4的倍數,因而可以將整個矩陣分為每4*4的小矩陣。
先判斷一個數是否在劃為4*4小矩陣的對角線上,
如果在,則填該位置的數為n*n-i+1(i為該元素的相對位置,從1開始,比如n階的第s行第t個元素則其i=s*n+t)
如果不在,則填上i。
c語言 能不能幫忙解釋一下第一題各選項 對常量這片不太懂 謝謝
在c語言中有兩種數據表現形式:一為常量,一為變量。顧名思義,常量即為保持不變的數據,變量則為數值可變的數據!
C語言中常量與變量都種類繁多,比較碎也比較難於記憶!
因此根據我最近所學,我把C語言中基本的常量做了一個總結與分析,得出了一個記憶方法!
1
1、數值常量
顧名思義就是由數字構成的常量,數的分類相比大家很熟悉(小學知識!),C語言中數值常量的分類也與之類似.
如100、250、1000這種整數在C語言中叫做整型常量–整數型常量;
如1.22、3.142等帶有小數點的稱為實型常量–實數型常量,實數型常量又可以用兩種形式表現,一種就是我們經常用的十進制小數形式,如123.456、23.56等,但是由於計算機的內存限制和計算規則以及工程科學中對於數值計算的要求,經常會用科學計數法來表示實數,也就是指數形式,如12.34e3(代表12.34乘以10的3次方)–在C語言中規定用e/E來代表以10為底的指數,在e的前面必須有數字,e的後面必須為整數。
2
2、字符常量
字符常量即為用字符構成的常量,也可由兩種表現形式:
1、普通字符
26個英文字母如‘a’‘b’,用單引號括起來後都是普通字符,事實上這些字符常量在計算機中是以ascll碼錶示的,因此可以把它看成變化的數值,如‘a’在計算機中代表的就是97這個數值。
2、轉義字符
這是C語言自己定義的字符,是一種控制字符,以字符\開頭,如經常使用的‘\n’就代表換行,‘\t’代表空格。
3
3、字符串常量
字符常量的集合版本,將多個字符用雙引號括起來,就是字符串常量。
4、符號常量
通過定義,代表一個數值的符號就是符號常量,指令為#define。
如:#define PI 3.14,這句話就表示PI就是3.14,3.14就是PI。當我們需要使用這個數據時,就可以直接調用PI,這極大的方便了我們對程序的修改。
4
這就是關於常量分類的一些總結,希望能對你的記憶有所幫助!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/270720.html