第一个C语言程序
下列代码,
#include <stdio.h>
int main()
{
printf("Hello World! \n");
return 0;
}
在终端进行编译使用以下步骤:
gcc -o 1-1 1-1.c,编译c语言程序,完成预处理-编译-汇编-链接,生成可执行文件。
./1-1,在Linux终端输入可执行文件的文件名可运行该文件。
C语言开发环境
常见的Linux版本:Ubuntu、CentOS、Deepin
C程序的创建过程
- 编写
Linux中,Vim编辑器也是常用的文本编辑器。 - 编译
输入是源文件,经过编译器输出是对象代码,存放的文件称为对象文件,在Linux中的扩展名为.o,在Windows中为.obj。
编译使用gcc -c 1-1.c - 链接
组合成可执行文件,在Linux中没有扩展名,Windows中扩展名为.exe。
链接使用gcc - o 1-1 1-1.c。 - 执行
C语言的简单结构
- 预处理指令
- main()函数
- 程序框架
printf()函数
数据类型
格式输出函数
printf(),例如printf("%d, %d", a, b)。
格式输入函数
scanf(格式控制,地址表列),地址表列是由若干地址组成的表列,可以是变量的地址
注释
/* */ ,或者//。
常量
- 整型常量
- 实型常量
用字母e或者E指代以10为底的指数 - 字符常量
- 普通字符
- 转移字符
变量
变量的名字便是一种标识符。
数据类型
为什么在用计算机运算时,需要指定数据的类型呢?
——在数学中,数值是不区分类型的,数值的运算是绝对准确的,例如:1/3 的值是 0.33333…(循环小数)。数学是研究抽象的学科,数和数的运算都是抽象的。而在计算机中,数据是存储在计算机中的一个个单元里面,它是具体存在的。而且,存储单元是由有限的字节构成的,每一个存储单元存储的数据是有限的,不可能存放无限大的数,也不能存放无限循环小数
C语言数据类型

整数类型
- 基本类型int
gcc编译器为每个整数类型分配4个字节32位,
用整数补码存放,取值范围为2−31——231−12^{-31}——2^{31} -12−31——231−1。
无符号unsigned int取值范围为0——231−10 ——2^{31}-10——231−1。 - 短整型short
2个字节 - 长整形long
8个字节
浮点数类型
为什么将实数称为浮点数?
——只要在小数点位置浮动的同时改变指数的值,就可以保证它的值不会改变。由于小数点的位置可以浮动,所以实数的指数形式称为浮点数。
浮点类型:
- float单精度,4个字节,上下限:
FLT_MIN和FLT_MAX。 - double双精度,8个字节,上下限:
DBL_MIN和DBL_MAX。
字符型
字符型数据在存储时,并不是把该字符本身存放到内存单元中,而是把该字符相应的 ASCII 码值存放到该存储单元中。
例如:
#include<stdio.h>
int main()
{
char a, b;
a = 'c';
b = 121;
printf("%c, %c\n", a, b);
printf("%d, %d\n", a, b);
return 0;
}
输出:
c, y
99, 121
以字符形式输出时,先将存储单元中的 ASCII 码转换成相应的字符再输出;以整数的形式输出时,直接输出其 ASCII 码。
也可以对字符数据进行算术运算,例如:
#include <stdio.h>
int main()
{
char a, x;
int b;
a = 'c';
b = 1;
x = a + b;
printf("%c\n", x);
printf("%d\n", x);
return 0;
}
字符串常量
字符串常量是用一对双引号括起来的零个或多个字符组成的序列,如 “hello”,“China”,“b” 都是字符串常量。
字符串中的每个字符占用一个字节,在存储字符串常量时还要自动在其末尾加上 ‘\0’ 作为字符串结束的标志。因此b’ 和 “b” 是完全不同的。前者是字符常量,在内存中占用的字节数为 1;而后者是字符串常量,在内存中占用的字节数为 2,包含字符 ‘b’ 和 ‘\0’。
注意:在 C 语言中没有专门的字符串变量,如果你想要将一个字符串存放在变量中,必须使用字符数组,数组中每一个元素存放一个字符。
运算符和数据转换
基本算术运算符
- x/y 中,两个实数相除的结果是双精度实数,两个整数相除的结果为整数。如 5/3 的结果为 1,舍去小数部分。
- % 运算符要求参加运算的对象为整数,结果也是整数。如 7%3,结果为 1,除了%以外的运算符的操作数都可以是任何算数类型。
自增、自减
理解i++和++i的作用即可。
注意: 自增运算符 (++) 和自减运算符 (–) 只能用于变量,而不能用于常量或表达式。
混合运算
数据类型优先级:

字符 (char) 型数据和整型数据进行运算,就是把字符的 ASCII 代码与整型运算。反之和浮点类型也是。
例如字母大小写转换,大小写相差32。
#include <stdio.h>
int main()
{
// 将大写字母转换为小写字母
char c1, c2;
scanf("%c", &c1);
c2 = c1 + 32;
printf("%c\n", c2);
return 0;
}
强转
一般形式(类型名) (表达式)。
在强制类型转换时,得到一个所需类型的中间数据,而原来变量的类型未发生变化。
数据输入和输出
编译时需要注意,在 Linux 系统下,C 源文件若调用了 math 库里的函数,则编译时要加上 -lm (是字母 l ,不是数字 1),表示链接到 math 库。
下面的一个例子:
#include <stdio.h>
#include <math.h>
int main()
{
double a, b, c, disc, x1, x2, p, q;
scanf("%lf%lf%lf", &a, &b, &c);
disc = b*b - 4*a*c;
p = -b / (2.0 * a);
q = sqrt(disc) / (2.0 * a);
x1 = p + q, x2 = p - q;
printf("x1 = %7.2f\nx2 = %7.2f\n", x1, x2);
return 0;
}
解释上面的例子:
在 printf 函数中,不是简单地用 “%f” 格式声明,而是在格式符 “f” 的前面加了 “7.2”。表示的意思是在输出 x1,x2 时,指定数据占 7 列,其中小数占 2 列。
字符的输入输出
除了printf()和scanf()之外输入输出字符,还可以使用putchar()输出, getchar()输入,
例如大小写转换,
#include <stdio.h>
int main()
{
char a,b;
a = getchar();
b = a + 32;
putchar(b);
return 0;
}
本文介绍了如何在Linux环境下使用C语言编写并编译第一个程序,包括C语言的基本结构如预处理、main()函数、printf()和scanf()函数,以及数据类型、字符处理、运算符和数学库的使用。
6万+

被折叠的 条评论
为什么被折叠?



