/*Shell排序算法*/
void shellsort(int v[], int n)
{
int gap, i, j, temp;
for (gap = n/2; gap > 0; gap /= 2)
for (i = gap; i < n; i++)
for (j = i - gap; j >=0 && v[j] > v[j+gap]; j-=gap)
{
temp = v[j];
v[j] = v[j+gap];
v[j+gap] = temp;
}
}
Shell排序算法中j -= gap的原因就是要照顧到往前回數gap位置的重復比較。而且gap會變小。所以回數的間隔變小次數會增多。
If-else 語句中的else部分是可選的,所以在嵌套的if語句中省略它的else部分將導致歧義。解決的辦法是將每個else與最近的前一個沒有else配對的if進行匹配。
if(n>0)
if (a>b)
a=a;
else
z=b;
/***else部分與內層的if配對***/
如果不符合期望則必須用{}括起來來強行配對。
建議在有if語句嵌套的時候使用{}
在switch語句中,case的作用只是一個標號,因此某各分支中的代碼執行完畢后,程序將進入下一分支繼續執行。除非在程序中顯式跳轉。跳出switch語句中最常用的方法式使用break語句與return語句。
字符串中空格就是空格。 再多空格也是空格。 除非"adva\t\nada" 這樣就是對應的轉義字符。
如果switch嵌套switch則一定要記住要補break
Switch (a) 記住這里要有括號
字符串 "\t\abc" -> "\t\abc" 字符串"\t\abc"; ->會轉義
轉義字符就要當作轉義來看。
For 循環 三各條件都可以省略 省略第一個和第三個 相當于while
省略第2個相當于 認為其值永遠是真。但是無論如何分號要保留。
for (; ;)
;
/**為無限循環語句,這種語句需要借助其他手段。**/
逗號運算符是C語言中優先級最低的運算符。被逗號分隔的一對表達式,將按照從左到右的順序進行求職。逗號表達式的值和類型是右邊表達式的值和類型.
/**函數reverse(s)該函數用于倒置字符串s中各個字符的位置*/
#include <string.h>
#include <stdio.h>
void reverse (char s[])
{
int c, i, j;
for (i = 0, j = strlen(s) - 1; i < j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
應當要區分是逗號運算符的逗號以及,分隔函數參數的逗號、分隔聲明中變量的逗號等。這些逗號并不保證各表達式按從左至右的順序求值。
/*簡化版*/
void reverse2 (char s[])
{
int i, j, c;
for (i = 0, j = strlen(s) - 1; i < j; i++, j--;)
c = s[i], s[i] = s[j], s[j] = c;
}