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

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

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

                    ——《编程箴言》 梁肇新

23

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

1.简单语句

  C语言的基本结构

# include <stdio.h>

int main(void){
    printf("hello world");
    return 0;
}

  进制表示

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

  输出函数printf

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); printf("%x \t%%x\n", i);
printf("%X \t%%X\n", i);
printf("%#x \t%%#x\n", i); /* 输出内容如下
 * [view@file 03]$ ./a.out
 * number = 314
 * 13a     %x
 * 13A     %X
 * 0x13a     %#x
 */

  输入函数scanf

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

  三目运算符

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

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

  逗号表达式

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

i = (x++, y = x * x, z = x + y, z * z - x * y);

2.流程控制

2.1.选择结构

  if语句

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

  switch语句

// 检查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语句

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

  do语句

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

  for语句

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

3.数组

  声明数组

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

int first_array[14];

  初始化数组

// 声明时初始化
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};

  数组的存储是连续的……

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);

上边程序运行后的结果

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

  初始化定义一个二维数组

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

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

// 定义数组、计算长度
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])); 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.函数

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

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

  定义函数

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

【指针】

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

# include <stdio.h>

void f(int *i) {    // 被调函数通过指针修改主调函数的值
        *i = 330;
} int main(void) {
        int i = 9;         f(&i);
        printf("i = %d\n", i);         return 0;
}

【数组长度】

# include <stdio.h>
int countLength(int *p, int lang) {
        int len = 0;
        len = (int)lang/sizeof(p[0]);    // 数组的总大小 / 元素大小         return len;
} 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)));         return 0;
}

【数组排序】

# 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 (k == 0)
                if (*(p+i) > *(p+j))
                {
                    t = *(p+i);
                    *(p+i) = *(p+j);
                    *(p+j) = t;
                }
            else if (k == 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 (k == 0)
        printf("从小到大排序\n");
    else if (k == 1)
        printf("从大到小排序\n");
    else if (k == 2)
        printf("没有排过顺序的数组\n");
    int i;
    for (i=0;i<len;i++)
    {
        printf("array[%d] = %d\t",i,*(p+i));
        if (i == (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,k = 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 跟上成员声明,放在一对大括号内、以分号结尾。

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

  声明结构体变量

struct memberMem back, app47, app160, task;

  结构体变量赋值

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. Java利用hanlp完成语句相似度分析的案例详解

    分享一篇hanlp分词工具使用的小案例,即利用hanlp分词工具分析两个中文语句的相似度的案例.供大家一起学习参考! 在做考试系统需求时,后台题库系统提供录入题目的功能.在录入题目的时候,由于题目来源 ...

  2. centos下cmake编译安装mysql5.7.24

    一.centos6.5推荐最小安装.自定义添加如图两个包 二.安装cmake3.0(mysql5.7要求cmake2.9以上.cmake3.1要求gcc g++4.8以上.所以选自3.0) 1.分别执 ...

  3. PICT测试工具的安装及使用

    PICT工具就是在微软公司出品一款成对组合的命令行生成工具,现在已经对外提供,可以在互联网上下载到 .PICT 可以有效地按照两两测试的原理,进行测试用例设计.在使用PICT时,需要输入与测试用例相关 ...

  4. Flutter at Google I/O 2018

    Flutter at Google I/O 2018   如何观看 https://flutterchina.club/ 极速构建漂亮的原生应用 Flutter是谷歌的移动UI框架,可以快速在iOS和 ...

  5. HBase与Zookeeper数据结构查询

    一.前言 最近一年了吧,总是忙于特定项目的业务分析和顶层设计,很少花时间和精力放到具体的技术细节,感觉除了架构理念和分析能力的提升,在具体技术层次却并没有多大的进步.因为一些原因,总被人问及一些技术细 ...

  6. 【Graphite】Graphite常用函数使用

    使用Graphite进行sort排名 限制返回条数 aliasByNode(limit(sortByMaxima(summarize(EPIC.bm.00*.memory.memory.buffere ...

  7. Android开发之选项菜单(optinosMenu)

    android一共有三种形式的菜单:                  1.选项菜单(optinosMenu)                  2.上下文菜单(ContextMenu)       ...

  8. [转][Centos]一、了解关机

    来自:https://blog.csdn.net/ronmy/article/details/79117390 Linux centos关机与重启命令详解与实战 Linux centos重启命令: 1 ...

  9. @postconstruct初始化的操作(转载)

    原文地址:https://www.cnblogs.com/qingruihappy/p/7861623.html 从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注 ...

  10. Maven项目下update maven后Eclipse报错

    Maven项目下update maven后Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderL     严重: Error config ...