-
Lesson 1 - 最简单的C程序
-
Lesson 2 - 打印输出
-
Lesson 3 - 循环打印
-
Lesson 4 - 判断奇偶
-
Lesson 5 - 从1加到100求和
-
Lesson 6 - 乘法表
-
Lesson 7 - 求100以内的最大素数
-
Lesson 8 - 1到100有多少个9
-
Lesson 9 - 整型转字符串
-
Lesson 10 - 约瑟夫环
-
Lesson 11 - 求两个坐标点之间的距离
-
Lesson 12 - 判断机器存储是否小尾端
-
Lesson 13 - 对不起,你的车今天限行
-
Lesson 14 - 判断地图上某点是否有出路
-
Lesson 15 - 统计一个数二进制表示中1的个数
-
Lesson 16 - 字符串拷贝
-
Lesson 17 - 统计单词个数
-
Lesson 18 - 实现 printf
-
Lesson 19 - 命令解释器
-
Lesson 20 - 预处理器实现
-
Lesson 21 - 词法分析器实现
-
Lesson 22 - 猜数游戏
-
Lesson 23 - 五子棋
-
Lesson 24 - 超链接分析器
-
Lesson 25 - cp命令实现
-
Lesson 26 - ELF文件头分析器实现
-
Lesson 27 - 简单流处理器实现和正则表达式
-
Lesson 28 - 数学计算器实现
-
Lesson 29 - 数学计算器实现more命令实现
-
Lesson 30 - sort命令实现
-
Lesson 31 - ls -l命令实现
-
Lesson 32 - Bash项目
-
Lesson 33 - 动态数组实现
-
Lesson 34 - 约瑟夫环问题
-
Lesson 35 - 表达式求值问题
-
Lesson 36 - 广度优先解决迷宫问题
-
Lesson 37 - 词频统计器
-
Lesson 38 - 堆排序问题
-
Lesson 39 - 构造符号表
-
Lesson 40 - MyDictionary项目
-
Lesson 41 - BSearch 实现
-
Lesson 42 - QSort 实现
-
Lesson 43 - 深度优先解决迷宫问题
-
Lesson 44 - KMP 算法实现
-
Lesson 45 - 最长公共子序列(LCS)问题
-
Lesson 46 - Dijkstra 算法
-
Lesson 47 - Huffman Coding 算法
-
Lesson 48 - 地图导航项目
Lesson 11 Calculate the distance between 2 points 求两个坐标点之间的距离
#include <stdio.h>
#include <math.h>
struct point
{
int x;
int y;
};
typedef struct point point_t;
double calc_distance(point_t p1, point_t p2)
{
int dx = p1.x - p2.x;
int dy = p1.y - p2.y;
return sqrt(dx * dx + dy * dy);
}
int main(int argc, char * argv[])
{
double length;
point_t p1;
point_t p2 = {200, 100};
p1.x = 100;
p1.y = 200;
length = calc_distance(p1, p2);
printf("length = %f\n", length);
return 0;
}
copy
扩展用法
struct a {
int b;
int c;
};
struct a a1 = {
.b = 1,
.c = 2
};
struct a a1 = {
b : 1,
c : 2
};
struct a a1 = {1, 2};
copy
经典范例
/* linux/drivers/char/raw.c */
static const struct file_operations raw_fops = {
.read = do_sync_read,
.aio_read = generic_file_aio_read,
.write = do_sync_write,
.aio_write = blkdev_aio_write,
.fsync = blkdev_fsync,
.open = raw_open,
.release = raw_release,
.unlocked_ioctl = raw_ioctl,
.llseek = default_llseek,
.owner = THIS_MODULE,
};
static const struct file_operations raw_ctl_fops = {
.unlocked_ioctl = raw_ctl_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = raw_ctl_compat_ioctl,
#endif
.open = raw_open,
.owner = THIS_MODULE,
.llseek = noop_llseek,
};
copy
知识点
- 结构体 struct
- 结构体的初始化
- 传结构体参数
- 整体赋值(复制)
- typedef 类型定义
课堂讨论
- 在 calc_distance 调用时传入的 p1 ,和在 函数实现中出现的 p1 是不是同一个 p1?
- 如果结构体的变量是一个字符数组,那么结构体的赋值,是否会进行一次字符串拷贝?
课后练习
- 给定一个结构体 point_t 的数组,求出这一组点中,离原点距离最远的那个点。
- 求出上面这一组点中,距离最远的2个点以及它们之间的距离。
- 有5个学生,每个学生有3门课的成绩,用户输入以上数据,包括学号,姓名,三门课成绩(浮点数),请计算出每位学生的总分和平均成绩,并支持用户通过学号和姓名进行查询。
参考资料
- C99 中关于结构体的初始化方法