【Linux C编程】第零章 掌握 C 语言所需的基础知识

举报
Yuchuan 发表于 2021/06/18 16:54:23 2021/06/18
【摘要】 我们结束了这篇“C 编程教程”文章。我希望您已经了解数据结构、语法、功能和使用它们执行的操作的重要性。

C 编程语言是在 1970 年代中期开发的,但它仍然被认为是所有编程语言。它支持多种功能,并且足够强大,可以直接与硬件单元和内核进行交互。本 C 编程教程涉及,

C 编程语言简史

C-Programming-Tutorial-Founder-of-C-Edureka

C 由Dennis Ritchie于 1972 年在贝尔实验室(美国)开发。它是一种通用的、结构化的、独立于机器的、简单灵活的编程语言。它主要是作为一种系统编程语言开发的,用于编写操作系统。

C编程语言的特点

  • 高级语言

C在其库和内置功能的情况下提供了强大的抽象,使其独立于机器。足以开发内核、驱动等系统应用。

  • 结构化语言

C 语言支持结构化编程,其中包括函数的使用函数降低了代码复杂度并且完全可以重用。

  • 丰富的库

与其前辈不同,C 语言结合了多个内置算术逻辑函数以及许多内置库,使开发更加快捷方便。

  • 可扩展

C语言是高级语言,也可以升级。因此,编程语言被认为是可扩展的,就像任何其他高级语言一样。

C-Edureka 的特点

  • 递归

C 语言支持涉及递归的函数回溯。在递归过程中,一个函数在另一个函数内被多次调用。

  • 指针

C 使用户能够使用指针直接与内存交互。我们在内存、结构、函数、数组、堆栈等中使用指针。

  • Faster

C 语言带有最少数量的内置函数,这使得编译和执行时间更少并且系统面临低开销。

  • 内存管理

C 提供了同类中最好的内存管理。它可以动态分配和释放内存。所述的malloc(),释放calloc(),realloc()的函数用于分配动态内存和free()函数用于在任何时间释放已使用的内存。

数据类型和变量

用C数据类型大致分为4类,如下所示。

C-Programming-Tutorial-datatypes-of-C-Edureka

基本数据类型

基本数据类型被认为是 C 必须提供的最基本和主要的数据类型。属于基本数据类型的数据类型如下。

Datatype Name Datatype Size Datatype Range
short 1 byte -128 to 127
unsigned short 1 byte 0 to 255
char 1 byte -128 to 127
unsigned char 1 byte 0 to 255
int 2 bytes -32,768 to 32,767
unsigned int 2 bytes 0 to 65,535
long 4 bytes -2,147,483,648 to 2,147,483,647
unsigned long 4 bytes 0 to 4,294,967,295
float 4 bytes 3.4E-38 to 3.4E+38
double 8 bytes 1.7E-308 to 1.7E+308
long double 10 bytes 3.4E-4932 to 1.1E+4932

派生数据类型

派生类型是通过使用一个或更多个基本形成类型组合使用。它们    是其功能在 C 库中预定义的对象类型。

  • 函数类型
  • 指针类型
  • 数组类型
  • 结构类型
  • 联合类型


枚举数据类型

枚举数据类型用于在 C 编程语言中声明整型常量,以便整型常量名称易于记忆和维护。关键字enum用于声明枚举的数据类型。

示例:枚举插头{on = 1, off = 0};  

空数据类型

void 数据类型是一种空数据类型,用作 C 中不返回值的函数的返回类型。

例子:

void  函数(int n)
int 函数(void)

C 中的变量

变量定义为保留的内存空间,用于存储确定数据类型的值。Variable 的值不是常数,而是允许更改。C中主要支持五种类型的变量。

  • 局部变量
  • 全局变量
  • 静态变量
  • 自动变量
  • 外部变量

局部变量

任何在代码块或函数内部声明且作用域限于该特定代码块或函数的变量都称为局部变量。

//例子

void Edureka()
{
       int Local_variable=10;
}

全局变量

任何在代码块或函数外部声明并具有整个程序范围并允许任何函数更改其值的变量称为全局 变量

//例子

int Global_variable=10;
void Edureka()
{
      int Local_variable=20;
}

静态变量

使用关键字static声明的任何变量都称为静态变量。静态变量在程序的整个执行过程中保留声明的值,并且不会在多次函数调用之间改变。

//例子

void Edureka()
{
     int Local_variable =10;//
     static int Static_variable =10;
     Local_variable=Local_variable+1;
     Static_variable =Static_variable+1;
     printf("%d,%d",x,y);
}

自动变量

可以使用关键字auto声明自动变量默认情况下,所有用 C 语言声明的变量都是自动变量。

//例子

void main()
{
      int Local_variable=10;  //(automatic default)
      auto int auto=20;   //(automatic variable)
};

外部变量

外部变量使用extern关键字声明。我们可以通过使用外部变量在多个 C 源文件中共享一个变量。

//例子

extern external=10;

让我们执行我们的第一个 C 程序。

第一个 C 程序

在本 C 编程教程中,我们将了解C 程序基本结构。任何基本的 C 程序都包含以下部分

结构

  • 预处理器指令

预处理器指令在每个 C 程序的开头用特殊字符# 声明。它们被定义为在编译过程中由 C 编译器调用和编译的预定义函数程序。

  • 函数

C程序中的函数被定义为主程序的细分程序。函数提供代码可重用性并降低代码复杂性。

  • 变量

变量 被定义为一个名称,用于在 C 程序中存储值。C 中使用的每个 变量都有一个特定的数据类型,它决定了 变量 内存的大小布局

  • 语句和表达式

语句只不过是我们提供给计算机进行编译的指令,而另一方面,表达式被认为是产生结果值的数学逻辑语句。

  • 注释

注释是开发人员在代码中编写的消息,用于方便理解编程时使用的代码的逻辑。编译器不会编译注释。注释写在 ///* */ 中。

现在让我们执行我们的第一个 Hello World 程序。

#include<stdio.h>
int main(){
    printf("Hello World");
    return 0;
}

//输出

Hello World

C 编程中的循环

C 中的循环被定义为一种编程语句,旨在执行特定代码段特定次数或直到满足提供的特定条件。C 语言中主要有三循环语句。

For 循环

for循环 C程序是一个控制流语句,它允许你执行特定代码段,用于有限数量的迭代。for 循环具有三个参数,即 初始化变量、计数器变量 和 增量/减量变量。

for循环的流程图如下:

//例子

#include<stdio.h>
int main()
{
     int i;
     for (i=1; i<=5; i++)
     {
           printf("%dn", i);
     }
     return 0;
}

//输出

1
2
3
4
5

While 循环

While循环 C程序设计是重复执行本身,直到给出控逆变现金流量表布尔条件被满足。While 循环可以被认为是一个重复的 If 语句。 

for循环的流程图如下:

//例子

#include<stdio.h>
int main()
{
      int count=1;
      while (count<= 5)
      {
            printf("%d ", count);
            count++;
      }
      return 0;
}

//输出

1 2 3 4 5

Do-While 循环

C 编程中的Do While 循环被认为是与普通 While 循环完全相似的条件语句。唯一的区别是 Do While 循环将布尔/条件语句放在循环的末尾。这使得 Do While 循环至少执行一次。

for循环的流程图如下:

//例子

#include<stdio.h>
int main()
{
    int j=0;
    do
    {
        printf("Value of the variable j is: %dn", j);
        j++;
    }while (j<=5);
    return 0;
}

//输出

Value of the variable j is: 0
Value of the variable j is: 1
Value of the variable j is: 2
Value of the variable j is: 3
Value of the variable j is: 4
Value of the variable j is: 5

C 编程中的条件语句

C语言中的条件语句可以定义为在指定的数学或逻辑条件下决定程序语句的执行流程的编程语句。本 C 编程教程中的重要条件语句如下。

如果

C 语言中的If 语句是一种编程条件语句,它根据条件执行代码段,前提是它为真且有效。下面是if 条件的流程图 。

//例子

#include<stdio.h>
int main()
{
      int number=0;
      printf("Enter a number:");
      scanf("%d",&number);
      if(number%2==0){
            printf("your number is %d and it is an even number",number);
      }
      return 0;
}

//输出

Enter a number:4
your number is 4 and it is an even number

否则-如果

否则,如果条件语句 C语言是用来执行一个语句了两部。条件语句执行所提供的代码段是真实有效的。下面是else-if 条件的流程图。 

//例子

#include<stdio.h>
int main()
{
     int number=0;
     printf("enter a number:");
     scanf("%d",&number);
     if(number%2==0)
     {
            printf("your number is %d and it is an even number",number);
     }
     else
     {
            printf("your number is %d and it is an odd number",number);
     }
     return 0;
}

//输出

Enter a number:5
your number is 5 and it is an odd number

else-if 梯子

否则,如果梯子 C语言中设置的连续否则,如果这是用来语句执行一个真实有效的语句出给定语句的集合。下面是else-if 梯形条件的流程图。

C-Programming-Tutorial-else-if-ladder-C-Edureka.jpg

#include<stdio.h>
int main()
{
      int number=0;
      printf("enter a number:");
      scanf("%d",&number);
      if(number==10)
      {
            printf("your inputted number is equals to 10");
      }
      else if(number==50)
     {
            printf("your inputted number is equal to 50");
     }
     else if(number==100)
     {
            printf("your inputted number is equal to 100");
     }
     else
    {
            printf("your inputted number is not equal to 10, 50 or 100");
    }
    return 0;
}

//输出

enter a number:5
your inputted number is not equal to 10, 50 or 100

嵌套如果

C 语言 中的Nested-If是一种条件语句,其中一个 Else-If 语句嵌入到另一个 If 语句中。下面是nested-if 条件的流程图。

C-Programming-Tutorial-nested-if-C-Edureka.jpg

//例子

#include<stdio.h>
int main()
{
      int v1, v2;
      printf("Enter the value of First variable :");
      scanf("%d",&v1);
      printf("Enter the value of Second variable :");
      scanf("%d",&v2);
      if (v1 != v2)
      {
             printf("First variable is not equal to Second variablen");
             if (v1<v2)
             {
                    printf("First variable is not equal to Second variablen");
             }
             else
             {
                    printf("Second variable is greater than First variablen");
              }
       }
       else
      {
              printf("First variable is equal to Second variablen");
      }
      return 0;
}

//输出:

Enter the value of First variable :12
Enter the value of Second variable :21
First variable is not equal to Second variable
Second variable is greater than First variable

C 编程中的数据结构

甲 数据结构 可被定义为集合 数据值,它们之间的关系,并且被上所施加的功能 数据。它们大致分类如下。

  • 原始数据结构/内置数据结构
  • 抽象数据结构/用户定义的数据结构

C-Programming-Tutorial-data-structures-C-Edureka.jpg

数组

一个阵列 被定义为相似类型的存储在连续的存储单元的数据项的集合。数组是最简单的数据结构,其中每个数据元素都可以使用其索引号随机访问。

共有三种不同类型的数组,即:

  • 一维数组
  • 二维数组
  • 多维数组

一维数组

一维数组可以定义为单行多列的数组。一维数组中的元素使用它们的索引号访问。

int arrayone[10];

二维数组

二维数组可以定义为数组的数组。该2D阵列被组织成可表示为行和列的集合矩阵。使用它们的交点坐标访问数组的元素。

int arraytwo[10][5];

多维数组

多维数组可以定义为数组的数组。3D 数组被组织为 3D 矩阵,可以表示为多行和多列的集合。数组的元素使用它们的 3D 交叉坐标进行访问。

int arraythree[10][10][10];

链表

链表是类似于数组的线性数据结构,唯一的区别是元素不保存在连续的内存位置,而是保存在随机地址中并使用指针连接。

  • 单链表
  • 双向链表
  • 循环链表

单链表

单向链表是一维数组的替代品。单向链表中的元素以顺序格式存储,但存储在不同的存储位置,通过指针相互连接。单向链表只能在一个方向上遍历

单链表中的数据结构教育

单向链表的代码可以在这里找到

双向链表

双向链表是二维数组的替代品。双向链表中的元素以顺序格式存储,但存储在不同的存储位置,通过指针相互连接。双向链表可以双向遍历。

Data-Structures-in-c-double-linked-list-edureka

双向链表的代码可以在这里找到

循环链表

循环链表类似于单链表。但是,唯一的区别是循环链表尾部的指针指向头部。

数据结构中的c-循环链表-edureka

循环链表的代码可以在这里找到

文件

C 中的基本文件处理技术,提供用户可以对系统中的文件执行的基本功能。

Function Operation
fopen() To Open a file
fclose() To Close a file
fgets() To Read a file
fprint() To Write into a file
  • “r”—— 搜索文件。如果文件成功打开,fopen () 将其加载到内存中并设置一个指向其中第一个字符的指针。如果无法打开文件 fopen() 返回NULL
  • “w”—— 搜索文件。如果文件存在,则覆盖其内容。如果该文件不存在,则会创建一个新文件。如果无法打开文件,则返回NULL 
  • “a” – 搜索文件。如果文件成功打开,则 fopen () 将其加载到内存中并设置一个指向其中最后一个字符的指针。如果该文件不存在,则会创建一个新文件。如果无法打开文件,则返回NULL  
  • “ r+” – 搜索文件。如果成功打开 fopen ( ) 将其加载到内存中并设置一个指向其中第一个字符的指针。如果无法打开文件,则返回NULL  
  • “w+”—— 搜索文件。如果文件存在,则覆盖其内容。如果文件不存在,则创建一个新文件。如果无法打开文件,则返回NULL 
  • “a+” – 搜索文件。如果文件成功打开,则 fopen () 将其加载到内存中并设置一个指向其中最后一个字符的指针。如果该文件不存在,则会创建一个新文件。如果无法打开文件,则返回NULL  

堆栈是一种线性数据结构,它遵循执行操作的特定顺序。顺序可能是 LIFO(后进先出)或 FILO(先进后出)。

C-Stack-Edureka 中的数据结构

堆栈代码可以在这里找到

队列

队列 是一个遵循在其中操作被执行的特定顺序的线性结构。顺序是先进先出 (FIFO)。此外,C 包括循环队列。

C-Queue-Edureka 中的数据结构

队列的代码可以在这里找到

图形

图被定义为使用节点和边以图形格式表示的数据结构。有三种类型的图形,即。

  • 无向图

  • 有向图

C-Programming-Tutorial-directed-graph-C-Edureka

  • 有向加权图

C-Programming-Tutorial-directed-weighted-graph-C-Edureka

C 语言中的图通常以两种格式表示,如下所示:

例如:

  • 邻接矩阵

  • 邻接表

字符串

该字符串被定义为以空字符结尾的一维字符数组。字符数组或字符串用于存储单词或句子等文本。数组中的每个字符占用一个字节的内存,最后一个字符必须始终为 0。

两种类型的字符串是:

  • 字符数组
  • 字符串字面量

C语言中可用的String函数如下

Function Functionality
strlen() Returns the length of the String
strcpy() Copies String from Source to Destination
strcat() Joins two Strings and stores result in first
strcmp() Compares the given two Strings
strrev() Reverses the String
strlwr() Converts String to Lower case
strupr() Converts String to Upper case
strchr() String scanning function
strncat() Concatenates String with the part of another
srtncmp() Compares the parts of two Strings
strncpy() Copies a part of the String

//例子

#include<stdio.h>
#include<string.h>
int main( )
{
      int len;
      char text[10]="Edureka" ;
      length = strlen(array) ;
      printf ( "string length is = %d n" , length ) ;
      return 0;
}

//输出

string length is = 7

函数

函数可以被定义为花括号中主程序的程序细分。主程序可以调用函数来实现其功能。此过程提供代码可重用性和模块化。

两种类型的函数是:

  • 库函数
  • 用户定义函数

功能优势

  • 将避免在程序中重复编写相同的代码。
  • 在一个程序中可以多次调用函数。
  • 当 C 程序被分成多个函数时,可以轻松跟踪它。
  • 可重用性是 C 函数的主要成就。

使用函数应遵循的规则:

  • 函数声明

一个函数需要声明为Global,并且需要明确指定函数的名称、函数的参数和函数的返回类型

  • 函数调用

从程序中的任何位置调用函数时,应注意参数列表中的数据类型和参数列表中的元素数量是否匹配。

  • 功能定义

函数声明后,重要的是函数包括声明的参数、代码段返回值。

  • C 编程中使用函数的四个方面
    • 功能没有参数无返回
    • 功能没有参数,并用返回值
    • 功能与参数没有返回值
    • 功能与参数,并与返回

结构体与联合体

结构

A S tructure 是一个用户定义的数据类型中可用的 Ç,允许不同数据类型的数据项组合在一起。结构用于表示记录。 struct是用于声明结构的关键字。

//例子

#include<stdio.h>
struct Distance
{
       int feet;
       float inch;
} dist1, dist2, sum;
 
int main()
{
      printf("1st distancen");
      printf("Enter feet: ");
      scanf("%d",&dist1.feet);
      printf("Enter inch: ");
      scanf("%f",&dist1.inch);
      printf("2nd distancen");
      printf("Enter feet: ");
      scanf("%d",&dist2.feet);
      printf("Enter inch: ");
      scanf("%f",&dist2.inch);
      sum.feet = dist1.feet + dist2.feet;
      sum.inch = dist1.inch + dist2.inch; 
      while (sum.inch!= 12)
      {
             ++sum.feet;
             sum.inch = sum.inch - 12;
       }
       printf("Sum of distances = %d'-%.1f\"", sum.feet, sum.inch);
       return 0;
}

//输出

1st distance
Enter feet: 12
Enter inch: 7.9
2nd distance
Enter feet: 2
Enter inch: 9.8
Sum of distances = 15'-5.7"

联合体

联合体是在可用的一个特殊的数据类型 Ç,允许在相同的存储单元,存储不同的数据类型。union是用于声明 Union 的关键字。

//例子

#include<stdio.h>
union Employee
{
      int Id;
      char Name[25];
      int Age;
      long Salary;
};
void main()
{
      union Employee E;
      printf("nEnter Employee Id : ");
      scanf("%d",&E.Id);
      printf("nEnter Employee Name : ");
      scanf("%s",&E.Name);
      printf("nEnter Employee Age : ");
      scanf("%d",&E.Age);
      printf("nEnter Employee Salary : ");
      scanf("%ld",&E.Salary);
      printf("nnEmployee Id : %d",E.Id);
      printf("nEmployee Name : %s",E.Name);
      printf("nEmployee Age : %d",E.Age);
      printf("nEmployee Salary : %ld",E.Salary);
}

//输出

Enter Employee Id : 102191
Enter Employee Name : Karan
Enter Employee Age : 29
Enter Employee Salary : 45000

Employee Id : 102011
Employee Name : Ajay
Employee Age : 26
Employee Salary : 45000

结构体和联合体的区别

Parameter Structure Union
Keyword struct union
Memory Each member has a unique Memory All members share allocated Memory
Initialization All members are initialized together Only first member can be initialized
Data Access All members is accessed together One member is accessed at a time
Value Change Changing the value of one member will not affect others Changing the value of one member will affect others

重要的面试问题

  1. Binary Search
  2. Bubble Sort
  3. Merge Sort
  4. Round Robin Scheduling
  5. Fibonacci Series
  6. Roots of Quadratic Equation
  7. LCM of two numbers

至此,我们结束了这篇“C 编程教程”文章。我希望您已经了解数据结构、语法、功能和使用它们执行的操作的重要性。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。