⑴ 菜鳥提問 c語言關於快速排序
其實,最想說明的是那段交換的代碼
R[j]^=R[i];
R[i]^=R[j];
R[j]^=R[i];
一定要排除 i==j 的情況。即自己與自己交換的情況。
如:
a=9;
a^=a;/*a=0*/
a^=a;/*a=0*/
a^=a;/*a=0*/
a就不再是10了。
#include<stdio.h>
#include<stdlib.h>
void quicksort(int R[],int s,int t)
{
int i,j;
int temp;
if(s<t)
{
temp=R[s];/*選第一個數作為參照*/
/*while(i!=j)不要用這種方法判定循環結束,萬一i==j-1,i++,j--後 i〉j了,!=這個條件就救不了你了*/
for(i=s+1,j=t;i<=j;i++,j--)/*不包括參照數,進行左右陣營站隊*/
{
while(j>i && R[j]>=temp)/*R[j]>=temp不要 = 也行,加了更好,畢竟相等的無論站左站右,哪邊都無所謂*/
j--;
while(i<j && R[i]<=temp)
i++;
if(i!=j){/*i千萬不能等於j*/
R[j]^=R[i];
R[i]^=R[j];
R[j]^=R[i];
}
}
i--;
if(R[s]<R[i])i--;/*調整i的值,使i指向最後一個小於等於參照數的位置*/
/*將參照數 與 最後一個小於等於參照數的數進行交換,這樣就真正把左右兩個陣營分開了*/
R[s]=R[i];
R[i]=temp;
quicksort(R,s,i-1);
quicksort(R,i+1,t);
}
}
int main(void)
{
int i;
int a[]={5,3,2,1,9,8,7,4,5};
quicksort(a,0,sizeof(a)/sizeof(int)-1);
for(i=0;i<sizeof(a)/sizeof(int);i++)
printf("%d ",*(a+i));
return 0;
}
⑵ 菜鳥怎麼樣學習C語言
1、學習C語言,要從入門到精通,需要讀哪些書(從簡單的到難的排序,越詳細越好,最好都能注釋下選擇這本書的理由)?
入門階段:還是老譚那本。
理由:雖然不能說它寫得有多好,但是你現在要做的是入門,要快速的掌握c的基本語法,這本書很好理解,能夠讓你在最短的時間內大致掌握這門語言的概更。
第二階段:《c程序設計語言》(The C Programming Language)和《C語言解惑》(The C puzzle book)
理由:《the c programming language》號稱c語言聖經。其實它也只是一本介紹基礎語法的書,不做入門教程是因為對於初學者來說,它難度稍大,之所以推薦,是因為它能讓你---系統而嚴密的---把C語言知識構架整理一遍。《c語言解惑》,系統的整理了c語法中容易讓你產生迷惑或容易犯錯的地方(如a+++++b等),這時候你才算真正開始學習c語言了.(以上兩本現在出重印了,應該在書店可以買到)
第三階段:《C陷阱與缺陷》(C Traps and Pitfalls)和《高質量c/c++編程指南》
理由:《c陷阱與缺陷》是讓對c的理解有質變得一本書,如如何理解(*(void(*)())0)()等問題,我的感覺是看完這本書讓我真正從小菜鳥變成了老菜鳥。《高質量...》,終於有一本國產的了,呵呵,我認為這本書是把你從土匪變成正規軍的最好指南,該書涉及編程風格、效率、重載、健壯性等一些列之前很難注意的問題。(以上兩本《c陷阱...》已絕版,不過網上可以下載到中英文版,《高質量...》本身就是網路書,很容易找到)
其它推薦書:《c專家編程》《c和指針》
說實話這兩本書我並沒有看過(或看完),但有口皆碑,都是經典之作,不過都已經絕版,仔細找找網上有下載的。
2、有哪些好的C語言練習(越難的越好)?
對語言本身的練習其實就是你對它的理解,用得多了,注意得多了,自然就ok了。其它思維上的練習主要是演算法和數據結構方面的,嚴老的《數據結構題集(C語言版)》如果你能做完就相當了不起了。
3、要學精C語言,還要具備哪些條件?
其實c語言也只是一個工具而已,就像鋤頭一樣,你每天挖地鋤田自然就精通它了。只要不是白痴,應該都沒有問題。
4、C語言學完後接下去要學哪些語言好?
這個我就沒有資格回答了,因為除了少量匯編和c++,我大部分只用到了c,不過也許是一脈相承的c++吧。c是面向過程的語言,學習c++面向對象的思想。
5、各位網友如果在學習計算機語言方面還有一些獨到的見解,歡迎提出!
不是我提出的,不過真的很經典——「天下程序一大抄」,呵呵。
⑶ 零基礎如何學習c語言有什麼推薦的入門書籍
C語言本身並不難學,或者甚至可以說C語言的語法是最簡單的,所以零基礎沒有什麼問題。網上有很多教程,自學網站,以及免費的視頻。重點在於要多去練習。
個人推薦C語言入門教材有:
1.非常經典的《C語言程序設計》 譚浩強版
2.入門加深入一點的《c primer plus第6版中文版》
也可以在網上學習,有不錯的網站:
1.菜鳥教程 C語言模塊:https://www.runoob.com/cprogramming/c-tutorial.html
2.C語言自學視頻:https://www.hu.com/question/19668080
C語言學習非常容易,最重要的是多練習,多編程。
⑷ 菜鳥c語言學習者,fopen()的問題。
其實你寫的程序用void和int都是一樣的,如果什麼都不寫的話,默認為int。
也就是說main函數也有返回值,返回給系統一些程序執行的信息。
比如
#include "stdio.h"
int main()
{
FILE* p;
p = fopen( "f://a.txt" , "w+" );
if( p == NULL ) // 文件打開失敗;
return -1;
/*
...程序
*/
return 0;
}
這樣系統就可以根據程序返回的值來判斷其運行情況了。
在Linux下,命令echo $?可以看到這個返回值。win下我就不知道了。
平時你什麼都不加的寫程序,如果最後沒有return 0;的話,往往會有一個waring,原因就是默認main函數返回int值但程序里沒有。
你平時寫一些練習性質的小程序,用void都不會有問題的。還有,這些問題不值50的,你0分我也給你回答。
另外,團IDC網上有許多產品團購,便宜有口碑
⑸ C語言菜鳥
感覺樓主的代碼給的一點問題
在z還沒有賦初值時就有了
if(z<0)
這個語句
二級又怎麼樣,你先把它在自己的電腦上編譯運行一下 就沒有一個答案是正確的
那個更具有說服力
⑹ 菜鳥在線請問c語言里:sizeof怎樣用法
sizeof是計算對象所佔的位元組個數,通常用來查看變數或結構體等所佔的位元組個數。
比如:
int a;
sizeof(a); // 計算變數a所佔的位元組數,等價於sizeof(int)
struct
{
int num;
char name[];
int age;
}person;
sizeof(person); // 計算整個結構所佔的位元組總數
⑺ c語言 菜鳥 設有函數調用語句 func((a1,a2,a3),(a4,a5)); 則函數func中有幾個形參 答案是2 為什麼啊
題目問的是func中的形參有幾個,答案是2沒有問題。
(a1,a2,a3)這是一個表達式,表達式的值為最後一個逗號後面表達式的值,即a3的值,這是考察逗號運算符的知識點。
同理(a4, a5)表達式值為a5,所以func()調用等價於func(a3, a5),您想想形參有幾個,2個沒問題的,對吧。
⑻ C語言在線工具菜鳥工具能不能輸入兩次數據
C語言在線工具菜鳥工具能輸入兩次數據。
每次要求用戶輸入時,可以通過調用標准庫函數獲取用戶輸入,如:getc(),gets(),getchar(),scanf("%d",&a)等等,你調用幾次,程序就會要求用戶輸入幾次,這個問題很容易解決的。//參考代碼如下:
#include
#define N 5
int main()
{
int i,a[N],j;
for(i=0;i
i=N;
j=0;
while(i--)//方法二
scanf("%d",&a[j++])
return 0;
}
C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。
⑼ 菜鳥C語言請教,反斜杠的意義
反斜杠有兩種意義:
續行符。預處理時把行末的反斜杠和那個換行符一同去除。
在字元和字元串字面量里引起轉義字元,數值轉義碼和統一字元名稱。在示例中,不需要轉義也不影響字元串的含義。如果是字元,就需要對'進行轉義:''';同樣的,在字元常量里可以不對"進行轉義:'"'
轉義字元包括a f v \ ' " ?。數值轉義碼是ddd 和 xdd的形式。其中d分別為八進制數字和十六進制數字。統一字元名稱的形式是udddd和Udddddddd,其中d都是十六進制字元。
⑽ 菜鳥的C語言問題……
前兩行應該明白吧,就是定義了整形的i和sum變數,並未sum賦值為0,因為下面要執行累加,累加還沒開始的話sum就是0嘛。
然後一個循環進行控制,i從1加到50一共循環50次,每次對應的一個i去執行if(!(i%7)) 判斷看看是否符合條件。
重點要解釋的那兩句如下:
if(!(i%7)) sum+=i; 就是加入這個條件成立,那麼執行這個語句,否則不管這個語句。
①(!(i%7))是判斷條件,i%7這里這個%是取模運算也就是求余數,比如3%7=3,7%7=0等。取模運算必定會得到一個結果,這個結果肯定是個int類型的數字,我們把這個數字分為兩組一組是0另一組是非0。如果是0,那麼(!(i%7))就是(!0),通過邏輯非運算符(就是那個嘆號)運算,括弧裡面的邏輯值就是!0也就是1了,1是邏輯真,那麼if條件為真,執行sum+=i;語句。否則如果是個非0的,
(!(非零))也就是(!(!0)),非非0還是0(否定的否定嘛),所以if條件為假,不執行sum+=i;。
②sum+=i;什麼意思呢,寫成你能看懂的就是sum=sum+i。比如sum-=i就是sum=sum-i,乘*和除/同理。
最後輸出sum的值。
這個程序的意思就是累加1~50范圍內所有的能夠被7整出的整數,並輸出這個累加和。