郝人牛语
  入门最基本的方法就是从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. EntityFrameworkCore操作记录

    Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design -Version 2.0.3 Add-Migration Init U ...

  2. Linux重定向及nohup不输出的方法

    转载自:http://blog.csdn.net/qinglu000/article/details/18963031   先说一下linux重定向: 0.1和2分别表示标准输入.标准输出和标准错误信 ...

  3. jQuery介绍 常用选择器

    jquery现在三个版本, 1.x  2.x  3.x  都在用,越小的版本兼容性越好,ie8以下浏览器也支持,新功能不多.我们通常使用1.x 在html中,css放Head中,js放body尾部 j ...

  4. 使用C#调用PI-SDK进行基于PI的开发

    一.概述 PI-SDK(Plant Information Software Develop Kit)是OSI公司提供的基于面向对象的访问PI数据库的软件开发工具包,它可以对以下数据库进行读写: ²  ...

  5. webGL之three.js入门4--ThreeJS Editor入门篇

    因为工作需要,要看threejs editor的源码,顺便记录过程. github下载的源码目录是这样的 但是editor和其他文件夹内的内容的关联的,我需要将其独立出来并且编辑editor. 进入e ...

  6. 分页sql写法【只用最新的】

      offset m rows   FETCH NEXT n ROWS ONLY m=(pageindex-1)*pagesize n=pagesize sql server 2012以上适用.

  7. win2008 server 多IP配置

    本人服务器环境   win8 + phpstudy   一个服务器多个IP 以前都是用linux,买了几套源码结果都是win8server 服务器+phpstudy. 渐渐也就随大流了.懒的去琢磨 一 ...

  8. [蓝桥杯]ALGO-101.算法训练_图形显示

    问题描述 编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数): * * * * * * * * * * * * * * * 题目描述 代码如下: #include < ...

  9. ALGO-120_蓝桥杯_算法训练_学做菜

    问题描述 涛涛立志要做新好青年,他最近在学做菜.由于技术还很生疏,他只会用鸡蛋,西红柿,鸡丁,辣酱这四种原料来做菜,我们给这四种原料标上字母A,B,C,D. 涛涛现在会做的菜有五种: . 西红柿炒鸡蛋 ...

  10. Ubuntu 14.10 下安装伪分布式hdoop 2.5.0

    折腾了一天,其间配置SSH时候出现了问题,误删了ssh-keygen相关文件,导致配置SSH彻底萎了,又重装了系统.... 采用伪分布式模式,即hadoop将所有进程运行于同一台主机上,但此时Hado ...