C语言
Tan_
这个作者很懒,什么都没留下…
展开
-
Linux环境和宏
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。 以下是它简单的操作指令: ls //list 列出当前文件夹原创 2017-10-29 00:38:25 · 1041 阅读 · 0 评论 -
结构体内存对齐
结构体为什么要内存对齐? 大部分的参考资料都是如是说的:1、平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。 原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。结构体内存对其规则:...原创 2018-08-02 19:07:46 · 120 阅读 · 0 评论 -
c语言操作符
操作符是在编程最常运用到工具,熟悉操作符对我们学好C语言有很大的帮助。操作符可以分为: 一.算术操作符 二.移位操作符 三.位操作符 四.赋值操作符 五.单目操作符 六.关系操作符 七.逻辑操作符 八.条件操作符 九.逗号表达式...原创 2017-10-29 00:35:14 · 144 阅读 · 0 评论 -
对指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针的理解
1.指针数组指针数组本质上是数组,例如int *arr[4] ,arr是先跟[ ]结合再跟结合,所以其是一个指针数组,数组里存放的元素是4个 int2.数组指针数组指针是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,这个指针不可移动); 例如int(*arr)[4] , 因为 * 先跟 arr 结合,再跟 [ ] 结合,所以其是一个数组指针。 二维数组的传参可以运用数原创 2017-11-16 22:27:26 · 358 阅读 · 0 评论 -
扫雷小游戏
扫雷小游戏是我们电脑中一个很常见很经典的小游戏,下面是我用C语言编出来的比较简陋的扫雷游戏。下面是我的思路: 一:首先定义两个二维数组,一个初始化为0,一个初始化为 * (或者其他符号,用于覆盖雷) 二:布雷,用strand函数(srand((unsigned)time(NULL));)在初始化为零的数组埋雷,在数组的第二行第二列到倒数第二行第二列之间埋雷(博主是arr[1][1]原创 2017-10-25 19:13:50 · 233 阅读 · 0 评论 -
判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
int findLeftMove(char *str, char *substr){ int strLen = strlen(str); int subStrLen = strlen(substr); if (strLen != subStrLen) { return -1; } int newSize = 2 * strLen +原创 2017-11-10 10:17:32 · 339 阅读 · 0 评论 -
实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
void move(char *arr, int count){ int j = 0; char tmp = arr[0];//把第一位字符保存起来 for (j = 0; j < count - 1; j++) { arr[j] = arr[j + 1];//把后一位赋值给前一位 } arr[j] = tmp;//把保存起来的第一位原创 2017-11-10 09:12:03 · 621 阅读 · 0 评论 -
有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。 提交
这是解题思路:int my_strlen(const char *str){ assert(str); int len = 0; while (*str++) { len++; } return len;}void reverse(char *start, char *end){ assert(start); a原创 2017-11-09 21:46:05 · 377 阅读 · 0 评论 -
一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)
题目要求要用位运算,而且要找到不是单独出现的数据。此时我们可以想到异或的特性,一个数据异或上自己时的到0。所以所有成对的数据异或玩之后得到0,0再异或上单独的值(单身狗)就得到它本身。 下面是代码实现:int main(){ int arr[] = { 1, 2, 3, 4, 1, 2, 3, 4, 5 }; int z = sizeof(arr) / sizeof(arr[0]原创 2017-11-09 17:56:00 · 224 阅读 · 0 评论 -
三子棋
源文件展示:#ifndef __GAME_H__#define __GAME_H__#include<stdio.h>#include<stdlib.h>#include<time.h>#define ROWS 3#define COLS 3void init_board(char arr[ROWS][COLS], int rows, int cols);void display_boa原创 2017-10-23 13:13:05 · 202 阅读 · 0 评论 -
不使用(a+b)/2这种方式,求两个数的平均值。
题目的要求是让我们注意溢出的问题,所以我们可以考虑a和b没求和之前进行处理。//方法一int mean_v(int x,int y){ int z = 0; z = (x - y) / 2 + y; return z;}//方法二int mean_n(int x, int y){ int z = 0; x = x >> 1; y = y >>原创 2017-11-08 00:18:49 · 167 阅读 · 0 评论 -
1.编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。
//方法一unsigned int reverse_bit(unsigned int n){ int i = 0; int value = 0; int bit = 0; for (; i < 32; i++) { value = value << 1; bit = n & 1; value |= bit;原创 2017-11-07 22:26:48 · 230 阅读 · 0 评论 -
鸡尾酒排序和冒泡优化
#include<iostream>using namespace std;void Print(int(&ra)[10])//打印函数{ int i = 0; for (i; i < 10; ++i){ cout << ra[i] << " "; }}void Swap(int* x, int...原创 2018-08-03 13:26:20 · 215 阅读 · 0 评论