MeshddY

爱看戏的戏中人的博客

一、填空题(30)
1、C程序中 inta=5,intb=4,表达式 a&b 等于___,表达式a|b等于_____ ,表达式a^b等于_____
2、数组 int a[]={7,2,9,42,0,5},表达式*(a+3)的值是_____
3.函数ma11oc()与calloc()的区别是________
4.结构体 struct tl {int_a,char b,longc,int e}的大小为____字节
二、程序题(70)
1.定义函数 int gcd(int p,int q)返回参数 p和q的最大公约数。
2.定义函数 int fib(int n)返回斐波那契数列第n个数,使用非递归算法。
3.定义函数 int max(int *a,int n)返回数组 a 中最大的数。
3.定义函数 int second(int *a,int n)返回数组 a 中第二大的数。
4.定义函数 void copy(char *dest,char *src)实现字符串拷贝。

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

使用hexo框架搭建
Hexo安装文档见下
https://hexo.io/zh-cn/docs/

pnpm 下载速度比npm更高效,不能混用

1
$npm install -g pnpm

清除缓存文件 (db.json) 和已生成的静态文件 (public)。

1
$hexo clean  

启动服务器。 默认情况下,访问网址为: http://localhost:4000/

1
$hexo server

推送到服务器端

1
$hexo deploy  
-g--generate 在部署前生成
命令 简写 中文含义
hexo server hexo s 本地启动
hexo generate hexo g 生成静态文件
hexo deploy hexo d 部署网站
hexo clean 清除缓存和已经生成的静态文件

hexo new page “”

  1. ##C 语言的编译流程

  2. ##写代码, 打印 hello world

  3. ##纸上写各个类型及其大小(字节)

  4. ##复习八进制、十六进制、二进制

    (99)转10,8,16,2进制

    小数转二进制:0.1

  5. ##输入一个四位数,输出各个位数的乘积与各个位数的累加和

  6. ##CPU访问各种存储器的速度。
    十进制整数、小数 转二进制
    0.725
    0.1

  7. ##上课的示例:
    1)三个数求最大、最小、中间
    2)闰年判断

  8. ##个人所得税
    1)不考虑五险一金
    2)考虑减去五险一金

  9. ##打印空心正方形
    打印三角形
    打印菱形

  10. 跳水比赛的积分统计

    1.裁判员人数 5名或7名,0~10分,可以打0.5
    2.去掉最高分和最低分,获得总和,总和 * 难度系数
    3.录入多名运动员的成绩

    double[12][5]
    1 2 3 4 5 h l s
    1 9 7 8.5 6 8 9 6 7.5
    2 9 7 8.5 6 8 9 6 7.5
    3 9 7 8.5 6 8 9 6 7.5
    4 9 7 8.5 6 8 9 6 7.5

    功能
    0.显示菜单:录入、显示、退出
    1.录入成绩(打分),给第?位运动员录入成绩,5个值,计算得到最低分,最高分
    2.显示成绩,显示所有运动员的成绩(放一个计数器),不要求做排序
    3.退出程序

  11. 协同开发

    1. fork
      https://gitee.com/wtaocs/abc
    2. 克隆到你本地
    3. 修改,提交到你的远程
    4. 发送一个 PULL Request
    5. 对方若接收(合并)
  12. ##1.计算斐波那契数列,分别用递归和循环来实现
    2.计算两个数的最大公约数,int gcd(int,int)分别用递归和循环实现
    3.打印1000以内所有的质数,is_prime(int)定义一个函数是否是质数
    扩展:定义函数开根号

  13. ##1. 定义一个函数,传入年、月、日,返回该日期是这一年的第多少天
    int days(int y, int m, int d)

    1. 由 1~9 构成三个三位数(数字不重复),寻找满足以下条件的数有几组?
      a,b,c
      b = 2 * a
      c = 3 * a
      123, 246, 369
    2. 写纸上交:循环与递归
      1)gcd
      2)fib
      3)is_prime
  14. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 返回数组中的最小值
    int min(int *a, int size);
    // 返回数组中的最大值
    int max(int a[], int size);
    // 返回数组中各个元素的累加和
    int sum(int *a, int size);
    // 翻转数组中的元素
    void reverse(int *a, int size);
    // 对数组中的元素进行升序排序(冒泡)*
    void sort(int *a, int size);
  15. ##1.输入字符串,把字符都转为大写
    2.输入字符串,翻转
    3.输入字符串(数值),计算累加和
    4.定义一个函数,实现十进制转十六进制
    扩展5.输入字符串(数值),凯撒加密

  16. ##实现字符串标准库函数

    • cpy
    • cat
    • cmp
  17. ##URL超链接,短地址服务

参考书籍

  • C Primer Plus
  • C语言程序设计 现代方法
  • C程序设计语言典藏版套装
  • C和指针
  • C专家编程
  • 编程之美

内存管理

  • 系统自动管理:栈空间
  • 用户手动管理:堆空间

stdlib.h
-malloc() 分配内存
-free() //释放空间,不释放就不会停止,
//在一个函数中结束就会释放内存,但在一直运行的程序中就会内存泄露(内存一直变少),程序结束就会归还空间
-realloc 重新分配(扩容)
-calloc 分配内存(空间初始化0)
-memset
-memcpy
-memcmp

指针:一种数据类型,存储内存空间的编号(地址)

‘’’c
int *p1; 整型指针
char *p2; 字符指针
//类型不确定的指针
void *p3;

int *p = p3;
char *p = p3;
double *p = p3;

p3=p1;
p3=p2;

*p3 ERROR,需要把他赋给类型确定的指针类型

结构体

数据类型

  • 基本类型
    -int
    -char
    -double
  • 复合类型
    -数组
    -字符串
    -结构体
    -联合
    -类/对象

封装

定义结构体

‘’’c
//自定义的数据类型
struct user
{
char name[16];
int age
char *tel;
}

int a;
struct user u1;

1.结构体变量相互赋值,拷贝了属性的值(复印件)
2.操作结构体的函数,参数应该是指针类型,否则函数无法修改结构体的属性

结构体大小

1.属性类型中在最大值(int long double)的整数倍(字符不算连续的)
2.属性最小往大排序,空间占用最小

结构体指针的使用

阶段项目:短网址转换服务

http://10086.cn/Dax34Fx

URL 超链接

字符串与函数

字符串

‘’’c
char s[] = “bye”; //ERROR 实际要3+1位置

char s1[64] = "this is a line";   //sizeof(容量)64,strlen(长度)11 
//n+1, '\0'
char *s2  = "this is a line";     //sizeof 8

1.
s1[0] = 'T';    // 1 OK
s2[0] = 'T';    // 1 ERROR

2.
s1 = "next line";   //ERROR 字符数组【不可以】再次直接赋值
s2 = "next line";   //OK 字符指针【可以】执行其他字符串常量值

1.是否可以通过【下标】修改内容
s1可以,s1是数组(一块连续空间,不可变s1只能指向这块空间)
s2不可以,s2是指针,此刻指向内存的一个常量区域,内容不可变;s2可以指向其他常量字符串

2.变量能否通过 =符号再次赋值
s1不可以,s1是字符数组
s2可以,s2是字符指针.

字符串函数

-strlen 长度
-strcpy 复制
-strncpy
-strcat 拼接
-strncat
-strcmp 比较
-strncmp

字符与字符串

字符

char 1byte 8bit 2^8=256

ANSI 美国国家标准信息码
GBK (简体中文)windows默认使用的编码
GB2312 国标码
Big5 繁体中文 一个汉字两个字节 2byte 2^16=65536

CJK

unicode 统一编码 字符编码 每个符号一个数值 几乎所有的移动端都在使用
UTF-8 字符集(变长的,不同的字符编码长度不同,不固定长度) 一个中文一般3字节 支持世界上所有的文字和符号

字符:a,b,+,&,汉,😷

字符串

有序的字符序列

‘’’c
char s1[] = {‘h’,’e’,’l’,’l’,’o’};
char s2[] = “hello”;
char *s3 = “hello”;

## 作业
1.输入字符串,把字符都转为大写
2.输入字符串,翻转
3.输入字符串(数值),计算累加和
4.定义一个函数,实现十进制转十六进制
扩展5.输入字符串(数值),凯撒加密

指针与数组

指针与数组关系

指针:是一种数据类型,存储内存的编号(地址)
数组:是一种(复合)数据类型,一块连续的内存空间,存储相同类型的多个值

1
2
3
4
5
6
7
8
9
10
11
12

int a[5]; // a 是数组的名称,存储 5 个整数(4byte)
int *p;


指针:是一种数据类型,存储内存的编号(地址)
数组:是一种(复合)数据类型,一块连续的内存空间,存储相同类型的多个值

'''c
int a[4]; // a 是数组的名称,存储5个整数(4byte)
int *p;

函数操作数组

作业

1
2
3
4
5
6
7
8
9
10
// 返回数组中的最小值
int min(int *a, int size);
// 返回数组中的最大值
int max(int a[], int size);
// 返回数组中各个元素的累加和
int sum(int *a, int size);
// 翻转数组中的元素
void reverse(int *a, int size);
// 对数组中的元素进行升序排序(冒泡)*
void sort(int *a, int size);

指针

概念

指针:是一种数据类型,存储内存的编号(地址)

  • 指针存储了它所指向的变量的首地址(第一个字节的地址)
  • 指针的类型确定了空间范围
  • 指针类型与变量类型要一致(通常)

可变类型的指针
void *p;

‘’’c
// 声明整型变量
int a = 3;
// 整型指针变量,未初始化,nil(空),可打印值,不可访问
int *p;
int *p2;
.
//赋值,指针 p 指向了 a,可以通过指针 p 操作变量 a
p = &a;
p2 = &a;//或者表示为p2 = p 代表两个指针指向同一个空间


p2 空指针
p2 = &p1; //p2 指向 p1,存储了变量p1所在的内存空间编号
//寻址并复制
*p2 = 42
int b = a;
b = 9;
//a ?
int *pa = &a;
*pa = 9;
.
// sizeof(p) = 8 byte;x86,64

& 运算 *

& 取地址运算,获得内存地址,若打印 %p

  • 声明指针变量,出现在类型后: char *c;
  • 间接寻址运算,没类型名,在指针变量前: int r = *c;

指针存储其他变量的地址,它自己也有地址

指针变量,不论是什么类型,它的 size 都是确定的,只与平台相关8byte

0%