C语言之顺序程序设计学习笔记

本文详细介绍了C语言的基础知识,包括数据类型、变量、常量的概念,以及如何进行数据运算和类型转换等内容。此外还讲解了输入输出操作,并通过实例帮助读者更好地理解和掌握。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,前言

看到顺序二字,大家会想到什么,是不是类似1,2,3…有顺序的,不是乱序的。那么顺序程序设计,也是这么一个道理。顺序的。执行完这行语句之后就是下一行,然后是下下一行,以此类推,直到程序结束。按顺序一行一行都程序。

说到这里,是不是感觉这一章内容就结束了。No!我们现在开始。

2,数据的表现形式及其运算

2.1,常量和变量

这两个量大家都在初中,高中接触过,常量不变的量;变量变化的量。

2.1.1,常量

常量分很多种,我们一一说明。

  1. 整型常量:通常是整数。1001234、0、-22\

  2. 实型变量:有两种表现形式

    小数(十进制):3.14、1.0、-55.56等等

    指数形式:12.34e3(代表:12.34×10^3,3次方)e可以写成E,但是前面可以有数字,后面必须是整型。

  3. 字符常量:两种形式

    普通字符:‘a’、‘Z’、‘3’、’?’,不可以写成’ab’或’12’。用一对单撇号括起来,只能是一个字符。字符常量存放在计算机中并不是存入了一个字符,而是对应的ASCII码,“A’和’a’是不一样的,'A‘的ASCII码是65,而’a’的ASCII码是97。一个标点符号,也会有对应的ASCII码。可以参考一下谭浩强老师的《C程序设计》。重点关注下”A’‘Z’,‘a’'z’这两部分

    这部分内容网络上有很多。不在叙述。或者后后期补充

  4. 转义字符、

    这是一种特殊的字符变量,

    这部分内容网络上有很多。不在叙述。或者后后期补充

  5. 字符串常量:“boy”、“123”、“您好”等等。注意这里是双撇号,单撇号可以括一个字符,而双撇号可以括多个字符。

  6. 符号常量:用#define 指令,指定一个符号名称成为一个常量。

    这个考试遇到了,幸好我在考试之前遇到过,但不知道具体有什么用。说到这个了我们就看看这个有什么用叭

    #define p1 3.14 
    

    这里好像不应该用定义描述,指定。指定后所有的p1都代表3.14。这样做有什么好处呢?含义清晰。可以知道p1就是圆周率,3.14嘛。好修改,这个在这好多地方都用到了p1,“一改全改”,我们看一下

    define使用

2.1.2变量

这个字面意思,可以变得量

之前提过C语言是静态语言。因此在使用时需要确定他变量的数据类型。所以时刻记住一句话,先定义,后使用。怎么定义一个变量呢?[数据类型] [变量名] [变量值]由三部分或者两部分组成,因为变量值可以是从键盘输入获取。

int a=1;
float c;
char s;
int a, b, c=1;

可以一次定义一个变量,也可以是一次定义多个变量。

2.1.3,标识符

什么是标识符呢,还有变量名好像也没有说清楚。说白了就是命名。为变量、数组、函数等等命名,这个命名我们就称为标识符。

命名是有规则的,我们来看看,

标识符只能用数字、字母和下划线组成,第一个字符必须是数字。大小写敏感。

不可以用C语言关键做标识符。

2.3,数据类型

变量的命名方式是什么?我们在回顾一下。

[数据类型] [变量名] [变量值]

会有人问一下数据类型是什么?好部分可能有点长,我们一起看看。

先说一下为什么C语言会提出这一概念,而仅是C语言在Java、python中这一点也可以看出来。

在计算机中,数据是存放在存储单元中的,它是具体存在的,而且,存储单元是由有限的字节构成的,每一个存储单元存放数据的范围是有限的,不可能存放“无穷的”的数,也不能存放循环小数。

这是书上的原话,还有一个例子

>>> printf("%f",1.0/3.0);
0.333333

在数学中,1/3=0.33333333333333

树上的意思是说每一个数据都有一个内存空间(我们就说他为杯子吧)数据就是水咯。哈哈哈,就说多大的杯子装多大的水。其实还有个问题,我们后面再说。

所谓类型,就是对数据分配存储单元的安排。包括;存储单元的长度(占多少字节)以及数据的存储形式,不同的类型分配不同的长度和存储形式。

这就是我要说的问题,杯子是怎么分配的,在日常生活中杯子里可以说半杯水。但是在计算机中这里是很严格的,不可以有空余,必须是刚刚好。

2.3.1,整数类型

对于我已经学完了这一章的内容,因我们用到的数据长度不一样,所以会把整数类型分有基本整型、长整型、短整型等等,不光是整数型,浮点型也是这样,因为这里我学的不是很清楚,所以我会重新整理一遍。一起看看。

  • 基本型:类型说明符为int,在内存中占2个字节。范围-32768至32767
  • 短整型:类型说明符为short int或short。所占字节和取值范围均与基本型相同。
  • 长整型:类型说明符为long int或long,在内存中占4个字节。
  • 无符号型:类型说明符为unsigned,只存储数值,不存储符号。

以下是整数类型的四种,有没有人会和我一样有同一个疑问,他们是怎么用的,我只?知道他们表示数据的范围不一样。

2.3.2,字符型数据

字符数据是按字符的形式存储吗?答案是不是,按整数形式存储。

  1. 字符与字符代码

    不是说随便一个字符或者字符代码程序就可以识别,而是按照系统的字符集的,且大多数采用ASCII码字符集。包括大小写英文字母、数字,专门符号等等。

  2. 字符变量

    类型说明符为char

    char c='?';
    

    这里看似给c赋了一个字符变量。其实是整数63,? 的ASCII是63。在上面提到过,

2.3.3,实型数据(浮点数)

  • 单精度 float 6~7为位效数字 分配4个字符
  • 双精度 double 15~16位有效数字 分配8个字符

3,运算符和表达式

看到这里我想大家可以猜到这一部分的内容吧,应该是要将加减乘除和式子的事情,毕竟只要写程序,就要有数据参与运算。是不是想跳过这一部分,然后他除了我们传统知道的运算符之外还有很多,他们的优先级也是不一样的。但是说到表达式我的个人感觉是和之前学过的式子是一样的,我们一起来看看

3.1,运算符

运算符含义
算术运算符(+ - * / % ++ – )
关系运算符(> < == >= >== !=)
逻辑运算符(! && ||)
位运算符(<< >> ~ | ^ &)
赋值运算符(=及其扩展赋值运算法)
条件运算符(?:)
逗号运算符(,)
指针运算符(* &)
求字节数运算符(sizeof)
强制类型转换运算符((类型))
成员运算符(, - >)
下标运算符([])
其他(如函数调用运算符())

3.2,算术运算符

运算符含义举例结果
+正号运算符(单目运算符)+aa的值
-负号运算符(单目运算符)-aa的算输负值
*乘法运算符a*ba和b的乘积
/除法运算符a/ba除以b的商
%取余运算符a%ba除以b的余数
+加法运算符a+ba加b的和
-减法运算符a-ba减b的差

3.3,自增自减运算符

什么意思呢?自增:++;自减就是:–,他们的作用就是变量自身加1或者减1.

但是呢这个又会分出两种情况:i++、i–或者++i、–i;你们说他们有什么不同呢,从形式上可以看出来的是变量位置不一样,因此他们的运算顺序也不一样。

  1. i++、i–

    先运算、后自增。

    image

    这个应该怎么理解呢,可以分成两步,a=i++ 等价于a=i (运算)i+1 (自增)

    那么顺着这个思路,i–呢?i--a=1 i=0

  2. i++、i–

    反而这个呢?先自增,后运算,刚好与上面的那个反的。

    那么a=i++ 等价于i=i+i(自增);a=i (运算),

3.4,优先级与结合体

这个是怎么意思呢,就和以前数学学过的一样,运算规律,先算乘除后加减,有括号先算括号。

然而我们也看到了C语言的运算符多了,

这部分内容这一个大表格,网上也有相关内容。这部分用的不多吧,他也经常用。如果是说有考试,那么他就会在这里出题。

3.5,不同类型从混合运算

编写程序那必然少不了数据之间的运算。如果是同类型之间的运算,那还简单,类型一样。比如1+5=61000-100=900

但是呢你说这个怎么办10+3.14=? 你会说这个很简单啊,答案是13.14。但是呢,我感觉我这个举例不好,这个呢,

100+A+3.14=? 这个怎么算呢,有整数、字符、分数。会说这个合法吗

xxx

嘿嘿,合法。

这个我的理解像是数学中的单位转换,1cm和1dm,1kg和1g这个如果做加法或者减法必须是单位统一,而在C语言中类型统一,同时类型还必须是高类型。这个之前我看过一个特别好的例子,500ML的杯子装不下1L的水,但是1L的杯子可以装下500ML的水

我们把A 转换一下就是65,式子变成`100+65+3.14=168.14,

我们看一下下面的那张图,这就是他们的转换规则。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FtNKZ1Hm-1642045162509)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20220108161347205.png)]

要是这么讲100+65+3.14=168.14,还会变成 100.000000+65.000000+3.140000=168.140000,保留两位小数168.14

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lSMsU64U-1642045162510)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20220110155352934.png)]

顺着箭头可以看到double是大哥啊

3.6,强制类型转换

  1. 一般形式(类型名)(表达式)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KWqYlf3Y-1642045162510)(https://cdn.jsdelivr.net/gh/yanghuanh1314/MyPicture@master/image.258n0z5x3gkg.webp)]这是两个能经常用到的叭,但是我们注意一下当浮点数转换整数时并不会四舍五入,而是直接取整数部分。

4,C语句

4.1,C语句的作用和分五种,我们来看看

  1. 条件语句

    语句介绍
    if()…else…条件语句
    for()…循环语句
    while()…循环语句
    do…while()…循环语句
    continue结束本次循环语句
    break终止本次switch或者循环语句
    switch多分支选择语句
    return从函数返回语句
    goto转向语句,在结构化程序中基本不用
  2. 函数调用语句

    用函数调用与分号构成。

    printf("hello world");
    
  3. 表达式语句

    一个表达式加一个分号组成。

    20/2%3;
    
  4. 复合语句

    由多条表达式构成,一组大括号{} 括住。这个也不很难理解,我们也还没有遇到。常用于循环、条件语句中。

    for(int i=0;i<2;i++){
    		for(int j=0;j<3;j++){
    			scanf("%d",&a[i][j]);
    		}
    		printf("\n");
    	}
    

    有个大括号。

  5. 空语句

    ;

    一个分号。有什么作用呢,程序结构清晰,我一般喜欢这一部分介绍后空格,进行下一部分。

4.2,最基本的语句——赋值语句

4.2.1,赋值运算符(=)

这就是一个等于号,看着很简单,也很简单。但是在程序设计中很常用,不仅是C。

4.2.2,复合运算符

在赋值符之前加上其他运算符。类似+=-=*=

什么含义呢

a+=1 等价于a=a+1

a-=1等价于a=a+1

a*=1等价于`a=a*1

这个经长常用到。也很容易记忆。

4.2.3,赋值表达式

之前介绍过什么是表达式,但是什么是赋值表达式呢

赋值表达式的一边形式

变量 赋值运算符 表达式

a = 3*5;

3*5 的值赋给aa=15

4.2.4,赋值过程中的类型转换

这部分好像之前我已经说了一堆,我在说一遍

1,浮点数赋值整数类型

舍取小数部分,

image

2,整数类型赋值浮点数

书里面写了很多,其实就是往后面加0

image

3,双精度赋值单精度

取6~7位小数

4,字符型赋给整数型

这个事和我我们之前提过的ASCII码有关,他返回对应的ASCII码

image

4.2.5,赋值表达式与赋值语句

什么是赋值表达式?变量=表达式:

什么是赋值语句,就是说表达式里面有一个或多个赋值表达式

变量=(变量=表达式)其展开形式变量=变量=.....=表达式举个栗子

a=b=c=d=10/3

image

4.2.6,变量赋初值

这个很简单

int i=1;

6,数据的输入输出

在我的举例中大家也看到了我经常用到的一个函数printf()这是一个输入函数,print的中文也是打印的意思。在python中输出函数直接是print() 直到现在,我也经常把printf写成print。

6.1,输出输入相关概念

  1. 从计算机输出设备输出的数据叫输出,从计算机输入设备输入的数据叫输入
  2. C语言不提供输出输入函数。那么会问这是怎么来的。是由C语言的标准函数库提供的。
  3. 在程序文件的开头使用#include 把有关头文件引入进来。在之前也说过头文件的重要性。

6.2,printf()使用

一般形式

printf(格式控制,输出数列)

会看到由两部分组成,

  1. 格式控制:一般用双撇号括起来的一个字符串。格式控制字符串。里面还包含了两部分信息

    • 格式声明,由%格式字符 组成。像之前提到过的%d%f。还有很多
    • 普通字符:普通字符在输出的时候会原样输出。、
  2. 输出数列:需要输出的数据

    printf("%d,%d\n",a,b);
    

    值得注意的是,格式声明应与输出数列的数据一一对应。在python特意提出了这是槽,槽与数据对于。

格式字符

之前提到了%d%f 那么这些是什么吗意思呢,会不会还有很多。

%d

输出一个十进制数字。可以理解为用这个输出整数。也可以在指定域宽(所占的数列)。

>>> printf("%5d",a);
   10 // 就是说占用了5个字符。
%c

用来输出有一个字符。也可以指定域宽。

你说如果字符变量是一个整数呢,会输出什么。规定如果整数在1~127范围之间,系统会识别成ASCII码,输出对应的字符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MEK2MLc2-1642045162512)(https://cdn.jsdelivr.net/gh/yanghuanh1314/MyPicture@master/image.4t9m1mle5l60.webp)]

s%

输出一个字符串。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-85lvGOOW-1642045162512)(https://cdn.jsdelivr.net/gh/yanghuanh1314/MyPicture@master/image.cw9v15wh8hs.webp)]

%f

用来输出实数,可以说单精度。双精度、长双精度。

基本型用%f。但是如果不指定长度,则整数部分全部输出,小数部分输出6位。

image

小数部分不够6位用0补充,够6位了根据第7位四舍五入。和上面提到的不一样。

如果说保留两位小数呢?可以用到%m.nf 什么意思呢

7.2%f 这个数占7列,保留两位小数。因此可知m 表域宽n表小数位数

image

类似这样,我们多半不用域宽写成%.2f 即可。

数据左对齐,%-m.nf 可以说加个杠。

目前经常用到的应该就是%d%f 格式字符还有很多,我在这不一一说明了。

6.3,scanf()的使用

可以从输入设备输入数据

一般形式

scanf(格式控制,列表地址)

scanf("%d",&a);

格式控制是和printf()中的格式控制一致。出现了一个新的名词,列表地址。

列表地址是由多个地址组成,可以是变量地址,也可以是字符串首地址。

注意事项
  1. 上面说过格式控制,当我们需要输入什么类型的数据,就用什么。常用的有三个%d输入整数数据、%f输入浮点数数据、%c 输入字符数据。

  2. 介绍一个符号& 取地址符,什么是取地址符呢。我也不是很清楚。这个我们在指针部分继续研究

  3. 如果是输入多个变量呢,可以这样。

    scanf("%d%f%c",&a,&f,&c)
    
    scanf("%d%f%c",&a,&f,&c)
    

    一次性可以输入多个数据,但是要注意地址列表里的数据应与格式控制里的内容一一对应。

    其次是输入数据也是有规律的,。

    scanf("%d%d%d",&a,&b,&c);
    

    可以输入成1 2 3 注意用空格隔开

    scanf("%d%f%c",&a,&f,&c)
    

    可以输入成1,2,3 注意用,隔开

    所以看格式控制中是怎么指示的,数据就怎么输入。

6.4,字符输出输入函数

putchar() 输出一个字符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FCj5ghy1-1642045162513)(https://cdn.jsdelivr.net/gh/yanghuanh1314/MyPicture@master/image.dz9kc212s3c.webp)]

如果定义3个整型变量呢?

image

之前也是提到过这个问题,输出对应的ASCII码。

getchar() 输入一个字符

image

是需要连续输入三个字符,用输入getchar()输入进去,之后在用putchar()打印出来。

如果不是连续输入三个字符。输入一个字符,我就enter回车。系统会这样处理 。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wflkzelc-1642045162514)(https://cdn.jsdelivr.net/gh/yanghuanh1314/MyPicture@master/image.34n24sejhv20.webp)]

开始我以为是我我的问题。我们看看是怎么回事。、

我发现了一个事,连续输入三个字符输出时没有换行,而我输入一个字符后回车输入,而输出时换行了。

其实我们还是输入了三个字符。转义字符也是字符的一种。好我就直接说了。

我们输入b后回车看着输入了一个字符,其实是两个字符,把b赋值给了a,紧接着回车就是换行符赋值给了b,输入o再回车,我们规定了只能输输入三个字符,所以就,是不是有点乱。可以说我们输入了三个字符b \n o 所以就。

也说明了一件事:在输入信息时,不是说一个回车就可以把数据送计算机中。而是先暂存在缓冲区,之后按下enter后将这些字符全部送到计算机中个字符。转义字符也是字符的一种。好我就直接说了。

我们输入b后回车看着输入了一个字符,其实是两个字符,把b赋值给了a,紧接着回车就是换行符赋值给了b,输入o再回车,我们规定了只能输输入三个字符,所以就,是不是有点乱。可以说我们输入了三个字符b \n o 所以就。

也说明了一件事:在输入信息时,不是说一个回车就可以把数据送计算机中。而是先暂存在缓冲区,之后按下enter后将这些字符全部送到计算机中

7,总结

这部分内容比较多,到这里也就结束了。

文中比较难以理解的就是字节了。我现在还是不清楚4个字节,8个字节是什么意思。

刚刚由搜了一下。说是内存条出来数据是二进制,一个二进制数是由八位数构成(0和1)。内存的最小单位是位(bit),存储容量的基本单位是字节(byte,简称b)。现在是这样的,1B=8Bit。但是感觉我还是说不清楚。

这部分内容看起来比较多,很难学,但是在我们编写程序的过程中一般就喜欢用int float char 其对应整数、实数、字符。咱就说小程序。编写软件的话我不知道。初学者。

好了,到这里就结束了。如果有错误的地方请指正,因为我也是正在学习,如果我帮到了您,是我的荣幸。

谢谢大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值