當前位置:首頁 » 編程語言 » c語言實驗中注意事項
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言實驗中注意事項

發布時間: 2022-05-11 04:42:50

1. c語言實驗基本問題

素數
#include<stdio.h>
main()
{
int i,n,s=0;
for(n=1;n<=200;n++)
{
for(i=2;i<n;i++)
if(n%i==0)
break;
if(i==n)
{

printf("%3d ",n);
s++;
if(s%5==0)
printf("\n");
}
}
}

2. 求教,c語言學習方法,打代碼注意事項

學習方法,沒什麼多說的,多看書多敲代碼,不僅僅是書中的代碼,也要自己想一些問題來實現

打代碼,初學時要注意以下幾點

  1. 注意變數名,函數名等不要拼錯

  2. 用scanf函數時不要忘記加&,當然,字元串除外

  3. 學會查錯,仔細看編譯器的報錯提示,會包括出錯所在行數和錯誤類型,其中行數很重要,一般提示出錯在10行,那問題就多在10行附近,仔細看看(也有情況會離提示很遠),錯誤類型並不一定是實際的錯誤,不能把這個當做評判標准,另外,程序語法沒有錯誤,不代表程序本身沒錯,一定要注意

  4. 多實驗,會有很多收獲

  5. 可以加一些QQ群問問題,問問題要注意把代碼和報錯提示一起截圖,不要拍照,拍照很不清晰,不要問一些范圍很大的概念性問題

  6. 注意保存好代碼,專門建個文件夾保存,裡面也建文件夾,每個文件夾保存一個項目

  7. 盡量別用手機編程

3. 簡述C語言中函數的形式參數定義時的注意事項 求解...

1、形參個數不能太多,多了就用結構體指針吧;
2、不需要攜帶數據返回的放在前面,需要攜帶數據返回類型的放在後面吧;
3、不要直接傳遞結構體哦;
4、一般地,指針類型最好加上const修飾,除非有特殊用途;
5、盡量不要使用bool類型做為形式參數;
6、別忘了給一個簡潔好聽的名字

4. c語言中字元數據輸入時的注意事項

這個取決於輸入函數的格式,如scanf函數有%s和%c,前者將輸入中的空格,Tab鍵和回車作為輸入結束的標記,即其後的字元將被忽略

5. 誰告訴我c語言編程的注意事項

指針和數組的使用不要溢出!

6. C語言在編程的時候應注意什麼問題

1.先學習C語言的基礎知識。現在正在學C語言的在校學生可以直接進入第2步學習。
2.按照《C語言程序設計入門學習六步曲》進行上機練習。
3.在上機練習時要養成良好的編程風格。點擊查看C語言的編程風格

4.積極參加C、C++興趣小組,養成和老師與同學交流習慣,從而相互收益。有時別人不經意的一句話可能使你茅塞頓開--「一句話點醒夢中人」。

5.及時總結自己的學習經驗,養成寫C語言日記的習慣。軟體有編程日記功能。

6.從網上或教材上找一個自己感興趣的題目(選題時根據自己的能力,可先易後難,培養自己的成就感,如果有了成就感,即使再苦再累還是感覺C語言學習是一件快樂的事,同學們喜歡打游戲,經常通宵達旦地玩游戲也樂而不疲就是這個道理)進行實戰訓練,提高自己的C語言綜合應用能力。

7. 由於C語言靈活、強大,初學者要全面地掌握它是不可能的,因此在學習C語言的過程中,不要在細枝末節上浪費精力(比如++、--用於表達式的計算,實際上是沒有意義的),但一定要熟練掌握C語言的流程式控制制語句、數組、函數、指針等基礎知識的應用,為學習面向對象程序設計打下堅實的基礎。如果這些知識你學不好,要後續學習好C++、可視化的程序設計Visual C++或C++Builder就像空中樓閣,是不現實的。
C語言程序設計入門學習六步曲

筆者在從事教學的過程中,聽到同學抱怨最多的一句話是:老師,上課我也能聽懂,書上的例題也能看明白,可是到自己動手做編程時,卻不知道如何下手。發生這種現象的原因有三個:

一、所謂的看懂聽明白,只是很膚淺的語法知識,而我們編寫的程序或軟體是要根據要解決問題的實際需要控製程序的流程,如果你沒有深刻地理解C語言的語句的執行過程(或流程),你怎麼會編寫程序解決這些實際問題呢?

二、用C語言編程解決實際問題,所需要的不僅僅是C語言的編程知識,還需要相關的專業知識。例如,如果你不知道長方形的面積公式,即使C語言學得再好你也編不出求長方形的面積的程序來。

三、C語言程序設計是一門實踐性很強的課程,「紙上談兵」式的光學不練是學不好C語言的。例如,大家都看過精彩自行車雜技表演,假如,你從來沒有騎過自行車,光聽教練講解相關的知識、規則、技巧,不要說上台表演、就是上路你恐怕都不行。

出現問題原因清楚了,那麼如何學習呢?請你看【C語言學習六步曲】

在程序開發的過程中,上機調試程序是一個不可缺少的重要環節。「三分編程七分調試」,說明程序調試的工作量要比編程大得多。這里以如何上機調試C程序來說明C語言的學習方法。

第一步、驗證性練習

在這一步要求按照教材上的程序實例進行原樣輸入,運行一下程序是否正確。在這一步基本掌握C語言編程軟體的使用方法(包括新建、打開、保存、關閉C程序,熟練地輸入、編輯C程序;初步記憶新學章節的知識點、養成良好的C語言編程風格)。
初學者最容易犯的錯誤是:

1、沒有區分開教材上的數字1和字母l,字母o和數字0的區別,造成變數未定義的錯誤。另一個易錯點是將英文狀態下的逗號,分號;括弧()雙引號""輸入出入成中文狀態下的逗號,分號;括弧(),雙引號「」造成非法字元錯誤。

2、C語言初學者易犯語法錯誤:使用未定義的變數、標示符(變數、常量、數組、函數等)不區分大小寫、漏掉「;」、「{」與「}」、「(」與「)」不匹、控制語句(選擇、分支、循環)的格式不正確、調用庫函數卻沒有包含相應的頭文件、調用未C聲明的自定義函數、調用函數時實參與形參不匹配、數組的邊界超界等。

3、修改C語言語法錯誤時要注意以下兩點:

(1)、由於C語言語法比較自由、靈活,因此錯誤信息定位不是特別精確。例如,當提示第10行發生錯誤時,如果在第10行沒有發現錯誤,從第10行開始往前查找錯誤並修改之。

(2)、一條語句錯誤可能會產生若干條錯誤信息只要修改了這條錯誤,其他錯誤會隨之消失。特別提示:一般情況下,第一條錯誤信息最能反映錯誤的位置和類型,所以調試程序時務必根據第一條錯誤信息進行修改,修改後,立即運行程序,如果還有很多錯誤,要一個一個地修改,即,每修改一處錯誤要運行一次程序。
第二步、照葫蘆畫瓢
在第一步輸入的C程序的基礎上進行試驗性的修改,運行一下程序看一看程序結果發生了什麼變化,分析結果變化的原因,加深新學知識點的理解。事實上這和第一步時同步進行的,實現「輸入」加深知識的記憶,「修改」加深對知識的理解。記憶和理解是相輔相成的,相互促進。

例如:將最簡單的Hello World!程序
#include "stdio.h"
int main()
{
printf("Hello World!\n");
return 0;
}
中的

printf("Hello World!\n");

中的Hello World!改成你的姓名,運行一下程序,看有什麼變化?

再如求1+2+3...+100的和的程序

#include

main()

{

int i,sum=0;

for(i=1;i<=100;i++)
{
sum=sum+i;
}
printf("sum=%d\n",sum);
}

第1次將for(i=1;i<=100;i++)中的100改成50,運行一下程序,看有什麼變化?

第2次將for(i=1;i<=100;i++)中的i++改成i=i+2,運行一下程序,看有什麼變化?

找出程序結果變化的原因,就加深了對C語句的理解。

第三步、不看教材看是否能將前兩步的程序進行正確地輸入並運行。

在這一步要求不看教材,即使程序不能運行,看能否將其改正,使其能正確運行。目的是對前兩步的記憶、理解進一步強化。

第四步、增強程序的調試能力

在教材中每章都有C語言初學者易犯的錯誤,按照易出錯的類型,將教材中的正確的程序改成錯誤的程序,運行一下程序,看出現的錯誤信息提示,並記下錯誤信息,再將程序改成正確的,運行一下程序。這樣反復修改,就能夠學習C語言程序發生錯誤的原因和修改錯誤的能力。

注意:每次只改錯一個地方,目的是顯示發生該錯誤的真正原因,避免一次改動多個地方,搞清發生錯誤的真正原因,切記!!!!

注意:上機調試程序時要帶一個記錄本,記下英文錯誤提示信息和解決該錯誤問題的方法,積累程序調試經驗,避免在編程犯同樣的錯誤,切記!!!!。

例如,將Hello World程序中語句

printf("Hello World!\n");

中的;改成中文的分號;

運行一下程序,看有什麼結果?

調試程序是一種實踐性很強的事,光紙上談兵是是沒用的,就像游泳運動員只聽教練講解示範,而不親自下水練習,是永遠學不會游泳的。

即使在優秀的程序員編寫程序也會犯錯誤的,可能事最低級的語法錯誤,但他能快速發現錯誤並改正錯誤,而我們C語言初學者面對錯誤提示,不知道發生了什麼錯誤,如何改正,這就事差別。

第五步、研究典型的C語言程序,提高程序設計能力

C語言初學者遇到最多的困惑是:上課也能聽懂,書上的例題也能看明白,可是到自己動手做編程時,卻不知道如何下手。發生這種現象的原因是:所謂的看懂聽明白,只是很膚淺的語法知識,而沒有深刻地理解C語言的語句的執行過程(或流程)。

計算機是按照人的指令(編寫的程序)去執行的,如果不知道這些C語句在計算機中是如何執行的,你怎麼回靈活運用這些知識去解決實際問題呢?

解決問題的方法是要先理解C語言各種語句的流程(即計算機是如何執行這些語句的過程),然後研讀現成C語言經典程序,看懂別人事如何解決問題的,以提高自己的程序設計能力。
第六步、研究課程設計源成序,提高C語言的綜合應用能力.

7. 求C語言中指針優點和注意事項說明(要有例子的)

Joel Spolsky認為,對指針的理解是一種aptitude,不是通過訓練就可以達到的。雖然如此,我還是想談一談這個C/C++語言中最強勁也是最容易出錯的要素。

鑒於指針和目前計算機內存結構的關聯,很多C語言比較本質的特點都孕育在其中,因此,本篇和第六、第七兩篇我都將以指針為主線,結合在實際編程中遇到的問題,來詳細談談關於指針的幾個重要方面。

指針類型的本質分析

1、指針的本質

指針的本質:一種復合的數據類型。下面我將以下面幾個作為例子進行展開分析:

a)、int *p;
b)、int **p;
c)、int (*parValue)[3];
d)、int (*pFun)();

分析:

所謂的數據類型就是具有某種數據特徵的東東,比如數據類型char,它的數據特徵就是它所佔據的內存為1個位元組, 指針也很類似,指針所指向的值也占據著內存中的一塊地址,地址的長度與指針的類型有關,比如對於char型指針,這個指針占據的內存就是1個位元組,因此指針也是一種數據類型,但我們知道指針本身也占據了一個內存空間地址,地址的長度和機器的字長有關,比如在32位機器中,這個長度就是4個位元組,因此指針本身也同樣是一種數據類型,因此,我們說,指針其實是一種復合的數據類型,

好了,現在我們可以分析上面的幾個例子了。

假設有如下定義:

int nValue;

那麼,nValue的類型就是int,也就是把nValue這個具體變數去掉後剩餘的部分,因此,上面的4個聲明可以類比進行分析:

a)、int *

*代表變數(指針本身)的值是一個地址,int代表這個地址裡面存放的是一個整數,這兩個結合起來,int *定義了一個指向整數的指針,類推如下:

b)、int **

指向一個指向整數的指針的指針。

c)、int (*)[3]

指向一個擁有三個整數的數組的指針。

d)、int (*)()

指向一個函數的指針,這個函數參數為空,返回值為整數。

分析結束,從上面可以看出,指針包括兩個方面,一個是它本身的值,是一個內存中的地址;另一個是指針所指向的物,是這個地址中所存放著具有各種各樣意義的數據。

2、對指針本身值的分析

下面例子考察指針本身的值(環境為32位的計算機):

void *p = malloc( 100 );

請計算sizeof ( p ) = ?

char str[] = 「Hello」 ;
char *p = str ;

請計算sizeof ( p ) = ?

void Func ( char str[100])
{
請計算 sizeof( str ) = ? //注意,此時,str已經退化為一個指針,詳情見
//下一篇指針與數組
}

分析:上面的例子,答案都是4,因為從上面的討論可以知道,指針本身的值對應著內存中的一個地址,它的size只與機器的字長有關(即它是由系統的內存模型決定的),在32位機器中,這個長度是4個位元組。

3、對指針所指向物的分析

現在再對指針這個復合類型的第二部分,指針所指向物的意義進行分析。

上面我們已經得到了指針本身的類型,那麼將指針本身的類型去掉 「*」號就可得到指針所指向物的類型,分別如下:

a)、int

所指向物是一個整數。

b)、int*

所指向物是一個指向整數的指針。

c)、int ()[3]

()為空,可以去掉,變為int [3],所指向物是一個擁有三個整數的數組。

d)、int ()()

第一個()為空,可以去掉,變為int (),所指向物是一個函數,這個函數的參數為空,返回值為整數。

4、附加分析

另外,關於指針本身大小的問題,在C++中與C有所不同,這里我也順帶談一下。

在C++中,對於指向對象成員的指針,它的大小不一定是4個位元組,這主要是因為在引入多重虛擬繼承以及虛擬函數的時候,有些附加的信息也需要通過這個指針進行傳遞,因此指向對象成員的指針會增大,不論是指向成員數據,還是成員函數都是如此,具體與編譯器的實現有關,你可以編寫個很小的C++程序去驗證一下。另外,對一個類的靜態成員(static member,可以是靜態成員變數或者靜態成員函數)來說,指向它的指針只是普通的函數指針,而不是一個指向類成員的指針,所以它的大小不會增加,仍舊是4個位元組。
指針運算符&和*

「&和*」,它們是一對相反的操作,』&』取得一個物的地址(也就是指針本身),』*』得到一個地址里放的物(指針所指向的物)。這個東西可以是值(對象)、函數、數組、類成員(class member)等等。

參照上面的分析我們可以很好地理解&與*。

使用指針的好處?

關於指針的本質和基本的運算符我們討論過了,在這里,我想再籠總地談一談使用指針的必要性和好處,為我們今後的使用和對後面篇章的理解做好鋪墊。簡而言之,指針有以下好處:

1)、方便使用動態分配的數組。

這個解釋我放在本系列第六篇中進行講解。

2)、對於相同類型(甚至是相似類型)的多個變數進行通用訪問

就是用一個指針變數不斷在多個變數之間指來指去,從而使得非常應用起來非常靈活,不過,這招也比較危險,需要小心使用:因為出現錯誤的指針是編程中非常忌諱的事情。

3)、變相改變一個函數的值傳遞特性。

說白了,就是指針的傳地址作用,將一個變數的地址作為參數傳給函數,這樣函數就可以修改那個變數了。

4)、節省函數調用代價。

我們可以將參數,尤其是大個的參數(例如結構,對象等),將他們地址作為參數傳給函數,這樣可以省去編譯器為它們製作副本所帶來的空間和時間上的開銷。

5)、動態擴展數據結構。

因為指針可以動態地使用malloc/new生成堆上的內存,所以在需要動態擴展數據結構的時候,非常有用;比如對於樹、鏈表、Hash表等,這幾乎是必不可少的特性。

6)、與目前計算機的內存模型相對應,可按照內存地址進行直接存取,這使得C非常適合於一些較底層的應用。

這也是C/C++指針一個強大的優點,我會在後面講述C語言的底層操作時,較詳細地介紹這個優點的應用。

7)、遍歷數組。

據個例子來說吧,當你需要對字元串數組進行操作時,想一想,你當然要用字元串指針在字元串上掃來掃去。

…實在太多了,你可以慢慢來補充^_^。
指針本身的相關問題

1、問題:空指針的定義

曾經看過有的.h文件將NULL定義為0L,為什麼?

答案與分析:

這是一個關於空指針宏定義的問題。指針在C語言中是經常使用的,有時需要將一個指針置為空指針,例如在指針變數初始化的時候。
C語言中的空指針和Pascal或者Lisp語言中的NIL具有相同的地位。那如何定義空指針呢?下面的語句是正確的:

char *p1 = 0;
int *p2;
if (p != 0)
{
...
}
p2 = 0;

也就是說,在指針變數的初始化、賦值、比較操作中,0會被編譯器理解為要將指針置為空指針。至於空指針的內部表示是否是0,則隨不同的機器類型而定,不過通常都是0。但是在另外一些場合下,例如函數的參數原型是指針類型,函數調用時如果將0作為參數傳入,編譯器則不能將其理解為空指針。此時需要明確的類型轉換,例如:

void func (char *p);
func ((char *)0);

一般情況下,0是可以放在代碼中和指針關聯使用的,但是有些程序員(數量還不少呦!也許就包括你在內)不喜歡0的直白,認為其不能表示作為指針的特殊含義,於是要定義一個宏NULL,來明確表示空指針常量。這也是對的,人家C語言標准就明確說:「 NULL應該被定義為與實現相關的空指針常量」。但是將NULL定義成什麼樣的值呢?我想你一定見過好幾種定義NULL的方法:

#define NULL 0
#define NULL (char *)0
#define NULL (void *)0

在我們使用的絕大多數計算系統上,例如PC,上述定義是能夠工作的。然而,世界上還有很多其它種類的計算機,其CPU也不是Intel的。在某些系統上,指針和整數的大小和內部表示並不一致,甚至不同類型的指針的大小都不一致。為了避免這種可移植性問題,0L是一種最為安全的、最妥帖的定義方式。0L的含義是: 「值為0的整數常量表達式」。這與C語言給出的空指針定義完全一致。因此,建議採用0L作為空指針常量NULL的值。

其實 NULL定義值,和操作系統的的平台有關, 將一個指針定義為 NULL, 其用意是為了保護操作系統,因為通過指針可以訪問任何一塊地址, 但是,有些數據是不許一般用戶訪問的,比如操作系統的核心數據。 當我們通過一個空(NULL)的指針去方位數據時,系統會提示非法, 那麼系統又是如何知道的呢??

以windows2000系統為例, 該系統規定系統中每個進程的起始地址(0x00000000)開始的某個地址范圍內是存放系統數據的,用戶進程無法訪問, 所以當用戶用空指針(0)訪問時,其實訪問的就是0x00000000地址的系統數據,由於該地址數據是受系統保護的,所以系統會提示錯誤(指針訪問非法)。

這也就是說NULL值不一定要定義成0,起始只要定義在系統的保護范圍的地址空間內,比如定義成(0x00000001, 0x00000002)都會起到相同的作用,但是為了考慮到移植性,普遍定義為0 。

2、問題:與指針相關的編程規則&規則分析

指針既然這么重要,而且容易出錯,那麼有沒有方法可以很好地減少這些指針相關問題的出現呢?

答案與分析:

減少出錯的根本是徹底理解指針。

在方法上,遵循一定的編碼規則可能是最立竿見影的方法了,下面我來闡述一下與指針相關的編程規則:

1) 未使用的指針初始化為NULL 。

2) 在給指針分配空間前、分配後均應作判斷。

3) 指針所指向的內容刪除後也要清除指針本身。

要牢記指針是一個復合的數據結構這個本質,所以我們不論初始化和清除都要同時兼顧指針本身(上述規則1,3)和指針所指向的內容(上述規則2,3)這兩個方面。

遵循這些規則可以有效地減少指針出錯,我們來看下面的例子:

void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, 「hello」);
free(str);
if(str != NULL)
{
strcpy(str, 「world」);
printf(str);
}
}

請問運行Test函數會有什麼樣的結果?

答:

篡改動態內存區的內容,後果難以預料,非常危險。因為free(str);之後,str成為野指針,if(str != NULL)語句不起作用。

如果我們牢記規則3,在free(str)後增加語句:

str = NULL;

那麼,就可以防止這樣的錯誤發生。

8. c語言的注意事項

在 C 語言中,如果在未知的有符號數上執行位操作,很可能會導致緩沖區溢出,從而在某些情況下導致攻擊者執行任意代碼,同時,還可能會出現出乎意料的行為或編譯器定義的行為。

9. 學習C語言應注意哪些方面其重點和難點是哪些

第一個難點 C語言的數據類型 關於C語言數據類型,不難理解但難於運用。這就要求同學們在學習的時候記住常用的一些數據類型的特徵(第一次作業第2題內容)。 第二個難點 C語言的運算符和運算順序 1.C語言的運算功能十分豐富,運算種類遠多於其它程序設計語言。大家在學習的時候不僅要注意某些運算符的運演算法則,還要注意運算規則(注意事項)。 2.當多種不同運算組成一個運算表達式,即一個運算式中出現多種運算符時,運算的優先順序和結合規則顯得十分重要。 第三個難點 C語言的三種簡單程序結構 其實,C語言的前二個程序結構不是難點,三種結構里難點應在於循環的嵌套用法。 (1)關於順序結構 這種結構的程序比較簡單,就是按照語句的排列順序依次執行的機制。順序結構的執行順序是自上而下,依次執行,因此編寫程序也必須遵守這一規定,否則你的程序執行結果就不對。 語句也是多分支選擇語句,又稱為多路開關語句,到底執行哪一塊,取決於開關設置,也就是表達式的值與常量表達式相匹配的那一路,它不同if—else 語句,它的所有分支都是並列的,程序執行時,由第一分支開始查找,如果相匹配,執行其後的塊,接著執行第2分支,第3分支……的塊,直到遇到break語句;如果不匹配,查找下一個分支是否匹配。 (3)關於循環結構: 循環結構可以減少源程序重復書寫的工作量,用來描述重復執行某段演算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即goto循環、while循環、do –while循環和for循環。 四種循環可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提昌用goto循環,所以下面我們重點講解另外的三種循環。 常用的三種循環結構學習的重點在於弄清它們相同與不同之處,以便在不同場合下使用,大家好好看一下書中三種循環的格式和執行順序,如何替換使用,如把while循環的例題,用for語句重新編寫一個程序,這樣能更好地理解它們的作用。 注意:在while和do—while循環體內和for 循環中的第3語句中,應包含趨於結束的語句(如i++,i--),否則就可能成了一個死循環,這也是初學者的一個常見錯誤。 下面我們來討論下這三種循環的異同之處: 用while和do—while循環時,循環變數的初始化的操作應在循環體之前,而for循環是在語句1中進行的;while 循環和for循環都是先判斷表達式,後執行循環體,而do—while循環是先執行循環體後判斷表達式,也就是說do—while的循環體最少被執行一次,而while 循環和for就不一定了。這三種循環都可以用break語句跳出循環,用continue語句結束本次循環,而goto語句與if構成的循環,不能用break和 continue語句進行控制。 這三種結構並不是彼此孤立的,在循環中可能出現分支、順序結構,分支中也可能出現循環、順序結構而把循環、分支看成一個語句,它又是構成順序結構的一個元素,因此這三種結構相互結合,就能實現各種演算法,設計出解題程序,但若是很大的題目,這樣編出的程序往往很長,重復結構多,並且可閱讀性差,因此我們常將C程序設計成模塊化結構。

10. c語言調試及測試應注意什麼,發現的錯誤怎樣去解決

你好!
到備注去右擊、然後跳到錯誤處修改
希望對你有所幫助,望採納。