admin管理员组

文章数量:1794759

零基础学C语言

零基础学C语言

从零开始学C语言 目录
  • 第一章 前言
    • 1.1 计算机的基础知识
  • 第二章 C语言基础
    • 2.1 标识符
    • 2.2 关键字
    • 2.3 常量
      • 2.3.1 数值常量
      • 2.3.2 字符常量
      • 2.3.3 字符串常量
      • 2.3.4 符号常量
    • 2.4 变量
      • 2.4.1 变量的定义
      • 2.4.2 变量的初始化
    • 2.5 常变量
    • 2.6 标识符
  • 第三章 C语言数据类型,运算符
  • 第四章 C语言顺序结构
    • 4.1C语句概述 (语句描述了一种行为,是向计算机发出的执行某一操作的指令)
      • 4.1.1表达式语句
      • 4.1.2 流程控制语句
      • 4.1.3 空语句
      • 4.1.4 复合语句
      • 4.1.5 函数调用语句
    • 4.2 常用库函数的使用
      • 4.2.1 库函数的使用
      • 4.2.2 输出函数
          • 4.2.2.1 字符输出函数(putchar)
          • 4.2.2.2 格式输出函数(printf)
      • 4.2.3输入函数
          • 4.2.3.1 字符输入函数
          • 4.2.3.2 格式输入函数
    • 4.3 顺序结构程序设计举例
目录)

第一章 前言

C语言的诞生是现代程序语言革命的起点,是程序设计语言发展史中的一个里程碑。——Dennis M Ritchie(C语言之父)

1.1 计算机的基础知识

常用的数制: 数据在内存中的储存 1、内存 内存是由一系列电子线路单元组成,每个电子线路单元有两种稳定状态,分别是二进制的0或1,称之为位,位是组成内存的最小单元。 (1)内存中的数据单元 ①字节(Byte)。一个字节由8个连续二进制组成,每个二进制都有一个编号,其编号顺序按位自右向左为0~7,也可称为第0位、第1位·····第7位、第8位。字节是数据储存的最小单元, ②字(Word)。连续的两个字节称为字。连续的两个字又称为双字。连续的两个双字称为4字。如下图所示: ③字长。中央处理器在单位时间内一次处理的二进制数的位数叫字长。 数据在内存中的存储: 数据在内存中的存储形式称为机器码,机器码所表示的实际值称为真值。

第二章 C语言基础 2.1 标识符

标识符(identifier)是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。标识符通常由字母和数字以及其它字符构成。 标识符的命名规则如下: ❑ 标识符由字母(包括大写字母和小写字母)、数字及下画线组成,且第一个字符必须是字母或者下画线。 ❑ 在C语言中,大写字母和小写字母是有区别的,即作为不同的字母来看待,应引起注意。下面是合法的C语言标识符: year,Day,ATOK,X,_ CWS,HAO ❑而下面的标识符名是不合法的: #123,.COM,$100,1996Y,1_2_3,Win3.2,LOOP, A=2

2.2 关键字

关键字是指在高级语言中,那些已经定义过的标识符,用户不能再将这些字作为变量名、常量名、函数名、数组名等。 C语言共有32个关键字,具体可分为4类,如下:

数据类型关键字(12个)char、double、enum、float、int、long、short、signed、struct、union、unsigned、void。
控制语句关键字(12个breakcase、continue、default、do、else、for、goto、if、return、switch、while
存储类型关键字(4个)auto、extern、register、static
其他关键字(4个)const、sizeof、typedef、volatile
2.3 常量

常量是指在程序运行过程中其值不随程序的运行而改变的量。常量在程序中不需要进行任何说明就可以直接使用,常量本身就隐含了它的类型。常量分为直接常量和符号常量。

2.3.1 数值常量

数值常量由数字构成的常量。 如100、250、1000这种整数在C语言中叫做整型常量–整数型常量; 如1.22、3.142等带有小数点的称为实型常量–实数型常量。

2.3.2 字符常量

字符常量即为用字符构成的常量。 也可由两种表现形式: ❑普通字符:26个英文字母如‘a’‘b’,用单引号括起来后都是普通字符,事实上这些字符常量在计算机中是以ascll码表示的,因此可以把它看成变化的数值,如‘a’在计算机中代表的就是97这个数值。 ❑转义字符:这是C语言自己定义的字符,是一种控制字符,以字符\\开头,如经常使用的‘\\n’就代表换行,‘\\t’代表空格。

2.3.3 字符串常量

字符常量的集合版本,将多个字符用双引号括起来,就是字符串常量。 ❑定义:用双引号(“”)括起来的0个或者多个字符组成的序列 ❑存储:每个字符串尾自动加一个 ‘\\0’ 作为字符串结束标志 例如下面的是合法的字符串常量: “hello”,“CHINA”,“a”,"$123.456",“C language programming”,“a\\n”,“#123”,“ ”

2.3.4 符号常量

符号常量是在C语言中,可以用一个标识符来表示一个常量,这个标识符称之为符号常量。其特点是编译后写在代码区,不可寻址,不可更改,属于指令的一部分。 1、#define 定义: 符号常量在使用之前必须先定义,其一般形式为:

#define 标识符 enum EnumName{标识符,标识符,...};

其中#define 也是一条预处理命令(预处理命令都以"#"开头),称为宏定义命令,其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。 2、const定义 : 形式为 :

const type name = vcalue; 例如:const int MONTHS = 13;

这样就可以在程序中使用MONTHS而不是13了。常量(如MONTHS)被初始化后,其值就被固定了,编译器将不允许再修改该常量的值。

2.4 变量

变量是指在程序运行过程中其值可以改变的量。程序中使用的变量名是用户根据需要而取名的,变量名必须符合标识符的命名规则。

2.4.1 变量的定义

变量必须先定义,后使用。凡未被定义的,不能作为变量名,这就能保证程序中变量名正确使用。变量定义的语法为:

数据类型 变量名;

请注意区分变量名和变量值这两个概念。变量名实际上是以一个名字代表一个储存地址。 定义变量时需要注意以下几点: ❑ 每个变量定义语句都必须以分号结尾。 ❑ 变量定义语句可以出现在变量使用之前的任何位置。程序设计时只要不违背“先定义,后使用”的原则即可。 ❑ 变量一经定义,每个变量就有一种确定的类型,在编译时就能为其分配相应的存储单元。 ❑ 一个变量在内存中占据一定的存储单元,用变量名来标识在内存中所分配的存储单元,在该存储单元中存放变量的值。

2.4.2 变量的初始化

变量的初始化就是对变量赋初值。 对变量的赋值主要通过使用赋值表达式:

变量名 = 值 ;

变量的初始化有两种方法:一种是定义初始化,即定义变量的同时对其赋予初始值。例如:

int x=1; int y=2; double z=3.0;

另一种是先定义变量,然后再进行赋值。例如:

int x,y; double z; x = 1;y = 1; z = 3.0;

对于变量的初始化,可以归纳出以下几点:(1)初始化实际上是一个赋值语句。 (2)在定义变量的时候,可以只给部分变量赋值。 (3)如果同时对几个变量赋相同的初值,应该注意书写格式。 (3)如果同时对几个变量赋相同的初值,应该注意书写格式。

在C语言中使用变量时,如果它出现在表达式中,事先必须有一个初始值,否则其值将是一个不确定的值。变量获取初始值有以下几种方法。 ❑ 赋值语句:“=”在C语言中是赋值符号,运用赋值符号可以对变量进行赋值。例如:ch=’A’。 ❑ 读取语句:有些程序的值是不确定的,需要用户自己输入,因此需要用读取语句从外部的输入。

2.5 常变量

C99允许使用常变量,方法是在定义变量时,前面加一个关键字const 例如:

const int a = 3;

定义a为一个整形变量,指定其职位3,而且在变量存在的期间其值不能改变。

2.6 标识符

标识符是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。标识符通常由字母和数字以及其它字符构成。

以下是合法的标识符:

a, x, x3, BOOK_1, sum5

以下是非法的标识符:

3s 不能以数字开头 s*T 出现非法字符* -3x 不能以减号(-)开头 bowy-1 出现非法字符减号(-) 第三章 C语言数据类型,运算符 第四章 C语言顺序结构 4.1C语句概述 (语句描述了一种行为,是向计算机发出的执行某一操作的指令) 4.1.1表达式语句

表达式后加一个“;”构成表达式语句。 例:

加入存在变量定义: int a,b; 以下语句存在意义: a=3; //赋值表达式构成语句,赋值变量a b=a+3; //赋值表达式构成语句将a+3的结果赋给b a++; //自加表达式构成语句,执行后变量a自加 a=3,b=4; //逗号表达式构成语句,执行后变量a的值为3,b的值为4 4.1.2 流程控制语句

(1)选择结构的控制语句:if双分支选择结构,which多分枝选择结构。 (2)循环结构控制语句:while语句和for语句控制的当型循环结构,do~while控制的直到型循环结构。 (3)控制流程转换语句:又称为跳转语句,包括break,contiune,goto,return语句。

4.1.3 空语句

只有一个分号,用于完善选择结构和循环结构。

4.1.4 复合语句

以花括号“{ }”括起来的功能相对完善的程序段。 例:

#include <stdio.h> int add(int x, int y) { int t; t = x + y; return (t); } void main() { int a, b, sum; scanf("%d%d", &a, &b); sum = add(a, b); printf("sum=%d\\n", sum); } 4.1.5 函数调用语句 #include <stdio.h> #include <math.h> //编译预处理命令,不是C语言 void main() { int x, y; //变量定义 scanf_s("%f", &x); //函数调用语句,调用库函数scanf_s() if (x < 0) //控制选择结构的if的语句 { x = -x; y = sqrt(x + 6); //赋值语句 } //复合语句 else y = 1; printf("y=%f", y); //函数调用语句,调用库函数printf() } 4.2 常用库函数的使用 4.2.1 库函数的使用
  • 函数调用的一般形式为 函数名(参数表列)。

  • 用“函数名”表示调用的是哪个函数。“参数表列”是确定的值构成的表列,是传递给函数的参数,“参数表列”中的参数必须和函数原型中生命的参数的个数和类型保持一致。函数调用后加“;”就构成了函数调用语句。

  • 库函数是放在函数库中的函数,调用函数时必须告诉编译系统该库函数属于哪一个函数库,以便编译器能检查函数是否合法,并有效地执行该函数,这一过程称为声明。

  • 标准库函数声明为:#include<头文件>。 以下为常用标准库函数表 例:正弦函数原型为:*double sin(double x)*

#include <stdio.h> #include <math.h> //调用包含sin函数在内的头文件math.h void main() { float x, y; x = 1.5; y = sin(x); printf("%f\\n", y); } 4.2.2 输出函数 4.2.2.1 字符输出函数(putchar)
  • putchar向终端输出单个字符。

一般格式:putcahr(实参)实参可以是cahr数据类型也可以是int数据类型。 例:

#include <stdio.h> int main() { putchar('a'); //输出变量a中存储的字符 } #include <stdio.h> int main() { putchar('\\n'); //输出换行字符 } #include <stdio.h> int main() { putchar('\\101'); //输出字符'A' } 4.2.2.2 格式输出函数(printf)
  • printf函数调用的一般形式:printf(格式控制,输出列表)

  • "格式控制"是一个字符串,由普通字符、以“%"开头的格式控制字符构成;”输出列表“是需要输出的数据项列表,数据项之间用逗号隔开。

  • 格式控制(用双引号引起来): 格式控制字符、转义字符、普通字符

  • 输出列表:常量、变量、表达式、函数调用。

#include <stdio.h> int main() //用int,而不用void. { int a = -1; //定义常量a printf("%d,%o,%x,%X,%u", a, a, a, a, a ); //%d以十进制形式输出带符号整数,%o以八进制输出整型数的机器码,%x以十六进制输出整型数的机器码,%X以十六进制输出整型数的机器码(大写),%u无符号十进制输出整型数。 } //输出结果:-1,177777,ffff,FFFF,65535 #include <stdio.h> void main() { float a = 123.456; printf(" % f, % e", a, a); } //输出结果:123.456000,1.23456e+02 #include <stdio.h> void main() { printf(" % c, % s", 'A', "china"); } //输出结果:A,china #include <stdio.h> void main() { int a, b; a = 123, b = 12345; printf(" % d, % 4d, % -4d, % #o, % 4d", a, a, a, a, b); } //输出结果:123, 123,123 ,0173,12345 void main() { float a = 123.456; printf(" % f, % 8f, % 8.2f, % .2f", a, a, a, a); } //输出结果:123.456000, 123.456000, 123.46, 123.46

%c控制单个字符输出。 %s控制字符串输出。

4.2.3输入函数 4.2.3.1 字符输入函数
  • getchar由终端向程序中输入一个字符。使用时必须包含stdio.h函数库,预处理命令:#includde <stdio.h>

  • 字符输入函数getcahr( )调用的一般形式:getcahr( )

#include <stdio.h> int main() { char c1, c2; c1 = getchar(); c2 = getchar(); putchar(c1); putchar(c2); } 输入ab 执行ab 4.2.3.2 格式输入函数
  • scanf函数调用一般形式:scanf(格式控制,地址表列);

  • 格式控制:格式字符、普通字符

  • 地址表列:取地址运算符:&;变量地址的表示:&a。

//这里使用的是vc2019版,scanf不够安全呗,所以vs就弄了个scanf_s出来,不过貌似这个代码只能在vs上编译 #include <stdio.h> #pragma warning(disable:4996) int main() { int k; float f; scanf_s("%3d%*4d%f",&k,&f); printf("%d,%f",k,f); } 4.3 顺序结构程序设计举例
  • 已知三角形的三边边长,求三角形的面积 area=(a+b+c)/2
#include<stdio.h> #include<math.h> void main() { float a, b, c, s, area; scanf_s("%f,%f,%f", &a, &b, &c); s = (a + b + c) / 2; area = sqrt(s * (s - a) * (s - b) * (s - c)); printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\\n", a, b, c, s); printf("area=%7.2f\\n", area); }
  • 交换两个变量的值
#include <stdio.h> void main() { char A, B, t; A = 'w'; B = 'o'; t = A; A = B; B = t; printf("A=%c,B=%c", A, B); }
  • 输出一个3位整数的逆序数。比如输入123,输出321。
#include <stdio.h> int main() { int k, m, a0, a1, a2; printf("input:"); scanf_s("%d", &k); a0 = k / 100; a1 = (k - 100 * a0) / 10; a2 = k % 10; m = 100 * a2 + 10 * a1 + a0; printf("m=%d\\n", m); }

本文标签: 语言基础