目录

  • 数据类型
  • 常量、变量
  • 数组
  • 字符串、转义字符
  • 选择语句
  • 循环语句
  • 函数
  • 操作符
  • 结构体
  • 指针

一、数据类型

现实生活中,我们对信息的分类方式多种多样,目的都是为了更好的处理它们。而对于计算机而言,所有的信息最后都要转化为0和1来处理,只有对信息进行分类我们才能用最优的资源得到更好的结果。

介绍数据类型前,我们先了解计算机的存储单位。

C语言中数据类型分为:int 、short int 、long int 、long long int、float、 double 、char

1.整形int:一个int类型在内存占的空间是4个byte,即32个bit位,表示的值为整数,范围是–2^31 ~ 2^32–1。

2.短整型short int、长整型long int、long long int:它们表示的也是整数,不过short int占2个byte、long int占4个byte、long long int占8个byte。由于所占空间不同,它们能表示的值的范围也就不同,比如:short int最大能表示的值即16个bit全是1,为65535。

3.单精度浮点型float:一个float类型占4个byte,表示的值为小数,精度最高可到小数点6位。

4.双精度浮点型double:该类型占8个byte,与float一样用来表示小数,但能表示的值范围更大、精度更高。

5.字符类型char:所占内存为1个byte,用来存放字符。实质上存放的是整数,计算机是根据ascll表把字符转化为数字存的。常量、变量

生活中有的值是不变的,例如π值;而有的值是会变的,例如体重。所以,C语言中就有了常量和变量。

二、常量、变量

生活中有的值是不变的,例如π值;而有的值是会变的,例如体重。所以,C语言中就有了常量和变量。

变量:

局部变量

#include <stdio.h>

int main()//程序的入口,只能有一个。
{
int a=0;
/*在内存中分配4个byte(1个int类
型)用来存放整型,这块内存名为a,
暂时赋为0.*/
a=520;//a这块内存的值就变为了520
{
int b;//同理
}
b=1;
/*此时错误,因为变量b的作用
范围只在它最近配对的{}
而a的作用范围在main函数的{}内*/
return 0;
}

全局变量

#include <stdio.h>

int a=0;
//此时a为全局变量,可作用与整个工程
int main()
{
int a=520;//这个a为局部变量
pritnf("%d\n",a);
/*在屏幕上打印a的值,猜猜为多少呢?
答案是:520.why?
全局变量a和局部变量a是两个不同的
内存空间,但是都叫a遇到这种情况,
那么我们遵循局部优先原则!*/
return 0;
}

常量:

常量,即不可改变的量。主要有四种:字面常量、const修饰的常变量、#define定义标识符常量、枚举常量(暂时不讲)。

#include <stdio.h>
#define π 3.1415
/*定义一个常量名字叫π,值为3.1415 int main()
{
3.14;
/*这就是一个字面常量,但执行这条
语句并没有意义。*/
float a=3.14;//变量a的值存字面常量3.14
a=π;//此时把常量π的值赋值给a
const int b=1;
b=2;//此时发生错误
/*const修饰变量b后,使得变量b
的内容不能被修改*/
return 0;
}

三、数组

局部变量相当于存放一个东西,那么若我们有多个同类型的东西要存放,岂不得都定义呀!所以有了数组,数组即一组相同类型的数据。

#include <stdio.h>

int main()
{
int arr[10]={0};
/*定义一个arr,能够存放10个int
类型的变量,所以它占10×8个byte*/
arr[0]=1;//把第一个变量赋值为1
/*数组元素的下标从0开始
定义时[]中表示几个,访问时[]中
表示第几个*/
arr[1]=2;
...
return 0;
}

四、字符串、转义字符

字符串

我们用char类型(占1×8个bit位)来存放字符,例如字符’a’的ascll码值是为97,二进制:0110 0001。那么当我们想存储很多字符信息时怎么办呢?用字符串!字符用’ '引,而字符串用" "引。

#include <stdio.h>

int main()
{
char arr[5]="abcd" ;
/*定义char类型的数组,分配内存
为1×8×5个bit,存放字符*/
pintf("%d\n",strlen(arr));
//strlen作用是求字符串arr的长度
//显示答案为4
}

注意:计算机会在字符串末尾自动添加字符’\0’作为结束标志,该’\0’占用1个byte内存,但不算在字符串长度内。计算机遇到’\0’时就截断为字符串,否则会顺着相邻内存存放的乱码找下去,直到找到’\0’。

转义字符

如果你仔细观察,你会发现很多问题。printf打印时出现的\n是什么,n不就是’n’字符吗?这就涉及到转义字符了。转义字符:即转变字符的含义,使它具有某种新的作用。具体有:

转义字符 释义
\n 换行(由’n’变为起换行作用)
\’ 用于表示字符常量’(例如你想打印字符’,即’ ’ ‘。计算机识别到’ ‘就把它们配对了,所以应转义’ \’ ')
\" 用于表示字符串内部的双引号
\\ 用于表示1个\,防止它被转义为序列符
\a 警告字符,把a转义起到蜂鸣一声的作用
\b 退格符
\r 回车符
\ddd ddd表示1~3个八进制的数字,作用是把八进制ddd转义为十进制。例如:\130=88、 \12=10
\xdd dd表示2个十六进制数字,作用同理。例如:\x12=18

五、选择语句

有时候选择比努力更重要,那么,C语言中怎么实现选择呢?常用有if…else语句和switch语句。

if…else 语句:

#incldue <stdio.h>

int main()
{
int i=2
if(i<3)//(在这里面输入条件)
{
printf("%d\n",i);
//打印i的值
}
/*如果条件成立,则执行{}内的语句*/
else
{
pritnf("i>=3");
}
/*否则执行else下{}内的语句*/
/*注意:可单独使用if,但else需与相
邻if配对使用*/ return 0;
}

switch语句:

#include <stdio.h>

int main()
{
int num=1;
switch(num)//选择第num中情况
{
case 1:
{
//此处为情况1执行的语句
break;
//执行遇到break则跳出switch选择语句
}
case 2:
...
default:
{
}
/*若输入的num不在选择的情况
中,则执行default的{}*/
}
return 0;
}

六、循环语句

我们总是很反感要多次重复地做同一件事,那就交给C语言的循环语句吧!

循环语句有:while语句、for语句和do…while语句。

#include <stdio.h>

int main()
{
int arr[10]=0;
int i=0;
while(i<10)//判断条件,成立则执行{}内语句
{
arr[i]=i+1;
/*把第i个数组元素赋值为i+1*/
i=i+1;
}
return 0;
}

#include <stdio.h>

int main()
{
//与while语句相似
int sum=0;
int i=1;
do
{
sum=sum+i;//把sum和i的值相加再赋值给sum
i=i+1;
}while(i<=10);
/*先执行do{},然后判断条件是否处理,
一直循环直到条件不成立*/
//该循环sum=1+2+...+10=55
return 0;
}

#inlcude <stdio.h>

int main()
{
int i=0;
int sum=0;
for(i=1;i<=10;i=i+1)
{
sum=sum+i;
}
/*结果与do...while一样*/
/*for括号内有三个分号:
(初始化循环变量的值 ; 判断条件是否成立 ;
执行完一遍后变量进行的处理 )*/
return 0;
}

七、函数

如果你要求三角形的面积,你会把三角形相关的数代到:S=1/2×底边×高。那么,类似于公式这种有着单一功能的工具我们就可以用C语言中的函数实现。

#include <stdio.h>

int SUM(int x, int y);
//声明一个求和函数SUM
int main()
{
int a=1;
int b=2;
int sum=SUM(a,b);
//调用SUM函数求a与b的和
}
//SUM函数的实现:
int SUM(int x,int y)
{
int sum;
//sum的类型要与函数返回类型一致
sum=x+y;
//把a和b的值分别赋给x和y,求和后赋值给sum
return sum;
//该函数返回值sum
}

八、操作符

数学里运用各种符号来处理处理数字,比如说我们常见的± * /、Σ等。C语言中也有很多操作符用来供我们使用,由于操作符内容多且杂,本篇只介绍一些简单常用的操作符。

操作符 用法
+ - * 与实际生活中数学相对应 eg: 表达式 1+2的值为3
/ / 较特殊,当左右两个值的int类型是,结果为整型;若其中有一个为float/double类型时为小数。eg:3/1为3、3/2为1(1. …)、2/1.0为2.000000
% 取两个整数相除的余数 eg:5%2为1
= 赋值操作符 把右边的值赋值给左边,所以左边要为可修改的变量
== 相当于实际中的= 例如2= =3这个表达是错误的 2= =2则是正确的
> >= < <= 与实际生活中数学相对于

九、结构体

由上述我们知道,如intchar等基本的数据类型能表示一些事物的基本属性,但当我们想要表示事物的全部或部分属性时,单一基本数据类型就不能满足要求了。这时,C语言提供以一种自定义数据类型,结构体,英文关键字struct。

#include <stdio.h>

struct  student
{
float height;
int age;
int class;
};
int main()
{
struct student Lihua;
/*与int a;作用是类似的。定义变量Lihua,
数据类型为struct student.*/
//struct student为自定义数据类型
Lihua.height = 175.8;//李华身高赋值为175.8
Lihua.age = 18;//李华的年龄赋值为18
Lihua.class = 1;//李华的班级赋值为1
return 0;
}

十、指针

我们存放的数据计算机会把它们存放在内存里,计算机中每一个内存都有它自己的地址名字,就像门牌号一样。我们可以通过这个地址来找到我们存放的数据,所以地址就是所谓的指针。

一级指针:

#include <stdio.h>

int main()
{
int a=1;
int* b;
b = &a;
//介绍解引用操作
printf("%d\n",a);//打印变量a存放的值
printf("%d\n",*b);/*打印指针变量b所
指地址存放的值*/
//所以*b等价于a 此时*为解引用操作 return 0;
}

结语:

感谢各位小伙伴的阅读,希望能对初学的你建立一个C语言的大概认识。由于作者水平所限,难免存在一些不足或错误之处,希望大家能及时向我反馈,可评论区留言或私信我(在此不胜感激!)。

欢迎大家点赞收藏关注,我将持续不断地为大家输出干货。

一起交流学习呀。

搜索

复制

大一/初学者学C语言前必看!!!(建议收藏)的更多相关文章

  1. php代码审计入门前必看

    首先先介绍什么是代码审计? 代码审计:是指针对源代码进行检查,寻找代码中的bug,这是一项需要多方面技能的技术 包括:对编程的掌握,漏洞形成原理的理解,系统和中间件等的熟悉 2.为什么要进行代码审计, ...

  2. 60道Python面试题&答案精选!找工作前必看

    需要Word/ PDF版本的同学可以在实验楼微信公众号回复关键词"面试题"获取. 1. Python 的特点和优点是什么? 答案:略. 2. 什么是lambda函数?它有什么好处? ...

  3. 【UIBE】研究生考试前必看

      梦想就在前方,再跨一步就能到达.考研的同学们,请务必加油! 回想4年前的今天,坐在图书馆里的我,紧张于即将来临的考试,期待于每天憧憬的未来.大半年的复习生活,我学会了很多,学会了早起抢座位:学会了 ...

  4. 边看MHA源码边学Perl语言之一开篇

    边看MHA源码边学Perl语言之一开篇 自我简介 先简单介绍一下自己,到目前为此我已经做了7年左右的JAVA和3年左右php开发与管理,做java时主要开发物流行业的相关软件,对台湾快递,国际快递,国 ...

  5. 15个初学者必看的基础SQL查询语句

    本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插 ...

  6. mysql进阶(二十六)MySQL 索引类型(初学者必看)

    mysql进阶(二十六)MySQL 索引类型(初学者必看)   索引是快速搜索的关键.MySQL 索引的建立对于 MySQL 的高效运行是很重要的.下面介绍几种常见的 MySQL 索引类型.   在数 ...

  7. Python初学者必看(1)

    python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...

  8. 快看Sample代码,速学Swift语言(2)-基础介绍 快看Sample代码,速学Swift语言(1)-语法速览

    快看Sample代码,速学Swift语言(2)-基础介绍 Swift语言是一个新的编程语言,用于iOS, macOS, watchOS, 和 tvOS的开发,不过Swift很多部分内容,我们可以从C或 ...

  9. 使用Code First建模自引用关系笔记 asp.net core上使用redis探索(1) asp.net mvc控制器激活全分析 语言入门必学的基础知识你还记得么? 反射

    使用Code First建模自引用关系笔记   原文链接 一.Has方法: A.HasRequired(a => a.B); HasOptional:前者包含后者一个实例或者为null HasR ...

随机推荐

  1. 为什么JVM要用到压缩指针?Java对象要求8字节的整数倍?

    前言 前两天在一个帖子中看到一道面试题: 堆内存超过32G时,为什么压缩指针失效? 之前没有了解过这方面的知识,于是开始google起来,但当我翻看了不下一页的帖子,我都仍然没有搞懂,因为好多答案给我 ...

  2. C#中的类型转换-自定义隐式转换和显式转换

    目录 前言 基础知识 示例代码 实际应用 问题 答案 报错 用户定义的转换必须是转换成封闭类型,或者从封闭类型转换 参考 其他 应用和设计 读音 参考 前言 有时我们会遇到这么一种情况:在json数据 ...

  3. 使用Web Deploy自动打包发布

    在内部测试阶段,经常改一点小东西需要更新给测试继续测试.然后就需要频繁的找到对应更改的视图/JS文件,或者是编译的dll文件,再打开测试服务器找到对应站点替换进去,整套流程下来就非常的繁琐费时. 使用 ...

  4. mybatis是如何分页的,分页插件的原理是什么

    mybatis是如何分页的,分页插件的原理是什么 代码之尖关注 12018.12.28 17:11:12字数 529阅读 19,877 1. SQL 分页 <select id="qu ...

  5. 使用postman进行post请求传递中文导致后台接收乱码的问题

    1.个人猜测估计是如果header里不指明编码的话,经过tomcat服务器时会导致转换乱码信息,这样就算你在filter里配置了EncodingFilter相关的过滤器也无济于事.. 解决方法就是在h ...

  6. 为什么等待和通知是在 Object 类而不是 Thread 中声明的?

    一个棘手的 Java 问题,如果 Java编程语言不是你设计的,你怎么能回答这个问题呢.Java编程的常识和深入了解有助于回答这种棘手的 Java 核心方面的面试问题.为什么 wait,notify ...

  7. kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?

    Kafka 分布式的单位是 partition,同一个 partition 用一个 write ahead log 组织, 所以可以保证 FIFO 的顺序.不同 partition 之间不能保证顺序. ...

  8. 使用 rabbitmq 的场景?

    1.服务间异步通信 2.顺序消费 3.定时任务 4.请求削峰

  9. Robinhood基于Apache Hudi的下一代数据湖实践

    1. 摘要 Robinhood 的使命是使所有人的金融民主化. Robinhood 内部不同级别的持续数据分析和数据驱动决策是实现这一使命的基础. 我们有各种数据源--OLTP 数据库.事件流和各种第 ...

  10. String工具类之“前缀比较”StringUtils.startsWith和StringUtils.startsWithIgnoreCase

    (1)字符串以prefix为前缀(区分大小写) StringUtils.startsWith(被比较的字符串,比较字符串) 总结: 根据下面代码发现,上面的例子有部分时错误的,有可能是因为思维原因,他 ...