筑基一层 —— 高质量C编程建议、详解猜数字游戏

news2024/12/26 13:18:31

目录

一.修炼必备

二.高质量C编程

2.1 高质量C编程的思维导图(需要思维导图的加qq:972606225获取)

2.2 文件结构

2.3 程序的形式

2.4 命名规则 

三.猜数字游戏详解


一.修炼必备

  1.入门必备:VS2019社区版,下载地址:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (microsoft.com)

  2.趁手武器:印象笔记/有道云笔记

  3.修炼秘籍:牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网 (nowcoder.com)

  4.雷劫必备:leetcode 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 

  注:遇到瓶颈怎么办?百度百科_全球领先的中文百科全书 (baidu.com)

二.高质量C编程

2.1 高质量C编程的思维导图(需要思维导图的加qq:972606225获取)

2.2 文件结构

  1.头文件的组成

   1)头文件的文件以.h结尾

   2)使用#pragma once防止头文件被重复引用

   3)头文件中包含预处理块和函数的声明和结构的声明

//test.h文件中的内容

#pragma once //防止头文件重复使用
#include <stdio.h>
#include <stdlib.h>

//预处理块
#define MAX 100
#define MIN 0

//结构声明
struct People
{
    char name[10];
    int age;
}

//函数的声明
void print();
void getMax(int x, int y);

  2.使用#include <xxx.h>和#include "xxx.h"的区别

   1)#include <xxx.h>的头文件编译器先从C语言的标准库中寻转匹配的头文件

   2)#include "xxx.h"的头文件编译器先从用户自己定义的头文件开始查找,任何在从C标准库中查找,若是都没有,则报错

//先从C标准库中的头文件开始查找
#include <stdio.h>
#include <stdlib.h>

//从用户自己定义的头文件开始查找,然后从C标准库中的头文件查找,若都没有,报错
#include "test.h"

  3.头文件的定义结构

   1)头文件的引用

   2)头文件中函数和结构的具体实现

//test.c(函数和结构的具体实现)

#include "test.h" 

//函数的具体实现
void print()
{
    printf("hehe\n");
}

int getMax(int x, int y)
{
    return x > y ? x : y;
}

int main()
{
    //结构的实现
    struct People p = {"jack",20};
    return 0;
}

  4. 头文件的作用

   1)头文件可以调用库功能

   2)头文件能加强类型安全检查

解释:通过头文件能调用相应的头文件中库功能,比如<stdio.h>头文件中,我们可以调用scanf和printf库函数,如果我们写错了或者有类型不对,都会有相应的类型检查

2.3 程序的形式

  1.空行

   —— 空行起着分隔程序段落的作用,空行得体将使程序的布局更加清晰

  2.空行的规则

   1)每个结构声明、每个函数定义后结束之后都要加上一行空行

   2)函数体内,逻辑上密切相关的语句之间不加空行,其他地方应该加空格分隔

//结构声明
struct People
{
	char name[10];
	int age;
};
//加空行

int getMax(int x, int y)
{
	return x > y ? x : y;
}
//每个函数定义后结束之后都要加上一行空行

int grade(int score)
{
	//逻辑上密切相关的语句之间不加空行,其他地方应该加空格分隔
    int x = 0;
    int y = 0;

	if (x > y)
	{
		score = x;
	}
	else
	{
		score = y;
	}
	return score;
}

  3.代码行规则

   1)一行代码只做一件事情,如只定义一个变量,或只写一条语句

   2)if、for、while、do等语句独占一行,执行语句不得紧跟其后,不论执行语句有多少都要加{} 

   3)尽可能在定义变量的同时进行初始化变量(就近原则)

#include <stdio.h>

int main()
{
	//一行代码只做一件事情,如只定义一个变量,或只写一条语句
	int num = 10;//定义变量
	int i = 0;

	//if、for、while、do等语句独占一行,执行语句不得紧跟其后
	//不论执行语句有多少都要加{} 
	if (num > 0)
	{
		num = 20;
	}

	while (i < 10)
	{
		printf("%d ", i);
		i++;
	}
	return 0;
}

  4. 代码行内空格规则

1)关键字之后要留空格

2)函数名之后不要留空格

3)’,‘后留空格,’;‘:不是一行的结束标志,那么后面留空格

4)赋值运算符、比较运算符、算术运算符、逻辑运算符、位运算符等二元操作符前后都要有空格

5)一元运算符前后不加空格

6)[]、.、->:操作符前后不加空格

注:对于表达式过长的for和if语句,为了紧凑期间可以适当的去掉一些空格

#include "test.h"

//函数名之后不要留空格
void print(int x, int y)
{
	printf("haha\n");
}

int main()
{
	//关键字之后要留空格
	int num = 10;//int是关键字
	int i = 0;

	//’, ‘后留空格
	print(10, 20);
	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

	//’; ‘:不是一行的结束标志,那么后面留空格
	//对于表达式过长的for和if语句,为了紧凑期间可以适当的去掉一些空格
	for (i=0; i<10; i++)
	{
		printf("%d ", i);
	}

	//赋值运算符、比较运算符、算术运算符、逻辑运算符、
	//位运算符等二元操作符前后都要有空格
	int c = 10 + 20;//=:赋值运算符,+:算术运算符
	int d = 2 << 2;//<<:位运算符

	if (c > num)//>:逻辑运算符
	{
		printf("%d\n", c);
	}

	//一元运算符前后不加空格
	int data = !d;//!:是一元运算符

	struct People p = { "marry",18 };
	struct People* pa = &p;

	//[] 、.、->:操作符前后不加空格
	printf("%s %d", pa->name, pa->age);
	return 0;
}

  5.对齐规则

   1)程序的分隔符{}均独占一行并且位于同一列
   2){}里的代码块在{的左边进行对齐

#include "test.h"

int main()
{
	//程序的分隔符{}均独占一行并且位于同一列,即对齐
	//{}里的代码块在{ 的左边进行对齐
	if (1 > 3)
	{
		printf("hhhh\n");
	}
	return 0;
}

  6.长行拆分规则

   1)代码行最大长度控制在70~80个字符以内
   2)长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首。

//长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首。
if (num1 && num2 || num3 && num4 
	|| num5 && num6 || num7 && num8 || num9)
{

}

  7.修饰符规则:将修饰符*和&紧靠变量名,避免引起误会

#include <stdio.h>

int main()
{
	//将修饰符*和&紧靠变量名
	int* x, y;//x是int*类型,y是int类型;
	return 0;
}

  8.注释规则

1)注释是为了帮助理解代码,而不是文档
2)如果代码原来是清除的,则不需要加注释
3)边写代码边注释,修改代码的同时修改相应的注释,以保证注释与代码的一致性
4)注释应该易懂和准确,不能产生二义性
5)在注释中尽量不要使用缩写,使用缩写不好帮助理解代码
6)注释的位置应该在代码的上面或右面,不可在下面

2.4 命名规则 

  1.共性规则

1)标识符应该直观且可以拼读,要望文知意
2)标识符的长度应符合”min-length"&&"max-information"原则(最短长度,最多信息)
3)程序中不要出现仅靠大小写区分的相似标识符
4)程序中不要出现标识符相同的全局变量和局部变量
5)变量的名字应该使用名词或形容词+名词来进行命名
6)全局函数的标识符应使用动词或动词+名词来进行命名

  2.Windows下的命名规则

函数名使用每个单词都大写的形式
变量名和参数使用小写字母开头的单词组合
常量名使用全大写的单词形式,多单词的话用下划线隔开
静态变量加前缀s_,表示static
全局变量加前缀+g,表示global

三.猜数字游戏详解

  1.猜数字游戏的思维导图

  2.猜数字游戏思想:随机生成一个数(1-100),输入我们要猜的数据,使用我们输入的数据和随机数比较;若大于,则提示猜大了;若小于,则提示猜小了;若等于,则提示猜对了。

  3.rand()函数和srand()函数详解(需头文件:stdlib.h)

 注:需要搭配srand一起使用

  4.代码实现

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void menu()
{
	printf("****************************\n");
	printf("*****    1.玩游戏      *****\n");
	printf("*****    0.退出游戏    *****\n");
	printf("****************************\n");
}

void game()
{
	//生成1-100的随机数
	int num = rand() % 100 + 1;
	//printf("%d\n", num);
	int guessNum = 0;
	
	while (1)
	{
		printf("请输入你猜的数字:\n");
		scanf("%d", &guessNum);

		//输入数据与随机数进行比较
		if (guessNum > num)
		{
			printf("猜大了\n");
		}
		else if (guessNum < num)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了!!!\n");
			break;
		}
	}
}

//猜数字游戏详解
int main()
{
	int opt = 0;
	//生成随机数种子
	srand((unsigned int)time(NULL));
	do
	{
		menu();//菜单
		printf("请选择:>");
		scanf("%d", &opt);

		switch (opt)
		{
			case 1:
				game();
				break;
			case 0:
				printf("退出游戏\n");
				break;
			default:
				printf("选择错误,请重新选择\n");
				break;
		}
	} while (opt);
	return 0;
}

  5.演示

    !!!恭喜你,突破至筑基一层!!!

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

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

相关文章

torch_geometric -- Pooling Layers

torch_geometric – Pooling Layers global_add_pool 通过在节点维度上添加节点特征来返回批量图级输出&#xff0c;因此对于单个图 它的输出由下式计算 from torch_geometric.nn import global_mean_pool, global_max_pool, global_add_pool import torch as thf [[1,2,3,4…

Wider Face+YOLOV8人脸检测

YOLO系列的算法更新实在太快了&#xff0c;前些天刚学习完YOLOV7&#xff0c;YOLOV8就出来了。今天先理解模型的训练过程&#xff0c;后续再学习V8的网络结构等细节。YOLOV8源码链接&#xff1a;https://github.com/ultralytics/ultralytics1 数据格式转换Wider Face数据格式转…

java -- 14 多态、内部类、常用API

自动类型转换&#xff1a;多态下引用数据类型的类型转换强制类型转换案例&#xff1a;定义usb接口&#xff1a;定义鼠标和键盘的usb实现类&#xff0c;并有自己特有的方法&#xff0c;重写usb接口的方法&#xff0c;里面穿插了多态创建电脑类&#xff0c;把usb接口揉和进去&…

如何改变视频的MD5值?一分钟让你学会操作

肯定很多不是从事自媒体的朋友对MD5不是很熟悉&#xff0c;但其实它类似于人的身份证&#xff0c;只不过我们的身份证是一串数字&#xff0c;而它则是视频的后台编码&#xff0c;所以这也是一些平台用MD5来判断视频是否重复的依据。那么有人会问了&#xff0c;既然MD5这么特殊&…

Java实战:使用Hutool中的MailUtil实现邮件的发送

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️荣誉&#xff1a; CSDN博客专家、数据库优质创作者&#x1f3c6;&…

EasyExcel的导入导出使用

1、说明 EasyExcel是阿里出的一款基于Java的、快速、简洁、解决大文件内存溢出的处理Excel的开源工具&#xff0c;本文主要是使用这个工具对Excel导入导出进行讲解。 官网&#xff1a; https://easyexcel.opensource.alibaba.com/github&#xff1a; https://github.com/alib…

达梦主备之备库失联后在线恢复加入集群

一、主库故障重启&#xff08;备库接管前重启&#xff09; 主库故障后立即重启&#xff0c;此时主库的守护进程变成 Startup 状态&#xff0c;重新进入守护进程的 启动流程&#xff0c;将数据一致的备库归档设置为有效状态&#xff0c;其余备库归档设置成无效状态&#xff0c;并…

一些工具软件的使用

文章目录010 Editor设置16进制编辑时每行显示的字节数使用列模式编辑VS Code基础操作定义快捷键配置导出/导入列模式将文件中的tab键转换为空格关闭插件自动更新博文链接Beyond Compare文件内容相同依然显示差异过滤文件或文件夹Excel使用组合&#xff0c;进行行、列的折叠使用…

【DX-BT24蓝牙模块-AT命令与手机透传教程】

【DX-BT24蓝牙模块-AT命令与手机透传教程】1. 前言1.1.串口基本参数1.2.AT命令模式和透传模式1.3.模块数据吞吐量2. 接线2.1 模块线序定义2.2 相关AT命令详解2.2.1 命令格式说明2.2.2 回应格式说明2.2.3 AT命令举例说明3. AT命令详解3.1 基础指令3.2 AT指令测试3.3 手机测试4. …

英华特在创业板提交注册:拟募资约5亿元,股权结构较为分散

近日&#xff0c;苏州英华特涡旋技术股份有限公司&#xff08;下称“英华特”&#xff09;在上海证券交易所递交注册。据贝多财经了解&#xff0c;英华特的上市申请于2021年6月30日获得受理&#xff0c;2022年8月25日获得创业板上市委会议通过。 本次冲刺上市&#xff0c;英华特…

智合同丨你还在为填写合同台账犯愁吗?

最近有朋友问我有没有什么智能化手段处理合同台账问题&#xff1f;对方表示合同台账管理实在是太麻烦了&#xff0c;工作量大&#xff0c;占用时间多。答案肯定是有的&#xff0c;那么首先我们来了解下合同台账。合同台账一般指合同台帐&#xff0c;包括合同登记台帐、合同检查…

Solidity 中的数学(第 1 部分:数字)

本文开启了一系列关于在 Solidity 中进行数学运算的文章。第一个要讨论的话题是&#xff1a;数字。 介绍 以太坊是一个可编程的区块链&#xff0c;其功能可以通过将称为智能合约的可执行代码片段发布到区块链本身来扩展。这将以太坊与第一代区块链区分开来&#xff0c;在第一代…

PointNet.pytorch点云三维深度学习论文与代码复现

PointNet.pytorch1. 概要1.1 文章1.2 点云和三维深度学习&#xff0c;PointNet 网络结构1.3 复现说明2. 代码2.1 代码逻辑2.2 思路详解3. 解析组会2023.1.18远程arcivdailyonedb1. 概要 1.1 文章 链接: 论文 1.2 点云和三维深度学习&#xff0c;PointNet 网络结构 链接: 三…

程序员必备素质:代码整洁之道

本次分享的内容是《代码整洁之道》&#xff0c;书中是以现实案例&#xff0c;以讲故事形式来总结归纳问题&#xff0c;并给出解决方案&#xff0c;很容易与我们产生共鸣。文中会有大量书中内容摘抄&#xff0c;都是个人认为很值得分享的内容。当然&#xff0c;也会有个人感悟&a…

【C++】从0到1入门C++编程学习笔记 - 基础入门篇:C++初识

文章目录一、第一个C程序1.1 创建项目1.2 创建文件1.3 编写代码1.4 运行程序二、注释三、变量四、常量五、关键字六、标识符命名规则一、第一个C程序 编写一个C程序总共分为4个步骤 创建项目创建文件编写代码运行程序 1.1 创建项目 Visual Studio是我们用来编写C程序的主要…

【C语言课程设计】通讯录(2.0版本)

前言 在前面的博客中&#xff0c;我们已经了解了通讯录的基本写法。当然那个通讯录是不够完善的。我们本小节对前面的通讯录做一次小升级&#xff0c;添加动态增容模块与利用枚举来优化选择语句 【C语言课程设计】通讯录&#xff08;1.0版本&#xff09;_青色_忘川的博客-CSDN博…

JVM-内存模型详解

JVM 把内存分为若干个不同的区域&#xff0c;这些区域有些是线程私有的&#xff0c;有些则是线程共享的&#xff0c;Java 内存区域也叫做运行时数据区&#xff0c;它的具体划分如下&#xff1a; 虚拟机栈 Java 虚拟机栈是线程私有的数据区&#xff0c;Java 虚拟机栈的生命周期…

word查看技巧:如何快速找到文档的修改痕迹

不知道大家在工作中有没有遇到过这类的工作场景&#xff1a;当初步拟好一份合作协议或是项目策划书后&#xff0c;发给老板或其他同事审阅和修订&#xff0c;通常会不断地来回修改文档。此时&#xff0c;如果你想要查看文档哪里被修改过&#xff1f;你会怎么操作&#xff1f;很…

SpringBoot集成Elasticsearch7.4 实战(二)

1、前言本篇文章主要讲的是:在Springboot环境下&#xff0c;利用JAVA环境操作索引,集成SpringBoot等相关知识2. SpringBoot集成开发工具&#xff0c;这里选择的是IDEA 2019.2&#xff0c;构建Maven工程等一堆通用操作&#xff0c;不清楚的自行百度。2.1. POM配置我这边选择 ela…

协程应用——aiohttp异步爬虫实战

aiohttp异步爬虫实战1. 案例介绍2. 准备工作3. 页面分析4. 实现思路5. 基本配置6. 爬取列表页7. 爬取详情页8. 总结1. 案例介绍 本例要爬取的网站是https://spa5.scrape.center/,数据量相对大&#xff0c;所以用到了异步爬虫&#xff0c;主要学习这种方法是如何提高效率的。网…