C语言学习笔记1:C语言的数据类型和结构

本文介绍了C语言的基础知识,包括如何编写第一个程序,数据类型(如字符型、整型、浮点型和布尔类型)、算术操作符、变量的使用、以及printf和scanf的格式化输入输出。
摘要由CSDN通过智能技术生成

第一个C语言程序

#include <stdio.h>  // #相当于一把钥匙,文件的开始
//include 包含   std 标准  io input输入  output 输出 
// .h  h head 头文件 c语言的特殊文件格式 eg: .mp3  .mp4 .....
//包含一个标准的输入输出的头文件
int main()  //main 主要
{
	printf("hello,CS!\n"); //print 打印 f format 格式化
	//打印格式化 输出格式化
	return 0;  //返回值为0
}

C语言的数据类型和结构

1 数据类型介绍

数据类型分为

内置类型  :字符型  整型 浮点型 布尔类型 

自定义类型: 数组  结构体 枚举 联合体  (自定义类型在后续详解)

字符型  char (character) 【signed】char 有符号的字符  【unsigned】char 无符号

注: 在数据类型篇章中“【】”代表可以不写 可省略

整型(整数) 

短整型    short 【int】   【signed】short【int】    unsigned short 【int】

整型     int       【signed】 int      unsigned int

长整型   long【int】    【signed】long【int】     unsigned long 【int】

更长的整型    long long 【int】    【signed】long long 【int】     unsigned long long【int】

整型的长短不同其所占内存的比特位不同,取值范围也有所不同,这部分内容大家可自己在网上查阅相关资料

浮点型(小数)

float 单精度   double 双精度  long double 更高精度

布尔类型

C99中引入布尔类型,专门表示真假

_Bool
bool   //以上两种定义类型都可

//代码演示
_Bool love = true; // bool love = true ;一样的
if (love)
  printf("%s is a touch but not yet a touch \n", love);

2 各种数据类型的长度

sizeof操作符是专门用来计算sizeof操作符数的类型长度即所占空间大小,单位是字节,其操作数可以是类型,也可以是变量或者表达式

sizeof(类型)
sizeof 表达式//表达式不参与运算,是根据表达式的类型得出大小的

17168fecea3b45ad8d4b1bba25106a39.png注意int和long这两组,C语言规定sizeof(long)>=sizeof(int)

接下来看sizeof中表达式不计算的案例

8e20d35a222a4fbea6a1eda064fae94f.pngshort占2字节,int占4字节,按照印象应该是1+5的运算,但是sizeof中表达式不计算,此时a已经是4字节了,要硬塞到2字节的空间是不现实的,所以就截断了,能放多少空间就储存多少空间

3 变量

类型是用来做什么的?创建变量。 在生活中有很多例子,比如身高体重油价等等都是变化的量称为变量,又把不变的值称为常量。

变量创建的语法形式如下:

类型    变量名   比如:

int age;
char ch;
double height;

创建变量时给变量一个初始值称为初始化,这里建议每次创建变量时都初始化一下。

变量分为

全局变量:大括号外面的变量

局部变量:大括号内部定义的变量

int year =2024; //year是全局变量

int main ()
{
    int age = 19; //age是局部变量

}

如果局部变量和全局变量重名会发生什么?

dadb7b268b0644878cce69c28830d098.png局部变量和全局变量重名时,优先使用局部变量

4 算术操作符

算数操作符分为双目操作符和单目操作符

双目操作符:+ 、-、 *、 /、% 顾名思义,有两个操作数

+ - * 比较简单,这里不过多介绍

着重讨论一下 / 

除号两端都是整数,执行的是整数除法,得到的结果是整数

149a955dbc734cdbacb75fb7e1857cd4.png

尽管a的类型是float,但是8/6并未得到我们想要的结果,原因是整数除法为整除,只会返回整数部分而丢弃小数部分

如果想得到小数,两个运算数中至少有一个是浮点数

8084a0aeae3d4dafa03321a3ece548de.png

% 下面讨论求模运算,即两个整数相除的余数。只能用于整数,不能用于浮点数


588193175fd447ceaf2287543bc70dd8.png

此时编译器报错,告知我们必须要整型

负数求模的规则是:结果的正负号只有第一个运算数的正负号决定

7718c571be0741b99bec46d12f6c70d3.png

赋值操作符:= 和复合赋值(给已有的变量赋值)

变量创建好之后再给变量一个值叫做赋值

int a = 0;//初始化
a = 7;//赋值

连续赋值,规则是从右向左依次赋值

int a = 1;
int b = 2;
int c = 3;
c = b = a - 1; //从右向左依次赋值,b先得到值,但不建议这么做,可读性不高

复合赋值符

对于自增自减的操作需要用到

+=            -=        *=        /=        %=

int a = 10;
a += 3;//给自己加3

int a = 10;
a = a + 3;//以上两种方式等价

单目操作符:++        --        -        +

++和--分为前置和后置,是一种自增(自减)的操作符

前置++和前置--的运算遵循先+(-)1,后使用,而后置++和--则先使用后+(-)1

int a = 10;
int b = a++;
printf("a=%d b=%d\n",a,b);// 11 10

5 printf 和 scanf介绍

printf  

  意为格式化输出(打印)头文件为 stdio.h

 

占位符 意为这个位置可由其他值代入

e190a984b3e14a2a9ca3bcd91c283414.png

常见的一些占位符
%c :字符。
%d :⼗进制整数
%e :科学计数法的浮点数
%f :小数(包含 float 类型和 double 类型)
%lf :long double 类型浮点型号
%p :指针
%s :字符串
%zd : size_t 类型
 
输出格式
printf可以规定占位符的输出格式
 
·规定宽度 限定占位符的最小宽度
a249d1b5b38a4ee98ab136e7c8672bea.png
%6d表示占位符宽度至少为6位,如果不足六位,前面的值会加空格补齐,输出默认右对齐,想要左对齐需要在6的左边加个“-”
505f9e4b5995464989bda3241548479b.png

这时候并不是只打印了123,123后面还有3个空格,只是左对齐看不出来,自己可以用鼠标点击查看

对于小数,限定符会限制所有数字的最小显示宽度

55f8dec8f91f4476ba4cd28ab063dc04.png

%12f 表示输出的浮点数最少要占12位,浮点数默认精度是小数点后六位,所以前面还有4个空格作为补充,如果想要左对齐,只需改成“%-12f”即可

限定小数位数

%.nf 是固定格式,其中n表示自己希望的小数点后的位数。举个例子,希望保留小数点后三位,就可以写成“%.3f”bf62e850040e400b84e3ca275a6eb7d0.png

我们可以和限定宽度一起使用,例如,输出“    0.300”宽度是9

91f6edff1bb146528273036f6c0af829.png

最小宽度和小数位数都可以用“*”代替,通过printf()的参数传入,例如

3896397936c54aaca2f78ed02c031f6c.png

输出部分字符串

%s用来输出字符串,默认全部输出。可以用“%.ns”来规定输出的长度,n代表自己所希望输出的长度,例如

205cf38dfd334b6bac0b85c8f5775884.png

scanf

意为格式化输入(扫描) 头文件和printf一样为stdio.h

先看一个例子

be0f2accbf714686b02a3b3138594b85.png

运行的流程是我们在键盘上输入值,程序根据我们输入的值进行操作,最后输出在我们的屏幕上

现在来看scanf的基本用法

程序运行到这个语句时会停下来,等待用户输入

用户输入数据,按下回车键之后,是scanf()会处理用户输入的数据,将其存入变量,scanf()传递的是地址而不是值,所以就需要&取地址符

scanf()在运行时会自动过滤空白字符,其中包括空格、制表符和换行符,所以用户在输入时多按几次空格或者回车多分几行并不影响解读,例如

b8b97be3970b484a9006dc0b22402131.png

用户输入之后,先放入缓存中,等到按下回车键之后,按照占位符对缓存进行解读,解读用户输入时,从上一次解读遗留的第一个字符开始,直到读完缓存或者遇到第一个不符合条件的字符为止

例如

a0716a5805434a0bb8b29e9264b8ba09.png

开始读取,遇到空格跳过,从-开始-31是整数,读取停下来,后面的.不是整数的有效字符,-31放入缓存继续读取,从.开始,.23e12是个科学计数法的小数,继续读取后面空格继续跳过,遇到@无效字符停止读取

scanf的返回值

scanf()的返回值是一个整数,表示成功读取变量的个数

若没有读取任何项,或者匹配失败,返回值为0。若在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,返回值为EOF即-1

例如

15a9e7ea542f4888aa78ed3ad3ecce63.png

 

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值