C语言学习分享(第二次)------了解C语言-上

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 这篇文章主要给大家分享基础的C语言知识,让我们对C语言有一个大概的了解,这篇文章会从循环和函数一直讲到指针和结构体,但是都是对于每个知识点的简单认识,不会详细的说明,就是告诉大家C语言有这个东西,在我们后面的学习(文章)中会给大家一一详解,这篇文章很长,知识点多,大家可以看目录按需阅读.现在正式开始我们C语言的学习.(分为两次讲解)

C语言学习分享------了解C语言-上

1. 前言

2. 知识目录

2.1 数据类型

2.2 变量

2.2.1 定义变量的方法

2.2.2 变量的命名

2.2.3 变量的分类

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

2.3 常量

2.4 字符串,转义字符,注释

2.4.1 字符串

2.4.2 转义字符

2.4.3 注释

2.5 选择语句

2.6循环语句

3.总结

1. 前言


这篇文章主要给大家分享基础的C语言知识,让我们对C语言有一个大概的了解,这篇文章会从循环和函数一直讲到指针和结构体,但是都是对于每个知识点的简单认识,不会详细的说明,就是告诉大家C语言有这个东西,在我们后面的学习(文章)中会给大家一一详解,这篇文章很长,知识点多,大家可以看目录按需阅读.现在正式开始我们C语言的学习.(分为两次讲解)


2. 知识目录


2.1 数据类型


首先我们来看看C语言的数据类型


char        //字符数据类型
short       //短整型
int         //整形
long        //长整型
long long   //更长的整形
float       //单精度浮点数
double      //双精度浮点数


我们先来看看short,int,long类型,我们可以看见他们都是整型,整型就是整数的意思,从名字我们可以推断long类型存储的整型应该比

int类型要"长",那么这个"长"具体是指的什么呢?那我们不得不引出计算机中的单位.下图:


aca2b1ef59e2ebe4273f5a82d7157e8.png


我们比较熟悉的单位有MB.GB,但是在计算机存储中的最小单位是比特位,比特位过了还有一个单位是字节,像我们熟悉的公司字节跳动的英文就为ByteDance.那么我们这个地方的int数据类型就占用4个字节,short类型占用两个字节,long类型占用8个字节,我们可以用sizeof这个关键字,sizeof可以计算变量和类型大小(单位为字节)

#include <stdio.h>
int main()
{
    printf("%d\n", sizeof(char));        //输出1
    printf("%d\n", sizeof(short));       //输出2
    printf("%d\n", sizeof(int));         //输出4
    printf("%d\n", sizeof(long));        //输出8
    printf("%d\n", sizeof(long long));   //剩下的大家可以自己去验证
    printf("%d\n", sizeof(float));
    printf("%d\n", sizeof(double));
    printf("%d\n", sizeof(long double));
    return 0;
}


注意:存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。

类型的使用:这里的ch,weight,salary是我们自己取的变量名,可以取不一样的名字.

f7bfae7dd8a99d1cb9428b65e50f716.png


2.2 变量


生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)

有些值是可变的(比如:年龄,体重,薪资)。

不变的值,C语言用常量的概念来表示,可以变的值则用变量来表示.


2.2.1 定义变量的方法

这里的age,weight,ch这些变量初始化之后,是可以改变它的值的


466c8265fa0fc7c57f17f0c639fc5dd.png

2.2.2 变量的命名

我们说上面的age,weight都是变量名,是我们自己定义的,所以我们定义变量名时要遵守C语言的规则

b82b3ded556cd69c1b77b69e5b372d7.png


值得注意的是C语言中对于大小写是十分敏感的,我们定义a和A是完全两个不一样的变量名,在使用时也要避免混淆


2.2.3 变量的分类

变量我们分为局部变量和全局变量.在我们大括号{}里定义的变量都是局部变量,包括main函数里,循环语句里面,自定义函数里创建的变量都叫局部变量


#include <stdio.h>
int global = 2019;//全局变量
int main()
{
    int local = 2018;//局部变量
    //下面定义的global会不会有问题?
    int global = 2020;//局部变量
    printf("global = %d\n", global);
    return 0;
}


总结:1.上面的局部变量global变量的定义其实没有什么问题的!

2.当局部变量和全局变量同名的时候,局部变量优先使用.

3.关于局部变量和全局变量的更详细的解释我会在<<c和指针>>第三章详解说明.


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

作用域:即变量起作用的区域


局部变量的作用域是变量所在的局部范围。(在{}内起作用,出了{}就销毁了)

全局变量的作用域是整个工程。

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


局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。

全局变量的生命周期是:整个程序的生命周期。

2.3 常量


C语言中的常量和变量的定义的形式有所差异。

C语言中的常量分为以下以下几种:


字面常量

const 修饰的常变量

#define 定义的标识符常量

枚举常量

举个例子:


#include <stdio.h>
//举例
enum Sex//枚举常量,如果不给MALE赋初始值,它默认为0(FEMALE为1以此类推),它只能初始化赋值(或者不初始化)                            
{       //初始化后再改变它的值会报错
 MALE,  //关于枚举的详解我们将放在后期的结构体当中
 FEMALE,
 SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
    //字面常量演示
    3.14;//字面常量
    1000;//字面常量
    //const 修饰的常变量
    const float pai = 3.14f;   //这里的pai是const修饰的常变量
    pai = 5.14;//是不能直接修改的!
    //#define的标识符常量 演示
 #define MAX 100//这里MAX被定义为常量100,以后的程序中出现MAX将自动替换为100,且不可修改
    printf("max = %d\n", MAX);
    //枚举常量演示
    printf("%d\n", MALE);

上面例子上的 pai 被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了

变量 pai 不能直接被改变,但是 pai 本质上还是一个变量的,所以叫常变量。




2.4 字符串,转义字符,注释


2.4.1 字符串

“hello world!”

这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。

注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串

内容。 我们来看看下面这段代码,来了解一下\n的重要性


#include <stdio.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
int main()
{
    char arr1[] = "hangdian";
    char arr2[] = {'h', 'd', 'u'};
    char arr3[] = {'h', 'd', 'u', '\0'};
    printf("%s\n", arr1);
    printf("%s\n", arr2);
    printf("%s\n", arr3);
    return 0;
}


我们在编译器上打一下上面代码执行后会发现第一行打印出hangdian,第二行打印了hdu后,后面可能会出现烫烫烫,然后第三行会正常打印出hdu.我们发现只有第二行是由异常的,这时因为它在初始化字符串数组时只初始化了’h’,‘d’,‘u’,没有’\0’.所以当printf函数读到’u’时不会停止,它会一直往后走直到找到’\0’.我们还可以利用一些strlen函数来深入认识一下’\0’的重要性.(strlen函数是计算字符串长度的函数,遇见’\0’停止.单位是字节,返回一个整数,后期会详细解释)


#include <stdio.h>
#include<string.h>//使用strlen需要包含的头文件
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
int main()
{
    char arr1[] = "hangdian";
    char arr2[] = { 'h', 'd', 'u' };
    char arr3[] = { 'h', 'd', 'u', '\0' };
    int a = strlen(arr1);
    int b = strlen(arr2);
    int c = strlen(arr3);
    printf(" %d\n %d\n %d\n", a, b, c);
    return 0;
}


我们可以猜一下第一行打印出来是可能是8,因为hangdian一共8个字符.


5c9b61ac3a6b03141fd90f0b61769e6.png

第一行和第三行都是正常的结果(和前面printf一样),但是第二行给我们输出了一共35,注意这里的35是随机值,不同的电脑或者不同的编译器都会得到不同的答案,我这台电脑是走到第35个才找到’\0’.


2.4.2 转义字符

值得注意的是,在我们讲转义字符前我们就已经在printf函数中使用过 \n 这个用法,这个\n就是一共转义字符,它的意思是换行.还比如假如我们要在屏幕上打印一些东西 c:\code\test.c 我们该如何写代码?

如果我们直接这样打印


#include <stdio.h>
int main()
{
 printf("c:\code\test.c\n");
    return 0;
}
1


我们会发现屏幕上会出现这些东西:c:code est. c.和我们期望的不太一样,


e1d9759d7a38289fd8d0af6924b8533.png

这里就不得不提一下转义字符了。转义字符顾名思义就是转变意思。

下面看一些转义字符:


/? -----------在书写连续多个问号时使用,防止他们被解析成三字母词

\’ ------------用于表示字符常量’

\“ ----------- 用于表示一个字符串内部的双引号

\ ------------ 用于表示一个反斜杠,防止它被解释为一个转义序列符。

\a ---------- 警告字符,蜂鸣

\b -----------退格符

\f ----------- 进纸符

\n ---------- 换行

\r ----------- 回车

\t ----------- 水平制表符

\v -----------垂直制表符

\ddd ----------d d d表示1~3个八进制的数字。 如: \130 表示字符X

\xdd ----------d d表示2个十六进制数字。 如: \x30 表示字符0


当我们了解了上面的转义字符后,我们现在就可以把c:\code\test.c打印在屏幕上了

值得我们注意的是C语言还给我们提供了不同的打印类型来帮助我们输出或输入需要的数据类型,如下:


// %c - 字符
// %d - 整型
// %s - 字符串
// %f - float
// %lf - double
// %p - 地址的打印


我们printf函数和scanf函数中输入的%d,%c的原因就来自于此.


2.4.3 注释

注释的作用:


代码中有不需要的代码可以直接删除,也可以注释掉

代码中有些代码比较难懂,可以加一下注释文字

这里对于注释的介绍我不做过多的解释,我们可以跳转到我之前写的博客中阅读(点击后面蓝字)<<C和指针>>问题探讨


2.5 选择语句


如果你好好学习,校招时拿一个好offer,走上人生巅峰。

如果你不学习,毕业等于失业,回家卖红薯。

这就是选择.

c语言中的选择语句有三个,分别是if语句,switch,和条件运算符 A?B:C

下面我们来实现一个简单的if选择语句:


#include <stdio.h>
int main()
{
    int coding = 0;
    printf("你会去敲代码吗?(选择1 or 0):>");
    scanf("%d", &coding);
    if(coding == 1)//if后面括号内容为真就执行下面语句,为假就跳过下面语句到else
   {
       prinf("坚持,你会有好offer\n");
   }
    else//就是coding不等于1的情况
   {
       printf("放弃,回家卖红薯\n");
   }
    return 0;
}



再来看看switch语句的实现:


#include <stdio.h>
int main()
{
    int coding = 0;
    printf("你会去敲代码吗?(选择1 or 0):>");
    scanf("%d", &coding);
    switch (coding)//coding为1就跳到case 1语句,为0就跳到case 0语句
    {
    case 1:
         printf("你会有好offer");
         break;
    case 0:
         printf("回家卖红薯");
         break;
    }
    return 0;
}



条件运算符的代码实现:


#include <stdio.h>
int main()
{
    int coding = 0;
    printf("你会去敲代码吗?(选择1 or 0):>");
    scanf("%d", &coding);
    int ret = coding ? 5 : 10;//coding为真返回5,为假返回10
    if (ret == 5)
    {
        printf("会有好offer");
    }
    else if(ret==10)
    {
        printf("回家卖红薯");
    }
    return 0;
}



大家先做一个了解,详解我们会放在后面学习


2.6循环语句


C语言中的循环语句有while语句,if语句和do…while语句.我们这里先了解一下while语句,if语句和do…while语句我们放在后面讲解.我们先来用一段程序感受一下while语句的执行:


//while循环的实例
#include <stdio.h>
int main()
{
    printf("加入杭电\n");
    int line = 0;
    while(line<=20000)//当line小于等于20000时我们会不断执行下面语句,当line大于20000时会跳出while循环
   {
        line++;
        printf("我要继续努力敲代码\n");
   }
    if(line>20000)
        printf("好offer\n");
    return 0;
}


上面这段代码会在打印20000个"我要继续努力敲代码"后打印"好offer"


3.总结


我们大概了解了一下从数据类型到循环语句的C语言基础知识,为我们后面的深度研究做一个铺垫,由于此模块内容较多,我们后面的函数,数组,操作符,关键字.指针和结构体等将会放在了解C语言-下中讲解.


相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
1月前
|
存储 编译器 C语言
初识C语言——详细入门(系统性学习day4)
初识C语言——详细入门(系统性学习day4)
|
1月前
|
编译器 程序员 开发工具
c语言从入门到实战——在系统学习C语言之前所需要了解的知识
C语言是一种通用的、过程式的计算机编程语言,支持结构化编程、词汇变量作用域和递归等功能,其设计提供了低级别的存取权限,并且要求程序员管理所有的内存细节。C语言的基本构成包括数据类型(如整型、浮点型、字符型等)、运算符(如算术运算符、关系运算符、逻辑运算符等)、控制结构(如顺序结构、选择结构、循环结构等)以及函数等。此外,C语言还提供了指针的概念,这是其他许多编程语言所不具备的。指针是一个变量,其值为另一个变量的地址,通过指针可以间接访问和操作内存中的数据。C语言也支持数组、结构体、联合体等复合数据类型,以及文件操作、动态内存分配等高级功能。
51 0
|
1月前
|
存储 C语言
通俗易懂的学习C语言中输入一组数并找出其最大值
通俗易懂的学习C语言中输入一组数并找出其最大值
|
4月前
|
程序员 编译器 人机交互
深入学习《c语言函数》
深入学习《c语言函数》
43 0
|
4月前
|
编译器 C语言
你的函数使用对了吗?-------C语言函数学习(3)详解
你的函数使用对了吗?-------C语言函数学习(3)详解
50 1
|
4月前
|
存储 C语言
打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上)
打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上)
44 0
|
4月前
|
算法 C语言
你会使用函数的递归和迭代吗?----------C语言函数学习(4)详解
你会使用函数的递归和迭代吗?----------C语言函数学习(4)详解
76 1
|
1月前
|
机器学习/深度学习 人工智能 Java
学习Python语言好还是C语言好
学习Python语言好还是C语言好
21 0
|
1月前
|
C语言
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
72 0
|
1月前
|
C语言
二次学习C语言补缺(day1)
二次学习C语言补缺(day1)
17 2