射频和无线供应商和资源的家

一站式满足您的射频和无线需求

C编程语言教程-第2页

参考以下页面浏览完整的C教程。
C语言页面1
C语言页面2
C语言page3
C语言页面4
C语言页面5

图中提到了C语言中的函数结构,每个C函数都有一些参数、返回语句、函数名和输入(scanf)或输出(printf)语句,用于提供输入并打印输出/结果。

代码编译

编译代码:gcc helloworld.c
创建的输出:a.out
运行程序:./ a.a out

Makefile
helloworld。输出:helloworld.o
gcc helloworld。helloworld.out
helloworld。O: helloworld.c
GCC -c helloworld.c

编译模型

•Preprocessor:解析所有的Preprocessor指令。
#include, #define宏,#ifdef等等。

•编译器:将文本转换为目标文件
可能有未解决的对象间引用

•链接器:解析所有对象间引用(或给你一个链接器错误)
创建二进制可执行文件

•Loader:将程序加载到RAM中并运行main()函数

c函数

数据类型

我们将在这里看到数据类型,操作符和表达式,控制流和函数的细节和一些例子来练习。

指令可以操作和处理有限大小的数据,所有数据都是位序列,8位构成一个字节,因此所有程序都需要知道指令操作的数据类型(它是如何组织的,它有多长等)。这是使用程序支持的数据类型定义的,Word用于处理器处理的默认数据大小的通用表示法,目前的处理器支持64位字操作。我们已经在第1页看到了C支持的基本数据类型。

字符(字符):
通常在机器中使用ASCII编码将这些1字节的数字映射到字符符号
整数(int):
4字节内存存储二进制数据范围从0到b1111111111111111111111111111111111111111111111111111111111111111111111
浮点数:
4字节内存存储由IEEE 754标准定义的单精度解释
长:
根据标准,必须至少是32位(4字节)。与32位系统上的int相同。数据类型:
整数值的子集,例如,颜色=红、蓝、黑或黄。详见第1页。

数据类型溢出

溢出导致状态寄存器位被设置。
例子:
Unsigned int = 2123456789;
Unsigned int y = 3123456789;
Unsigned int z;
Z = x + y;

这里z是951,946,282,而不是预期的5,246,913,578,因此编译器会生成警告,因为它们是常量。

类型转换和铸造

以下是C编译器自动类型转换所遵循的规则:
•低数据类型转换为高数据类型,结果为高类型。•无符号类型和有符号类型之间的转换可能不会产生直观的结果。•的例子:
浮动f;双d;长l;
int我;短的年代;
D + f f会转换成double
I / s s将被转换为int
L / I I被转换为long;长期的结果

显式转换(类型转换)

类型转换操作符的一般形式是
(type-name)表达式
使用显式类型强制转换比依赖自动类型转换通常是一个很好的实践。
例子:
C = (float)9 / 5 * (f-32)
Float转换为int会导致小数部分被截断
双精度到浮点数的转换会导致数字舍入
长int到int会导致高阶位的下降。

运营商

算术操作符,一元操作符,二进制操作符,比较操作符/关系操作符逻辑操作符,复合赋值操作符,成员和指针操作符以及其他操作符用于C语言。第一页也提到了。

算术运算符:
C语言中有两种算术运算符:
一元操作符:只需要一个操作数的操作符。
二元操作符:需要两个操作数的操作符。

前后增量

也可以使用++i和——i来代替i++和i——
然而,这两种形式有一个轻微但重要的区别。
考虑下面的例子:
int = 9;
printf (" % d”+ +);
printf (" % d”);

输出将是:9,10
但是如果我们有:
Int a = 9;
printf (" % d”,+ +);
printf (" % d”);
输出将是:10,10
a++将返回A的当前值,然后增加A的值
另一方面,++a在返回值之前增加a的值

控制语句

有两种主要类型,一种用于选择,另一种用于重复,如下所述,相同的语法在第1页中提到。

选择语句
•If, If -else
•开关
•条件运算符(三元运算符)
重复
•While, do-while
•为
•嵌套循环
•中断并继续

休息一下,继续学习例句

Int a = 10;
而(> = 0)
{printf("\nValue of a = %d",a);
——;
如果(= = 5)休息;


输出:
a = 10的值
a = 9的值
a = 8的值
a = 7的值
a = 6的值

Int a = 6;
While (a>= 0)

——;
如果(= = 3)继续;
printf("\nValue of a = %d",a);


输出:
a = 5的值
a = 4的值
a = 2的值
a = 1的值
a = 0的值

中断和继续总是在最内层循环或切换case语句上工作。其他条件语句将被忽略。

C函数示例

# include < stdio . h >
Int最大值(Int a, Int b);

int main ()

int a、b;
int结果;
printf("输入2个整数\n");
Scanf ("%d %d",&a, &b);

结果=最大值(a,b);
Printf ("max is %d\n",result);


Int最大值(Int a, Int b)

返回(> b ? a: b);

存储类

•存储类说明符
存储持续时间-一个对象在内存中存在的时间
•作用域-对象可以在程序中引用的地方
•自动存储
•在其块内创建和销毁的对象
•auto:默认为本地变量
•auto double x, y;
•寄存器:尝试将变量放入高速寄存器
•只能用于自动变量
寄存器int counter = 1;

•静态存储
•变量存在于整个程序执行中
•默认值为0
static:函数中定义的局部变量。
•在函数结束后保持价值
•只知道自己的功能
•extern:全局变量和函数的默认值
•在任何函数中都已知

范围

•文件范围
•在函数外部定义的标识符,在所有函数中都是已知的
•用于全局变量,函数定义,函数原型
•功能范围
•只能在函数体内引用
•块范围
•在块中声明的标识符
块作用域开始于声明,结束于右大括号
•用于变量、函数参数(函数局部变量)
•如果内部块中有同名变量,则外部块从内部块中“隐藏”
•功能原型范围
•用于参数列表中的标识符

# include < stdio . h >

Int x = 1;/ /全局作用域

空白(无效);
空白b(无效);

int main ()
{int x = 5;
Printf ("outer loop:x is %d\n",x);


Int x = 7;
Printf("内部循环:x是%d\n",x);

();
b ();
c ();
();
b ();
c ();

返回0;


(空白)

Int x = 9;
Printf ("auto x is %d\n");
x + +;
Printf ("auto x is %d\n";


空白b ()

静态int x = 11;
Printf(“静态x是%d\n”);
x + +;
Printf(“静态x是%d\n”);


无效的c ()

Printf ("global x is %d\n");
x + +;
Printf ("global x is %d\n");


上面例子的输出

外环x是5
内环x是7

Auto x = 9
Auto x = 10

静态x = 11
静态x = 12

全局x = 1
全局x = 2

Auto x = 9
Auto x = 10

静态x = 12
静态x = 13

全局x = 2
全局x = 3

递归

•递归函数
•调用自己的函数
•只能解决基本情况
把问题分成几个部分
•它能做什么
•它不能做的事情
•它不能做的类似于原始问题
•函数启动一个自己的新副本(递归步骤)来解决它不能做的事情•最终基本情况得到解决
插上电源,就能解决所有问题

例子:

Int fact(Int in){返回>0?In * fact(In -1): 1;}


分享本页

翻译本页
Baidu