C
文章平均质量分 57
weiaiyisheng_ljj
这个作者很懒,什么都没留下…
展开
-
输出一个菱形
可以初始化两个字符串数组,然后通过while循环赋值,则可以输出一个菱形。#includevoid up_diamond(int left, int right){ char str1[] = "*************"; char str2[] = " "; while ((left > 1) && (right < 12)) { s原创 2017-03-28 22:09:00 · 539 阅读 · 0 评论 -
三子棋
这个三子棋是较为简单的游戏,通过二维数组的应用就可以实现,下面是具体的代码。头文件game.h#ifndef __GAME_H__#define __GAME_H__#include#include#include#define ROWS 3#define COLS 3void init_board(char board[ROWS][COLS], int row, in原创 2017-04-06 16:11:00 · 332 阅读 · 0 评论 -
指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针的理解
指针数组:数组元素全为指针的数组称为指针数组。一维指针数组的定义形式为:“类型名 *数组标识符[数组长度]”。例如,一个一维指针数组的定义:int *ptr_array[10]。[10]代表的就是存放了10个int*类型的指针数组指针:数组指针是指向数组地址的指针,其本质为指针;例:int (*p)[10]; p即为指向数组的指针,又称数组指针。[10]代表的就是这个数组指针所指向原创 2017-05-11 00:38:06 · 242 阅读 · 0 评论 -
用c语言实现一个通讯录; 通讯录可以存储1000个人的信息,信息包括姓名、性别、年龄、电话、住址 提供方法: 1.添加联系人信息 2.删除指定联系人信息 3.查找指定联系人信息 4.修改指定联系&
实现一个简化版的通讯录,可以通过使用结构体和数组就可以实现,具体代码如下:头文件addres_list.h#ifndef __ADDRES_LIST_H__#define __ADDRES_LIST_H__#define LIST_MAX 1000#define NAME_MAX 10#define ADDRES_MAX 20#define TELE_MAX 11原创 2017-05-15 03:25:10 · 1256 阅读 · 0 评论 -
有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
有一个字符数组的内容为:”student a am i”,请你将数组的内容改为”i am a student”.要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。思路:这个字符串并不是把原来数组倒序过来就可以,因为每个单词也要逆序,因此可以先把整个字符串逆序,然后再分别逆序每个单词,这样就可以了。#include<stdio.h>#include<assert.h>in原创 2017-05-07 13:01:13 · 291 阅读 · 0 评论 -
strlen函数的三种写法
第一种,也是最简单的,使用count计数器法int my_strlen2(char *arr)//count计数器法{ int count = 0; while (*(arr++)) { count++; } return count;}第二种,使用递归法,这种方法容易理解,但是函数调用很费时。int my_strlen1(char *ar原创 2017-05-08 12:25:36 · 2488 阅读 · 0 评论 -
模拟实现通讯录-动态
模拟实现通讯录-动态版通讯录-静态版 题目描述: 实现一个通讯录:通讯录可以用于存储1000个人的信息:每个人的信息包括:姓名,性别,年龄,电话,住址 提供的方法: 1.添加联系人信息 2.删除指定联系人信息 3.查找指定联系人信息 4.修改指定联系人信息 5.显示所有联系人信息 6.清空联系人信息 7.以名字排序所有联系人模拟实现通讯录-动态的方法:@(题目分析)[比较原创 2017-05-20 17:08:28 · 414 阅读 · 0 评论 -
c语言实现单链表的及各项基本功能
单链表的各项基本功能都在以下的函数中实现//录入数据ListNode* BuyNode(DataType x){ ListNode* node = (ListNode*)malloc(sizeof(ListNode)); node->data = x; node->next = NULL; return node;}//打印void PrintList(ListNode* pL原创 2017-06-22 17:12:50 · 355 阅读 · 0 评论 -
c语言实现单链表基础面试题
1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用? 2.从尾到头打印单链表 3.删除一个无头单链表的非尾节点 4.在无头单链表的一个节点前插入一个节点 5.单链表实现约瑟夫环 6.逆置/反转单链表 7.单链表排序(冒泡排序&快速排序) 8.合并两个有序链表,合并后依然有序 9.查找单链表的中间节点,要求只能遍历一次链表 10.查找单链表的倒数第k个节点原创 2017-06-22 17:18:27 · 267 阅读 · 0 评论 -
c语言str系列函数
strcat();函数原型: char* strcat(char* dest, const char* src) 功 能: 将src 的 字符串追加到 dest后边char* Strcat(char* dest, const char* src){ if (NULL == src) { return dest; } char* add = dest; while原创 2018-01-22 12:23:55 · 4475 阅读 · 0 评论 -
指针和引用的区别
一. 性质的区别: 1 指针是一个变量,存储的是一个地址。这个地址指向内存的一个内存单元。 引用跟原来的变量实质上是一个东西,是原来变量的别名。 int a=1;int *p=&a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。int a=1;int &b=a;上面定义了一个整形变量a和这个整形a的引原创 2018-01-22 19:58:51 · 112 阅读 · 0 评论 -
c语言内存对齐详解
一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某转载 2018-01-17 19:43:49 · 173 阅读 · 0 评论 -
模拟实现函数库中的常用函数,1实现strcpy 2.实现strcat 3.实现strstr 4.实现strchr 5.实现strcmp 6.实现memcpy 7.实现memmove,8实现memset
————– 1模拟实现strcpy—————strcpy函数是将源字符串复制到目标字符串的函数strcpy函数的思路就是,它是一个字符串,有\0作为结束标志,那么可以用\0作为突破点和条件,具体代码如下:char* my_strcpy(char *dest, const char *src){ assert(dest); assert(src);原创 2017-05-08 11:59:13 · 635 阅读 · 0 评论 -
有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
这个二维数组是从左到右,从上到下递增的数组,那么就有规律可循,右上角的数,在那行,它是最大的,在那列,它是最小的,那么要找的这个数就可以和右上角这个数比较,如果大于这个数,第一行舍去,从下一行开始,如果小于右上角的数,那么这一列舍去,从上一列开始,就这样循环,一直到左下角就可以找到或者找不到。上面的就是解题的思路,下面就是代码的实现了。#include<stdio.h>void search(in原创 2017-04-19 10:31:19 · 630 阅读 · 0 评论 -
一组数据中只有一个数字出现了一次。 其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
一组数据,只有一个数字出现了一次,其他数字都是成对出现的,找出这个数 那么就要运用按位异或这个位运算符^。 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12),那么可以得出,一个数按位异或自己,等于0;那么可原创 2017-04-19 10:10:22 · 313 阅读 · 0 评论 -
有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
有一个字符数组的内容为:”student a am i”,请你将数组的内容改为”i am a student”.要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。 重点内容 这个题要求不能使用库函数,那就可以自己写一个strlen函数,然后再应用。 做这个题的思路就是先将整个字符串反转过来,然后再对单个单词进行反转,有了这个个思路,就可以实现代码了。 - 插入链接原创 2017-04-19 09:32:14 · 558 阅读 · 0 评论 -
二分查找(折半查找)
通过创造的递归函数从而实现查找一个有序数列中的一个数#includeint binary_search(int arr[],int left,int right,int key){ while (left <= right) { int mid = (left + right) / 2; if (key > arr[mid]) { left = mid + 1; }原创 2017-03-29 17:57:35 · 234 阅读 · 0 评论 -
求两个数的最大公约数
求两个数的最大公约数有好几种方法。辗转相除法和更相减损术以及短除法都可以求最大公约数1.辗转相除法例:求80和36的最大公约数80=36*2+836=8*4+48=4*2+0所以最大公约数是42算法:就是用小数除大数,如果余数不是零,就把余数和较小的数构成一组新数,继续上面的除法,知道大数被小数约尽,此时比较小的数就是最大公约数 2.更相减损术还是上面的那个例子 可以用更相减损术计算80-36原创 2017-03-29 19:03:50 · 308 阅读 · 0 评论 -
扫雷
用c语言实现一个简单的扫雷游戏,并不是很难,在通过学习二维数组后,就可以写出来。头文件game.h#ifndef __GAME_H__#define __GAME_H__#define ROWS 11#define COLS 11#define MAX 79#define ROW (ROWS-2)#define COL (COLS-2)#include#include原创 2017-04-08 22:49:16 · 397 阅读 · 1 评论 -
const的各种用法
const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰的对象为常量(immutable)。我们来分情况看语法上它该如何被使用。1、函数体内修饰局部变量。例:void func(){const int a=0;}首先,我们先把const这个单词忽略不看,那么a是一个int类型的局部自动变量,我们给它赋予初始值0。原创 2017-04-08 23:25:24 · 584 阅读 · 0 评论 -
创建一个数组,实现函数init()初始化数组,实现empty()清空数组,reverse()函数完成数组的逆置
#include#includevoid init(int arr[10]) //初始化数组{ int j = 0; for (j = 0; j <= 9; j++) { arr[j] = j; }}void empty(int arr[10],int SZ) //清空数组{ memset(arr, 0, SZ*size原创 2017-04-09 15:16:31 · 1220 阅读 · 0 评论 -
输出一个菱形优化版
上次写的输出菱形那个代码,在后来考虑了多次后,发现并不是很完美,逻辑累赘,复杂,特此更新一下优化版。#includeint main(){ int i = 0; int line = 0; scanf("%d", &line); for (i = 0; i < line; i++) { int j = 0; for (j = 0; j < line - i-1; j++)原创 2017-03-31 12:14:42 · 193 阅读 · 0 评论 -
输出水仙花数(广义水仙花)
传统的水仙花数是指三位数的每一位的次方只和等于原数,这里指的是所有的数,每一位的位数次方和等于原数,比如8208,8208=8^4+2^4+0^4+8^4;407,407=4^3+7^3。c语言中不能用"^"符号,要用pow函数,不能用数字表达式在c语言中。具体代码如下:#include#includeint main(){ int i = 0; for (i = 0; i < 10原创 2017-03-31 12:25:15 · 849 阅读 · 2 评论 -
用C写出一个程序,判断五位选手的名次
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第一,我第三。B选手说:我第二,E第四。C选手说:我第一,D第二。D选手说:C最后,我第三。E选手说:我第四,A第一。比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。以上是题目要求,刚开始看到这个题,很蒙,第一次见到这种题,不知道如何下手,仔细看了题目要求,每位选手都说对了一半,原创 2017-04-01 18:30:01 · 1926 阅读 · 0 评论 -
判断凶手是哪个
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定到底谁是凶手。这个题和我前面做的一个判断比赛选手名次那个题很是类似,只不过改了出题方式,具体思路如下:四个人中有一个讲了假话,别的都是真话,c中假原创 2017-04-01 20:22:32 · 713 阅读 · 0 评论 -
C语言运算符总结心得
一、逻辑运算符:包括:①&&逻辑与 ②||逻辑或 ③!逻辑非逻辑运算符用于对包含关系运算符的表达式进行合并或取非对于使用逻辑运算符的表达式,返回0表示“假”,返回1表示“真”。关于逻辑运算符的解释请注意:任何使用两个字符做符号的运算符,两字符之间不应有空格,即将==写成= =是错误的。假设一个程序在同时满足条件a条件的代码。用&&表示“与”运原创 2017-03-26 09:48:02 · 950 阅读 · 0 评论 -
写一个宏可以将一个数字的奇数位和偶数位(二进制)交换。
将一个数字的奇数位与偶数位交换,例如5(0101),13的二进制是1101,奇数位与偶数位交换后就是1110,用代码怎么实现呢,就需要运用&和移位符,一个数的二进制与oXAAAAAAAA,A=1010。13&(0XAAAAAAAA)的结果就是偶数位,5(十六进制)=0101同样,5&(0X55555555)的结果就是奇数位,然后偶数位向右移位一位,奇数位向左移位一位,结果相加就是交换后的值原创 2017-04-10 17:48:22 · 402 阅读 · 0 评论 -
关于数组必须学会的运算
一位数组数组名单独在sizeof()中,代表整个数组二维数组a[][],把a[]看成数组名,sizeof(a)中,数组名代表二维数组的首元素地址,也就是第一行数组的地址。例如a[3][4],a代表二维数组首元素地址,也是第一行数组的地址,而a+1则代表第一行地址+1,就是第二行地址,两个地址相差4个int大小,也就是16个字节。sizeof求数组大小是要包括\0的,而strlen求数组原创 2017-04-03 19:29:43 · 422 阅读 · 0 评论 -
详细分析c/c++语言中的static
一 static在c语言中的应用详细分析一下static关键字在c语言中编写程序时有的三大类用法: 一,static全局变量 我们知道,一个进程在内存中的布局如图1所示: 其中.text段保存进程所执行的程序二进制文件,.data段保存进程所有的已初始化的全局变量,.bss段保存进程未初始化的全局变量(其他段中还有很多乱七八糟的段,暂且不表)。在进程的整...原创 2018-01-16 20:17:29 · 219 阅读 · 0 评论