0xAA55 发表于 2015-8-12 23:58:31

【新手向】C语言的起源和基本入门

想当年PC都还没有像如今这么流行的操作系统(比如瘟斗士、抠脚大汉的Linux、被谷歌乱改Linux搞出的安卓等)的时候,嘛,那个时候就有C语言了。
详细的请看百度百科(虽然我觉得百度百科好不靠谱啊!)
当年的计算机都是控制台界面输入命令的方式操作的(也就是控制台用户界面),说白了就是一个黑色屏幕,输入一条指令,系统给你运行这条指令,如下图。

C语言就是在这样的环境下慢慢发展起来的。后来美国国家标准协会(ANSI)开始给C语言制定了标准,使其能在所有平台上使用,无论是Windows还是Linux,无论是PC还是手机,无论是玩具车还是小霸王学习机,只要是个东西就能支持C语言。但是由于C语言是成长于当时的命令行界面系统环境下的,所以C语言的标准库提供的函数很多都是和命令行相关的,比如printf就是在控制台界面(俗称DOS窗口)输出一些文字。从设计的考虑上为了便于用户能随时看到它输出的文字,C语言的printf不仅可以把文字输出到屏幕上,还可以在用户的干预下输出到文件。这就是所谓的标准管道了:stdin(默认是键盘输入,可以改成从文件输入或者从别程序地方输入)、stdout(默认是输出到屏幕,也可以改成输出到文件或者别的程序、stderr(和stdout一样。但是它的存在是为了用户把“正常内容”和“错误信息”区分输出)。

C语言的语法很简单,总结下来就这几条:

[*]宏(给任何东西起别名)
[*]表达式
[*]函数


其中的宏是一个非常灵活的东西。#define是定义一个宏。下面的代码足以让你看懂。//把stdio.h这个文件的内容插入到这里
#include<stdio.h>

//把各种东西定义成中文的
#define 定义函数和返回类型(函数名,返回类型) 返回类型 函数名
#define 没有参数 ()
#define 整数 int
#define 程序开始 main
#define 打印 printf
#define 设置函数结果为 return
#define 换行 "\n"

定义函数和返回类型(程序开始,整数)没有参数
{
        打印("卧槽!"换行);
        设置函数结果为 0;
}以上的代码,和下面的代码是等价的://把stdio.h这个文件的内容插入到这里
#include<stdio.h>

int main()
{
        printf("卧槽!\n");
        return 0;
}所以宏只是把其中的“单词”替换了一下而已。

然后就是表达式。所谓表达式就是控制CPU的运行流程的。打个比方:int a;//定义一个整数变量为a
a = 1 + 6 * 7 + 9 / 3;//使得a的值为1+6×7+9÷3的结果(为46)。CPU(或者说编译器)会帮你完成这个计算的。当然这些简单的就没必要拿来编程了。

然后就是函数。C语言的所有的运行的语句都在函数里面。通常情况下,C语言最先执行main函数。
C语言的函数和我们在数学中说的函数不太一样。
定义一个函数,你应该用这样的格式来定义:

[导入导出属性] [返回值类型] [调用约定] 函数名([参数列表])

其中的“导入导出属性”是可选的,通常不必填写。如果你不想让你的函数被别的文件直接使用的话,你就在这里填“static”就行了。
然后是返回值类型,如果不填,C语言默认你返回int(整数类型)
调用约定,通常也不填写(默认是C语言自己的调用约定_cdecl,其它的还可以是_stdcall,_fastcall等)。这通常用于兼容别的程序(比如VB要使用C语言写的函数的话,就需要用_stdcall调用约定了)。

函数名必须填写。这个定义了函数的名字。不填写的话你定义了个卵的函数啊!

参数列表表示你这个函数要用的参数的列表,比如数学中的正弦函数sin,这个就需要一个参数,就像这样:
sin(π * 0.5) = 1
其中的“π * 0.5”就是参数了。

那么如果说要在C语言里定义正弦函数的话,就需要像这样:
float sin(float x);
这样的话,编译器就会认为,“有一个叫sin的函数是存在的”。因此你可以在之后的表达式里面使用它,就像这样:float val = sin(233);但是sin函数到底是怎么计算出数值的呢,如果你的整个程序里都没有实现的话,你的程序就造不出来(卡在“链接”这里了,链接器提示“无法解决的_sin符号引用”,我暂时不想和新手解释编译、链接的过程)。因此最终你需要实现它:_declspec(naked) float sin(float x)
{
    //其实我也不懂正弦函数是怎么个计算法,所以干脆在这里插入机器码调用80x87浮点处理器的指令完成计算。
    _asm//插入汇编指令
    {
      fld dword;//读取参数
      fsin;//计算正弦值
      fwait;//等待计算结果
      ret;//返回指令
    }
}我感觉我好像很无耻地在新手教程里用了内联汇编,大家不要学我啊。这样的代码是没有跨平台可移植性的,能不用就不要用哈。。

有关C语言更多的内容,大家还是自己去尝试吧。另外建议大家用nasm学一下汇编,学了汇编的话,再学C就会很快。

维基百科:https://en.wikipedia.org/wiki/C_(programming_language)
百度百科(不靠谱):http://baike.baidu.com/view/1219.htm
其它英文资料:
http://www.techonthenet.com/c_language/index.php(这个看起来不错)
http://www.physics.drexel.edu/students/courses/Comp_Phys/General/C_basics/(这个看起来很好)
http://www.codeproject.com/KB/cpp/(这个看起来比较专业,但是其中有C++的内容)
http://www.softpanorama.org/Lang/c.shtml(这看起来有点呵呵)

The C Programming Language 英文版书籍下载(推荐):
The C Programming Language 中文版书籍下载(不推荐):

三叶草 发表于 2021-7-20 19:55:12

sin x=x-(x^3/3!)+(x^5/5!)-(x^7/7!)+(x^9/9!)-...
cos x=1-(x^2/2!)+(x^4/4!)-(x^6/6!)+(x^8/8!)-...
tanx=sin x/cos x
x的单位:弧度制,x=度数*(180/pi)

0xAA55 发表于 2021-7-21 23:34:11

三叶草 发表于 2021-7-20 19:55
sin x=x-(x^3/3!)+(x^5/5!)-(x^7/7!)+(x^9/9!)-...
cos x=1-(x^2/2!)+(x^4/4!)-(x^6/6!)+(x^8/8!)-...
tanx ...

你真以为我不知道泰勒展开啊(后仰

是北柠呀 发表于 2021-7-26 11:19:33

好资源
页: [1]
查看完整版本: 【新手向】C语言的起源和基本入门