• 重拾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
    ", 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
    ",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
    ", MAXLENGTH);        //100
    11     printf("MAXLENGTH
    ");            //MAXLENGTH
    12     printf("%s
    ",MORELINE);        //abc def
    13     //forever;                        //无限循环 
    14     printf("%d
    ", max(10,9));        //10 看起来像函数调用,实质上是直接将替换文本插入到代码 
    15     printf("%d
    ", 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
    ",max(++i,j));        //3
    8 }

     刚才编译器出了点小问题:cannot open output file E:Chello.cpp

    临时解决办法:重新新建一文件,把原文件内容拷贝进去就好了。(呵呵,.cpp,下回要更正)

     附:

    1、有一富翁,为了确保自己的人身安全,雇了双胞胎兄弟两个作保镖。兄弟两个确实尽职尽责,为了保证主人的安全,他们做出如下行事准则:a.每周一、二、三,哥哥说谎;b.每逢四、五、六,弟弟说谎;c.其他时间两人都说真话。一天,富翁的一个朋友急着找富翁,他知道要想找到富翁只能问兄弟俩,并且他也知道兄弟俩个的做事准则,但不知道谁是哥哥,谁是弟弟。另外,如果要知道答案,就必须知道今天是星期几。于是他便问其中的一个人:昨天是谁说谎的日子?结果两人都说:是我说谎的日子。你能猜出今天是星几吗?

    2、爸爸为了考考儿子的智力,给儿子出了道题。爸爸说:“我手里有1元、2元、5元的人民币共60张,总值是200元,并且1元面值的人民币比2元的人民币多4张。儿子,给爸爸算算这三种面值的人民币各有多少张?”儿子眨了眨眼睛,摸摸脑袋,也不知道怎么算。你能算出来吗?

    原文作者:lltong

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

  • 相关阅读:
    让Extjs EditorGridPanel 编辑时支持方向键
    开发WebApp之PC客户端
    windows下mysql忘记root密码的解决方法
    TortoiseSVN使用svn+ssh协议连接服务器时重复提示输入密码
    jQuery Mobile页面跳转后未加载外部JS原因分析及解决
    在CentOS中安装与配置SVN的方法
    设置VMWARE通过桥接方式使用主机无线网卡上网
    关于sp_executesql与exec执行动态sql的区别--转载RascallySnake
    TreeView 点击触发父节点、子节点的连锁反应选中与取消
    Winform客户端发布与升级:ClickOnce
  • 原文地址:https://www.cnblogs.com/lltong/p/3383429.html
Copyright © 2020-2023  润新知