zoukankan      html  css  js  c++  java
  • 011_stdc_C语言

    回顾:

     1 const 限定存储空间的只读   
    int a[]; a=pa;


    2 字符串
    int float string 一串字符+ 就是字符串

    char *str = "hello wolrd"

    char pa[10]="hello";


    %s 格式化占位符 char *str

    gets(str) -->fgets() //
    puts(str) --> 输出字符串


    printf("hello world ");
    puts("hellow worold ");


    字符串里面的操作函数
    strcpy 字符串复制
    strcmp 比较字符串的大小
    strlen 字符个数
    strlen("好");

    strcat 连接多个字符串

    字符串转换练习
    _______________

          int atoi(char *str);   //将一串字符转换为int

    itoa //将int 转字符串
    atof(); //"3.14" --> 3.14

    char *p 指向一个字符串(字符指针)
    1. 字符指针 数组
    char *pa[5] //指向多个字符串

    2.
    char a[] //一个字符串
    char a[5][10] //5个字符串,每个字符串9字符

    3. char **ppa   //字符串指针(字符串指针)

    /*
     * 字符串数组
     */
    char a[5][10] ={"关羽","张飞","刘备","赵云","小乔"};

    //输入一个姓名 ,判读 该同学是否在上面的名单中

    #include <stdio.h>
    #include <string.h>
    
    int main(){
        char a[5][10] ={"关羽","张飞","刘备","赵云","小乔"};
    
        char name[10] = {0}; //用来存放输入的姓名
        for(int i = 0;i<5;i++)
        {
            printf("%s
    ",a[i]);
        }
         
        //输入一个姓名 ,判读 该同学是否在上面的名单中
        printf("输入姓名:");
        scanf("%s",name);
    
        for(int i = 0;i<5;i++)
        {
             if(0 ==strcmp(a[i],name))
                 printf("名单中有该同学
    ");  
        }
        getchar();
        getchar();
        return 0;
    }

       带参数的执行程序(命令)  mkdir ls  cd cp

    第一种
       int main();
    
    第二种
       int  main(int argc,char*argv[]);

    argc argc 参数个数,也是字符串的个数
    argv argv 记录所有字符串的内容

    linux系统下

    /*
     * 带参数的main函数
     * [练习]
     *      在理解下面程序的基础上 实现 打印任意多个参数的可执行程序
     *      实现多个数(参数)和的加法命令
     */
    #include <stdio.h>
    #include <stdlib.h>
    int  main(int argc,char*argv[]){
    
        int sum = 0;
        printf("argc = %d
    ",argc);
        for(int i = 1;i<argc;i++)
        {
            sum = sum + atoi(argv[i]);
            //printf("argv[%d] = %s
    ",i,argv[i]);
        }
        printf("sum = %d
    ",sum);
        return 0;
    }

    ---------------------
    构建大型项目

    程序的编译过程
        预处理--> 编译--> 汇编--> 链接 -->可执行文件
         main.c->main.i--> main.s main.o printf.o a.out

    gcc -E main.c -o main.i  得到预处理后的文件main.i
    gcc -S main.i            得到main.s 文件,汇编源文件
    gcc -c main.s            得到main.o 文件
    gcc main.o               得到a.out 可执行文件

    预处理
    执行预处理语句, 以#开始的语句就是预处理语句

    头文件
    #include 将后面的文件 放到当前的.c 文件中

    #define
                       宏变量
    
             #define  PI  3.14
             s = PI * r * r;
    宏是暂时代替变量,预处理时把变量替换成数值

    宏函数

    #define  DOUBLE(n)   ((n)+(n))        //
    int s = DOUBLE(5)  //5+5
    /*
     * 写一个宏函数 返回 两个参数的最大值
     * 写一个返回一个数的 绝对值的宏函数ABS
     */
    #include <stdio.h>
    #define  DOUBLE(n)   ((n)+(n))
    #define MAX(a,b)     ((a)>(b)?(a):(b))
    #define ABS(n)       ((n)>=0?(n):-(n))
    
    int max(int a,int b)
    {
        /*
        if(a>b)
            return a;
        else
            return b;
       */
        return a>b?a:b;
    }
    
    int main(){
        printf("max = %d
    ",MAX(5*1,2+7));
        printf("|-2| = %d
    ",ABS(-2));
        printf("|-7-2| = %d
    ",ABS(-7-2));
        getchar();
        return 0;
    }

    条件编译
           #if 如果#if 后的常数 非0 编译语句参与编译
           #else      如果#if 后的常数 为0  编译语句参与编译
           #endif     条件编译#if结束
           #define WIN    //条件定义符号  WIN

           #ifdef WIN //如果定义了符号WIN 编译下面的代码
           #ifndef WIN    //如果没有定义了符号WIN  编译下面的代码

    #define WIN 
    #undef WIN
    int max(int a,int b)
    {
    #ifdef  WIN    //#ifndef
        if(a>b)
            return a;
        else
            return b;
    #else
       
        return a>b?a:b;
    #endif
    }
           内置宏定义
           __FILE__      当前.C 文件名
           __LINE__      文件的行号
           __DATE__      文件的编译日期
           __TIME__      文件的编译时间
    #include <stdio.h>
    int main(){
        printf("当前.c文件的文件名=%s
    ",__FILE__);
    
        printf("当前代码的行号 %d
    ",__LINE__);
        printf("当前可执行文件编译日期 %s
    ",__DATE__);
        printf("当前可执行文件编译时间 %s
    ",__TIME__);
    //
    printf("使用的C编译器吗 %d ",__STDC__);
        getchar();
        return 0;
    }

    #include  文件查找方式
        <> 系统目录 /usr/include/
         "" 当前目录+系统目录

    [练习]
    编写add.c 文件 在该文件中 定义一个 int add(int a,int b)
    编写add.h 文件 在该文件中声明 add 函数的原型


    编写 main.c 在main函数中
    #include add.h
    调用add函数实现两个数的和,

    编译测试 gcc main.c add.c

    static 修饰函数时,限定该函数只能在 当前.c文件使用
    static 修饰的函数名 在不同.c 文件中可以重名

    static 修饰全局变量名 该变量限于在当前.c文件访问

    extern 修饰函数名/变量名 具有外部链接属性

       头文件 还可以包含头文件,用头文件卫士 避免(重复引用)

    如:print.h头文件中

    #ifndef __PRINT_H__ //防止头文件交叉引用
    #define __PRINT_H__ //头文件卫士

    add.h投文件中

    #ifndef __ADD_H__
    #define __ADD_H__
       make  makefile
    #目标:依赖的文件(目标顶格写,多个依赖文件用空格隔开)
    #    命令  (前面是一个tab键)
    [练习]
        为add 编写一个makefile 文件  并用make进行编译
    
    add:main.o add.o print.o
        gcc main.o add.o print.o -o add
    
    main.o:main.c add.h print.h
        gcc -c main.c
    
    add.o:add.c add.h
        gcc -c add.c
    
    print.o:print.c print.h
        gcc -c print.c
     
    何所为,不仅仅是一种态度,更是一种艺术!
  • 相关阅读:
    2017.10.16 java中getAttribute和getParameter的区别
    2017.10.15 解析Java中抽象类和接口的区别
    2017.10.14 Java的流程控制语句switch&&随机点名器
    2017.10.13 Java中引用类型变量的创建及使用&循环高级写法
    2017.10.12 Java的计数器的开发
    2017.10.11 ”学生身体体质信息管理系统“的开发
    2017.10.10 java中的继承与多态(重载与重写的区别)
    一次redis悲观锁 实现 微信jssdk token缓存
    HashSet原理 与 linkedHashSet
    jdk并发容器整理(yet)
  • 原文地址:https://www.cnblogs.com/tanzizheng/p/12909570.html
Copyright © 2011-2022 走看看