查看全部128種考試
軟件水平考試
 考試動(dòng)態(tài) 報(bào)考指南 歷年真題 模擬試題 復(fù)習(xí)資料 心得技巧 專業(yè)英語(yǔ) 技術(shù)文章 軟考論壇 考試用書
 程序員 軟件設(shè)計(jì)師 網(wǎng)絡(luò)管理員 網(wǎng)絡(luò)工程師 系統(tǒng)分析師 數(shù)據(jù)庫(kù)系統(tǒng)工程師
1
2
3
4
5
6
7
8
9
10
Exam8.com  
【字體: 程序員考試補(bǔ)課筆記-第三天
程序員考試補(bǔ)課筆記-第三天
spks.exam8.com 來(lái)源:狂風(fēng)校園 更新:2004-12-26 13:21:00 軟件水平考試 考試論壇

    很快的就到了第三天了,接下來(lái)的學(xué)習(xí)任務(wù)應(yīng)該越來(lái)越重了。至于今天講了些什么,現(xiàn)在想起來(lái)也覺(jué)得沒(méi)有什么似的,可能因?yàn)槲抑耙呀?jīng)把這今天所講的內(nèi)容搞懂搞透的原因吧。不過(guò)也得把今天的寫下來(lái),也沒(méi)有什么特別原因的,想有個(gè)回憶吧。

   今天所講的都是圍繞著數(shù)組,我們?cè)贑語(yǔ)言里定義數(shù)組和其它高級(jí)語(yǔ)言定義的不同,這里示出C語(yǔ)言和其它語(yǔ)言的。
  C語(yǔ)言      Foxbase
  int a[10][10]; dim a(10,10)

  是不是符號(hào)也不同了,我們以前用慣的都是小括號(hào),但是現(xiàn)在突然來(lái)的是中括號(hào)真的是有些不習(xí)慣呢。但是誰(shuí)叫我們是學(xué)C語(yǔ)言呢,不習(xí)慣都要得習(xí)慣了。還記得以前定數(shù)組根本就是不用理會(huì)它的地址,只知道用就行了,就算用錯(cuò)了也會(huì)編譯出錯(cuò)。可是C語(yǔ)言可不是呢,一但你定義了一個(gè)數(shù)組之后,你就得好好的管住它,因?yàn)閿?shù)組出了邊界是絕對(duì)不會(huì)通知你的。數(shù)組的定義和調(diào)用方法也是很多,真是靈活多變,這里不再重復(fù)書上里的東西了,F(xiàn)在就定義一個(gè)數(shù)組來(lái)看看:

int a[10];
  如這個(gè)表所示,數(shù)組定義之后有相對(duì)地址,而且數(shù)組名a就是存放這些地址的首地址。現(xiàn)在我們定義多一個(gè)整型指針變量 int *p; ,讓他指向數(shù)組a,p=a; 我們?cè)囍屩羔樳\(yùn)算遞增一個(gè)p++; 我們看到的結(jié)果是p指向了新的地址2003,原來(lái)的地址是2001,為什么遞增一個(gè)就移向了2003呢?不是2002才是正確的嗎?其實(shí)這里就說(shuō)明了我們定義指針變量為什么要整型呢,是因?yàn)樗械闹羔樳\(yùn)算也是看自己本身是什么類型的指針作出什么的運(yùn)算,就是現(xiàn)在是整型類型,整型數(shù)據(jù)存儲(chǔ)是需要2字節(jié)的,所以針指運(yùn)算也是按這個(gè)方式來(lái)到進(jìn)行,結(jié)果很顯然就是往下移2了。其實(shí)這里說(shuō)這么多,老潭那本書里基本上都有詳細(xì)說(shuō)明介紹,所以我一開(kāi)始說(shuō)只要自己有看過(guò)書的,應(yīng)該也很容易明白了(反而上面可能給我說(shuō)模糊了)。

  好了,接下來(lái)我們做一些題目吧,這是今天老師給我們出的題,其實(shí)也是2001年程序員下午考試?yán)锍霈F(xiàn)過(guò)的題目。所以請(qǐng)大家自己也動(dòng)手做做,多思考,看看誰(shuí)的方法比較好。 在n行n列矩陣中,每行都有最大數(shù),本程序求這幾個(gè)最大數(shù)中的最小一個(gè)。
#include <stdio.h>
#define N 100
int a[N][N];
void main()
{
  int row,col,max,min,n;
  /*輸入合法的n和n*n個(gè)整數(shù)的代碼, 注,這里略了一部份到后面練習(xí)自己做回*/
  for(row=0;row<n;row++)
  {
    for(max=a[row][0],col=1;col<n;col++)
    if (  ) max=a[row][col];
    if (  ) min=max;
    else if (  ) min=max;
 。
  printf("最大數(shù)中的最小數(shù)為:%d\n",min);
}

  這題可真有些難度,它的難就難在第二個(gè)空那里,相信第一個(gè)空絕大部分都會(huì)做,可是第二個(gè)空呢,真的下不筆了。當(dāng)時(shí)看程序的最后繼續(xù)兩個(gè)空后面的語(yǔ)句為什么一樣的呢,可真的沒(méi)有想通,只是要死鉆牛解尖,老是想著一定是用數(shù)組的,第一個(gè)循環(huán)里是行,跟著就是列了?墒沁是想不到答案,因?yàn)槲业乃悸芬呀?jīng)大錯(cuò)特錯(cuò)了。最后老師還是說(shuō)出答案,也說(shuō)這題真的是比較難。第二空其實(shí)是填row= =0,為什么這樣填呢,是因?yàn)檫@個(gè)矩陣?yán)镆婚_(kāi)始要有一個(gè)BASE數(shù)做底,所以row= =0只出現(xiàn)一次,很自然的就成了第一個(gè)比較的基數(shù),跟著這個(gè)if語(yǔ)句里的就是比較這幾個(gè)最大數(shù)中的最小一個(gè)數(shù)了,第二個(gè)空填了出來(lái)當(dāng)然答案也就隨之可以出來(lái)了max<min?磥(lái)我現(xiàn)在功力去考中程還是白費(fèi)心機(jī)吧,因?yàn)檫@只是第一大題啊,有很多難的題都在后幾題。那么既然現(xiàn)在知道自己的弱點(diǎn)就應(yīng)該去好好克服改正它,好了,這只是第一道練習(xí)題,跟著下面還有將略了的那部份編出來(lái)。

我所寫的如下,因?yàn)榭紤]到整數(shù)類型界限的問(wèn)題,我所編的所著重這里。

printf("please input n:";
scanf("%d",&n);
for(row=0;row<n;row++)
 for(col=0;col<n;col++)
 {
  do
  {
   printf("please a[%d][%d]",row,col);
   scanf("%d",&a[row][col]);
  }while(a[row][col]<-32767 && a[row][col]>32767 );
 }

接下的是第二題了,題目如下:
求n*n的對(duì)角線和
這題因?yàn)槿勺约簩,所以各種寫法都有。在下面先寫我的最基礎(chǔ)簡(jiǎn)單的方法吧。

#include <stdio.h>
#define n 5
main()
{
  int a[n][n];
  int row, col;
  int sum=0;
  /* 輸入略 */
  for(row=col=0;row<n;row++,col++)
    sum+=a[row][col];
  for(row=0,col=n-1;row<n;row++,col--)
    sum+=a[row][col];
  if ( n%2 !=0)
    sum-= a[n/2][n/2];
  printf("%d",max);
}
  這是最基本的方法了,兩個(gè)循環(huán)跟著判斷是否偶數(shù)來(lái)減去中間重復(fù)出現(xiàn)的一個(gè)數(shù),這樣就求得結(jié)果了
下面我寫一個(gè)我同學(xué)編的還比較簡(jiǎn)單,而且方法獨(dú)到的(反正所有人都沒(méi)有想過(guò)這種方法,除了他)。這里主要寫一寫他的方法。
int sum=0,j;
for ( j=0; j<n; j++ )
  sum+=a[j][j]+a[j][n-1-j];
if ( n%2 !=0 )
sum-=a[n/2][n/2];

夠簡(jiǎn)單吧,一次循環(huán)就可以了,他的思路是這樣的,比方有一個(gè)如下的矩陣


每次都兩個(gè)兩個(gè)剛好相對(duì)立,所以可以一次就掃描完了。
好了,我寫的有些累了,因?yàn)榻裉鞗](méi)有什么精神,最后老師還補(bǔ)充了另一個(gè)更簡(jiǎn)單的,方法其實(shí)就是一種只是運(yùn)用了條件運(yùn)算符
sum+=a[j][j]+( (j == (n-1-j) ? 0: a[j][n-1-j];
C語(yǔ)言真的想有多簡(jiǎn)潔有多簡(jiǎn)潔。


轉(zhuǎn)帖于:軟件水平考試_考試吧
文章搜索  
看了本文的網(wǎng)友還看了:
網(wǎng)友評(píng)論
昵 稱: *  評(píng) 分: 1分 2分 3分 4分 5分
標(biāo)題:   匿名發(fā)表    (共有條評(píng)論)查看全部評(píng)論>>
版權(quán)聲明 -------------------------------------------------------------------------------------
  如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請(qǐng)注明出處。
關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  付款方式  站內(nèi)導(dǎo)航  客服中心  友情鏈接  考試論壇  網(wǎng)站地圖
Copyright © 2004-2008 考試吧軟件水平考試網(wǎng) All Rights Reserved    
中國(guó)科學(xué)院研究生院權(quán)威支持(北京) 電 話:010-62168566 傳 真:010-62192699
百度大聯(lián)盟黃金認(rèn)證  十佳網(wǎng)絡(luò)教育機(jī)構(gòu)  經(jīng)營(yíng)許可證號(hào):京ICP060677