⑴ c語言程序設計難點在哪裡
C語言是一種表達力很強的語言,而且與其他語言相比顯得比較精煉高效。在C語言中的語法部分,比較難的是指針,由於它很靈活,用好的話能大大提高效率,反之則容易出錯(一般是內存空間指向出錯,如指針空懸、內存泄露等),但是當你練多了,指針應該也不成問題(要有意識的去練),我覺得真正的難點在於演算法邏輯。理論上,C語言只要求你時刻知道自己在干什麼,要實現什麼功能,只要你的程序邏輯明晰,一般不用再DEBUG,一次就能成功,反之,如果自己都感覺模糊,那程序只會比你還模糊:-D,要極好的人品才能勉強運行成功,但出不出正確結果還不一定。解決的方法很簡單,就是練。每成功寫出一個程序,都會讓自己有所進步,積累多了,就能在編程之前在大腦里構建出清晰的藍圖,編程自然不在話下。祝你在通往程序員的道路上一路狂奔,呵呵
⑵ C語言的難點~~~`
int i,j,n;
主函數中的變數n沒有初始化也沒有賦值而直接使用,這是導致越界的原因.修改如下:
//---------------------------------------------------------------------------
#include <stdio.h>
# define N 12
typedef struct
{ char num[10];
double s;
} STREC;
double fun (STREC *a,STREC *b, int *n)
{int i;
double sum=0.0,avae=0.0;
for(i=0;i<N;i++)
sum+=a[i].s;
avae=sum/N;
for(i=0;i<N;i++)
if(avae<=a[i].s)
{b[*n]=a[i];*n=*n+1;}
return avae;
}
void main()
{
FILE *wf;
STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},
{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},
{"GA09",60},{"GA11",79},{"GA12",73},{"GA10",90}};
STREC h[N],t;
int i,j,n=0;/*******注意這里*********/
double ave;
ave=fun(s,h,&n);
printf("The %d student data which is higher than %7.3f:\n",n,ave);
for(i=0; i<n; i++)
printf("%s %4.1f\n",h[i].num,h[i].s);
printf("\n");
for(i=0; i<n-1; i++)
for(j=i+1;j<n;j++)
if(h[i].s<h[j].s)
{t=h[i];h[i]=h[j];h[j]=t;} /*分數從高到低排列*/
/******************************/
wf=fopen("out.dat","w");
fprintf(wf, "%d %7.3f\n",n,ave);
for(i=0; i<n; i++)
fprintf(wf, "%s %4.1f ",h[i].num,h[i].s);
fclose(wf);
/*****************************/
}
//---------------------------------------------------------------------------
⑶ 學習C語言的幾個難點
數組和指針,指針是C語言最重要的地方,也是C語言靈活的體現,如果沒學懂指針就等於沒學C語言.
⑷ C語言的重點與難點
順序、循環、選擇三大結構是重點,數組指針文件是難點。學會設計演算法是重難點。指令的語法全憑記憶,不算難。文件是非重點,只會簡單考。數組指針是重要手段,必須掌握。多上機實驗,肯定沒問題。
⑸ c語言編程實例,難點,厲害的進
有點意思,一顆炸彈能同時擊中多個潛艇嗎?就是在垂直方向上的?
⑹ c語言難點解答
我來分析一下你的程序中的錯誤:
(1)首先,輸入函數scanf()的格式使用的有誤:scanf()的 「 」之內一般除了「%d、%c、%f、%lf..."不能加入別的字元串,否則運行會出錯,所以你這里應該為:scanf(「%lf,%lf,%lf」,&a,&b,&c);
(2)在b是否為0的判斷語句寫錯了,應該為: if(b==0) 。
(3)下面是我修改後的運行結果:$ ./test
輸入一元二次方程 a=,b=,c=
2.1,8.9,3.5
x1=-0.44
x2=-3.80
⑺ c語言的難點在哪裡
難的是設計。能把別人的設計思路弄通了,就沒什麼難度了。指針不是難點,難的是看懂別人的設計思路,能讀懂別人的變數定義以及變數的用處。指針稍微精通C語言的人都不會很糾結指針,看懂指針和精通運用指針是兩個概念。
⑻ C語言基礎的幾個難點解析
一、整型數據的范圍
不同類型的數據在內存中佔用的存儲單元長度不同,以VC++6.0的編譯環境為例,基本整型(int)數據分配4個位元組,短整型(short int)數據分配2個位元組。我們以short int為例。1個位元組為8個二進制位,每個短整型數據分配2個位元組,即16位。對於有符號位的短整型(signed short int,默認的),最左面一位作為符號位,0表示正,1表示負。即能存儲的最大數為0111111111111111,第一位是0,表示正數,後邊15位都是1,轉換為十進制為32767;最小數為1000000000000000,轉換為十進制為-32768。超出此范圍,即為「溢出」。例如:
short int a,b,c,d; a=32767;b=a+1; c=-32768;d=b-1;
printf("b=%d\t",b); printf("d=%d\n",d); 輸出結果為b=-32768 d=32767
對於無符號的短整型(unsigned short int),最小為0000000000000000,最大為1111111111111111,范圍0~65535。例如:
unsigned short int e=65535,f; f=e+1;
printf("f=%d\n",f); 輸出結果為f=0
二、運算符
算術運算符有+,-,*,/,%,++,--。其中,*號在表達式中不可以省略,如b2-4ac,寫成表達式為b*b-4*a*c。/和%要區分好,/為商,%為余。如a可以被b整除,表示為a%b==0。++,--的使用方法有兩種:一種i++,i--,先使用i原值,再使i的值加或減1;第二種++i,--i,先使i的值加或減1,再使用i的新值。例如:
int i=11; printf("%d\n",i++ * 1/3); 輸出結果為3。
int i=11; printf("%d\n",++i * 1/3); 輸出結果為4。
自加自減運算符在後邊的學習中會經常用到,要好好理解。
邏輯運算符有&&,||,!。在邏輯表達式中,不是所有的邏輯運算符都執行,只在必須執行下一個邏輯運算符才能求出表達式的解的時候,才執行該運算符。a && b只有a為真時,才判斷b的值。換句話說,a如果為假,b就不執行。同理,a || b,a如果為真,b就不用執行。例如:
int m=1,n=1,a=1,b=1;
printf(「表達式=%d\t」,(m=a>b)&&(n=a>b)); printf("m=%d,n=%d\n",m,n);
輸出結果為 表達式=0 m=0,n=1
常用的運算符的優先順序別從高到低排序為:!,算術運算符(++,--高於*,/,%高於+,-),關系運算符(>,>=,<,<=高於==,!=),&&,||,賦值運算符,逗號運算符。
三、比較數的大小
例如:編寫程序,輸出三個整數的最大值。剛接觸C語言的學生,大部分學生上機實踐都可以完成這個程序,但是思路不太好。調整演算法思路,便於以後程序的編寫。
main( )
{ int a,b,c,max; max=a;
if(b>max) max=b; if(c>max) max=c; printf("max=%d\n",max);}
同理,編寫程序,輸出10個整數的最大值。
main( )
{ int a[10],max,i; for(i=0;i<=9;i++) scanf("%d",&a[i]);
max=a[0]; for(i=1;i<=9;i++) if(a[i]>max) max=a[i];
printf("max=%d",max); }
四、switch語句
處理選擇結構有if語句和switch語句。switch語句用於處理多分支選擇結構,在使用時有多個注意點,這里強調兩點。
1.case後邊的常量,不能寫成表達式。
例如:編寫程序,評判學生成績score的等級grade,90~100為A,80~90為B,70~80為C,60~70為D,60以下為E。
⑼ 學習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程序設計成模塊化結構。
⑽ c語言的難點在哪裡
C語言本身多看多想多聯系並沒有什麼難的,難的是演算法和數據結構,這些基本跟語言並沒有很大關系