郝人牛语
  入门最基本的方法就是从C语言入手。

  当你成为C语言的高手,那么你很容易进入到操作系统的平台里面去;当你进入到操作系统的平台里去实际做程序时,就会懂得进行调试;当你懂得调试的时候,你就会发现能轻而易举地了解整个平台的架构。

  这时候,计算机基本上一切都在你的掌握之中了,没有什么东西能逃得出你的手掌心。

                    ——《编程箴言》 梁肇新

23

  置身于一片很白的那种草原上(全下着大雪),然后有个小亭子,然后里边有一个有一个香炉,然后我就披着个斗笠,就在那亭子(棚子),然后就卡阿卡卡卡敲键盘。感觉到很爽……如何能达到这样的感觉,要多敲。刚开始,很痛苦,一敲就会错。学任何课程,刚开始一敲程序就错,经过一个漫长的体力活,敲起来就会很快了(快乐)。让人看见你(感觉你)都很羡慕。敲那么快……(思路那么快)……

1.简单语句

  C语言的基本结构

  1. # include <stdio.h>
  2.  
  3. int main(void){
        printf("hello world");
        return 0;
    }

  进制表示

  1. //# 整数
    //# 十进制:
    //# 十六进制:0x 0X    // 零x
    //# 八进制:0    // 零
    int x = 314
    int x = 0603
    int x = 0x603
  2.  
  3. //# 浮点数
    //# float:
    //# double:
    float x = 3.14F;  // 不加F,默认按double处理
    float x = 3.14e3;
  4.  
  5. //# 字符:单引号
    //# 字符串:双引号

  输出函数printf

  1. int i = 10;    // 把i的空间存储数字10的二进制代码
    printf("%d\n", i);    // 以十进制格式,输出i存储的数据
    /* 输出控制符
     * %d    
     * %ld    
     * %c  
     * %s  
     * %f    
     * %lf   
     * %o    小写‘呕’
     * %O    大写‘呕’
     * %x    十六进制输出
     * %X    字母大写~
     * %#x    带前缀~
     */
    int i = 314;
    printf("number = %d\n", i);
  2.  
  3. printf("%x \t%%x\n", i);
    printf("%X \t%%X\n", i);
    printf("%#x \t%%#x\n", i);
  4.  
  5. /* 输出内容如下
     * [view@file 03]$ ./a.out
     * number = 314
     * 13a     %x
     * 13A     %X
     * 0x13a     %#x
     */

  输入函数scanf

  1. //# 格式控制符与上边一致
    int i;
  2.  
  3. printf("Please input a number: ", &i);
    scanf("%d", &i);
    printf("number is %d\n", i);

  三目运算符

  根据表达式(expression)的值,使整个表达式计算为第二个或第三个操作数。

  1. /* a ? b : c
     * b,c必须满足以下三个之一:
     *     1.数字类型
     *     2.兼容的结构体、联合体
     *     3.指向相同类型的指针
     */

  逗号表达式

  用途:前面的表达式产生后边表达式的值,表达式的结果是最后一个表达式的值。

  1. = (x++, y = x * x, z = x + y, z * z - x * y);

2.流程控制

2.1.选择结构

  if语句

  1. // if简单用法
    if (== 10)
      puts ("x is 10");
      
    // if...else...
    if (== 10)
      puts ("x is 10");
    else
      puts ("x is not 10");
      
    // if...else if...else
    if (== 1)
      puts ("x is 1");
    else if (== 2)
      puts ("x is 2");
    else
      puts ("x is something else");

  switch语句

  1. // 检查test-expression表达式(x)
    switch (x)
      {
        case 0:
          puts ("x is 0");
          break;
        case 1:
          puts ("x is 1");
          break;
        default:
          puts ("x is something else");
          break;
      }

2.2.循环语句

  while语句

  1. int counter = 0;
    while (counter < 10)
      printf ("%d ", counter++);

  do语句

  1. int x = 0;
    do
      printf ("%d ", x++);
    while (< 10);

  for语句

  1. int x;
    for (= 0; x < 10; x++)
      printf ("%d ", x);

3.数组

  声明数组

  声明数组时,需要指定其数据类型、数组名称、成员个数。(数组长度是个固定值)

  1. int first_array[14];

  初始化数组

  1. // 声明时初始化
    int first_array[14] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };
    // 初始化起始3个元素,其他元素为默认值0
    int first_array[14] = { 1, 2, 3, 4 };
    // 使用赋值运算符赋值
    int first_array[10] = { [4] = 5, [5] = 9 };    // 等于下边效果
    int second_array[10] = { [0 ... 3] = 0, [4] = 5, [5] = 9, [6 ... 9] = 0 };
    // 不直接指定大小,初始化所有成员。数组大小由成员数量决定
    int first_array[] { 1, 2, 3, 4, 5, 6};

  数组的存储是连续的……

  1. int arraylist[4] = {1, 2, 3, 4}, i;
    for(i=0; i<4; i++)
            printf("arrayList[%d]: 0x%x\n", i+1, (unsigned int)&(arraylist[i]));
    printf("arrayList: 0x%x\n", (unsigned int)arraylist);

上边程序运行后的结果

  1. [view@payqa1 000 C pro]./a.out
    arrayList[1]: 0xcaefeb80
    arrayList[2]: 0xcaefeb84
    arrayList[3]: 0xcaefeb88
    arrayList[4]: 0xcaefeb8c
    arrayList: 0xcaefeb80

  初始化定义一个二维数组

  1. /* 二维数组array[i][j],看作为一个i行j列的矩阵。
     */
    int two_dimensions[2][5] = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10} };

  例子:定义两个数组,计算数组的长度

  1. // 定义数组、计算长度
    int first_array[3][5] = {    // 二维数组的长度是……
            { 1, 2, 3, 4, 5 },
            { 0 },
            { 0, 0, 0, 0, 0 }
    };
    printf("first_array %d\n", sizeof(first_array)/sizeof(first_array[0]));
  2.  
  3. int second_array[5] = { 1, 2, 3, 4, 5 };
    printf("second_array %d\n", sizeof(second_array)/sizeof(second_array[0]));
    /* 数组长度的计算方法
     * sizeof()表示获取到变量的字节值……
     */
    // 执行后的结果
    first_array 3
    second_array 5

4.函数

  函数声明时,指定函数名、参数列表、函数返回值。

  1. /* 函数名:length
     * 参数列表:只有一个
     * 返回值:int
     */
    int length(int x);

  定义函数

  1. int length(int x) {
            int i, y;
            i = ( y = x*3 + 4, y + 6 );
  2.  
  3.         return i;
    }

【指针】

  指针用来保存常量或变量的内存地址。任何数据类型,包括基本类型和自定义类型,都可以创建一个指针,该指针保存该类型实例的内存地址。

  1. # include <stdio.h>
  2.  
  3. void f(int *i) {    // 被调函数通过指针修改主调函数的值
            *= 330;
    }
  4.  
  5. int main(void) {
            int i = 9;
  6.  
  7.         f(&i);
            printf("i = %d\n", i);
  8.  
  9.         return 0;
    }

【数组长度】

  1. # include <stdio.h>
    int countLength(int *p, int lang) {
            int len = 0;
            len = (int)lang/sizeof(p[0]);    // 数组的总大小 / 元素大小
  2.  
  3.         return len;
    }
  4.  
  5. int main(void) {
            //int arrayList[5] = { 1, 2, 3, 4, 5 };
            int arrayList[2] = { 1, 2 };                   // 函数外计算数组总长
            printf("in function, length is %d\n.", countLength(arrayList, sizeof(arrayList)));
  6.  
  7.         return 0;
    }

【数组排序】

  1. # include <stdio.h>
     
    // declear functions.
    void sort(int *,int,int);
    void display(int *,int,int);
    int mk(int *);
     
    // define functions.
    void sort(int * p,int len,int k)
    {
        int t,i,j;
        for(i=0;i<len;i++)
            for(j=i+1;j<len;j++)
                if (== 0)
                    if (*(p+i) > *(p+j))
                    {
                        t = *(p+i);
                        *(p+i) = *(p+j);
                        *(p+j) = t;
                    }
                else if (== 1)
                    if (*(p+i) < *(p+j))
                    {
                        t = *(p+i);
                        *(p+i) = *(p+j);
                        *(p+j) = t;
                    }
                else
                printf("The value of \"k\" is error when function \"sort()\" is running.");
                return;
    }
     
    void display(int * p,int len,int k)
    {
        if (== 0)
            printf("从小到大排序\n");
        else if (== 1)
            printf("从大到小排序\n");
        else if (== 2)
            printf("没有排过顺序的数组\n");
        int i;
        for (i=0;i<len;i++)
        {
            printf("array[%d] = %d\t",i,*(p+i));
            if (== (len-1))
            printf("\n");
        }
        return;
    }
     
    int mk(int * p)
    {
        int len,i;
        printf("输入需要产生的数组元素的个数:");
        scanf("%d",&len);
        for (i=0;i<len;i++)
        {
            printf("请输入第%d个元素的数值:",i+1);
            scanf("%d",&( *(p+i) ));
        }
        ;
        return len;
    }
     
    int main(void)
    {
        //int a[10] = {33,234,227,36,1,22,13,8,9,7},i,k=2;
        int * a;
        int lang,= 2;
        lang = mk(a);
        display(a,lang,k);
     
        k = 0;
        sort(a,lang,k);
        display(a,lang,k);
     
        k = 1;
        sort(a,lang,k);
        display(a,lang,k);
        return 0;
    }

5.结构体

  定义结构体,使用关键字 struct 跟上成员声明,放在一对大括号内、以分号结尾。

  1. struct memberMem {
        char hostname[50];
        char ipAddress[50];
        char position[30];
        float total, used;
        float cache, buffer;
        float swapIn, swapOut;
    };    // 末尾有个分号

  声明结构体变量

  1. struct memberMem back, app47, app160, task;

  结构体变量赋值

  1. back.total = 8.0F;
    back.used = 1.23F;
    printf("memory total is %f, used is %f.\n", back.total, back.used);

C program basic的更多相关文章

  1. tesseract api C++使用例子

    转自:https://code.google.com/p/tesseract-ocr/wiki/APIExample APIExample API examples Updated Aug 12, 2 ...

  2. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十二)之Error Handling with Exceptions

    The ideal time to catch an error is at compile time, before you even try to run the program. However ...

  3. Flink Program Guide (1) -- 基本API概念(Basic API Concepts -- For Java)

    false false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-n ...

  4. Flink Program Guide (9) -- StateBackend : Fault Tolerance(Basic API Concepts -- For Java)

    State Backends 本文翻译自文档Streaming Guide / Fault Tolerance / StateBackend ----------------------------- ...

  5. Basic Tutorials of Redis(2) - String

    This post is mainly about how to use the commands to handle the Strings of Redis.And I will show you ...

  6. penpyxl basic function demo code

    Openpyxl basic function demo code demo code: #!/usr/bin/env python # -*- coding: utf-8 -*- "&qu ...

  7. Visual Basic 2012 借助DataGridView控件将SQL server2012 数据导入到Excel 2010

    摘  要: SQL Server 2012 数据和Excel 2010之间的连接和数据的传输,本篇文章主要针对的是SQL Server 2012 数据导入到Excel 2010文件中.Excel软件对 ...

  8. 1.3 PROGRAM DEVELOPMENT ENVIRONMENT

    1.3 PROGRAM DEVELOPMENT ENVIRONMENT 1.4 WIN32 EXECUTEABLE FILE FORMAT We should also know that compl ...

  9. 1.Basic Techniques and Knowledge

    1.1 BASIC WINDOWS PROGRAMMING IN C/C++ 1.Hello World Version 1:Starting Your Browser Let's get down ...

随机推荐

  1. ML平台_PAI参考

    阿里云机器学习PAI(Platform of Artificial Intelligence)是一款一站式的机器学习平台,包含数据预处理.特征工程.常规机器学习算法.深度学习框架.模型的评估以及预测这 ...

  2. 修改machine.config遇到System.Net.ServicePointManager 的类型初始值设定项引发异常

    <system.net>节点应该在</configuration>上面添加,即config页尾. 而不是在<configuration> 后面添加. 在</s ...

  3. 黄聪:VPS服务器轻松备份工具配置

  4. SpringCloud之服务注册与发现Eureka(一)

    Eureka是Spring Cloud Netflix微服务套件中的一部分,可以与Springboot构建的微服务很容易的整合起来.Eureka包含了服务器端和客户端组件.服务器端,也被称作是服务注册 ...

  5. vc++获取网页源码之使用类型库(TypeLib)生成包装类

    1.在MFC项目名称上 右击->添加->选择Visual C++下的MFC->TypeLib中的MFC类->添加 可以从注册表表中共或是文件中根据相应的接口生成对应的包装类 效 ...

  6. Consul实践指导-DNS接口

    DNS是consul提供的主要查询接口之一.DNS接口允许应用程序在没有与consul高度集成的情况下使用服务发现. 例如:替代consul的HTTP API请求,主机能够通过名字查找直接使用DNS服 ...

  7. [UE4]蓝图调试

    1.蓝图下断点:选择蓝图节点按F9下断点:再按一下F9就会去掉断点. 2.游戏运行到断点会自动这暂停,鼠标移到某个变量上面,会显示该变量的值. 3.按F10执行下一步. 4.蓝图调试没有跳出函数的功能 ...

  8. Android点赞音效播放

    /** * 音效播放 */ private SoundPool mPool; /** * 音效id */ private int voiceID; voiceID = initSoundPool(); ...

  9. CTF PHP文件包含--session

    PHP文件包含 Session 首先了解一下PHP文件包含漏洞----包含session 利用条件:session文件路径已知,且其中内容部分可控. 姿势: php的session文件的保存路径可以在 ...

  10. Java基础知识_毕向东_Java基础视频教程笔记(11-12 多线程)

    11天-01-多线程进程:是一个正在执行中的程序.每个进程执行都有一个执行顺序.该顺序是一个执行路径或者叫一个控制单元.线程:是进程中的一个独立的控制单元,线程在控制着进程的执行.一个进程至少有一个线 ...