首页 > 其他分享 >C语言从入门到实战(基础学习篇)

C语言从入门到实战(基础学习篇)

时间:2022-12-05 22:32:09浏览次数:37  
标签:实战 常量 int C语言 printf 类型 main 变量 入门


1. 基本数据类型

原码 反码和补码
正数的反码是其本身
负数的反码是在其源码的基础上,符号位不变,其余各个位取反
负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1

1.1整数类型

int 占用4个字节 32个比特
long 占用8个字节 64个比特
short 占用2个字节 16个比特

1.2浮点类型

浮点类型一般用于保存小数,不过为啥不叫小数类型而选浮点类型呢?因为我们的一个小数分为整数部分和小数部分,我们需要用一部分的bit位去表示整数部分,而另一部分去表示小数部分,至于整数部分和小数部分各自占多少并不是固定的,而是浮动类型决定的
float 单精度浮点 占用4个字节 32个比特
double 双精度浮点 占用8个字节 64个比特

1.3字符类型

char 占用1个字节 (-128-127)可以表示所有的ASCll码的字符 每一个数字对应的是编码表中的一个字符

编码表包含所有的常见的字符 ,包括运算符号 数字 大小写字母等

C语言从入门到实战(基础学习篇)_C语言

2.变量

小知识:C语言变量的生命周期和作用域

变量类型

生存周期

作用域

局部变量

auto:自动变量,离开定义函数立即消失

只作用于该函数内部


register:寄存器变量,离开定义函数立即消失



static:静态变量,离开定义函数仍然存在


全局变量

在程序运行期间一直存在

static:静态变量,仅限于本文件内部条用



extern:外部存储变量,用于声明本文件将要用到的其他文件的变量

前面我们了解了C语言中的基本类型,那么我们如何使用呢?这时我们就可以创建不同类型的变量了。

2.1变量的使用

变量就像我们在数学中学习的x,y,z一样,我们可以直接声明一个变量,并利用这些变量进行基本的运算,声明变量的格式为:

数据类型 变量名称 = 初始值 //其中初始值可以不用在定义变量时设定

// = 是赋值操作,可以将等号后面的值赋值给前面的变量,等号后面可以直接写一个数字(常量)、变量名称,算式

比如我们现在想要声明一个整数类型的变量:

int a = 10; //变量类型为int(常用),变量名称为a,变量的初始值为10;

int a = 10,b = 20; //多个变量可以另起一行编写,也可以像这样用逗号隔开,注意类型必须是一样的

其中,变量的

不能以数字开头,不能重复使用

不能使用关键字,可以包含数字但是不能数字开头

注意变量一定要先声明再使用

C语言从入门到实战(基础学习篇)_基本数据类型_02


float 单精度浮点数 4个字节,32bit

double 双精度浮点数 8个字节,64bit

#include <stdio.h>


int main() {
double a;
a = 0.5;
int b = 2;
int c = a + b;
printf("a=%f, b=%d, c=%d", a , b, c);
return 0;
}

C语言从入门到实战(基础学习篇)_基本数据类型_03

#include <stdio.h>


int main() {
double a = 3.5 ;
float b = 4.5 ;
printf("a = %f, b = %lf ", a ,b );
return 0;
}

C语言从入门到实战(基础学习篇)_基础知识_04

void main() {
int a=1;// 定义了一个整型变量,取名为a, 并赋值为1 (强数据类型语言)
int b=3;// 定义了一个整型变量,取名为b, 并赋值为3
b=89;// 给变量赋值 为 89
printf("a=%d \n",a);// 使用输出语句,把变量a 值输出 %d 表示输出的形式为整数
printf("b=%d \n", b);//使用输出语句,把变量b 值输出 %d 表示输出的形式为整数
getchar(); //将控制台停留,等待输入
}
  1. 声明变量int num;
  2. 赋值num = 60;
  3. 使用printf("num=%d", num);
  4. 也可以一步到位 : int num2 = 99;
//1.声明变量【告诉计算机要开一个房间】 
int num = 1 ; //整型
double score = 2.3; //小数
char gender = 'A'; //字符
char name[] = "尚硅谷"; //字符串


变量使用注意事项

  1. 变量表示内存中的一个存储区域(不同的数据类型,占用的空间大小不一样)
  2. 该区域有自己的名称 和类型
  3. 变量必须先声明,后使用
  4. 该区域的数据可以在同一类型范围内不断变化
  5. 变量在同一个作用域内不能重名
  6. 变量三要素 (变量名+值+数据类型) ,这一点请大家注意。

常量:
C语言中的常量
C编程中的常量是一些固定的值,它在整个程序运行过程中无法被改变。

字面常量

字面常量是直接写出的固定值,它包含C语言中可用的数据类型,可分为整型常量,字符常量等。如:9.9,“hello”等就属于这一类常量。
##const修饰的常变量
有的时候我们希望定义这么一种变量:值不能被修改,在整个作用域中都维持原值。为了满足用户需求,C语言标准提供了_const_关键字。在定义变量的同时,在变量名之前加上_const_修饰。如下所示:
int main() { const int a = 1; // const修饰的常变量 }

  • const修饰的常变量,本质上是变量。
  • 但具有常属性,不能被修改。int main() { const int a = 1; a = 2; // 错误 const int n = 20; int arr[n] = { 0 }; //n本质上是变量 } 关于上述n的使用,需要说明的是:在C99标准之前,数组的大小只能是常量修饰,不支持变长数组。

#define定义的标识符常量
C语言提供了***#define***命令定义标识符常量,该标识符常量在程序中是个定值,通常用于代表数组容量或涉及数学的常量等。如:
#define PI 3.14159 #define SIZE 10 // 此处SIZE代表数组元素个数 int main() { int arr[SIZE]={0}; return 0; }
如需修改数组大小,只需将SIZE所代表的值修改即可,十分方便。

枚举常量

日常生活中有一些代表实际意义的常量,有这么一个特点:数值较小且为非负整数。如一周有7天等。C语言提供了一种枚举(Enum)类型,能够列出所有可能会用到的取值,并给它们取一个名字。
int main() { enum Sex { //枚举常量 性别 MALE, FEMALE, SECRET }; enum Sex s = FEMALE; //利用枚举常量给变量赋值 printf("%d\n", MALE); printf("%d\n", FEMALE); printf("%d\n",SECRET); return 0; }
在使用枚举常量的时候,需要注意以下几点:

  • 不能对枚举常量赋值,只能将它们的值赋给其他的变量。
  • 不能再定义与枚举常量名字相同的变量。
  • 不能用&取得它们的地址。

以上就是C语言中常见的几种常量,合理使用常量可以使程序可读性更强,条理清晰,易于维护。

2.2无符号数

我们知道,所有的数据底层都是采用二进制来进行保存的,而第一位则是用于保存符号位,但是如果我们不考虑这个符号位,那么所有的数都是按照正数来表示,比如考虑了符号位的char类型;
考虑符号表示范围:-128~127
不考虑符号:0~255
我们也可以直接使用这些不带符号位的数据类型

#include <stdio.h>
#include "string.h"

int main()
{
unsigned char c=-65;
printf("%u",c);
}

可以看到这里给了无符号char类型c一个-65的值,但是现在很明显符号位也是作为数值的表示部分,所以结果肯定不是-65;

C语言从入门到实战(基础学习篇)_基本数据类型_05


结合我们前面学习的基础知识,我们来看看为什么得到的是191这个数字。首先char类型占据一个字节,8个bit位

00000000 -> 现在赋值-65 -> -65的补码形式 -> 10111111

由于现在没有符号位,一律都是正数,所以,10111111 = 128+32+16+8+4+2+1 = 191

我们也可以直接以无符号数的形式打印:

#include <stdio.h>
#include "string.h"

int main()
{
int i = -1;
printf("%u",i);
}

C语言从入门到实战(基础学习篇)_C语言_06


得到无符号int的最大值

2.3类型转换

一种类型的数据可以转换为其他类型的数据,这种操作我们称为类型转换,类型转换分为自动类型转换和强制类型转换,比如我们现在希望将一个short类型的数据转换为int类型的数据

#include <stdio.h>

int main() {
short s = 10;
int i = s; //直接将s的值传递给i即可,但是注意此时s和i的类型不同
}

这里其实就是一种自动类型转换,自动类型转换就是编译器隐式地进行的数据类型转换,这种转换不需要我们做什么,我们直接写就行,会自动进行转换操作

float a = 3;//包括这里我们给的明明是一个int整数3但是却可以赋值给
float类型,说明也是进行了自动类型转换

如果我们使用一个比特换的类型最大值都还要大的值进行类型转换,比如:

#include <stdio.h>

int main() {
int a = 511;
char b = a ; //最大127
printf("%d",b);
}

C语言从入门到实战(基础学习篇)_基础知识_07

#include <stdio.h>


int main() {
double b = 3.74 ;
int i = b ;
printf("%d", i);
}

C语言从入门到实战(基础学习篇)_基础知识_08

  1. 不同的类型优先级不同(根据长度而定)
  2. char和short类型在参与运算时一律转换为int再进行运算
  3. 浮点类型默认按双精度进行计算,所以就算有float类型,也会转换为double类型参与计算
  4. 当有一个更高优先级的类型和一个低优先级的类型同时参与运算时,统一转换为高优先级运算,比如int和long参与运算,那么int转换为long再算,所以结果也是long类型,int和double参与运算,那么先把int转换为double再算

C语言从入门到实战(基础学习篇)_基本数据类型_09


C语言从入门到实战(基础学习篇)_基本数据类型_10

备注:如有错误,请谅解!
此文章为本人学习笔记,仅供参考!如有重复!!!请联系本人

标签:实战,常量,int,C语言,printf,类型,main,变量,入门
From: https://blog.51cto.com/u_15606213/5913314

相关文章

  • 高级语言程序设计(c语言版)
    高级语言程序设计(c语言版)  ——基于计算思维能力培养作者:揭安全出版社:人民邮电出版社 一、程序设计引论1.1计算科学与问题求解1.2程序与程序设计1.3程序......
  • servlet_概述和servlet_快速入门
    servlet_概述:serverapplet概念:运行在服务器端的小程序Servlet就是一个接口,定义一个Java类被浏览器访问到(tomcat识别)的规则将来我们自定义一个类,实现Ser......
  • C语言-----分支和循环小练
    intmain(){//编写代码实现:模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,//如果密码正确则提示登录成功,如果三次均输入错误,则退出程序inti=0;......
  • C语言校园家教管理系统
    C语言校园家教管理系统C语言_课程设计任务书5一、设计题目校园家教管理系统二、设计目的1、加深学生对该课程基础知识和基本理论的理解和掌握,培养学生综合运用所学知......
  • Javascript-极速入门指南
    内容概要Javascript编程语言JS编程语言简介注释语法引入JS的多种方式结束符号变量与常量定义变量let关键字与var关键字的区别定义常量基本数据类型运算......
  • 线上服务异常的定位、处理与优化的探索 - 第五章 实战操作
     线上服务紧急热部署 适用场景 线上服务器未开启、不支持、不允许热部署应用。甲方IT管理制度严谨,发版需提前申请。项目组发版出现纰漏,为减少项目影响,需要动态......
  • c语言中-----二分法查找有序数组中某个数的下标
    intmain(){//二分法查找算法:查找(有序排列)数组中6对应的下标并输出intarr[]={1,2,3,4,5,6,7,8,9,10};//下标取中(第一个下标为0),进行比较判断......
  • 《Redis实战篇》一、短信登录
    1.1、导入黑马点评项目1.1.1、导入SQL1.1.2、有关当前模型手机或者app端发起请求,请求我们的nginx服务器,nginx基于七层模型走的事HTTP协议,可以实现基于Lua直接绕开tomcat访......
  • 算法竞赛入门【码蹄集进阶塔335题】(MT2286-2290)
    算法竞赛入门【码蹄集进阶塔335题】(MT2286-2290)文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2286-2290)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件?目录1.MT2......
  • 5:IO Stream-Java API 实战
    (目录)1.相对论和IO流之说Input/OutputStream词典中Stream的意思是有方向性的流动的液体/电流,强调过程理解I/OStream可以看作是输入/输出方向的流体从相对论的角......