c語言第七章第一題分析,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-tw/n/270720.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 13:38
下一篇 2024-12-16 13:38

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • 學堂雲Python語言程序設計答案

    學堂雲Python語言程序設計是一門重要的計算機專業課程。它涵蓋了Python語言及其應用,包括基礎語法、函數、文件處理、數據結構、圖形界面和網路編程等內容。在學習中,我們經常會需…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28

發表回復

登錄後才能評論