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语 ...
随机推荐
- 10th 本周工作量及进度统计
本周PSP C(类别) C(内容) S(开始时间) ST(结束时间) I(中断时间) T(实际时间) 文档 11月22日 规格说明书练习 10:23 15:30 132 175 11月23日 知识点 ...
- HDU 1027 打印沙漏
https://pintia.cn/problem-sets/994805260223102976/problems/994805294251491328 本题要求你写个程序把给定的符号打印成沙漏的形 ...
- node websocket学习研究
websocket作为不同于http的数据传输方式,是开发一些实时系统的不二选择. 最近在研究开发websocket方面的小程序.小程序客户端直接对websocket做了封装.自己只要写后端就可以了. ...
- git add -A 和 git add . 的区别
git add -A和 git add . git add -u在功能上看似很相近,但还是存在一点差别 git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文 ...
- poj 3368(RMQ模板)
题目链接:http://poj.org/problem?id=3368 题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数. 求解RMQ问题的算法有:搜索(比较 ...
- iOS 简单获取当前地理坐标
iOS 获取当前地理坐标 iOS获取当前地理坐标,很简单几句代码,但是如果刚开始不懂,做起来也会也会出现一些问题. 1.导入定位需要用到的库:CoreLocation.framwork ...
- spring的jar包以及相关的API文档的下载方式
转自:http://blog.csdn.net/yuexianchang/article/details/53583327 侵删 感谢原创 首先是进入官网:https://spring.io/ 如图所 ...
- 每日一问(如何在List中加入、设置、获取和删除其中的元素?)
作为集合接口的一部分,对List接口所做的操作,最常见的就是增删查改了.这里总结下JAVA 中List接口及实现该接口的类实现这些操作的方法. 一.增加新的元素的方法 在Collection接口中定义 ...
- BZOJ5297 CQOI2018社交网络(矩阵树定理)
板子题. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...
- 【BootStrap】Table的基本使用
一.前言 新年新气象,转眼今年就28了,不知道今年能不能把妹成功呢?哈哈哈!上班第一天,部门Web技术主管给每个同事都发了红包鼓励大家今年加油,我作为新转入部门员工不能给团队掉链子,要加 ...