C语言入门教程-(2)基本程序结构
1.简单的C语言程序结构
要建造房屋,首先需要打地基、搬砖搭建框架(这大概就是为什么叫搬砖的原因)。学习计算机语言的时候也一样,应该从基本的结构开始学起。下面,我们看一段简单的源代码,这段代码希望大家动手对着敲一遍,自己动手完完全全敲一次。我想对于刚学编程的人,即使对着敲,也是极其容易出现错误的。当看到编译器很多的错误时候,也别慌。其中最大的两个原因,一个是使用了中文字符,比如中文的分号以及括号,二是拼写单词错误。我们在编程的时候,需要全部使用英文符号。比如,程序中的分号以及括号。
//myfirst.c -- 显示消息
#include <stdio.h>
int main()
{
printf("Hello\n");
printf("程序员基础知识!");
return 0;
}
运行编译程序(快捷键“ctrl+F5”)后得到的输出:
Hello
程序员基础知识!
下面我们将这段代码分析一下,可以从以下几个部分来看:
1)注释,代码的注释,是对代码的说明。编译器会忽略注释,毕竟机器也不想看你的注释QAQ。
2)预处理器编译指令#include,以及包含的头文件。
3)函数头:int main()。C语言程序由函数构成,一个程序可以有多个函数,但是有且只有一个主函数,也就是main()函数。
4)函数体,花括号“{}”括起来的部分,包括各种指令组成的语句在内。
5)结束main()函数的return语句。
2.注释
C语言有两种注释方式:
1)“//”
这个其实是C++风格注释,通常用于注释单行文本或代码,它们放在一起组成多行注释。
以 // 开始,到行尾结束。单行注释,这种注释可以单独占一行,也可以和代码位于同一行。2)“/* */”
这个是C风格注释,通常用于注释大块文本或小片代码,也能用它们注释单行。
以 /* 开始,到 */ 结束。因此可以跨越多行。
C 风格注释可出现在 C++ 风格注释内:
// printf("Hello World!"); /* 输出Hello World! */
C++ 风格注释可出现在 C 风格注释内:
/*
printf("Hello\n"); //输出Hello,并且换行
printf("程序员基础知识!"); //输出程序员基础知识!
*/
两者可以同时存在,并不冲突:
printf("Hello World!");
/* 与 C 风格注释不冲突 */
// 与 C++ 风格注释不冲突
注释主要是为了更好的读懂代码,使人能明确的看出代码的功能。写注释是一个编程的好习惯,而且在以后的团队开发或者代码维护有相当重要的作用。看别人没用注释甚至不规范的代码,肯定让你头疼。在实际工作中经常遇到自己代码写完,过一段时间测试出了bug或者改了需求之类,你还要再看自己代码,有注释就不会忘记了。
3.预处理器和头文件
1)预处理器
预处理器在程序编译之前对源文件进行处理,采用以“#”为行首作为指示,include是预处理指令的一种。
预处理指令包括:include
、define 、undef 、if 、 ifdef 、 ifndef 、 else 、 elif 、 endif 、 line 、
error 、 pragma等。我们现在先了解#include,又叫文件包含预处理指令,每个指令占据一行。2)头文件
头文件,包含在文件最开始的地方。头文件使用.h为扩展名,头文件提供通用文件操作支持以及提供输入/输出的函数。在这段代码中,主要是提供printf()函数。如果没有这个头文件,我们使用printf()函数将会报错。
4.main()函数
通常,C语言程序中必须包含一个名为main()的函数。main()函数由系统调用执行,main()函数是程序执行的入口函数。运行C语言代码时,从main()函数开始。main()函数由两部分组成,函数头int
main()部分和函数体用花括号“{}”括起来的部分。main()函数的定义以函数头int
main()开始,函数体的作用是指出计算机做什么指令操作。每条完整的指令称为语句,语句以分号“;”结束,所以在C语言程序中不能省略分号。main()中的最后是返回语句return
0,用来结束该函数,0代表程序正常退出。
int
main()的其它写法,可以省略int就写成main()。这是因为在C语言中,省略返回类型则默认为int(C++中逐步淘汰了这种用法)。所以我们就别偷懒了,还是别用这种写法了。还有写成int
main(void)和void main()的,我都不推荐,大家还是用int
main()最好了。下面是我手画(字丑请自行忽略)的main()结构图:
5.printf()函数输出字符串
printf()函数的作用是格式化输出。我们来看这段代码:printf("Hello\n");
双引号括起来的部分是要打印的消息。里面的一系列字符(Hello)叫做字符串。“\n”是指示换行的,被看成一个字符,所以叫做换行符,作用是取新的一行开始。下面的printf("程序员基础知识!");
语句,就会另取一行打印输出了。
6.空白
空格、制表符、回车都可以称为空白。空白可以分隔语句的各个部分,让编译器能识别语句中的某些元素在哪里开始和结束。比如语句:int main(),如果你将其写成intmain(),那么程序将报错。有些字符之间不需要用空白分开,比如括号和逗号。
只包含空格的行,编译器会忽略它。为了增强代码可读性,可以根据需要适当增加一些空格。
7.总结
总结一下,本节内容主要介绍了C语言程序的一般格式,具体包括注释、预处理器和头文件、main()函数、printf()函数输出字符串。
8.练习
2-1 假设main()函数包含代码:printf("程序员基础知识!"); 编译器报错“printf”: 找不到标识符,是什么原因?
2-2 return 0;表示成功结束,那么return -1;表示什么?
2-3 编写一个C语言程序,第一行显示“hero:盖伦”,第二行显示“attack:300”,并对代码做一些简单的注释,比如在旁边注释,英雄:盖伦。
可以在评论中,写下你们的练习答案。
之后的文章会给大家带来更精彩的内容
欢迎关注我的知乎专栏:程序员基础知识获取练习答案以及更多实战项目
欢迎关注我的公众号:程序员基础知识
交(gao)流(ji)群:493584686
C语言入门教程-(2)基本程序结构的更多相关文章
- 【C语言入门教程】7.3 结构体指针的定义和引用
C 语言中指针的操作非常灵活,它也能指向结构体变量对结构体变量进行操作.在学习结构指针之前,需要再次加深对指针的认识.声明指针变量时所使用的数据类型修饰符实际上的作用是定义指针访问内存的范围,如果指针 ...
- 【C语言入门教程】7.1 结构体类型变量的定义和引用
前面学习了变量和数组这些简单的数据结构,它们的特点是必须使用规定的数据类型.例如数组被定义为整型后,它的所有存储单元都是由整型构成.现实生活中某一类事物的共同属性可能是由不同的数据类型组成的集合,或者 ...
- 【C语言入门教程】7.2 结构体数组的定义和引用
7.2 结构体数组的定义和引用 当需要使用大量的结构体变量时,可使用结构体定义数组,该数组包含与结构体相同的数据结构所组成的连续存储空间.如下例所示: struct student stu_a[50] ...
- 《JavaScript语言入门教程》记录整理:入门和数据类型
目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...
- 《JavaScript语言入门教程》记录整理:运算符、语法和标准库
目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...
- 《Ruby语言入门教程v1.0》学习笔记-01
<Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...
- C语言入门教程-(5)格式化输入输出
1.输入和输出 在程序的使用中,我们经常可以看的这么一个场景:用户需要输入数据,经过程序运算,得到结果后输出.在C语言中,输入数据和输出数据都是由库函数完成的,通过语句来输入/输出. 2.格式化输出— ...
- Go语言入门教程(十)之函数
Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...
- c语言该怎么入门?C语言入门教程(非常详细)
C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...
随机推荐
- Hadoop初探
本文转自:https://blog.csdn.net/column/details/14334.html 前言 Hadoop是什么? 用百科上的话说:“Hadoop是一个由Apache基金会所开发的分 ...
- sqlserver 对比数据库表是否完全一致的简单方法
1. 使用数据库的工具进行处理 tablediff.exe 工具目录 C:\Program Files\Microsoft SQL Server\\COM 工具使用说明 tablediff.exe - ...
- pixi.js 总结
我的博客简单简洁 可能表达不清. 如有想法, 敬请留言.谢谢! 群:881784250 https://github.com/ccaleb/endless-runner/tree/master/jav ...
- 我项目中使用userData的实例 UserData.js
关于userData的介绍,请参见http://hi.baidu.com/kaisep/blog/item/1da9a3312d2da5a15edf0e87.htmlhttp://hi.baidu.c ...
- UVAlive3523_Knights of the Round Table
圆桌骑士.有的骑士之间是相互憎恨的,不能连坐,需要安排奇数个骑士围着桌子坐着,大于3个,求哪些骑士不可能安排到座位. 根据给定的关系,如果两个骑士之间没有憎恨关系,那么连边.最终就是求有多少个点无法位 ...
- 013 BIO、NIO、AIO的区别
作者:nnngu GitHub:https://github.com/nnngu 博客园:http://www.cnblogs.com/nnngu 简书:https://www.jianshu.com ...
- 【比赛】NOIP2017 奶酪
开始看到题以为是计算几何,后面发现不是,然后秒掉了. 可能写SPFA写多了,别人都是并查集做的,我用的是SPFA. 不过无所谓,我们把题目中的下底面和上表面看成两个点,那么就是求这两个点的连通性,如果 ...
- 基本数据结构 —— 二叉搜索树(C++实现)
目录 什么是二叉搜索树 二叉搜索树如何储存数值 二叉搜索树的操作 插入一个数值 查询是否包含某个数值 删除某个数值 测试代码 参考资料 什么是二叉搜索树 二叉搜索树(英语:Binary Search ...
- BZOJ3550 [ONTAK2010]Vacation 【单纯形】
题目链接 BZOJ3550 题解 单纯形裸题 题意不清,每个位置最多选一次 #include<algorithm> #include<iostream> #include< ...
- 洛谷 P3698 [CQOI2017]小Q的棋盘 解题报告
P3698 [CQOI2017]小Q的棋盘 题目描述 小 Q 正在设计一种棋类游戏. 在小 Q 设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上 ...