c
周末的丢
这个作者很懒,什么都没留下…
展开
-
宝石与石头
给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。示例输入 J=“aA”,S=“aAAbbbb”输出 3输入J = “z”, S = “ZZ”输出0这道题的思路不难,将J和S两个数...原创 2019-09-08 19:34:57 · 198 阅读 · 0 评论 -
一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。请找出这两个数
之前我写过一篇博客,一组数组中,若只有一个数字出现依次,其他所有数字都出现两次,那么如何找出这个数答案是:将数组里的数都异或一遍,结果就是那个单独出现的数https://blog.csdn.net/question_mark/article/details/99694037这题的思想也是类似的首先将数组里所有的数都异或一遍,得到的结果便是这两个单独出现的数异或的结果这个结果的二进制参数...原创 2019-08-22 20:05:18 · 602 阅读 · 0 评论 -
判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.这一题并不难,和我之前写的一篇博客有点类似https://blog.csdn.net/question_mark/article/details/99871492(实现一个函数,左旋字符串的k个字符)这道题的思路如下:例如这里我们要判断s2是否为s1旋转得到的我们可以将s1这个字符串...原创 2019-08-22 19:21:43 · 273 阅读 · 0 评论 -
有一个字符数组的内容为:"student a am i", 将数组的内容改为"i am a student".
这道题的解决思路是:首先将"student a am i"整体逆置,则得到" i ma a tneduts",然后在这个字符串中,将每一个字符逆置即可得到"i am a student"。逆置整个字符串和逆置一个单词我们可以定义一个swap函数,在swap函数内部完成逆置。我们把需要把逆置部分的起始元素地址和结束元素地址传递给swap函数,此时用一个左指针left接收逆置部分的起始元素地址,右指...原创 2019-08-17 21:07:17 · 225 阅读 · 0 评论 -
编程实现: 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。
例如 {3,4,5,3,4}这组数据中,5是单独出现,3和4是成对出现,我们要找出这个数字。我们可以先把5拿掉来看这组数据 {3,4,3,4}其二进制参数 3 // 0011 ; 3 // 00114// 0100 ;4// 0100我们把他们都异或一遍(顺序无影响)得到 0000这里我们可以得到一个结论:当一组数组中的数都是成...原创 2019-08-17 16:44:01 · 486 阅读 · 0 评论 -
求两个数的平均值(三种方法)
求两个函数的平均值,很简单的想到可以用 (a+b)/2来实现。代码块如下方法一int Average_one(int a, int b){ return (a + b) / 2;}但是如果a或b的值过大,会导致结果溢出。方法二把a比b多处的部分,分给b,此时a,b的值相等,不会出现溢出现象int Average_two(int a, int b){ return b + (a...原创 2019-08-17 15:36:14 · 9979 阅读 · 0 评论 -
chonst与指针
int main(){ //const 放在最前面或者中间,这是限制修改指针指向的内容 //const 放在 * 和变量名中间,这是限制修改指针中保存的地址。 int num = 10; int num2 = 20; int* const p = #//限制修改指针中保存的地址 const int* p=&num//限制修改指针指向的内容 *p = 20;...原创 2019-08-22 11:12:59 · 161 阅读 · 0 评论 -
一道真题(数据在内存中的存储)
有这么一串代码:int main(){ char a[1000]; int i; for(i = 0; i < 1000; i++){ a[i] = -1 - i; } printf("%d\n", strlen(a)); return 0;}问:打印的结果是多少分析过程如下:首先我们要知道c语言中,字符串是使用字符数组的方式表示字符串是一种特殊的字符...原创 2019-08-22 10:16:33 · 722 阅读 · 0 评论 -
c语言实现"掀门帘"
小周末最近自学了指针和数组打算做一个"掀门帘"的小游戏具体怎么掀呢,例如这里有两个字符串 char str1[] = "###########"; char str2[] = "hello world";将第一个字符串逐次从两边向中间掀开,最终得到第二个字符串。我们先看一下想要的效果:思路大概是这样的,将第二个字符串str2的每一个字符赋给str1,再将str1打印出来但需要注...原创 2019-08-22 09:45:23 · 151 阅读 · 0 评论 -
编写函数,这个函数的返回值value的二进制位模式从左到右翻转后的值。
以80为例其二进制//80: 0000 0000 0000 0000 0000 0000 0101 0000编写一个函数将其二进制位模式从左到右翻置,就会得到这么一个值0000 1010 0000 0000 0000 0000 0000 0000这个数的十进制值为167772160代码如下unsigned int reverse_bit(unsigned int value){ i...原创 2019-08-16 19:22:09 · 143 阅读 · 0 评论 -
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
两个int(32)位整数m和n的二进制表达中,有多少个位(bit)不同?我们举两个例子例如 1999 其二进制表达式:0000 0000 0000 0000 0000 0111 1100 11112999 其二进制表达式:0000 0000 0000 0000 0000 1011 1011 0111有6个位是不同的。这题我们可以采用异或操作符来解决,由异或操作符我们可以知道,两数相同...原创 2019-08-16 18:37:58 · 284 阅读 · 0 评论 -
函数指针
首先看一段代码#include<stdio.h>#include<stdlib.h>void Text(){ printf("hehe\n");}int main(){ printf("%p\n", Text); printf("%p\n", &Text); system("pause"); return 0;}输出的是两个,两个地址都是...原创 2019-08-16 17:25:48 · 102 阅读 · 1 评论 -
strtok函数的使用
int Split(char* src,const char* delimiters,char* output[]){ int output_index = 0; char* p = strtok(src,delimiters); while (p != NULL){ //切分结果放在数组中 output[output_index] = p; output_index++; ...原创 2019-08-21 18:48:29 · 117 阅读 · 0 评论 -
strstr函数及其实现
strstr判断一个字符串里面是否包含另外一个字符串我们以字符串为例 char str1[] = "hello world"; char str2[] = "world"; const char* result = strstr(str1, str2); if (result == NULL) printf("没有找到\n"); else printf("找到了\n")...原创 2019-08-21 18:00:28 · 429 阅读 · 0 评论 -
数组指针与指针数组
今天小周末和大家一起探讨一下指针数组与数组指针的一些相关概念指针数组是一个存放指针的数组是一个数组,每一个元素都是指针变量这里我们看一下,下面指针数组是什么意思?int* arr1[10];//整形指针的数组char* arr2[10];//一级字符指针的数组char** arr3[10];//二级字符指针的数组数组指针的定义数组指针是指针还是数组?答案是:指针。数组指针是...原创 2019-08-16 16:23:09 · 135 阅读 · 0 评论 -
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。
如果可以赊账的话,那么就可以喝40瓶汽水我们这里考虑不赊账,能喝几瓶水具体代码如下int main(){ int n = 20; int sum = 0; int ex = 0; int i; for (i = n; i > 0; i /= 2) { sum += i; i += ex; ex = i % 2; } printf("%d\n", sum...原创 2019-08-22 20:23:00 · 301 阅读 · 0 评论 -
冒泡排序
arr[]={9,5,2,7}比如这里我们想要将数组里的数据从小到大排序,遍历数组,比较前后两个数字的大小,如果前面小后面大无需交换顺序,前面大后面小则需要交换顺序,然后继续遍历我们在这里设置一个 bound 边界[0,bound) 为已排序区间[bound,size) 为待排序区间当bound 含盖整个数组,排序结束void Swap(int* x, int* y){ int ...原创 2019-08-18 11:06:23 · 100 阅读 · 1 评论 -
调整数组使奇数全部都位于偶数前面。
输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分。在数组中有一组整型数据,调整奇数位于前半部分,偶数位于后半部分。大致思路:在前半部分如果发现一个偶数,就需要把他换到后面,判断奇偶性用%2来判断,数组前后开始遍历数组,判断前后两个数的奇偶性判断是否需要交换(前偶后奇,需要交换,左边向右走一步,右边向左走一步;前奇后奇...原创 2019-08-18 11:40:21 · 299 阅读 · 0 评论 -
c语言实现扫雷游戏
我们需要两个二维数组分别来表示用户看到的地图,和地雷分布的地图(用户看不到的)初始化的代码如下,这里我们的地图采用9*9,定义雷的个数为10个#define MAX_ROW 9#define MAX_COL 9#define MINE_COUNT 10void Init(char Show_map[MAX_ROW][MAX_COL], char Mine_map[MAX_ROW][MAX_...原创 2019-09-03 17:03:47 · 675 阅读 · 0 评论 -
宏和函数
宏通常被应用于执行简单的运算。比如在两个数中找出较大的一个。#define MAX(a, b) ((a)>(b)?(a):(b))那为什么不用函数来完成这个任务,原因又两点:用于调用函数和从函数返回的代码可能比实际执行这个小型计算工作所需要的时间更多。所以宏比函数在程序的规模和速度方面更胜一筹。更为重要的是函数的参数必须声明为特定的类型。所以函数只能在类型合适的表达式上使用。反之...原创 2019-09-03 08:41:46 · 381 阅读 · 0 评论 -
条件编译
在编译一个程序的时候我们如果要将一条语句(一组语句)编译或者放弃是很方便的。因为我们有条件编译指令,比如说调试性的代码,删除可惜,保留又碍事,所以我们可以选择性编译。#include<stdio.h>#define COND 1 int Add(int x, int y){#if COND printf("x=%d y=%d\n", x, y);//观察是否赋值成功#...原创 2019-09-02 20:36:07 · 144 阅读 · 0 评论 -
文件随机读写:fseek与ftell
fseek根据文件指针的位置和偏移量来定位文件指针。int fseek ( FILE * stream, long int offset, int origin );例子:int main(){ FILE* pFile; pFile = fopen("d:/text1.txt", "wb");//wb打开二进制文件,只写 fputs("hello world", pFile)...原创 2019-09-02 16:12:10 · 265 阅读 · 0 评论 -
动态内存开辟,malloc,calloc,realloc,free
动态内存函数,主要有malloc,calloc,realloc,free四个malloc和freec语言提供了一个动态内存开辟的函数void* malloc (size_t size);这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类...原创 2019-08-29 10:32:47 · 305 阅读 · 0 评论 -
c语言的文件操作
什么是文件磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件文件名一个文件要有一个唯一的文件标识,以便用户识别和引用。文件名包含3部分:文件路径+文件名主干+文件后缀例如: c:\code\test.txt为了方便起见,文件标识常被称为文件名。文件的核心操作1.打开文件2.关闭文件3.读文件4.写文件在读写文件之前必须先打开文件是在磁盘上...原创 2019-08-28 19:35:06 · 201 阅读 · 1 评论 -
c语言实现一个通讯录
小周末学习了结构体,今天打算自己做一个通讯录,这个通讯录保存若干个用户信息,每个用户信息中包含姓名,电话。我们想要这个通讯录可以实现增删改查的功能。首先,首先我们要创建一个结构体,这个结构体保存了每个人的信息(姓名及电话)typedef struct PersonInfo{ char name[NAME_MAX_SIZE]; char phone[PHONE_MAX_SIZE];}Pe...原创 2019-08-28 17:19:49 · 416 阅读 · 0 评论 -
模仿qsort的功能实现一个通用的冒泡排序。
我前面写过一篇文章,使用qsort函数排序各种类型的数据(https://blog.csdn.net/question_mark/article/details/100105351)qsort的函数原型void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));这里以...原创 2019-08-27 19:07:50 · 282 阅读 · 0 评论 -
使用qsort函数排序各种类型的数据
qsort是编译器函数自带的快速排序函数qsort的函数原型是void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针 其中base是排序的一个集合数组,num是这...原创 2019-08-27 18:00:56 · 444 阅读 · 0 评论 -
关于枚举
枚举顾名思义就是一一列举,把可能的值一一列举。比如我们现实生活中:一周的星期一到星期日是有限的7天,可以一一列举。性别有:男、女、保密,也可以一一列举。月份有12个月,也可以一一列举颜色也可以一一列举。枚举类型的定义enum Day{ Mon, Tues, Wed, Thur, Fri, Sat, Sun};enum Sex//性别{ MALE, FEMA...原创 2019-08-27 17:41:01 · 158 阅读 · 0 评论 -
几道经典的笔试题(动态内存管理)
题目一void Getmemory(char* p){ p = (char*)malloc(100);}void Test(void){ char* str = NULL; Getmemory(str); strcpy(str, "hello wordl"); printf(str);}//运行Test会有什么结果运行后发现程序崩溃关于这个代码有如下几个错误mallo...原创 2019-08-27 16:14:49 · 498 阅读 · 1 评论 -
判断一个主机是大端字节序还是小端字节序
大端字节序 0x 00 00 00 01小端字节序 0x 01 00 00 00 低位放在低地址上方法一指针强转的方式int Islittlend(){ int a = 0x1; char* b = (char*)&a; //将a的地址强转成char*类型并存于b中 if (*b == 0x0){ return 0; //大端字节序 } return 1;//...原创 2019-08-26 18:31:59 · 514 阅读 · 0 评论 -
结构体的内存
结构体的自引用:例如有这样的代码struct student{ char name[1024]; int age; struct student a;};此时我们编译执行后,程序会报错(a使用未定义的struct student),原因很好分析,例如我们想求这个结构体的所占字节大小,student 占的字节就是 char[1024]+int+student ,此时student又是...原创 2019-08-26 16:33:44 · 955 阅读 · 0 评论 -
memcpy函数及memmove函数
memcpy函数void * memcpy ( void * dst, const void * src, size_t count)功能也是完成数组之间的拷贝memcpy函数的实现如下void* my_memcpy(void* dest, void* src, size_t num){ if (dest == NULL || src == NULL) //参数校验 return...原创 2019-08-26 14:34:30 · 203 阅读 · 0 评论 -
strncpy函数,strncat函数
strncpychar * strncpy ( char * destination, const char * source, size_t num );Copies the first num characters of source to destination. If the end of the source C string (which issignaled by a nu...原创 2019-08-21 16:31:09 · 1139 阅读 · 0 评论 -
结构体的声明
结构的基础知识:结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。结构的声明:struct tag{member-list; }variable-list;例如描述一个学生typedef struct Stu{char name[20];//名字int age;//年龄char sex[5];//性别char id[20];//学号}St...原创 2019-08-24 18:25:03 · 2850 阅读 · 0 评论 -
获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
以11为例子,//11:0000 0000 0000 0000 0000 0000 0000 1011奇数位序列:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1偶数位序列:0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1代码如下:void Print_num(unsigned int num){ int i = 0; int j = 0; int arr...原创 2019-08-15 17:19:23 · 320 阅读 · 1 评论 -
判断这几位选手的名次。
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。这是一道类似智力题的编程,用代码实现如下;#include<stdio.h>#include<stdlib.h>/...原创 2019-07-07 11:34:13 · 495 阅读 · 0 评论 -
实现一个函数,判断一个数是不是素数。
我们先来看一下素数的定义:素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。用普通代码实现:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int main(){ int n = 0; int i = 2; printf("输入要判断的数字\n"); sca...原创 2019-07-06 12:01:11 · 5943 阅读 · 4 评论 -
创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。
话不多说,代码实现#include<stdio.h>#include<stdlib.h>void Init(int arr[], int len){ int i = 0; for (i = 0; i < len; ++i){ arr[i] = i; }}void Print(int arr[], int len){ int i = 0; fo...原创 2019-07-06 10:58:14 · 160 阅读 · 0 评论 -
实现一个函数判断year是不是润年。
如果不用函数,我们来看一下怎么写。首先我们要知道闰年的计算方法:公元纪年的年数可以被四整除,即为闰年;被100整除而不能被400整除为平年;被100整除也可被400整除的为闰年。如2000年是闰年,而1900年不是。知道这个就可以写了。int main(){ int year = 0; while (1){ printf("输入你要判断的年份\n"); scanf("%d", &...原创 2019-07-06 09:48:36 · 707 阅读 · 0 评论 -
编写程序数一下 1到 100 的所有整数中出现多少次数字9。
思路:要判断整数中出现9 的次数,可以将整数的每一位都提出来在依次进行判断,是否为9.方法:对与一个一位数来说,对10取余数就是它本身。如:7%10==7对于一个两位数来说,提取个位数字:对10取余数,如17%10=7;提取十位数字:除以10 ,如:17/10==1这样便可以将整数的每一位都取出。代码如下:#include<stdio.h>int main(){int ...原创 2019-07-05 16:00:05 · 167 阅读 · 0 评论