第二章C语言概述


title: 第二章 C语言概述
author: HardyDragon
tags: C Notes


第二章 C语言概述

2.1简单的C程序示例

2.2 示例解释

2.2.1 第1遍:快速概要

2.2.2 第2遍:程序细节

2.3 简单的程序结构

2.4 提高程序可读性的技巧

2.5 进一步使用C语言

2.5.1 程序说明

2.5.2 多条声明

2.5.3 乘法

2.5.4 打印多个值

2.6 多个函数

2.7 调试程序

2.7.1 语法错误

2.7.2 语义错误

2.7.3 程序状态

2.8 关键字和保留标识符

2.9 关键概念

2.10 本章小结

2.11 复习题

2.12 编程练习


2.1简单的C程序示例

# include <stdio.h>
int main(void){   /* a simple code */
	int num; /* define a var call num */
	num = 1; /* get a value to num */
	
	printf("I am a simple ");
	printf("computer.\n");
	printf("My favorite number is %d because it is first.\n",num);
	
	return 0;
} 

result

I am a simple computer.
My favorite number is 1 because it is first.

2.2 示例解释

  • 第1遍:快速概要
# include <stdio.h> 包含另一个文件

改行告诉编译器把stdio.h中的内容包含在当前程序中。stdio.h 是C编译器软件包的标准部分,它提供键盘输入和屏幕输出的支持。

int main(void) 函数名

C程序包含一个或多个函数,圆括号表明main()是一个函数名,int表明main()函数返回一个整数,void表明main()不带任何参数。其中int 和void 是ANSI C定义的main() 的一部分(如果使用其他的编译器,可能要忽略void)

/*一个简单的C程序 这里是注释*/
{	函数体开始
} 	函数体结束
num = 1; // 赋值表达式
printf(" I am a simple "); //调用一个printf标准C函数
printf("computer.\n"); // 其中 \n 是换行符
printf("My favorite number is %d because it is first.\n",num); 
// 这里将num的值内嵌在双引号括起来的内容中一并打印, %d 告诉计算机以何种形式输出num 的值,打印在何处。
return 0;
// C 函数可以给调用方法提供或返回一个数
  • 第2遍:程序细节
  1. include <stdio.h> 的作用相当于将 stdio.h 文件中的所有内容都输入该行所在位置。实际上这是一种 “拷贝-粘贴” 的操作。
    include 文件提供了一种方便的途径共享许多程序共有的信息。

    include 这行代码是一条C预处理器指令。通常C编译前会对源码进行预处理。
    所有的C编译软件包都会提供 stdio.h 文件,这是标准的输入输出头文件 standard input output 。通常在C程序顶部的信息集合被 称为头文件(header)。

    大多数情况下,头文件包含了编译器创建最终可执行程序要用到的信息。例如,头文件中可以定义一些常量,或者指明函数名以及如何使用它们。但是,函数的实际代码在一个预编译的库文件中。头文件帮助编译器把编写的程序组合在一起。
    如果不使用printf()函数可以不包含其头文件,但是不推荐这样做。C语言不内置输入输出函数是为了更加灵活的应对不同需求,例如编写汽车燃油系统或者蓝光播放芯片就不需要输入和输出函数。

    include 的 # 符号表示,C预处理器在编译器接手之前处理这条指令。

  2. main() 函数

    main 是一个极其普通的名称,相对于master ,对于C语言来说这是唯一的选择。C 程序一定从 main() 函数开始执行。圆括号()用于识别main() 是一个函数。
    int 是 main() 函数的返回类型。这表明 main() 函数返回的值是整数,返回给操作系统。
    一些老的C代码可能就只有一个 mian() 函数,这是C90才接受了,C99和C11会让它爪巴。
    void main() 这种是所有标准都不认可的写法,至于其出处就不多提了,免得白给,移植代码时坚持按照标准形式就不会出现问题。

  3. 注释

    在程序中被 /**/ 括起来的内容就是程序的注释,C99 新加了一种风格的注释,普遍适用C++和JAVA。就是 // 单行注释。但是有一些编译器可能不支持这一特性,或者需要设置才能使用。

  4. 花括号、函数体和块

    {
    	...
    }
    

    花括号将函数体括起来,不可以省略。

  5. 声明

    int num; // 声明
    

    声明是C语言最重要的特性之一,以上声明完成了两个事情,一个是在函数中有一个名为num的变量。另一个是int表明num是一个整数。编译器用这些信息给num变量分配内存空间来存储。分号是C语言中大部分语句和声明的一部分。
    int是C源语言中的一个关键字,表示一种基本的数据类型,关键字不可以用作其他用途。实例中的 num 是一个标识符,是一个变量、函数、或其它实体的名称。声明 就是将标识符计算机内存中的特定位置联系起来。
    在语言中所有变量必须先声明才能使用,在以前的C语言还要求把所有的变量要声明在块的顶部,其它语句不可以出现在任何声明的前面,例如:

    int main(){
          
          
    	int doors;
    	int dogs;
    	doors = 5;
    	dogs = 3;
    	//其它语句
    }
    

    C99 和C11 遵循C++的惯例,可以将声明放在任何位置,但是在使用前也是要声明变量的。

    int main(){
    	int doors;
    	doors = 5;
        //其它语句
        int dogs;
    	dogs = 3;
    	//其它语句
    }
    

    为了和旧系统更好的兼容,尽量使用第一种声明方式。

    • 数据类型 有整数、字符、浮点数。把变量声明为整型或字符类型,计算机才能正确的存储、读取和解释数据。
    • 命名 给变量命名要使用有意义的变量名或标识符,可以辅助注释进一步说明,这是一种良好的编程习惯,因为注释也是编程的一部分。C99 和C11 允许使用更长的标识符名,但是编译器只识别前63个字符。对于外部标识符只允许使用31个字符。以前的C90只允许6个字符。可以使用小写大写字母、数字、下划线_命名,且名称的第一个字符必须是字母或下划线 _
    • C99之前的标准是将所有声明都置于块的顶部,好处是便于理解程序的用途;C99允许在需要时才声明变量,其好处是不会忘记给变量赋值。但是实际上,许多编译器还不支持C99。
  6. 赋值

num = 1 ;

在声明变量前编译器在计算机内存中为变量num预留了空间,然后执行赋值表达式(C语言是通过赋值运算符而不是赋值语句完成赋值操作,根据C标准,C语言没有赋值语句,本书或其他书提到的赋值语句指的是表达式语句 - C语言基本语句之一)将值存储在之前预留的位置。

  1. printf()函数

  2. return 语句

    C标准要求C 的main()要有return 语句。但是如果程序遗漏了return 语句,程序在运行最后至最外面的右花括号时也会返回0,可以省略但是不推荐。

    2.3 简单的程序结构

程序由一个或多个函数组成,必须有main()函数,函数由函数头和函数体组成。函数头包括函数名、传入参数和返回类型。

2.4 提高程序可读性的技巧

  1. 选择有意义的函数名和写注释,但是避免重复,有些变量名可以直接看出意思就不用注释。
  2. 善用空格,语句分行。

2.5 进一步使用C语言

// fathm_ft.c -- 把2英寻转化为英尺 
# include <stdio.h>
int main(void)
{  
	int feet,fathoms; 
	
	fathoms = 2;
	feet = 6 * fathoms;
	printf("There are %d feet in %d fathoms!\n",feet,fathoms);
	printf("Yes,I said %d feet!\n",6*fathoms);
	
	return 0;
} 

result

There are 12 feet in 2 fathoms!
Yes,I said 12 feet!
  • 程序说明

    程序开始有一条注释,给出了文件名和程序目的,对于浏览程序帮助很大。

  • 多条声明

    可以在一条语句中用逗号分隔来声明多个变量。

  • 乘法

    ‘*’ 表示乘法运算

  • 打印多个值

    printf 待打印的值不一定是变量,只要是可以求出合适类型的值的项即可。

2.6 多个函数

/* two_func.c -- 一个文件中包含两个函数 */
# include <stdio.h>
void butler(void); /* ANSI/ISO C 函数类型*/ 
int main(void){   
	
	printf("I will summon the butler function.\n");
	butler();
	printf("Yes,Bring me some tea and writeable DVDS.\n");
	
	return 0;
} 
void butler(void){	/* 函数定义开始 */
	printf("You rang,sir?\n"); 
}

result:

I will summon the butler function.
You rang,sir?
Yes,Bring me some tea and writeable DVDS.

butler() 函数在程序中出现3次,第一次是函数原型,告知编译器在程序中要使用该函数;第二次是以函数调用的形式出现,最后一次是以函数定义出现,函数定义即函数的源码。
函数原型也称为函数声明,其指明了函数的属性,第一个void表示其函数的返回值类型,butler()函数没有返回值,第二个void表示函数不带参数,void指的是空的,不是无效。
早期的C支持不用描述参数的函数声明,虽然现在的C90、C99、C11也支持这种写法,但是不推荐。

void butler(); 

C的惯例是将main()函数放在开头,所以便将其他要用的函数先声明后续再在main()后面写出其函数定义。
头文件 stdio.h 文件包含了 printf() 函数原型。

2.7 调试程序

  • 语法错误

  • 语义错误

  • 程序状态

    debug 下断点调试 查看对应变量

2.8 关键字和保留标识符

image-20201016191346275

2.9 关键概念

作为程序员,应该在符合C标准的编译器框架中,表达希望程序应该如何完成任务的想法。

2.10 本章小结

C语言由一个或多个函数组成,每个C函数必须包含一个main()函数,C语言中的大部分语句以分号;结尾。声明语句为变量指定变量名,变量名是一种标识符,让计算机知道其存储的类型和所消耗内存大小。

2.11 复习题

  1. C语言的基本模块是什么?

    C语言的基本模块是函数。

  2. 语法错误 : 不符合C语言的语法规范而引起的错误

2.9 关键概念*

作为程序员,应该在符合C标准的编译器框架中,表达希望程序应该如何完成任务的想法。

2.10 本章小结

C语言由一个或多个函数组成,每个C函数必须包含一个main()函数,C语言中的大部分语句以分号;结尾。声明语句为变量指定变量名,变量名是一种标识符,让计算机知道其存储的类型和所消耗内存大小。

2.11 复习题

  1. C语言的基本模块是什么?

    C语言的基本模块是函数。

  2. 语法错误 : 不符合C语言的语法规范而引起的错误

  3. 语义错误 : 逻辑错误,语法正确,但是功能和逻辑表达上错误。

猜你喜欢

转载自blog.csdn.net/qq_44880154/article/details/115104573