找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 11716|回复: 3

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

[复制链接]
发表于 2015-8-12 23:58:31 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
想当年PC都还没有像如今这么流行的操作系统(比如瘟斗士、抠脚大汉的Linux、被谷歌乱改Linux搞出的安卓等)的时候,嘛,那个时候就有C语言了。
详细的请看百度百科(虽然我觉得百度百科好不靠谱啊!)
当年的计算机都是控制台界面输入命令的方式操作的(也就是控制台用户界面),说白了就是一个黑色屏幕,输入一条指令,系统给你运行这条指令,如下图。
MS-DOS-2015-08-12-19-51-51.png
C语言就是在这样的环境下慢慢发展起来的。后来美国国家标准协会(ANSI)开始给C语言制定了标准,使其能在所有平台上使用,无论是Windows还是Linux,无论是PC还是手机,无论是玩具车还是小霸王学习机,只要是个东西就能支持C语言。但是由于C语言是成长于当时的命令行界面系统环境下的,所以C语言的标准库提供的函数很多都是和命令行相关的,比如printf就是在控制台界面(俗称DOS窗口)输出一些文字。从设计的考虑上为了便于用户能随时看到它输出的文字,C语言的printf不仅可以把文字输出到屏幕上,还可以在用户的干预下输出到文件。这就是所谓的标准管道了:stdin(默认是键盘输入,可以改成从文件输入或者从别程序地方输入)、stdout(默认是输出到屏幕,也可以改成输出到文件或者别的程序、stderr(和stdout一样。但是它的存在是为了用户把“正常内容”和“错误信息”区分输出)。

C语言的语法很简单,总结下来就这几条:
  • (给任何东西起别名)
  • 表达式
  • 函数


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

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

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

  3. int main()
  4. {
  5.         printf("卧槽!\n");
  6.         return 0;
  7. }
复制代码
所以宏只是把其中的“单词”替换了一下而已。

然后就是表达式。所谓表达式就是控制CPU的运行流程的。打个比方:
  1. int a;//定义一个整数变量为a
  2. 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的函数是存在的”。因此你可以在之后的表达式里面使用它,就像这样:
  1. float val = sin(233);
复制代码
但是sin函数到底是怎么计算出数值的呢,如果你的整个程序里都没有实现的话,你的程序就造不出来(卡在“链接”这里了,链接器提示“无法解决的_sin符号引用”,我暂时不想和新手解释编译、链接的过程)。因此最终你需要实现它:
  1. _declspec(naked) float sin(float x)
  2. {
  3.     //其实我也不懂正弦函数是怎么个计算法,所以干脆在这里插入机器码调用80x87浮点处理器的指令完成计算。
  4.     _asm//插入汇编指令
  5.     {
  6.         fld dword[esp+4];//读取参数
  7.         fsin;//计算正弦值
  8.         fwait;//等待计算结果
  9.         ret;//返回指令
  10.     }
  11. }
复制代码
我感觉我好像很无耻地在新手教程里用了内联汇编,大家不要学我啊。这样的代码是没有跨平台可移植性的,能不用就不要用哈。。

有关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/st ... s/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.pdf (70.37 KB, 下载次数: 11)
The C Programming Language 中文版书籍下载(不推荐): The C programming language(中文版).7z (867.23 KB, 下载次数: 17)

本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 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)
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 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 | 显示全部楼层
好资源
回复

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-21 17:38 , Processed in 0.037580 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表