这两天发现一个问题,我最近发的几篇博文稀里糊涂地被转到别的网站去了,目前发现有两个网站转载了,一个注明了作者出处(博客园 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/