前面已經說過了c語言的一些基礎知識,具體見c語言基礎,,現在來思考一些問題:
首先,第乙個問題,如果我要交換兩個變數,有哪些方式呢?
當然,你可能會說,這很簡單嘛,直接給個中間變數不就行了嗎?
例如:a = 7 , b = 3
宣告乙個中間變數 t,讓 t = a ; a = b ; b = t ; 完美解決問題!
的確,這是乙個好方法。但是,如果我現在告訴你,不能使用中間變數,你會怎麼解決呢?
說到這裡,有些小夥伴就開始苦惱了,其實也不是很複雜,我們只需要:
令 a = a + b ; b = a - b ; a = a - b ;看完之後,是不是很簡單?
但這都不是重點,我想說的是下面這種方法:
a = 7 , b = 3
a = a^b; // 0111 ^ 0011 = 0100 4
b = b^a; // 0011 ^ 0100 = 0111 7
a = a^b; // 0100 ^ 0111 = 0011 3
上面用到了異或運算,在c語言中,『 ^ 』表示的異或,而不是平方,異或是兩個相同就為0,不同就為1
這三種方法都可以解決兩個變數交換問題,主要是前提條件不同。
接下來,說第二個問題,氣泡排序,想必這是學計算機語言的必備題目啊。
氣泡排序的主要思想就是交換位置,例如下面這個例子:
a[10] =
第一次的時候是9和3比較,若前面乙個數比後面乙個數大,則交換位置,所以9和3需要互換位置;
然後,9再與後面乙個數比較,若前面乙個數比後面乙個數大,則交換位置;
以此類推,第一輪的最後結果是9換到了最後面,即。
下面的迴圈體,很顯然就是我們之前交換變數所說的第三種方法,它完全等同於:
t = a[i+1]; a[i+1] = a[i]; a[i] = t;
#includeint main()
; int i,n = 9;
while(n--)}}
for(i = 0;i < 10;i++)
return 0;
}
最後乙個問題是,如何去掉重複的字元,例如 「aaaabbbbcccccc」 只輸出 「abc」
這個問題的關鍵是新建乙個陣列,將原陣列的第一位賦值給新陣列的第一位,如下面這個例子,將a[0]賦值給b[0],接著,再一次比較,如果陣列a裡面的值b陣列沒有,就將其新增到b陣列的裡,與此同時,下標加1,這就不難理解為什麼 j 要++了。
值得一提的是,字串的最後一位都會有乙個預設的 『\0』。
#includeint main();
b[0]=a[0];
while(a[i] != '\0')
i++;
} printf("%s\n",b);
return 0;
}
C語言 基礎練習題
給定不大於5的正整數n,考慮由n開始的連續5個數字,輸出所有由他們組成的無重複數字的3位數 輸入樣例 5輸出樣例 567 568 569 576 578 579 586 587 589 596 597 598 657 658 659 675 678 679 685 687 689 695 697 6...
c語言基礎練習題
include include include 1 求兩個數的最小公倍數 int sum int a,int b return a i int main 1 遞迴呼叫 斐波那契函式 int fib int n else if n 1 else int main 3 int main while x ...
c語言 幾個基礎練習題
實現乙個函式,列印乘法口訣表,口訣表的行數和列數自己指定,輸入9,輸出9 9口訣表,輸入12,輸出12 12的乘法口訣表 include void print int row printf n int main 2 使用函式實現兩個數的交換。include void swap int a,int b...