目录
一.修炼必备
二.高质量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.演示
!!!恭喜你,突破至筑基一层!!!