IE盒子

搜索
查看: 113|回复: 0

【C语言】程序结构、基本语法、数据结构

[复制链接]

3

主题

7

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2023-3-28 06:48:23 | 显示全部楼层 |阅读模式
一、C语言程序结构

在我们学习 C 语言的基本构建块之前,让我们先来看看一个最小的 C 程序结构,在接下来的文章中可以以此作为参考。
1、C语言 Hello World 实例

C 程序主要包括以下部分:

  • 预处理器指令
  • 函数
  • 变量
  • 语句 & 表达式
  • 注释
让我们看一段简单的代码,可以输出单词 “Hello World”:
实例:
#include <stdio.h>

int main()
{
   /* 我的第一个 C 程序 */
   printf("Hello, World! \n");
   
   return 0;
}接下来我们讲解一下上面这段程序:
1.程序的第一行 #include <stdio.h> 是预处理器指令,告诉 C 编译器在实际编译之前要包含 stdio.h 文件。
2.下一行 int main() 是主函数,程序从这里开始执行。
3.下一行/*...*/将会被编译器忽略,这里放置程序的注释内容。它们被称为程序的注释。
4.下一行 printf(…) 是 C 中另一个可用的函数,会在屏幕上显示消息 “Hello, World!”。
5.下一行 return 0; 终止 main() 函数,并返回值 0。
2、编译 & 执行 C 程序

接下来让我们看看如何把源代码保存在一个文件中,以及如何编译并运行它。下面是简单的步骤
(1)打开一个文本编辑器,添加上述代码。
(2)保存文件为 hello.c。
(3)打开命令提示符,进入到保存文件所在的目录。
(4)键入 gcc hello.c,输入回车,编译代码。
(5)如果代码中没有错误,命令提示符会跳到下一行,并生成 a.out 可执行文件。
(6)现在,键入 a.out 来执行程序。
(7)您可以看到屏幕上显示 “Hello World”。
二、C语言基本语法

1、C的令牌(Token)

C 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值,或者是一个符号。例如,下面的 C 语句包括五个令牌:
printf("Hello, World! \n");这五个令牌分别是:
printf
(
"Hello, World! \n"
)
;2、分号;

在 C 程序中,分号是语句结束符。也就是说,每个语句必须以分号结束。它表明一个逻辑实体的结束。
例如,下面是两个不同的语句:
printf("Hello, World! \n");
return 0;3、注释

C 语言有两种注释方式:
// 单行注释以 // 开始的单行注释,这种注释可以单独占一行。
/* 单行注释 */

/*
多行注释
多行注释
多行注释
*//* */ 这种格式的注释可以单行或多行。
不能在注释内嵌套注释,注释也不能出现在字符串或字符值中。
4、标识符

   C 标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。
C 标识符内不允许出现标点字符,比如 @、$ 和 %。C 是区分大小写的编程语言。因此,在 C 中,Manpower 和 manpower 是两个不同的标识符。下面列出几个有效的标识符:

    mohd       zara    abc   move_name  a_123
myname50   _temp   j     a23b9      retVal
5、关键字

下表列出了 C 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。




6、C 中的空格

只包含空格的行,被称为空白行,可能带有注释,C 编译器会完全忽略它。
在 C 中,空格用于描述空白符、制表符、换行符和注释。空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。因此,在下面的语句中:
int age;在这里,int 和 age 之间必须至少有一个空格字符(通常是一个空白符),这样编译器才能够区分它们。另一方面,在下面的语句中:
fruit = apples + oranges;   // 获取水果的总数fruit 和 =,或者 = 和 apples 之间的空格字符不是必需的,但是为了增强可读性,您可以根据需要适当增加一些空格。
三、C语言数据结构

在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
C 中的类型可分为以下几种:


数组类型和结构类型统称为聚合类型。函数的类型指的是函数返回值的类型。在本章节接下来的部分我们将介绍基本类型,其他几种类型会在后边几个章节中进行讲解。
1、整数类型

下表列出了关于标准整数类型的存储大小和值范围的细节:


注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。
以下列出了32位系统与64位系统的存储大小的差别(windows 相同):


为了得到某个类型或某个变量在特定平台上的准确大小,您可以使用 sizeof 运算符。表达式 sizeof(type) 得到对象或类型的存储字节大小。下面的实例演示了获取 int 类型的大小:
实例:
#include <stdio.h>
#include <limits.h>
int main()
{
   printf("int 存储大小 : %lu \n", sizeof(int));
   
   return 0;
}%lu 为 32 位无符号整数。
当您在 Linux 上编译并执行上面的程序时,它会产生下列结果:
int 存储大小 : 4 2、浮点类型

下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:


头文件 float.h 定义了宏,在程序中可以使用这些值和其他有关实数二进制表示的细节。下面的实例将输出浮点类型占用的存储空间以及它的范围值:
实例:
#include <stdio.h>
#include <float.h>
int main()
{
   printf("float 存储最大字节数 : %lu \n", sizeof(float));
   printf("float 最小值: %E\n", FLT_MIN );
   printf("float 最大值: %E\n", FLT_MAX );
   printf("精度值: %d\n", FLT_DIG );
   return 0;
}%E 为以指数形式输出单、双精度实数。
当您在 Linux 上编译并执行上面的程序时,它会产生下列结果:
float 存储最大字节数 : 4
float 最小值: 1.175494E-38
float 最大值: 3.402823E+38
精度值: 63、void 类型

void 类型指定没有可用的值。它通常用于以下三种情况下:


附:

常用基本数据类型占用空间(64位机器为例)

char : 1个字节
int :4个字节
float:4个字节
double:8个字节
基本类型书写

整数

  • a,默认为10进制 ,10 ,20。
  • b,以0开头为8进制,045,021。
  • c,以0b开头为2进制,0b11101101。
  • d,以0x开头为16进制,0x21458adf。
小数

  • 单精度常量:2.3f 。
  • 双精度常量:2.3,默认为双精度。
字符型常量

  • 用英文单引号括起来,只保存一个字符’a’、‘b’ 、‘*’ ,还有转义字符 ‘\n’ 、‘\t’。
字符串常量

  • 用英文的双引号引起来 可以保存多个字符:“abc”。
1、数据类型转换:C 语言中如果一个表达式中含有不同类型的常量和变量,在计算时,会将它们自动转换为同一种类型;在 C 语言中也可以对数据类型进行强制转换;
2、自动转换规则:

  • a)浮点数赋给整型,该浮点数小数被舍去;
  • b)整数赋给浮点型,数值不变,但是被存储到相应的浮点型变量中;
3、强制类型转换形式: (类型说明符)(表达式)
实例程序:
#include<stdio.h>
int main()
{
    float f,x=3.6,y=5.2;
    int i=4,a,b;
    a=x+y;
    b=(int)(x+y);
    f=10/i;
    printf("a=%d,b=%d,f=%f,x=%f\n",a,b,f,x);
}例子中先计算 x+y 值为 8.8,然后赋值给 a,因为a为整型,所以自取整数部分8,a=8;接下来 b 把 x+y 强制转换为整型;最后 10/i 是两个整数相除,结果仍为整数 2,把 2 赋给浮点数 f;x 为浮点型直接输出。
推荐:

给新学C语言的朋友一些建议:一边学一边敲,敲着敲着就会啦。推荐学习网站:C 语言教程 | 菜鸟教程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表