初识C语言(三)

news2024/11/17 7:28:00

感兴趣的朋友们可以留个关注,我们共同交流,相互促进学习。


文章目录

前言

八、函数

九、数组

(1)数组的定义

(2)数组的下标和使用

 十、操作符

(1)算数操作符

(2)移位操作符

(3)位操作符

(4)赋值操作符

(5)单目操作符

(6)关系操作符

(7)逻辑操作符

(8)条件操作符

(9)逗号表达式 

(10)下标引用、函数调用和结构成员 

十一、常见关键字

总结



前言

我们在上个文章学习了,常量变量的作用域,生命周期以及等等,我们了解了字符串,转义字符注释等相关了解,我们还了解了选择语句和循环语句中的while语句,剩下的for和do while 循环之后会进行详细分析。


八、函数

就像数学中的函数,y=f(x)

C语言中的函数也跟数学中的函数也差不多。

例如以下代码,一下代码是求两个和:

#include <stdio.h>
int main( )
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    scanf("%d %d",&num1,&num2);//输入
    sum = num1+num2;//求和
    printg("%d\n",sum);
    return 0;
}

我们用函数来写求两个数的和:

 

#include <stdio.h>
int main( )
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    scanf("%d %d",&num1,&num2);//输入
    sum =Add(num1,num2);//求和
    printg("%d\n",sum);
    return 0;
}

这里的Add就是一个函数,来进行相加,我们可以把它想象成为一个工厂,对输入的材料进行加工,最后产出产品。这里的Add要进行加法操作,所以传进来的要是两个数,加数和被加数,也就是num1和num2,之后返回一个结果;

Add(int x,int y)
{
    int z = 0;
    z = x+y;
    return z;
}

我们来进行Add函数的实现,首先是Add函数的名字,函数里面要传入两个数,我们在这里认为传入的数是两个整数,所以定义这两个数分别是x和y,函数的外壳写好了,接下来该分析函数内部如何实现,要计算两个数相加,我们定义一个整形z来表示结果,z等于这两个数进行相加,最后返回z,因为z是整形,所以函数返回的类型是整形。这时这个函数就写好了,在main函数中调用和传入参数就可以了。这里num1和num2叫做传入参数。

函数比较方便,随时调用,避免了重复。

九、数组

(1)数组的定义

当我们存储1-10的数字,我们是否要定义十个变量来进行存储,那样就会很麻烦,也许会觉得也就写十行代码的事,但要是要存储100个数字呢,是否还是一句一句打出来,那样是真的很麻烦。所以才会出现数组这个概念。

数组中可以存放一组相同类型的元素,也就是一组相同类型元素的集合。

int arr[10] = {1,2,3,4,5,6,7,8,9,10};

上列代码就是数组的创建和初始化,我们命名数组的名字为arr,想让它里面有十个元素,所以定义里面10,又想让它的元素都是整形,所以在前面定义Int,添加等号来写数组里面的十个数从1-10。这样就创建了一个包括10个整形元素的数组。

(2)数组的下标和使用

数组里的元素是放在内存里面的,数组里每个元素都有下标的,而下标是从0开始的,如下:

 是可以通过下标的方法来找到数组中的元素的,如下,如果我们想要通过下标来找到数字7,那么就要访问下标为6的元素。

int arr[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%d\n",arr[6]);

如果我们想把所有元素打印出来,可以通过while和下标来打印出来,while使i从0循环到9,也就是arr元素的下标,也就打印出来了这十个数:

int arr[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%d\n",arr[6]);
int i = 0;
while(i<10)
{
    printf("%d",arr[i]);
}

 十、操作符

C语言中提供了非常丰富的操作符,使得C语言非常的灵活,什么事都可以干。

(1)算数操作符

算数操作符

+   -  *  /  %

算数操作符就是加减乘除和取余(%),当我们用15除(/)上一个2的时候,结果就是7 ,除法默认是整形,取余(模)就是得到余数。

如果我们除法想要得到小数的时候,我们前面给这个变量定义成float浮点数类型,之后用%f来输出结果,也就是打印浮点数类型,如果你那么想,那就了哈哈。 

如果除号的两端都是整数,那么执行的是整数的除法,除号两边至少有一个是浮点数才能执行浮点数的除法。

但是当取模的时候,两边都是整数才行。

(2)移位操作符

移位操作符

>>        <<

左移和右移,这些都跟二进制有关,后续会进行深入了解

(3)位操作符

 位操作符

&      ^      |

 按位与     按位或   按位异或,也与二进制有关,到后面深入了解

(4)赋值操作符

赋值操作符

=   +=   -=   *=   /=   &=   ^=   |=   >>=   <<=    

 

int main( )
{
    int a = 0;//初始化
    a = 20;   //赋值
    a = a+5;  //a+=5;
    return 0;
} 

 当我们初始化一个变量a,并且赋值给20,想要加5还赋给a,也可以写成a=a+5, 这与a=a+5一样,没有差别。其它的也都一样,进行操作后又赋值给自己。

(5)单目操作符

单目操作符

!              逻辑反操作

-                 负值

+                正值

&                取地址

sizeof        操作数的类型长度(以字节为单位)

~                对一个数的二进制按位取反

--                前置,后置--

++              前置,后置++

*                 间接访问操作符(解引用操作符)

(类型)    强制类型转换       

//  !  的使用
int main( )
{
    int a =5;
    if(a)
    {
        printf("OK\n");
    }
    if(!a)
    {
        printf("NO\n");
    }
    return 0;
}

  在C语言中,非零为真,0为假,所以在这里,a不为假,在这里会进行下一步操作,也就是打印OK,如果我们想要进行打印NO,那么就要a为假,这里就用到了!,表示相反的逻辑,如果这时候a为0,所以这时候就打印NO。

 

//  -
int a = 10;
int b = -a; 

这里b的数就是-10,这就是负号的使用,而当用到正号的时候。

// +
int a = -10;
int b = +a;

当时我也以为b是10,但是结果出来后确是-10,没有发生变化,所以正号也可以省略不用写。

&后续会进行分析。

重点sizeof是操作符

int a =10;
float f =5.5f;
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(f));

sizeof 是操作符 ,是计算变量所占内存空间的大小,单位是字节,这里a和f的字节数都是4,我们也可以将a和f换成int和float,所以里面放变量名也好,或者是变量的类型来说,结果都是一样的,两种写法都可以。

而我们之前提到的strlen是库函数,是计算字符串长度的,统计的是字符串\0之前出现的个数。而sizeof不管里面是什么,它只统计占用的字节内存是多少。

// ++
int a =100;
int b = a++;

当++在后面的时候,这是后置++,先使用,后++,也就是先使用100,之后在自增1,变成了101。

当++在前面的时候,就是前置++,与之前的相反,也就是先加1,再使用,这时候a和b都是101。

--操作符也是这个原理,相同的逻辑但是不同的运算。

//(类型)强制类型转换
int main( )
{
    int a =(int)3.14;
    printf("%d\n",a);
    return 0;
}

当我们写一个整形变量a的时候 ,想把3.14赋值给a,如果不加(Int),编辑器就会报错,说你可能会丢失数据,当加上(int)的时候,就将3.14强制类型转换,转换为整形,只保留正数部分。

(6)关系操作符

>

>=

<

<=

!=        用于测试“不相等”

==       用于测试“相等”

 关系操作符就这么几个,用来表示关系,判断大小关系,其中==是判断相等的,而一个等号=就是赋值,当写选择语句的时候,要考虑清楚,两个等号是用来判断,一个是用来赋值。


(7)逻辑操作符

&&     逻辑与

||        逻辑或

逻辑与的意思就是并且,两个都需要,而逻辑或是或者的意思,来一个就行或者两个都来,

int a =3;
int b =5;
if(a && b)
{
    printf("OK\n");
}

一般是用来判断真假,也可以用来选择范围,这里a为3,b为5,两个同时是真,所以会打印OK,如果有一个是0,则不会打印,因为非0为真。

&&两边同时为真才为真,有一个为假了就为假。

||   两边同时为假才为假,有一个为真就为真。 

(8)条件操作符

exp1 ? exp2 : exp3 

int a = 0;
int b = 0;
int m = 0;
scanf("%d %d", &a,&b);
if(a>b)
    m=a;
else
    m=b;
printf("%d\n",m);

这是一个比较两个数输出较大值的一个简单写法,如果觉得这样写繁琐,就可以用条件逻辑符来进行写:

m=(a > b ? a : b);

 如果表达式1里面的a>b这个条件为真,表达式2就执行,也就是返回a的值,如果表达式为假,就返回b的值,这个只能用于简单的语句。

(9)逗号表达式 

exp1 , exp2 , exp3 , ...expN

(10)下标引用、函数调用和结构成员 

[ ]   (  )    .    ->

[ ]下标引用操作符 

下标引用,就是刚才用数组通过下标来访问元素的符号。

()函数调用操作符

上文中写了一个两个数相加的函数,Add来调用的时候,后面的()就是函数调用操作符。

  .  和 ->是结构成员访问操作符

操作符非常的丰富 ,后续都进行深入了解。这里先简单的了解一下,不同场景用不同操作符。

十一、常见关键字

关键字必须要知道有什么,因为当我们在定义变量的时候,如果不知道关键字,就有可能会用关键字名字来命名变量名字,这些关键字是C语言事先预定好的,变量的命名之前说事不能有关键字的。

auto        break        case        const        continue        default        do            else        enum

extern        for          goto           if            register          return        sizeof        static        struct

switch     typedef      union       volatile       while           char        double          float           int

long        short        signed      unsigned       void

 auto关键字一般被省略了,因为局部变量一般都是在作用域里面自动创建自动销毁的,所以它其实前面有一个auto ,由于所有局部变量前面都有auto,所以就省略掉了。

break可以打破循环,在循环中可以使用。

case是在分支语句switch中使用。

类型有关:auto  cha r int  short  long  float  double  signed(有符号的)  unsigned(无符号) static  void  enum  const  union  typedef

循环有关:break continue do while

分支有关:if else switch case break default goto 

声明外部符号:extern

寄存器:reister

函数:return 

计算所占内存大小:sizeof

先进行了解,用多了就记住了。 


总结

码要用手敲才会熟练

先了解,后续会一个个进行详解,对于我来说也是受益匪浅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2168339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL多版本并发控制MVCC实现原理

MVCC MVCC 是多版本并发控制方法&#xff0c;用来解决读和写之间的冲突&#xff0c;比如脏读、不可重复读问题&#xff0c;MVCC主要针对读操作做限制&#xff0c;保证每次读取到的数据都是本次读取之前的已经提交事务所修改的。 概述 当一个事务要对数据库中的数据进行selec…

AIGAME背后的强大背景与AI币价值的崛起

AIGAME平台背后汇集了强大的资本和技术支持&#xff0c;凭借蒙特加密产业基金的战略投资和汇旺集团的多元化Web3基础设施建设&#xff0c;AIGAME在全球范围内迅速崛起。平台所使用的Sleepless AI技术&#xff0c;结合区块链与AI的深度融合&#xff0c;赋能AI币&#xff0c;使其…

【hot100-java】【二叉树的直径】

R9-二叉树篇 左子树的深度右子树的深度即可 但好像不行 思路&#xff1a; 对于每个节点&#xff0c;计算它的左子树深度和右子树深度相加的和&#xff0c;并更新最大值。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode le…

海外社媒怎么运营?代理IP有必要吗?看这5个关键点就够了!

想要在海外社交媒体上大放异彩&#xff0c;但不知从何下手&#xff1f; 面对着Instagram、Facebook、Twitter等平台的海量用户&#xff0c;如何确保你的品牌能够脱颖而出&#xff1f; 如何在海外社交媒体上突破地域限制&#xff0c;实现全球覆盖&#xff1f; 别担心&#xf…

3D建模软件 | Blender v4.2.2 绿色版

Blender是一款功能强大的免费开源3D创作套件&#xff0c;适用于创建3D可视化效果&#xff0c;如静态图像、3D动画、视觉特效以及视频编辑。Blender以其跨平台兼容性、高效内存管理、统一的工作流程和活跃的社区支持而受到独立艺术家和小型工作室的青睐。 它提供了从建模、渲染…

AI爆火的今天,普通人如何利用AI赚钱?

AI是一门非常有前景和潜力的领域&#xff0c;而且赚钱也并非难事&#xff0c;可以说只是一层窗户纸的问题。我身边就有两个朋友&#xff0c;他们通过AI副业获得的收入甚至超过了他们的主要工作收入。更令人惊讶的是&#xff0c;学会AI并开始创造收入并不需要太多的技术背景&…

vue初学随笔

Vue基础 Vue基本概念 Vue是什么 Vue是一个渐进式的JavaScript框架&#xff0c;它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。 渐进式&#xff1a;各个特性可以根据项目需要逐渐引入和…

运算符两边的数据类型

6-3 类型转换 1.非赋值运算的类型转换 &#xff08;1&#xff09;水平方向的转换&#xff1a;所有的char型和short型自动地转换成int 型&#xff0c;所有的unsigned short 型自动地转换成unsigned型&#xff0c;所有的long型自动地转换成unsigned long 型&#xff0c;所有的f…

蓝桥等级考试C++组七级真题-2022-04-23

PDF及答案回复:LQDKC720220423 单项选择题 1、C L7 (15分) 执行以下程序后&#xff0c;输出结果是( )。 int a5; int b a; cout << a << " "<< b;A 5 5 B 5 6 C 6 5 D 6 6 2、CL7(15分) 执行以下程序后&#xff0c;输出结果是() int k0; for(…

SLM2304S 600V, 130mA/270mA 高压半桥驱动芯片,隐藏着哪些强大功能?

SLM2304SCA-13GTR是一款高压、高速的功率MOSFET和IGBT驱动器&#xff0c;它提供相互依存的高边、低边输出驱动信号。采用专有的高压集成电路和锁存免疫CMOS技术&#xff0c;提供可靠的单芯片驱动方案。 逻辑输入电平与标准CMOS或LSTTL输出兼容&#xff0c;最低支持3.3V逻辑。输…

队列的基本概念以及模拟使用

1.队列的概念&#xff1a; 只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的线性表&#xff0c;队列具有先进先出FIFO 入队列 :进行插入操作的一端称为队尾. 出队列:进行删除操作的一端称为队头。 图例如下&#xff1a; 2.Queue是一个接口&…

Select插件的用法

文章目录 1.知识回顾2.使用方法2.1 builder属性2.2 selector属性2.3 shouldRebuild属性2.4 child属性3 示例代码我们在上一章回中介绍了组件之间共享数据相关的内容,本章回中将继续介绍该内容.闲话休提,让我们一起Talk Flutter吧。 1.知识回顾 我们在前面章回中介绍了全局共…

Ubuntu 开机自启动 .py / .sh 脚本,可通过脚本启动 roslaunch/roscore等

前言 项目中要求上电自启动定位程序&#xff0c;所以摸索了一种 Ubuntu 系统下开机自启动的方法&#xff0c;开机自启动 .sh 脚本&#xff0c;加载 ROS 环境的同时启动 .py 脚本。在 . py 脚本中启动一系列 ROS 节点。 一、 .sh 脚本的编写 #!/bin/bash # gnome-terminal -- …

MyBatis-Plus代码生成器的使用

简介 AutoGenerator 是 MyBatis-Plus 的代码生成器&#xff0c;通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码&#xff0c;极大的提升了开发效率。 创建 Maven 工程 添加依赖 <?xml version"1.0" encod…

哈希表(一)

一、基础知识 哈希表的优点&#xff1a; 查找key的时间效率是O&#xff08;1&#xff09; 什么时候要用到哈希表&#xff1a; 查询元素的出现问题&#xff08;是否出现过&#xff0c;是否在集合里&#xff0c;出现次数等&#xff09; 哈希表的三种数据结构&#xff1a; 数组…

从自身经历浅谈对于C++/Java的认识

1.声明 因为一些其他的原因&#xff0c;我决定从C转到java方向学习&#xff0c;后期可能就要换方向了&#xff0c;以后主要学习这个java相关的这个技术了&#xff0c;起码暂时不会学习这个C里面的内容了&#xff1b; 2.我的感慨 当时选方向的时候&#xff0c;我自己就是选的…

甘蔗茎节检测系统源码分享

甘蔗茎节检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

插座检测系统源码分享

插座检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

Docker 天池代码提交

参考零基础入门Docker-cuda练习场_学习赛_天池大赛-阿里云天池的赛制 (aliyun.com) ​ 在Docker零基础入门-CSDN博客中我已经安装了docker,现在开始创建自己的镜像仓库。 1. 开通阿里云容器镜像服务(镜像仓库) 进入容器镜像服务 (aliyun.com) 1.1. 创建个人实例 点击“…

.net 未能加载文件或程序集“System.Diagnostics.DiagnosticSource, Version=6.0.0.1 解决方案

.net webapi 项目以前用的正常&#xff0c;重装server2019后&#xff0c;又把oracle客户端从11g升级成19c&#xff0c;修改了连接字符串后&#xff0c;其他网站都正常&#xff0c;唯独这个webapi报错 报错信息&#xff1a; 未能加载文件或程序集“System.Diagnostics.Diagnos…