C语言学习笔记

第一章 初识C语言

第二章 C语言概述

2.1 简单的C语言实例

在Linux系统下可以使用两种种方法来编写C语言代码

touch file_name.c
vi file_name.c
nano file_name.c

编译c文件,可以用Linux系统下自带的编译器工具gcc

gcc -b
# 可以用来查看当前gcc编译工具的版本
gcc file_name.c
# 用编译器工具gcc来编译编写好的c文件,编译后生成一个可执行文件a.out
gcc file_name.c -o exe_name
# 用编译器工具gcc来编译编写好的c文件,编译后生成一个可执行文件exe_name

这是一个简单的C程序。一个程序可以有多个函数。

#include <stdio.h>
int main(void)
{
	int num;
	num = 1;
	printf("I am a simple computer\n");
	printf("my favorite number id %d\n", num);
	return 0;
}
// 单行注释
/*
多行注释
*/

第一行:
#和include后面加上要包含的头文件。那头文件里面声明过的函数,我们都可以在本文件当中直接使用。
第二行:
在只考虑上位机和PC机而不考虑底层的情况下,任何一个C语言有且只有一个main函数,并且所有程序都从main函数开始执行。(操作系统调用main函数)
main函数前面的数据类型代表的是我们main函数返回一个什么样数据类型的值。
main函数后面的圆括号表示main是一个函数。括号里面的内容是调用函数传入的参数,void表示没有参数传入。
第三行:
我们函数主要实现的内容放在花括号中,被称为函数体。
第四行:
声明了一个int类型的变量。当声明一个变量后程序会在我们的内存空间中开辟一片空间用来存放这个变量。
第五行:
变量的赋值操作。将一个值放入到这个变量开辟的内存空间中。
第六行:
printf是一个标准输出的函数,将括号中的内容格式化(f)输出到我们的便准输出(屏幕上)。
\n是一个换行操作。是一个转义字符。转义字符就是可以转换字符意思的字符。不会显性地显示在屏幕上。
第七行:
%d代表的含义要进行替换操作,用number把%d给替换。d代表一个十进制的一个整形数。
第八行:
将main函数提供一个执行结果。
第九行:
右花括号表示函数内容的结束。
第十行:
C语言可以用两个斜杠来对代码进行注释
第十一行:
C语言也可以用/*和*/来进行多行和单行注释。
注意:
任何C语言的语句都要以分号结尾。

2.2 进一步使用C语言

/*
	fathoms convert to feet
	将2英寻转化为英尺
*/

#include <stdio.h>

int main(void)
{
	int feet, fathoms;  // int feet;  int fathoms;
	fathoms = 2;
	feet = 6*fathoms;

	printf("There is %d feet in %d fathoms.\n", feet, fathoms);
	printf("Yes, I said %d feet!\n", 6*fathoms);

	return 0;
}

第十行:
可以一次声明多个相同类型的变量,并用逗号隔开。
第十四行:
printf是一个函数可以带多个参数。
第十五行:
printf也可以进行表达式的替换。
注意:
函数所代表的功能啊。以及变量所代表的功能,最好在程序的相关的位置做一些注释说明。
选择函数和变量的名称的时候要尽量用一些函数和变量所要实现的意义相近的这个英文单词。
在程序当中要尽量把不同的功能模块要用空格的方式来分开。
程序每行尽量要用一条语句来实现。

2.3 多个函数

#include <stdio.h>

void answer(void);

//void answer(void)
//{
//	printf("Dad, I am watching TV, What's up?\n");
//}

int main(void)
{
	printf("Rick, what are you doing?\n"); // Dad said

	answer();            	// son answer

	printf("OK, Come here, I need your help!\n");
	
	return 0;
}

void answer(void)
{
	printf("Dad, I am watching TV, What's up?\n");
}

调用函数的方法一:
函数的声明,也叫函数原型。应为编译器对于C代码的编译是需要从上到下编译的,所以在调用函数之前需要对函数进行一次声明。
函数的调用。
函数的定义即函数具体实现的内容。
调用函数的方法二:
可以将函数的定义放到函数调用之前,就不需要进行函数的声明。

函数的调用不依赖于函数的位置。

第三章 数据和C

3.1 变量与常量

在程序运行过程中可能会变化或赋值的数据称为变量
在程序运行之前被设定为在整个运行过程中无变化的数据称为常量

3.2 数据类型

在绝大多数情况下,计算机基本的存储单位是一个字节。在进行嵌入式开发的时候,地址增加一,单位就是一个字节。
一个字节是为等于八位。

3.2.1 int类型

int类型的大小取决于计算机的处理器的位数。目前32/64位操作系统中int型的数据占32位,4字节(-2147483648~2147483647)
ISO/ANSI C规定int类型的取值范围为-32768到32727。
初始化int型变量就是为变量赋一个初始值,即对变量进行赋值操作。可以在声明语句中初始化变量。
应该避免在一个声明语句中同时出现初始化变量和未初始化变量。
int型通过格式说明符%d来进行打印。==必须确保格式说明符同打印值数目相同。==否则会指向内存中的任意位置。

第四章 字符串和格式化输入输出

第五章 运算符、表达式和语句

第六章 循环

第七章 分支和跳转

第八章 字符输入/输出和输入验证

第九章 函数

第十章 数组和指针

10.1 数组

数组由数据类型相同的一系列元素组成。要访问数组中的元素,可以通过使用数组下标数(也称为索引)来表示数组中的各元素。数组元素的编号从0开始。

10.1.1 初始化数组

数组的初始化用以逗号分隔的值列表(用花括号括起来)来初始化数组,各值之间用逗号分隔。
使用const声明数组:程序在运行过程中不可以修改数组的内容,及不可以再给她赋值。

使用数组前,必须进行初始化(赋初值)。编译器使用的值是内存相应位置上的现有值。如果不初始化,其中储存的都是垃圾值。
当初始化列表中的值少于数组元素的个数时,编译器会把剩余的元素都初始化成0。
当初始化列表中的值大于数组元素的个数时,编译器会报错。

可以通过省略方括号中的数字,让编译器自动匹配数组大小和初始化列表中的项数。但是无法察觉初始化列表中的项数有误。
数组元素的个数 = sizeof(数组名)/sizeof(数组名[0])

10.1.2 指定初始化器(C99)

可以通过指定初始化器,初始化指定的数组元素。相较于传统的C语法,在初始化相应位置的元素前必须初始化其之前的所有元素。
如果指定初始化器后面有更多的值,那么后面的值将被用于初始化指定元素后面的元素。
如果再次初始化指定的元素,那么最后的初始化将会取代之前的初始化。
通过省略方括号中的数字,让编译器自动匹配数组大小和初始化列表中的项数,编译器会把数组大小设置为足够装下初始化的值。

10.1.3 给数组元素赋值

第十一章 字符穿和字符串函数

第十二章 存储类别、链接和内存管理

第十三章 文件输入/输出

第十四章 结构和其他数据形式

第十五章 位操作

第十六章 C预处理和C库

第十七章 高级数据表示

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于YOLOv9实现工业布匹缺陷(破洞、污渍)检测系统python源码+详细运教程+训练好的模型+评估 【使用教程】 一、环境配置 1、建议下载anaconda和pycharm 在anaconda中配置好环境,然后直接导入到pycharm中,在pycharm中运项目 anaconda和pycharm安装及环境配置参考网上博客,有很多博主介绍 2、在anacodna中安装requirements.txt中的软件包 命令为:pip install -r requirements.txt 或者改成清华源后再执以上命令,这样安装要快一些 软件包都安装成功后才算成功 3、安装好软件包后,把anaconda中对应的python导入到pycharm中即可(不难,参考网上博客) 二、环境配置好后,开始训练(也可以训练自己数据集) 1、数据集准备 需要准备yolo格式的目标检测数据集,如果不清楚yolo数据集格式,或者有其他数据训练需求,请看博主yolo格式各种数据集集合链接:https://blog.csdn.net/DeepLearning_/article/details/127276492 里面涵盖了上百种yolo数据集,且在不断更新,基本都是实际项目使用。来自于网上收集、实际场景采集制作等,自己使用labelimg标注工具标注的。数据集质量绝对有保证! 本项目所使用的数据集,见csdn该资源下载页面中的介绍栏,里面有对应的下载链接,下载后可直接使用。 2、数据准备好,开始修改配置文件 参考代码中data文件夹下的banana_ripe.yaml,可以自己新建一个不同名称的yaml文件 train:训练集的图片路径 val:验证集的图片路径 names: 0: very-ripe 类别1 1: immature 类别2 2: mid-ripe 类别3 格式按照banana_ripe.yaml照葫芦画瓢就,不需要过多参考网上的 3、修改train_dual.py中的配置参数,开始训练模型 方式一: 修改点: a.--weights参数,填入'yolov9-s.pt',博主训练的是yolov9-s,根据自己需求可自定义 b.--cfg参数,填入 models/detect/yolov9-c.yaml c.--data参数,填入data/banana_ripe.yaml,可自定义自己的yaml路径 d.--hyp参数,填入hyp.scratch-high.yaml e.--epochs参数,填入100或者200都,根据自己的数据集可改 f.--batch-size参数,根据自己的电脑性能(显存大小)自定义修改 g.--device参数,一张显卡的话,就填0。没显卡,使用cpu训练,就填cpu h.--close-mosaic参数,填入15 以上修改好,直接pycharm中运train_dual.py开始训练 方式二: 命令方式,在pycharm中的终端窗口输入如下命令,可根据自己情况修改参数 官方示例:python train_dual.py --workers 8 --device 0 --batch 16 --data data/coco.yaml --img 640 --cfg models/detect/yolov9-c.yaml --weights '' --name yolov9-c --hyp hyp.scratch-high.yaml --min-items 0 --epochs 500 --close-mosaic 15 训练完会在runs/train文件下生成对应的训练文件及模型,后续测试可以拿来用。 三、测试 1、训练完,测试 修改detect_dual.py中的参数 --weights,改成上面训练得到的best.pt对应的路径 --source,需要测试的数据图片存放的位置,代码中的test_imgs --conf-thres,置信度阈值,自定义修改 --iou-thres,iou阈值,自定义修改 其他默认即可 pycharm中运detect_dual.py 在runs/detect文件夹下存放检测结果图片或者视频 【特别说明】 *项目内容完全原创,请勿对项目进外传,或者进违法等商业为! 【备注】 1、该资源内项目代码都经过测试运成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值