C语言入门篇(二)

news2024/11/27 10:42:34

前言
  续接上一篇文章,此篇继续对C语言的基础知识点进行更新。

C语言入门篇(一)

初始C语言

  • 7. 选择语句
  • 8. 循环语句
  • 9. 函数
    • 9.1 函数的定义
    • 9.2 函数的调用
  • 10. 数组
    • 10.1 数组定义
    • 10.2 数组的下标
    • 10.3 数组的使用
  • 11. 操作符
  • 12. 常见关键字
    • 12.1 关键字typedef
    • 12.2 关键字static
  • 13. #define定义常量和宏
  • 14. 指针
    • 14.1 内存
    • 14.2 指针变量的大小
  • 15. 结构体
  • 结束语

7. 选择语句

什么是选择?

如果你好好学习,就能月入过万
如果你不好好学习,就只能继承“五毛”家产

在这里插入图片描述
用C语言表示:

#include<stdio.h>
int main()
{
	printf("好好学习输入>1,不好好学习输入>0:");
	int flag;
	scanf("%d", &flag);
	if (flag == 1)
		printf("^。^恭喜你,月入过万");
	else
		printf("|^-^|,努力吧!少年");
	return 0;
}

8. 循环语句

唧唧复唧唧,日复一日当练习。

循环语句分为三种:

  • while语句
  • for语句
  • do…while语句

唐僧取真经要经历“九九八十一难”,每打怪一次,孙悟空的神力就提高一点,直到结束。接下来用上述三种循环来表示孙悟空的神力总值。

//while语句
#include<stdio.h>
int main()
{
	int i = 10;//表示孙悟空初始神力
	int j=0;//表示孙悟空总神力
	while (j < i+81)
		j++;
	printf("%d", j);
	return 0;
}
//for语句
#include<stdio.h>
int main()
{
	int i = 10;
	int j;
	for (j = 0; j < i + 81; j++)
		;
	printf("%d", j);
	return 0;
}
//do...while语句
#include<stdio.h>
int main()
{
	int i = 10;
	int j=0;
	do
		j++;
	while (j < i + 81);
	printf("%d", j);
	return 0;
}

9. 函数

函数是 C 语言中的重要组成部分,它可以将程序分解为模块,提高代码的可读性和可维护性。
函数由函数头和函数体组成,函数头包括函数名、返回值类型和参数列表,函数体包括函数执行的语句块。

9.1 函数的定义

返回值类型 函数名(参数列表) 
{
    // 函数体语句块
}

其中,返回值类型是函数返回值的数据类型,函数名是函数的标识符,用于在程序中调用函数,参数列表是函数接收的参数,多个参数之间用逗号分隔。
例如,下面定义了一个名为 sum 的函数,它的作用是求两个整数的和并返回结果:

int sum(int a, int b) 
{
    int c = a + b;
    return c;
}

9.2 函数的调用

在程序中调用函数时,需要提供函数名和实参列表。实参列表是实际传递给函数的参数,其数据类型和数量必须与函数定义时的参数列表一致。

例如,下面调用了 sum 函数,并输出了其返回值:

int a = 1, b = 2;
int c = sum(a, b);//调用
printf("sum(%d, %d) = %d\n", a, b, c);

……后面将会对函数做更深的介绍

10. 数组

如何存储多组数据?

10.1 数组定义

C语言中对数组的定义:一组相同类型元素的集合

int arr[5]={1,2,3,4,5};//定义一个整形数组,最多存放5个元素
char arr1[5];//定义字符数组
float arr2[5];//定义浮点类型数组

10.2 数组的下标

C语言规定:数组的每个元素都有一个下标,小标从0开始。
数组可以通过下标来访问单个元素的。
例如:

int arr[5]={1,2,3,4,5};//五个元素,下标范围是0-4

在这里插入图片描述

10.3 数组的使用

通过下标,可以对数组中的元素进行提取。
例如:将int arr[5]中的元素依次输出

#include<stdio.h>
int main()
{
	int arr[5] = { 1,2,3,4,6 };
	for (int i = 0; i < 5; i++)
	{
		printf("%d\n", arr[i]);
	}
	return 0;
}

运行结果:
在这里插入图片描述

11. 操作符

  • 在C语言中:0表示假,非0表示真
    算术操作符
+  -  *  /  %(取余)

在这里插入图片描述

移位操作符

>>  <<

位操作符

&  ^  |

赋值操作符

=  +=  -=  *=  /=  &=  ^=  |=  >>=  <<=
int a=0;
a=10;
a=a+5;    a+=5;//两个语句相同
a=a-2;    a-=2;//两个语句相同
a=a*3;    a*=3;//两个语句相同

单目操作符

!				逻辑反操作
-				负值
+				正值
&				取地址
sizeof			操作数的类型长度(单位:字节)
~				对一个数的二进制按位取反
--				前置、后置--
++				前置、后置++
*				简洁访问操作符(解引用操作符)
(数据类型)		强制类型装换
// !
int main()
{
	int a=1;
	if(a)//a为真进入
		printf("1");
	if(!a)//a为假进入
		printf("2");
	return 0;
}
//sizeof
int main()
{
	int a=1;
	printf("%d\n",sizeof(a));//4
	printf("%d\n",sizeof a);//4
	printf("%d\n",sizeof(int));//4       
//错误表示:printf("%d\n",sizeof int)
	return 0;
}
//++ --
int main()
{
	int a=5; int b=++a;
	printf("%d %d\n",a,b);//6 6
	int c=5; int d=c++;
	printf("%d %d\n",c,d);//6 5
	int e=5; int f=--e;
	printf("%d %d\n",e,f);//4 4
	int p=5; int q=p--;
	printf("%d %d\n",p,q);//4 5
	return 0;
}
//强制类型转换
int main()
{
	int a=(int)3.1;
	printf("%d",a);//3
	return 0;
}

关系操作符

>
>=
<
<=
!=				用于测试“不相等”
==				用于测试“相等”

在这里插入图片描述

逻辑操作符

&&				逻辑与-两哥操作数同为真才是真,只要有一个假,则为假
||				逻辑或-两边同为假才是假,只要有一个真,则为真

在这里插入图片描述

条件操作符

exp1?exp2:exp3   //exp1为真,执行exp2,为假则执行exp3

在这里插入图片描述

逗号表达式

exp1,exp2,exp3,...expn

在这里插入图片描述
下标引用、函数调用、结构成员

[]  ()  .  ->
//结构体
struct stu
{
	char name[20];
	int num;
	float score;
};
int main()
{
	struct stu s1 = { "liming",01,89 };
	struct stu s2 = { "lihua",02,96 };
	struct stu s3 = { "lili",03,91 };
	printf("%s %d %lf", s1.name, s2.num, s3.score);//引用结构体成员
}
//liming 2 91.000000

引用结构体成员三种方式:

  • 结构体变量名.成员名
  • 结构指针变量名->成员名
  • (*指针变量名).成员名

12. 常见关键字

用户不能自己创造关键字

auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

12.1 关键字typedef

typedef顾名思义是类型定义,这里应该理解为类型重命名。

typedef struct Node
{
	int data;
	struct Node* next;
}Node;     //把struct Node叫做Node

12.2 关键字static

在C语言中: static是用来修饰变量和函数的
     1.修饰局部变量称为静态局部变量
     2.修饰全局变量称为静态全局变量
     3.修饰函数称为静态函数

1.修饰局部变量–静态局部变量

void teat()
{
	int a=5;
	a++;
	printf("%d",a); 
}
int i=0;
while(i<10)
{
	test();
	i++;
}
return 0;
 //6 6 6 6 6 6 6 6 6 6 
//如果在 int 前加上static  则输出为 6 7 8 9 10 11 12 13 14 15

static修饰局部变量改变了变量的存储类型(位置),使得这个静态变量的生命周期变长了,直到程序结束。

2.修饰全局变量–动态全局变量
一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。

全局变量具有外部链接属性,使用extern可以在其他源文件内部使用
static修饰全局变量,改变了这个全局变量的链接属性,由外边链接属性变为内部链接属性,导致不能跨文件使用。

3.修饰函数–静态函数(和static修饰全局变量是一样的)

//代码1 
//add.c
static int Add(int x,int y)            
{                                               
	return x+y;                                    
}   
//teat.c 
int main()
{
	printf("%d",Add(1,2))//3 
	return 0;
}

//代码2 
//add.c
static int Add(int x,int y)            
{                                               
	return x+y;                                    
}                                           
//teat.c
int main()
 {
	printf("%d",Add(1,2))//出现链接行错误
	return 0;
}   
 	

一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

13. #define定义常量和宏

//define定义标识符常量
#define MAX 100

//define定义宏
#define ADD(x,y) ((x)+(y))
#include<stdio.h>
int main()
{
	printf("%d\n", ADD(2, 3));//5
	printf("%d\n", 10 * ADD(2, 3));//50
	return 0;
}

14. 指针

什么是指针?

指针也就是内存地址,指针变量是用来存放内存地址的变量

指针相对于一个内存单元来说,指的是单元的地址,该单元的内容里面存放的是数据。在 C 语言中,允许用指针变量来存放指针,因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。

14.1 内存

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址
        在这里插入图片描述
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。
取出变量地址如下:
在这里插入图片描述
变量num在内存中的存放地址:
  在这里插入图片描述
地址又是如何存储的呢? 需要定义一个指针变量

int num = 10;
int* p=&num;//p存放num的地址,是一个整型指针变量,即是存放地址的变量
*p = 20;//解引用操作符,*p就是num

指针的使用实例:

int main()
{
	int num = 10;
	printf("%p\n", &num);
	int* p=&num;//p存放num的地址,是一个整型指针变量,即是存放地址的变量
	*p = 20;//解引用操作符,*p就是num
	printf("%d\n", p);
	return 0;
}

在这里插入图片描述

14.2 指针变量的大小

#include <stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{
	printf("%d\n",sizeof(char*));
	printf("%d\n",sizeof(short*));
	printf("%d\n",sizeof(int*));
	printf("%d\n",sizeof(double*));
	return 0;
}

15. 结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
比如描述学生,学生包含:名字+学号+分数这几项信息。
这里只能使用结构体来描述了。

struct Stu
{
	char name[20];//名字
	int num;//学号
	float score;//分数
}
//打印结构体信息
struct Stu s={"wanger",101,96};
//.为结构体成员访问操作符
printf("name=%s num=%d score=%lf\n",s.name,s.num,s.score);
//->访问操作符
struct Stu *p=&s;//定义指针变量p类型
printf("name=%s num=%d score=%lf\n",p->name,p->num,p->score);
printf("name=%s num=%d score=%lf\n",(*p).name,(*p).num,(*p).score);

使用实例:
在这里插入图片描述


结束语

到这里初始C语言的内容就结束了,后面我将会对这些知识点进行拓展延伸,详细讲解。
  山一程,水一程,感谢铁汁的关注~
  我们下一篇文章再见。
在这里插入图片描述

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

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

相关文章

JAVA学习(九)

1.java锁 1.1 AtomicInteger 首先说明&#xff0c;此处 AtomicInteger&#xff0c;一个提供原子操作的 Integer 的类&#xff0c;常见的还有 AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference 等&#xff0c;他们的实现原理相同&#xff0c; 区别在与运算对象类型…

搭建新版security-oauth2协议,流程代码详解,源码分析

前言&#xff1a;最近在学习搭建oauth2协议的开放平台&#xff0c;把搭建框架时的思路以及遇到的问题记录下来。 文章会持续更新&#xff0c;前期可能会比较零碎&#xff0c;最后会整合一起&#xff0c;写一篇从部署到使用、踩坑、依赖版本解决等完整文章。 使用的是Spring S…

【深度学习】深度强化学习初学者指南

一、说明 GAN&#xff08;Generative Adversarial Networks&#xff09;是一种深度学习模型&#xff0c;它由两个神经网络组成&#xff1a;一个生成网络和一个判别网络。生成网络学习如何生成类似于给定数据集的新数据&#xff0c;而判别网络则学习如何区分生成网络生成的数据和…

Linux下的基本指令

Linux下的基本指令 操作系统的概念01.adduser指令02.userdel指令03.pwd指令04.ls指令05.tree指令06.cd指令07.touch指令08.mkdir指令&#xff08;重要&#xff09;09.rmdir指针&&rm指令&#xff08;重要&#xff09;10.man指针&#xff08;重要&#xff09;11.cp指令&a…

【macOS 系列】如何调整启动台图标大小和行数

1、使用指令&#xff0c;这是隐藏的技巧&#xff0c;在控制台输入如下指令 defaults write com.apple.dock springboard-rows -int 6 defaults write com.apple.dock springboard-columns -int 8 defaults write com.apple.dock ResetLaunchPad -bool TRUE killall Dock以上表…

基于Web的智慧交通3D可视化系统

前言 城市交通是城市社会活动、经济活动的纽带和动脉&#xff0c;智慧交通系统对城市经济发展和人民生活水平起着极其重要的作用。 背景 随着我国城市化进程不断加快&#xff0c;现代城市交通问题日益受到人们的关注。特别是汽车数量的与日俱增&#xff0c;给城市带来了大量…

Socket介绍及使用Java实现socket通信

一、Socket概述 Socket&#xff08;套接字&#xff09;是计算机网络编程中用于实现网络通信的一种机制。它提供了一种编程接口&#xff0c;允许应用程序通过网络进行数据传输&#xff0c;实现不同主机之间的通信。 Socket可以看作是一种抽象的概念&#xff0c;用于描述网络通信…

性能监控软件的软件特色有哪些?

性能监控软件是一种专门用于监测和分析系统性能的软件工具。它可以帮助开发人员、运维人员和系统管理员追踪系统的性能瓶颈&#xff0c;优化系统性能&#xff0c;提供稳定可靠的服务&#xff0c;那性能监控软件的软件特色有哪些&#xff1f; 实时监控&#xff1a;性能监控软件可…

3、CCesium 第一个地图

1、将下载的CCsium库解压到指定目录如D:/install&#xff0c;里面有几个文件 bin&#xff1a;导出的dll examples&#xff1a;一个简单的示例 include&#xff1a;ccesium和第三方库的头文件 lib&#xff1a;搜索cceisum库的一些信息 share&#xff1a;一些说明 我们主要用…

allatori-JAVA代码混淆工具

Allatori是第二代Java混淆器&#xff0c;它为您的知识产权提供全方位的保护。 虽然大多数第二代混淆器都能提供值得信赖的保护&#xff0c;但我们在Allatori中开发了一些额外的功能&#xff0c;使代码的反向工程几乎不可能。 Allatori不仅仅是混淆&#xff0c;它还能最大限度…

为什么你感觉中层管理一直闲着没事干?

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 切记&#xff0c;任何文章不要过度深思&#xff08;任何东西都无法经得起审视&#xff0c;因为这世上没有同样的成长环境&#xff0c;也没有同样的认知水平同时也「没有适用于所…

eNSP的使用

目录 配置路由器 DHCP——动态主机配置协议 工作过程&#xff1a; 第一种场景——PC首次获取IP地址的情况 第二种场景——pc&#xff08;客户都&#xff09;再次获取IP地址的情况 DHCP配置&#xff1a; Telnet 搭建好图后 1.看广播域&#xff08;路由器有几个接口就有几…

在树莓派上搭建web站点并发布互联网上线【无需公网IP】

文章目录 概述使用 Raspberry Pi Imager 安装 Raspberry Pi OS设置 Apache Web 服务器测试 web 站点安装静态样例站点将web站点发布到公网安装 Cpolar内网穿透cpolar进行token认证生成cpolar随机域名网址生成cpolar二级子域名将参数保存到cpolar配置文件中测试修改后配置文件配…

JUC--CompletableFuture下

对计算速度进行选用 import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit;public class Test4 {public static void main(String[] args) {CompletableFuture<String> a CompletableFuture.supplyAsync(() -> {try { TimeUnit.SE…

list和vector容器的插入与访问操作区别

文章目录 list插入元素和vector插入元素对比案例vector的做法list优化的做法为什么时间复杂度相同还会有性能差异 std::list和std::vector是C中的两种常见数据结构&#xff0c;它们在不同的使用场景下各有优势。 std::vector的内部实现是动态数组&#xff0c;它在连续的内存块…

weak_ptr 智能指针的使用

目录 一&#xff0c;weak_ptr 变量的定义 二&#xff0c;expired() 成员函数 三&#xff0c;lock() 成员函数 四&#xff0c;use_count() 成员函数 五&#xff0c;为什么要用 weak_ptr 一&#xff0c;weak_ptr 变量的定义 weak_ptr 对象的构造有3种方法&#xff1a; 1&am…

Python基础综合案例-数据可视化(折线图)

今天给大家带来的是Python综合实战开发的数据可视化操作 通过python实现对数据的分析、可视化 数据来源: 系统开发环境&#xff1a; 操作系统&#xff1a;win11 Python解释器版本&#xff1a;python3.10 开发工具&#xff1a;Pychram Python内置模块&#xff1a;pyecharts 1…

HarmonyOS/OpenHarmony应用开发-Stage模型应用/组件级配置

在开发应用时&#xff0c;需要配置应用的一些标签&#xff0c;例如应用的包名、图标等标识特征的属性。本文描述了在开发应用需要配置的一些关键标签。图标和标签通常一起配置&#xff0c;可以分为应用图标、应用标签和入口图标、入口标签&#xff0c;分别对应app.json5配置文件…

二进制算术运算

当两个数码表示数量大小时&#xff0c;可以进行加减乘除等算术运算。 一&#xff1a;两数绝对值之间的运算 加法运算&#xff1a; 二进制的每一位只有0和1两个数&#xff0c;低位向高位的进位关系是“逢二进一”&#xff0c;所以中的每一位的运算规则为&#xff1a; 减法运算&…

【无标题】企业数字化转型需要什么样的生产力工具?

前言 企业的数字化转型是一个很大的话题&#xff0c;从宏观到微观&#xff0c;涉及到目标、战略、方案、路径、计划、组织、流程等方方面面。我们今天聊一个非常落地非常具体的问题——企业数字化转型需要什么样的生产力工具&#xff1f; 需要哪些类型的生产力工具&#xff1…