重拾C,一天一點點_8


這兩天發現一個問題,我最近發的幾篇博文稀里糊塗地被轉到別的網站去了,目前發現有兩個網站轉載了,一個注明了作者出處(博客園 lltong),但沒給任何鏈接。另一個網站呢,就是直接抓的,而且還抓的亂七八糟的,呵呵,不知這樣的內容給網友怎么去看。純屬自己寫的一點筆記,別人轉載我也不反對,只是希望能尊重下作者,起碼要注明下出處,另外也多用點心復制粘貼,別誤導了其他網友。從今起我也加上我的博客地址鏈接,讓他們一起抓去。估計這篇文章的這個開頭也抓走了。呵呵

不知是不是我操作不當,每次編輯文章時,原tag標簽總記錄不上。如果不是個例的話,希望博客園大大們能遲早修復下這個小bug哦。

//字符串反轉

 1 #include <stdio.h>
 2 #include <string.h>
 3 void reverse(char s[]);
 4 
 5 main(){
 6     char s[] = "abcd";
 7      reverse(s);
 8      printf("%s\n", s);    //dcba
 9      return 0;
10 }
11  
12 void reverse(char s[]){
13     int i,l;
14     char t;
15     for(i=0,l=strlen(s)-1; i<l; i++,l--){
16         t = s[i] ;
17         s[i] = s[l];
18         s[l] = t;
19     }
20 }

//遞歸實現字符串反轉

 1 #include <stdio.h>
 2 #include <string.h>
 3 void reverse(char s[],int n);
 4 
 5 main(){
 6     char s[] = "abcd";
 7     reverse(s,strlen(s)-1);        //dcba
 8     return 0;
 9 }
10 
11 void reverse(char s[],int n){
12     if(n >= 0){        
13         putchar(s[n]);
14         reverse(s, n-1);
15     }
16 }

//遞歸累加

 1 #include <stdio.h>
 2 long sum(int n);
 3 
 4 main(){
 5     printf("%d\n",sum(10));
 6     return 0;
 7 }
 8 
 9 long sum(int n){
10     if(n > 0){
11         return n + sum(n-1);
12     }
13 }

//快速排序(基本上是對着書本敲的,目前理解還有點困難,還好跟着敲時沒出什么錯)

 1 #include <stdio.h>
 3 void qsort(int v[],int left,int right);
 4 void swap(int v[], int i, int j);
 5 
 6 main(){
 7     int arr[9] = {1,2,8,5,9,2,10,0,100};
 8     qsort(arr,0,9);
 9     int i;
10     for(i=0; i<9; i++){
11         printf("%d,", arr[i]);    //0,1,2,2,5,8,9,10,100
12     }
13     
14     return 0;
15 }
16 
17 void qsort(int v[],int left,int right){
18     int i,last;
19     void swap(int v[], int i, int j);    
20     
21     if(left >= right){
22         return;
23     }
24     swap(v, left, (left + right) / 2);
25     last = left;
26     for(i=left+1; i<=right; i++){
27         if(v[i] < v[left]){
28             swap(v, ++last, i);
29         }        
30     }
31     swap(v, left, last);
32     qsort(v, left, last-1);
33     qsort(v, last+1, right);
34 }
35 
36 void swap(int v[], int i, int j){
37     int temp;
38     temp  = v[i];
39     v[i] = v[j];
40     v[j] = temp;
41 }

標准庫中,提供了qsort函數

預處理器:#include指令(編譯時把指定文件的內容包含到當前文件中)、#define指令

  #include "文件名"

  #include <文件名>

宏定義

  #define 名字 替換文本

替換文本可以是任意字符串,如替換文本有多行,每行末尾加上\。

宏定義的作用域:定義點到被編譯的源文件的末尾處。

 1 #include <stdio.h>
 2 #define MAXLENGTH 100
 3 #define MORELINE "abc \
 4 def"
 5 #define forever for(;;)
 6 #define max(a,b) a > b ? a :b
 7 #define min(a,b) ((a) < (b) ? (a) : (b))
 8 
 9 main(){
10     printf("%d\n", MAXLENGTH);        //100
11     printf("MAXLENGTH\n");            //MAXLENGTH
12     printf("%s\n",MORELINE);        //abc def
13     //forever;                        //無限循環 
14     printf("%d\n", max(10,9));        //10 看起來像函數調用,實質上是直接將替換文本插入到代碼 
15     printf("%d\n", min(10,9));        //9
16     return 0;
17 }

 //宏定義實則替換,與函數調用不同,如下:

1 #include <stdio.h>
2 #define max(a,b) (a) > (b) ? (a) : (b)    //(++i) > (j) ? (++i) : (j);
3 
4 main(){
5     int i = 1;
6     int j = 1;
7     printf("%d\n",max(++i,j));        //3
8 }

 剛才編譯器出了點小問題:cannot open output file E:\C\hello.cpp

臨時解決辦法:重新新建一文件,把原文件內容拷貝進去就好了。(呵呵,.cpp,下回要更正)

 附:

1、有一富翁,為了確保自己的人身安全,雇了雙胞胎兄弟兩個作保鏢。兄弟兩個確實盡職盡責,為了保證主人的安全,他們做出如下行事准則:a.每周一、二、三,哥哥說謊;b.每逢四、五、六,弟弟說謊;c.其他時間兩人都說真話。一天,富翁的一個朋友急着找富翁,他知道要想找到富翁只能問兄弟倆,並且他也知道兄弟倆個的做事准則,但不知道誰是哥哥,誰是弟弟。另外,如果要知道答案,就必須知道今天是星期幾。於是他便問其中的一個人:昨天是誰說謊的日子?結果兩人都說:是我說謊的日子。你能猜出今天是星幾嗎?

2、爸爸為了考考兒子的智力,給兒子出了道題。爸爸說:“我手里有1元、2元、5元的人民幣共60張,總值是200元,並且1元面值的人民幣比2元的人民幣多4張。兒子,給爸爸算算這三種面值的人民幣各有多少張?”兒子眨了眨眼睛,摸摸腦袋,也不知道怎么算。你能算出來嗎?

 

原文作者:lltong

博客園地址:http://www.cnblogs.com/lltong/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM