郝人牛语
  入门最基本的方法就是从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. Hadoop JAVA HDFS客户端操作

    JAVA HDFS客户端操作 通过API操作HDFS org.apache.logging.log4jlog4j-core2.8.2org.apache.hadoophadoop-common${ha ...

  2. 菜鸟如何使用hanlp做分词的过程记录

    菜鸟如何使用hanlp做分词的过程记录 最近在学习hanlp的内容,准备在节后看看有没有时间整理一波hanlp分享下,应该还是会像之前分享DKHadoop一样的方式吧.把整个学习的过程中截图在配文字的 ...

  3. Spring Boot基础知识

    Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ...

  4. Java封装案例

    ---恢复内容开始--- 在类的getter/setter方法中在getter方法中要先实列话 在构造方法中无参构造(必须要构造)好处很多!!! 描述学生信息及相关联的专业信息 把Subject和St ...

  5. Solr4.2 新特性 DocValues [转]

    原文地址http://wiki.apache.org/solr/DocValues DocValues从Lucene4.2和Solr4.2开始加入,通过建立字段的正排索引,提升sorting, fac ...

  6. Ubuntu 14.10 下编译Hadoop2.4.0

    在http://www.aboutyun.com/thread-8130-1-1.html 这里看到到,安装过程遇到了上面说的问题,所以将此文转载过来,以备不时之需,感谢此作者. 问题导读: 1.如果 ...

  7. Notepad++ 中使用tail -f功能

    想要notepad++中有tail -f的功能吗? 可以如下配置 Settings > Preferences > MISC 在 File Status Auto-Detection下 “ ...

  8. PAT 乙级1030 完美数列(25) C++版

    1030. 完美数列(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正整数数列,和正整数p,设这 ...

  9. locust -基础框架

    # coding=utf-8from locust import HttpLocust, TaskSet, taskimport requests # 定义用户行为class UserBehavior ...

  10. 【ZZ】号称“开发者神器”的GitHub,到底该怎么用?

    号称“开发者神器”的GitHub,到底该怎么用? https://mp.weixin.qq.com/s/zpKOBMKWckY05Mv_B28RgQ A developer’s introductio ...