首页 > 其他分享 >C语言大师之路:从零到王者/新手入门(2)

C语言大师之路:从零到王者/新手入门(2)

时间:2024-06-14 18:29:13浏览次数:11  
标签:新手入门 字节 int 运算符 C语言 零到 printf 表达式

序(一些闲话)

  1. 我希望我的语言不要像专业书那样让人眼花缭乱,所以当我解释语法时,我会尽量避免使用太多专业术语,让说明更容易理解。我会用通俗易懂的语言来解释,而不是像专业书籍那样让人感到困惑。
  2. 本人计划通过文章分享C语言的核心知识点和学习心得。鉴于仍处于学习阶段,文章中可能包含错误或片面观点,因此诚挚欢迎读者的指正。期望与读者共同学习、进步,最终成为入门C语言。
  3. 这个系列文章旨在简要介绍每个C语言知识点,希望读者(也包括自己)能对C语言有一个基本的了解。所以每一步尽量非常详尽 .
    c语言教程

C语言大师之路:从零到王者/新手入门(2)

一、第一个程序 Hello, world!

#include <stdio.h> 是一个预处理命令,它告诉编译器在编译时要包含标准输入输出库。
函数是用来执行特定任务的一段代码,可以重复使用。main 函数是程序的入口点,其中包含了打印 “Hello, world!” 这一操作。


#include <stdio.h> //头文件使我们可以使用C语言库本身就已经提供给我们的函数
int main(){//main函数是程序的入口
//一个工程中main函数有且仅有一个
    printf("Hello, world!\n");//printf()是输出函数,'\n'是换行的意思
	return 0;
}

1. 其中主函数main是程序的唯一入口点。它的类型为int,表明它将返回一个整数作为程序的退出状态码。main一个工程中有且只可以有一个
2. printf()是一个用于格式化输出的函数,它的功能是在屏幕上输出指定的信息。
3. \n是转义字符中的换行符,用于在输出中创建换行。需要注意的是C程序必须从主函数开始执行。
4. return语句用来指定函数的返回值,具体返回值的类型根据函数类型而定。


C语言良好代码要求:
每个语句/声明占据一行
包含头文件时需要单独一行
可执行语句结束时需使用分号
函数体内的语句需要缩进,一般使用Tab键为一个缩进
括号需要成对出现,删除时也需要成对删除
C语言代码规范


二、C语言数据类型


C 语言中的数据类型主要分为以下几类:

一、基本数据类型:

  1. 整型:包括 int、short、long 等
  2. 浮点型:包括 float、double 等
  3. 字符型:char

二、构造数据类型:

  1. 数组:由相同类型的元素组成的数据集合
  2. 结构体:由不同类型的元素组成的数据集合
  3. 枚举:由一组命名的整型常量组成

三、指针数据类型:

  • 用于存储变量的地址

四、空类型:

  • 用于表示空或无效值的数据类型,用关键字 void 表示

数据类型


我们可以使用sizeof运算符来查看每种类型的大小

#include <stdio.h>
int main() {
   printf("Size of char : %d byte\n", sizeof(char));
   printf("Size of int : %d bytes\n", sizeof(int));
   printf("Size of float : %d bytes\n", sizeof(float));
   printf("Size of double : %d bytes\n", sizeof(double));
   return 0;
}

  • 这里是输出结果:
    输出结果

由上图我们可以看出:

  • char占一个字节
  • int 占四个字节
  • float 占四个字节
  • double 占八个字节
数据类型大小
char1 字节
int2 字节
float4 字节
double8 字节

下面我们来看一下整形数据里所占用字节以及取值范围

数据类型字节取值范围
int2字节-32768~32767
short int2 字节-32768~32767
long int4 字节-2147483648 ~2147483647
unsigned int2 字节0~65535
unsigned short int2 字节0~65535
unsigned long int4 字节0~4294967295

编者注

  • 还有一个类型是布尔类型
    1.布尔类型只有两个取值True(真),False(假)
    其中如果为True(真)就输出1
    其中如果为False(假)就输出0

  • 在 C 语言中,short int 和 long int 的取值范围至少符合上述表格中的规定,但是 int 的取值范围受编译环境的影响,可能会有所不同。具体来说,int 的取值范围取决于所占的字节数,而不同的编译器可能会根据其规定选择不同的大小。

  • 根据 ANSI 标准,int 应为 2 个字节,这也是 Turbo C 所遵循的规范,因此在 Turbo C 中,int 确实占据 2 个字节。然而,在 Visual C++ (VC) 中,一个 int 占据 4 个字节。

  • 因此,在实际应用中,为确保代码的可移植性,特别是涉及到整型数据类型的大小和取值范围时,我们要格外小心,并充分了解目标编译环境对数据类型大小和取值范围的规定。

  • 在C语言中,字符串没有一个单独的数据类型来表示,而是以字符数组的形式存在。因此,我们使用字符数组来存储和操作字符串数据。 C语言的字符串本质上是以空字符(‘\0’)结尾的字符数组。


我们再来看一下基本数据类型中的浮点型数据


浮点型即是带小数的数字

浮点型数据类型的存在是为了能够更精确地表示实数(即小数)值。在计算机科学和工程中,许多现实世界的量和测量结果都是小数,例如物理学中的测量数据、金融中的货币数值,以及工程设计中的精确计算等。

由于对于小数值精度和范围的需求不同,浮点型数据类型被分为三种:

  1. float
  2. double
  3. long double

我们接着使用sizeof运算符来查看每种类型的大小

#include <stdio.h>
int main() {
   printf("Size of float : %d bytes\n", sizeof(float));
   printf("Size of double : %d bytes\n", sizeof(double));
   printf("Size of long double : %d bytes\n", sizeof(long double));
   return 0;
}
  • 这里是输出结果:
    输出结果
数据类型字节
float4字节
double8字节
long double16字节

三、变量与常量

C语言中,变量是用来存储和处理数据的标识符,它可以在程序执行过程中改变其值。常量是一个固定的值,在程序执行时不会改变。
变量就好像一个储存盒子,可以装入不同的东西,变的值用变量来表示
常量就像是一个固定的数值或者一个固定的东西,不会变化

  • 例如
 int  a = 10;
 float b = 3.14;

在这段代码中:
a 是一个变量 而 10 为常量
b 是一个变量 而 3.14 为常量

这里就要注意了:
变量必须先定义 后使用


那么变量如何定义呢? 这里就需要用到赋值符号"="
结构是 变量 = 表达式

  • 例如
 int  a = 10;
 float b = 3.14;

变量的分类
变量分为局部变量与全局变量

四、输入输出语句

printf输出函数

printf函数将所有参数按字符类型输出,返回类型为(int)


  • 一个程序必须有一个或多个输出
    但输入可以有零个或多个。

输出格式为:printf("输出格式符",输出项);

让我们以更通俗的方式来解析printf()函数每个参数的作用

功能描述示例代码注释
使用printf打印整数printf("输出的钱是:%d\n", money);%d是一个占位符,用于插入一个整数。这里money是一个整数变量。
解释%d%d%dprintf函数中用于表示整数的转换说明。

在这里插入图片描述
对于上图格式的理解

  1. 首先,让我们用双引号格式字符串括起来
  2. 字面字符:简单来说的话 就是你写什么 计算机就打印什么
  3. 转换说明:是一种指示计算机在特定位置上会放置何种类型数据的指示。
    比如,"%d"表示接下来的数据是一个整数
    计算机在遇到特定的转换说明时,会根据其约定的类型进行数据的处理

转换说明注解
%d带符号的十进制整数(即int型)
%c单词字符(即char型)
%f输出6位小数(即float型)

小补充
%.xf 表示输出的float类型(其中x为想要保留的位数)如不写则默认为6位小数
格式符的个数要与变量、常量或者表达式的个数一一对应

#include <stdio.h>
int main() {
   int  a = 10;
   float b = 3.14;
   char c = 'A';
   printf("输出的int为: %d\n", a);
   printf("输出的float为: %.3f\n", b); //%.xf 表示输出的float类型
   //我这里是%.3f 所以输出会保留三位小数
   printf("输出的char为: %c\n", c);
   return 0;
}

  • 这里是输出结果:
    输出类型
    这里只需要简单地修改 printf 函数中的格式说明符就可以改变输出小数的精度
    默认为保留六位
    读者可以自己试一下

scanf输入函数解析

scanf函数返回(int),该值表示成功按照指定格式正确输入的变量个数。

输出格式为:scanf("输入格式符",输入地址1,输入地址2,....);


让我们以更通俗的方式来解析scanf()函数每个参数的作用

功能描述示例代码注释
输入整数scanf(“%d”, &num);%d是一个占位符,用于接受一个整数输入。这里num是一个整数变量。
解释%d%d%d是scanf函数中用于表示整数的转换说明。
解释&num&num&num 表示获取变量 num 的地址。

在这里插入图片描述

对于上图格式的理解

  1. 首先,让我们用双引号格式字符串括起来
  2. 字面字符:简单来说的话 就是你输入什么 计算机就显示什么
  3. 转换说明:是一种指示计算机在特定位置上会放置何种类型数据的指示。
    比如,"%d"表示接下来的数据是一个整数
    计算机在遇到特定的转换说明时,会根据其约定的类型进行数据的处理
  4. 取地址符:从键盘向计算机输入数据时,需要知道自己的数据存放地址所以取地址符用于获取变量的内存地址。取地址符由一个英文字符“&”表示。它可以放置在变量名之前,以获取该变量的地址。

#include <stdio.h>
int main() {
   int a;// 定义一个整数变量a
   float b;// 定义一个浮点数变量b
   char c;// 定义一个字符变量c
   printf("请输入一个整数: "); // 屏幕提示用户输入一个整数
   scanf("%d", &a);
   printf("请输入一个浮点数: ");// 提示用户输入一个浮点数
   scanf("%f", &b);
   printf("请输入一个字符: ");// 提示用户输入一个字符
   scanf(" %c", &c);
   //输出 自己输入的数字
   printf("输入的整数为: %d\n", a);
   printf("输入的浮点数为: %.3f\n", b);
   printf("输入的字符为: %c\n", c);
   return 0;
}

  • 这里是输出结果:
    在这里插入图片描述
  • 这里我们简单修改了一下上面printf的代码
    使得计算机可以提示我们输入 整数、浮点数、字符。
    并且也输出了整数、浮点数、字符。
    读者可以自己一试

五、运算符、表达式、语句

1.算数运算符

以下是C语言中常用的算数运算符:

运算符名称运算符号示例代码
加法运算符+4+2=6
减法运算符-4-2=2
乘法运算符*4*2=8
除法运算符/4/2=2
取余运算符(模运算符)%4%2=2
自增运算符++int a = 1;a++
自减运算符- -int a = 1;a- -

C语言中没有乘方这个运算符,也不能用×, ÷等算术符号。


  • 读者可以自行尝试运行以下代码,以加深对于运算符的理解:
#include <stdio.h>
int main() {
    int a = 5, b = 3, answer;
    // 算术运算符示例
    answer = a + b; // 加法
    printf("a + b = %d\n", answer);
    answer = a - b; // 减法
    printf("a - b = %d\n", answer);
    answer = a * b; // 乘法
    printf("a * b = %d\n", answer);
    answer = a / b; // 除法
    printf("a / b = %d\n", answer);
    answer = a % b; // 求余
    printf("a %% b = %d\n", answer); 
    // %%表示这里就是一个%符,这里需要注意一下,不然会报错。
    
    // 自增/自减运算符示例
    int x = 5;
    x++; // 自增
    printf("x 自增为: %d\n", x);
    int y = 8;
    y--; // 自减
    printf("y 自减为: %d\n", y);
    return 0;
}

  • 这里是输出结果:
    上面代码运行结果

除法运算就要注意了:
如果被除数和除数都是整数,则它们相除的结果也是整数,小数部分将会被省略。例如,8除以3等于2。
但是,如果被除数或除数中有一个是小数,那么它们相除的结果将是一个小数.举例来说,9.0除以2等于4.500000


这里着重强调一下:i++ 与 ++i的区别 非常重要!
如果看不懂区别的话可以先跳过,后面渐渐就可以理解了(或者多看几遍这里)

这两种方式引用顺序不同:

  • i++是先引用,后增加;(先使用X后改变值)
  • ++i是先增加,后引用;(先改变值再引用)

两个示例代码 分别为i++, ++i。

#include <stdio.h>
int main() {
   int i = 1,x;
   x = i++;//X被赋值为i的当前值,然后i再递增
   printf("i = %d, x = %d\n", i, x);
    return 0;
}
  • 这里是输出结果:
    输出结果
    这里可以看出 我们首先把 i 为1 赋值给了x 然后再进行自增运算
    所以这里 i 为2 x为1.因为i=1时是先赋值给了x 再运算。

#include <stdio.h>
int main() {
   int i = 1,x;
   x = ++i;//x被赋值为递增后的i的值
   printf("i = %d, x = %d\n", i, x);
    return 0;
}

这里因为我们先将 i 增加了 1 然后再赋值给X。
所以这里 i 为2.x也为2.

  • 这里是输出结果:
    ++i

2.关系运算符

以下是C语言中常用的关系运算符:

运算符号说明示例代码结果
> (大于)若X大于y返回真(1)否则为(0)50 > 51
> = (大于等于)若X大于y返回真(1)否则为(0)50 > = 501
< (小于)若X大于y返回真(1)否则为(0)50 < 50
< = (小于等于)若X大于y返回真(1)否则为(0)50 < = 50
== (等于)若X等于y返回真(1)否则为(0)50 = = 50
!= (不等于)若X不等于y返回真(1)否则为(0)50 != 51

在这里需要注意以下事项:
在C程序中,关系表达式的结果通常用整数1表示为真,用整数0表示为假。
在使用关系运算符>=、<=、==、!=时,这些符号之间不能有空格,否则会产生编译错误。


3.逻辑运算符

以下是C语言中常用的关系运算符:

运算符号说明示例代码结果
&&(与)当两边表达式都为真才是真(1),否则为假(0)10&&10
||(或)当两边表达式都为假才是假(0),否则为真(1)10||11
!(非)若X大于y返回真(1),否则为(0)!01

这里需要解释的是

  1. 逻辑与(&&)运算,两侧都需要表达式。当两边表达式都为真才是真(1),否则为假(0)
  2. 逻辑或(||)运算,两侧都需要表达式。当两边表达式都为假才是假(0),否则为真(1)
  3. 逻辑非(!)运算,是一种对逻辑值进行取反的运算。
    当参与运算的逻辑表达式为真时,逻辑非运算的结果为假;
    当参与运算的逻辑表达式为假时,逻辑非运算的结果为真。

    举例来说,对于表达式 !(5>8),因为5不大于8,所以逻辑非运算的结果为真。

4.三目运算符

C语言中的三目运算符,也称为条件运算符,由?和:组成。它的一般形式如下:
表达式1 ? 表达式2 : 表达式3
其执行逻辑为:
如果 表达式1的值为真,则整个表达式的值为表达式2的值;如果表达式1的值为假,则整个表达式的值为表达式3的值。

#include <stdio.h>
int main() {
    int x = 5;
    int y;
    // 使用三目运算符设置变量y的值
    y = (x > 0) ? 10 : 20;
    // 输出y的值
    printf("y: %d\n", y);
    return 0;
}
  • 这里是输出结果:
    在这里插入图片描述

在这个示例中,
当变量x的值大于0时,将变量y的值设为10;否则将变量y的值设为20。


5.其他运算符

以下是C语言中的其他运算符:

运算符号解释示例代码展开
+ =加法赋值的省略写法x + = 10x=x+10
- =减法赋值的省略写法x - = 10x=x-10
* =乘法赋值的省略写法x * = 10x=x*10
/ =除法赋值的省略写法x / = 10x=x/10
% =取余的省略写法x %=10x=x%10

6.各个运算符之间的优先级

  • C语言运算符优先级
优先级运算符名称或含义解释说明
1[ ]数组下标数组名[常量表达式]
( )圆括号表达式
. 成员选择(对象)对象 . 成员名
-> 成员选择(指针)对象指针 -> 成员名
2 - 负号运算符 - 表达式
~ 按位取反运算符~ 表达式
++ 自增运算符++ 变量名 / 变量名 ++
-- 自减运算符- - 变量名 / 变量名 - -
* 取值运算符* 指针变量
& 取地址运算符& 变量名
! 逻辑非运算符! 表达式
sizeof长度运算符sizeof(表达式)
3/表达式 / 表达式
*表达式 * 表达式
%余数整型表达式 % 整型表达式
4+表达式 + 表达式
-余数整型表达式 % 整型表达式
5>大于表达式 > 表达式
> =大于等于整型表达式 > = 整型表达式
< 小于等于整型表达式 < 整型表达式
< =小于等于整型表达式 < = 整型表达式
6= = 等于表达式 = = 表达式
! =不等于整型表达式 ! = 整型表达式
7 & &逻辑与表达式 & & 表达式
8 | | 逻辑或表达式 | | 表达式
9 ? : 条件运算符表达式1?表达式2: 表达式3
10 ,逗号运算符表达式,表达式,
  1. 括号()、方括号[]、箭头->、点.的优先级最高,它们用于限定表达式的计算次序。
  2. 单目运算符的优先级次之,例如正负号、递增递减等。
  3. 算术运算符的优先级紧随其后,按照常见的数学规则,乘除法优先于加减法。
  4. 关系运算符在算术运算符后,用于比较两个值的大小。
  5. 逻辑运算符优先级较低,但高于条件运算符和赋值运算符。
  6. 赋值运算符的优先级高于逗号运算符,逗号运算符是最低优先级的运算符。
  • 简单来说的话就是:初级运算符( )、[ ]、->、. 高于 单目运算符 高于 算数运算符(先乘除后加减) 高于 关系运算符 ** 高于 ** 逻辑运算符(不包括!) 高于 **条件运算符 **高于 赋值运算符 高于 逗号运算符

意气风发,漫卷疏狂
学习是成长的阶梯,每一次的积累都将成为未来的助力。我希望通过持续的学习,不断汲取新知识,来改变自己的命运,并将成长的过程记录在我的博客中。

如果我的博客能给您带来启发,如果您喜欢我的博客内容,请不吝“点赞”、“评论”和“收藏”,也欢迎您关注我的博客。
您的支持是我前行的动力。听说点赞会给运气加分,希望您每一天都能充满活力!

愿您每一天都快乐,也欢迎您常来我的博客。我叫意疏,希望我们一起成长,共同进步。
logo
我是意疏 下次见!

标签:新手入门,字节,int,运算符,C语言,零到,printf,表达式
From: https://blog.csdn.net/2302_79751907/article/details/139598442

相关文章

  • 单向链表————遍历、查找、插入结点 (基于C语言实现)
    #include<stdio.h>#include<stdbool.h>#include<stdlib.h>#include<stdbool.h>//指的是单向链表中的结点有效数据类型,用户可以根据需要进行修改typedefintDataType_t;//构造链表的结点,链表中所有结点的数据类型应该是相同的typedefstructLinkedList{Dat......
  • C语言数据结构实现-静态链表2-基本操作
    上节,我们初步创建了一个静态链表,本节学习有关静态链表的一些基本操作,包括对表中数据元素的添加、删除、查找和更改。本节是建立在已能成功创建静态链表的基础上,因此我们继续使用上节中已建立好的静态链表学习本节内容,建立好的静态链表如图1所示:静态链表添加元素例如,在图1......
  • C语言-运算符
    运算符有几个操作数就是几元运算符1、算术运算符*运算符**描述**操作数个数(几元运算符)**组成的表达式的值**副作用*+正号1操作数本身无-负号1操作数符号取反无+加号2两个操作数之和无-减号2两个操作数之差无*****乘号2两个......
  • C语言数据结构实现-静态链表1-初始化
    《顺序表和链表优缺点》一节,我们了解了两种存储结构各自的特点,那么,是否存在一种存储结构,可以融合顺序表和链表各自的优点,从而既能快速访问元素,又能快速增加或删除数据元素。静态链表,也是线性存储结构的一种,它兼顾了顺序表和链表的优点于一身,可以看做是顺序表和链表的升级版。使......
  • 第一个c语言程序
    我们有两种方式从计算机获得信息:一是看屏幕上的文字、图片、视频等,二是听从喇叭发出来的声音。让喇叭发出声音目前还比较麻烦,我们先来看看如何在屏幕上显示一些文字吧。在屏幕上显示文字非常简单,只需要一个语句,例如,下面的代码会让屏幕显示出“C语言中文网”:puts("C语言中文网......
  • 3个月搞定计算机二级C语言!高效刷题系列进行中
    前言大家好,我是梁国庆。计算机二级应该是每一位大学生的必修课,相信很多同学的大学flag中都会有它的身影。我在大学里也不止一次的想要考计算机二级office,但由于种种原因,备考了几次都不了了之。这一次我想换个目标!备考计算机二级C语言今天山东省考试院发布了关于2024年9月全......
  • C语言练习题05
    练习1:使用二维数组计算杨辉三角#include<stdio.h>#include<string.h>#include<stdlib.h>intmain(intargc,constchar*argv[]){intm,i,j;printf("请输入你所要打印的杨辉三角的列数:\n");scanf("%d",&m);putchar(10);int......
  • C语言练习题04
    练习1:输入一个5个元素的一维数组,实现冒泡排序。#include<stdio.h>#include<string.h>#include<stdlib.h>intmain(intargc,constchar*argv[]){ inttemp; inta[5]={0}; for(inti=0;i<5;i++) { printf("请输入一个数:\n"); scanf("%d"......
  • c语言编译器的分类
    前言在上节《C语言编译和链接》中我们已经讲解了C语言编译器的概念,由于C语言的历史比较久,而且早期没有规范,整个计算机产业也都处于拓荒的年代,所以就涌现了很多款C语言编译器,它们各有特点,适用于不同的平台,本节就来给大家科普一下。我们分两部分介绍C语言的编译器,分别是......
  • C语言题目:排序问题2
    题目描述将十个数进行从大到小的顺序进行排列输入格式十个整数输出格式以从大到小的顺序输出这个十个数样例输入12345678910样例输出10987654321代码解析1.引入头文件代码首先引入了stdio.h头文件,这是C语言标准输入输出库,用于处理输入输出......