初阶C语言(1)-6200字带你初识C语言

2023-11-02

目录

前言

 如何创建一个项目

 第一个C语言程序

基本数据类型

变量与常量

字符串与转义字符

 选择语句

循环语句

函数

数组

操作符

关键字

常量和宏

指针

结构体


前言

  •   本节旨在初步认识C语言,有的知识在之后会详细讲。C语言是一门面向过程的计算机编程语言,它与Java等面向对象的编程语言有所不同。
  •   俗话说:工欲善其事必先利其器,学C语言同样需要选择一个合适的工具才能事倍功半,选择VS2022是个不错的选择
  •  C语言源码后缀名为.c文件,编译会自动生成一个.obj二进制文件,再进行链接生成.exe可执行文件
  •   ④本博客内容适合冲击期末考试和新手补充知识参考黑色文字内容均为重点。主要是记录个人成长,有错误还请大神们指点。

 如何创建一个项目

 

 

 

 第一个C语言程序

#include<stdio.h>
int main()
{
 //该程序的执行效果为打印Hellow,Wolrd
 printf("Hello,World");
 return 0;
}

 接下来我们讲解一下这个程序:

  • 程序的第一行#include<stdio.h>是预处理器指令,告诉C编译器在实际编译之前要包含stdio.h文件。库函数的使用,得包含对应的头文件。而stdio.h是什么意思:std-standard-标准,i-input-输入,o-output-输出。
  • int main() 是主函数,程序从这里开始执行,main即程序的入口,一个程序只能有一个main函数,而int则表示返回值是一个整形,后面的()是函数的调用形式。
  • C语言的语句通常用{}包裹
  • //表示注释这一行代码,被注释的代码不会被计算机识别,注释的作用是让别人能够读懂程序
  • printf()是输出函数,由头文件stdio.h给出,这也是为什么程序要包含头文件的原因 
  • 补充一个输入函数scanf();它的调用语法为scanf(“%格式”,变量地址),获取键盘上输入的值,并且复制给变量。举例:scanf("%d",&a);&是取地址,意思是把数据存放到变量a的地址对应的空间中,%d则是变量对应的数据类型的输入格式。scanf函数在调用失败的时候,读取失败的时候,会返回EOF。EOF -- end of file,它的值通常是-1
  • return 0;表示终止main()函数,并且返回一个整形0,和int main相对应
  • C语句通常以分号;结尾

基本数据类型

①C语言中,基本数据类型主要有整型和浮点型。

整型:char,int,short,long;

浮点型:float,double;

整形就是整数,浮点型就是带小数点的数。
②各种类型的存储大小与系统位数有关,目前通用的以64位系统为主用sizeof()操作符就可以获取该类型储存时所占字节大小。

示例:

printf("%d",sizeof(int));

sizeof返回的值(即所占字节数)一个无符号整形。

类型的使用:char ch=’a’;int a=100;float 3.823;

C语言没有字符串类型!

变量与常量

C语言中,常量就是不变的值,变量就是可变的值。
1:常量有这样几种

  • 字面常量:这些直接表达出来的就叫字面常量
    20
    3.14
    'a';//字符常量
    "abcdef";//字符串常量
  • const 修饰的常变量

       const float pai = 3.14f;这里的pai是const修饰的常变量,pai实际上是常变量-具有常属性       (不能被改变的属性)。被const修饰以后不能直接再给pai赋值。

        const在语法层面限制了变量不能直接被改变,但它的数据类型还是变量。所以不能用于数组指定大小。

  • #define定义的标识符常量

         比如 #define a=10;

  • enum定义的枚举常量:枚举常量的默认值是从0开始,依次向下递增1的
    enum Sex
    
    {
    
    MALE,//0
    
    FEMALE,//1
    
    SECRET//2
    
    };

 2:局部变量和全局变量
①定义:

  • 局部变量:定义在代码块{}内
  • 全局变量:定义在代码块{}外

②说明:

  • 局部变量和全局变量名字相同时,局部变量优先使用
  • 跨文件调用全局变量需要用extern声明。比如有两个.c源文件,在其中一个文件中定义一个int a=10;在另一个源文件中想要调用这个a,就需要extern int a;才可以调用

②变量的作用域和生命周期

  • 作用域:变量在哪个范围里面能用,这个范围就是它的作用域

       全局变量的作用域是整个工程,局部变量的作用域是变量所在的局部范围。(局部范围是         代码块{})

  • 生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

       局部变量的生命周期:进入局部范围,生命周期开始。出局部范围,生命周期结束
       全局变量的生命周期:整个程序的生命周期

字符串与转义字符

  • 字符串:由双引号引起来的一串字符称为字符串字面值,简称字符串。字符串的结束标志是一个‘\0’的转义字符。在计算字符串长度的时候 '\0'是结束标志,不计算长度,但\0占用了实际内存。
  • 计算字符串的长度,需要用到的函数:strlen(),全称:string length。该函数所在的头文件为string.h。strlen实际上是从字符串起点开始往后找\0,然后计算期间走过了多少个字符数
  • 转义字符:顾名思义就是转变意思
转义字符 释义
\? 书写多个问号时使用,防止被解析成三字母符
\’ 表示字符常量’
\” 表示字符串内部的双引号
\\ 表示一个反斜杠,防止被解析成转义序列符
\a 警告字符,蜂鸣
\b 退格符
\n 换行符
\f 进纸符
\r 回车
\t 水平制表符
\v 垂直制表符
\ddd 表示一个八进制数字,比如\130表示X
\xdd

dd表示两个十六进制数,比如\x30表示0

这里对最后两个转义字符进行解释说明:\ddd和\xdd实际上是转为10进制后,以ASSIC码形式存入char。

 选择语句

C语言是一门结构化的程序设计语言。包括顺序结构,选择结构,还有循环结构。

顺序结构就是顺着往下进行,接下来我们介绍选择结构。

#define _CRT_SECURE_NO_WARNINGS 1//在VS2019必须对这个常量进行赋值,否则会报错,且必须放在第一行

#include <stdio.h>

int main()

{

    int input= 0;

    printf("你要好好学习吗?会0/不会1");

    scanf("%d",&input);//获取键盘输入的数值,并赋值给input

    if (input == 0)//如果满足input==0

    {

        printf("一切都会好的");

    }

    else//否则

    {

        printf("回家种地吧");

    }

    return 0;

循环语句

#include <stdio.h>

int main()

{

    int line = 0;//定义一个整型变量

    while (line < 30000)//当line小于30000的时候,执行循环

    {

        line++;//line自增1

        printf("循环了%d次", line);//输出执行循环的次数

    }

    return 0;

函数

//这是一个调用函数来进行加减法的程序

#define _CRT_SECURE_NO_WARNINGS 1//不加这个会出现报错

#include <stdio.h>

int Add(int x, int y)//因为返回值sum为一个整型,所以Add函数的定义也为一个整型,x,y对应num1,num2。也为整型

{

    int z;

    z = x + y;//运算部分

    return z;//返回运算结果z给sum

}

int main()

{

    int num1 = 0;

    int num2 = 0;

    scanf("%d%d", &num1, &num2);//获取键盘输入的两个值,依次赋值给num1,num2

    int sum = Add(num1, num2);//把运算委托给Add函数,Add运算完之后,就返回一个数值赋值给sum。

    printf("%d\n", sum);

    return 0;

}

数组

数组的定义:一组相同类型元素的集合
数组的每个元素都有一个下标,下标是从0开始的。

比如:

int arr[10]={1,2,3,4};//定义一个整形数组,[10]即给出10个空间,最多放10个元素。这里只放了四个,不完全初始化,未存放的空间全部自动存放\0


数组是用下标来访问的,比如要访问上面的arr中的第一个元素,就是arr[0]

操作符

A.算数操作符

+ – *乘以 /除以 %取余

整型/整型得到的结果也是整型,整型/浮点型得到的则是浮点型

%要求两个值都为整型
B.移位操作符

>>右移 <<左移

这个移位指的是左右移动二进制位

比如int数据是4个字节,32个bit,即32个二进制位
如int a=1的二进制表达是00000000000000000000000000000001

a<<1就是左移一个二进制位,左边去掉一个0,右边补一个0,即00000000000000000000000000000010,它的十进制值就变为了2
C:位操作符

&按位与 ^按位异或 |按位或

比较两个数的二进制位然后输出结果。在C语言中,0为假,1为真。
按位与:两者为真则为真,只有对应的两个对应二进位都为1时,结果才为1。两个数均以补码出现。
按位或:参加运算的两个数的二进制位只要两个数中的一个为1,结果就为1
按位异或:参加运算的两个数的二进制位不同则为1,否则为0

D.赋值操作符

= 把右边操作数的值赋给左边操作数
+= 加且赋值运算符,C+=A相当于C=C+A
-= 减且赋值运算符,C-=A相当于C=C-A
= 乘且赋值运算符,C=A相当于C=C*A
/= 乘且赋值运算符,C/=A相当于C=C/A
%= 求模且赋值运算符,C%=A相当于C=C%A
^= 按位异或且赋值运算符,C ^= 2 等同于 C = C ^ 2
|= 按位或且赋值运算符,C |= 2 等同于 C = C | 2
>>= 右移且赋值运算符,C >>= 2 等同于 C = C >> 2
<<= 左移且赋值运算符,C <<= 2 等同于 C = C << 2

E.单目操作符
 

!                           逻辑反操作 假0,真则非0
–                           负值
+                           正值
&                           取地址
sizeof                      操作数的类型长度(以字节为单位)
~                           ~对一个数的二进制补码按位取反,不考虑符号位
—                           前置:先–,后使用 后置:先使用,后–
++                          前置:先++,后使用 后置:先使用,后++
*                           间接访问操作符(引用操作符) 用于指针
(类型)                      强制类型转换 例如(int)3.14输出后为3


F.关系操作符

>             >=       <       <=      !=不等于      ==等于

G.逻辑操作符

&&逻辑与,两者都为真,才为真
||逻辑或,两者中一个为真,则为真 !逻辑反操作符,用来逆转逻辑真假

H.条件操作符(三目操作符)

?:
exp1 ? exp2 :exp3

含义:若exp1成立,则exp2计算,整个表达式结果为exp2的结果;若exp1不成立,则exp3计算,整个表达式结果为exp3的结果
I.逗号表达式:逗号隔开的一串表达式从左向右依次计算,整个表达式的结果是最后一个表达式的结果。(exp1,exp2,exp3)结果就是exp3;
J.下标引用,函数调用,结构成员

[]      在数组中,下标引用[],比如arr[0],表示取数组arr第一个元素
()      调用函数的时候,函数后面的()就是函数调用操作符
.       在结构体中,通过结构体变量.成员变量访问到成员变量
->      结构体指针->成员名 

关键字

关键字由C语言提供,不能自己创建关键词。变量名不能是关键字。
常见的关键字如下:

auto break case char const continue default do double else enum
extern float for goto if int long register return short signed
sizeof static struct switch typedef union unsigned void volatile while
  • auto 自动变量-每个局部变量都由auto修饰,自动创建,自动销毁,但auto省略掉了。
  • regiser 寄存器关键词,大量或频繁被使用的关键词,放在寄存器中,提升效率。但目前的编译器通常可以自动处理进行内存优化,所以regiser存在与否都不重要了。
  • typedef 对类型进行重命名 比如typedef unsigned int uint_32把无符号整型简写为unit_32,之后调用即可直接调用缩写。
  • static 用于修饰变量与函数:①修饰局部变量增长了局部变量的生命周期,让静态局部变量出了作用域依然存在,直到程序结束,生命周期才结束,但并没有改变作用域!②一个全局变量本来是具有外部链接属性的,被static修饰后外部链接属性就变成了内部链接属性,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用③一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

补充:static修饰的变量和全局变量如果不初始化默认存放0!

常量和宏

#define是一个预处理指令,既可以定义常量,也可以定义宏。
1.定义常量

#define PA 3.14

2.定义宏

#define ADD(X,Y) ((X)+(Y)) 

在定义宏时,运算部分需要加括号,防止产生bug!
调用宏,就跟函数一样,把参数委托给宏即可。比如ADD(2,3)

预处理指令实质上是在程序的预编译阶段发生了替换。

 

指针

内存的定义:内存是计算机上重要的存储器,计算机中的程序都是在内存中运行的
为了能够有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址
变量是创建在内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的
那么,地址又是如何储存的呢,就需要定义指针变量了。见实例:

 

int main()
{
int num = 10;
int* p = &num//定义一个指针变量,把num的地址储存在p之中。int表示指针的指向对象类型为int,*表示p是指针变量
*p = 20;//解引用操作,*p就是通过指针中储存的地址找到num,然后对num进行赋值
printf(“%d”,num);//所以输出结果为20
return 0;
}

指针变量的大小取决于地址的大小:指针大小在32位平台是4个字节,64位平台是8个字节。

32位平台有32根地址线,32根地址线产生32个0,1的二进制序列,即32个bit,即4个字节。

64位平台有64根地址线,64根地址线产生64个0,1的二进制序列,即64个bit,即8个字节。

结构体

struct Stu//定义一个结构体
{
char name[20];//名字
int age; //年龄
char sex[5]; //性别
char id[15];//学号 这些都属于成员变量
};
int main()
{
struct Stu s = { “张三”,20, “男”, “20180101” };//把信息存进s中
printf(“name = %s age = %d sex = %s id = %s\n”, s.name, s.age, s.sex, s.id);//.为结构成员访问操作符。格式为结构体变量.成员变量
struct Stu* ps = &s;//将获取到的地址存进指针
printf(“name = %s age = %d sex = %s id = %s\n”, ps->name, ps->age, ps->sex, ps->id);//这样同样可以打印,->操作符的用法:结构体指针->成员名。
return 0;
}

那么通过以上的案例,我们已经初步认识C语言了,接下来我们将学习初阶C语言,正式步入c语言的殿堂。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初阶C语言(1)-6200字带你初识C语言 的相关文章

随机推荐

  • C++ 变量类型

    变量其实只不过是程序可操作的存储区的名称 C 中每个变量都有指定的类型 类型决定 了变量存储的大小和布局 该范围内的值都可以存储在内存中 运算符可应用于变量上 变量的名称可以由字母 数字和下划线字符组成 必须以字母或下划线开头 因为 C 对
  • webpack--loader执行顺序

    正常来讲一个文件只能被一个loader处理 当一个文件要被多个loader处理 那么一定要指定loader的先后顺序 test js exclude node modules 以下属性是设置优先执行 pre true loader esli
  • 在线调整ext3磁盘容量

    调整前先用 tar cf disk home tar home 进行打包备份 1 查看磁盘分区情况 fdisk l Disk dev sda 291 9 GB 291999055872 bytes 255 heads 63 sectors
  • shiro ajax权限拦截器,Shiro Ajax请求权限不满足,拦截后解决方案

    Java模拟Http请求 Java模拟Http请求 使用的是org apache httpcomponents中的httpclient 因为post请求涉及到传输文件 所以需要使用httpmime这个包 centos7 上安装mysql5
  • 交换机的三种端口

    交换机 一个wan口多个lan接口 交换机功能 实现连接lan接口的设备之间与wan口连接的网络的通信与通信控制 交换机有三种类型的端口 access trunk hybind access 端口连接 pc等设备 可将此类端口划入某vlan
  • 微信小程序 延时执行 设置固定时间间隔

    setTimeout function 要延时执行的代码 2000 延迟时间 这里是2秒 微信小程序中的函数想要延时执行 等一段时间后再执行采用以上代码
  • K最近邻算法(KNN)---sklearn+python实现

    k 近邻算法概述 简单地说 k近邻算法采用测量不同特征值之间的距离方法进行分类 k 近邻算法 优点 精度高 对异常值不敏感 无数据输入假定 缺点 计算复杂度高 空间复杂度高 适用数据范围 数值型和标称型 k 近邻算法 kNN 它的工作原理是
  • Http的GET请求与POST请求调用接口

    GET请求 public static String doGet Map
  • FFmpeg,Fplay,clion调试环境搭建

    本系列 以 ffmpeg4 4 源码为准 本文主要讲解如何搭建 ffplay 的CLion调试环境 ffmpeg 在 Linux 环境下更好调试 本文系统是 Ubuntu 18 首先下载 FFmpeg n4 4 1 zip 虽然 FFmpe
  • ESP8266与网络服务器实时通讯

    目前 所有已呈现的通信都是基于请求响应方法的 其中一个实体正在发送请求 另一实体正在发送回响应 但是在某些情况下 您需要ESP8266模块与服务器之间的实时通信 而不仅仅是事务 实时通讯协议 ESP8266流数据 要从ESP8266流传输数
  • 【Ranger】编译问题An Ant BuildException has occured: exec returned: 1

    先看一下报错的信息 ERROR Failed to execute goal org apache maven plugins maven antrun plugin 1 7 run generate version annotation
  • 数学建模竞赛常考四大模型总结【预测模型、分类模型、优化模型、评价模型】

    目录 1 预测模型 1 1 神经网络预测 1 2 灰色预测 1 3 拟合 插值预测 线性回归 1 4 时间序列预测 1 5 马尔科夫链预测 1 6 微分方程预测 1 7 Logistic 回归 逻辑回归 1 8 线性回归 总结 应用场景 2
  • centos7中iptables配置log日志记录所有流量

    CentOS 7 0默认使用的是firewall作为防火墙 使用iptables必须重新设置一下 1 直接关闭防火墙 systemctl stop firewalld service 停止firewall systemctl disable
  • c语言编译器mingw的使用说明,C语言编译器MINGW的使用说明

    在mingw环境中生成和使用dll都是十分方便的 1 生成dll gcc g shared o test dll test c 一直用VS 看现在Eclipse很火 便想弄一下玩玩 用到了MINGW 继而用到了GCC 对GCC相当的不熟悉
  • [JS] Flatten array

    拍平数组 这个在lodash里也是很常见的方法 那自己实现一个看看 普通拍平 const flatten arr gt concat arr map v gt Array isArray v v v 测试 flatten 1 2 3 4 5
  • 【历史上的今天】1 月 16 日:互联网工程任务组(IETF)成立;AMD 收购 NexGen;eBay 的第一位员工出生

    整理 王启隆 透过 历史上的今天 从过去看未来 从现在亦可以改变未来 今天是 2022 年 1 月 16 日 在 25 年前的今天 国家电力公司组建成立 电力是运作着我们生活的基本 国家电力公司成立于 1997 年 1 月 16 日 于 2
  • Text-To-Speech(TTS)语音朗读

    Text To Speech TTS 语音朗读 更新 2010 04 08 来源 互联网 字体 大 中 小 TextToSpeech简称 TTS 是Android 1 6版本中比较重要的新功能 将所指定的文本转成不同语言音频输出 它可以方便
  • 微软消息队列-MicroSoft Message Queue(MSMQ)队列的C#使用

    什么是MSMQ Message Queuing MSMQ 是微软开发的消息中间件 可应用于程序内部或程序之间的异步通信 主要的机制是 消息的发送者把自己想要发送的信息放入一个容器中 我们称之为Message 然后把它保存至一个系统公用空间的
  • 大一上期Python考前复习

    初识Python考试前复习 Python介绍 基本语法 1 赋值语句 2 del语句 3 if 语句 4 for循环语句 4 while循环语句 4 1循环下的语句 数据类型 1 数据可变性 2 数据类型 2 1 格式化输出 3 列表 字典
  • 初阶C语言(1)-6200字带你初识C语言

    目录 前言 如何创建一个项目 第一个C语言程序 基本数据类型 变量与常量 字符串与转义字符 选择语句 循环语句 函数 数组 操作符 关键字 常量和宏 指针 结构体 前言 本节旨在初步认识C语言 有的知识在之后会详细讲 C语言是一门面向过程的