
C
海马HiMark
这个作者很懒,什么都没留下…
展开
-
不使用(a+b)/2这种方式,求两个数的平均值。
//方法一 移位#includeint mian(){int a = 4;int b = 2;int c = 0;c = (a + b) >> 1; //因为数据以二进制存储,所以向右移位1即表示除2, 如果a+b的值都很大则会有溢出的可能。printf("%d\n", c);return 0;} //方法二 做差值移位/原创 2017-12-10 01:04:39 · 300 阅读 · 0 评论 -
自定义strstr函数的实现C语言
strstr功能strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。strstr实现#include<stdio.h>#include<assert.h>const char* my_strstr(const char *str1, const char *str2){ asse原创 2018-03-05 16:09:07 · 1318 阅读 · 0 评论 -
计算器的另一种实现方式(转移表)含思想 C语言
计算器的一种实现方式 转移表“转移表” double (*operation_fun[])(double,double)={add,sub,mul,div,......}; 和状态有关应用if-else结构或者switch语句进行一些状态的切换,如果遇到比较复杂情况,转移次数达到数百次或者数千次,如果再使用if-else结构或者switch语句,维护起这个软件系统,工...原创 2018-03-13 10:51:37 · 412 阅读 · 0 评论 -
结构体内存对齐问题(附案例解析)c语言
为什么存在内存对齐?平台原因(移植原因) 不是所有的硬件平台都能访问任意地址上的任意数据性能原因 为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需一次访问总体来说就是: 结构体的内存对齐是拿空间换取时间的做法如何计算结构体的大小?结构体对其规则:第一个数据成员放在偏移量为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,原创 2018-03-13 16:09:59 · 414 阅读 · 0 评论 -
C语言实现一个简易通讯录(附图验证)
实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址实现一下功能: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人 方法用静态顺寻表来实现较为简单...原创 2018-03-30 00:20:35 · 3466 阅读 · 1 评论 -
文件操作总结
文件操作“打开”fopen 文件指针名=fopen(文件名,使用文件方式)FILE *fp; fp=("file a","r"); 意义:在当前目录下打开文件file a进行“读”操作,并使fp指向该文件。FILE *fp fp=("c:\\test","rb") 意义:打开C盘的根目录下的文件test, 这是一个二进制文件,只允许按二进制原创 2018-03-09 00:15:23 · 250 阅读 · 0 评论 -
头文件使用#ifndef#define #endif的好处及原因
宏定义 #ifndef #define #endif 最主要目的是防止头文件的重复声明和编译#ifndef __TEST_H__#denfine __TEST_H__#endif __TEST_H__ifndef 指示会发现TEST已经定义返回假,并且忽略该头文件的剩余部分。引用宏定义 #ifndef 为了防止在执行时对头文件进行重复的编译和声明,...原创 2018-03-02 17:04:04 · 826 阅读 · 0 评论 -
C语言头文件中源文件与本地文件的区别
源文件<>与本地文件“ ” 的区别系统自带的头文件用 < > 表示,这样编译器会在系统文件目录下查找。用户自定义头文件用 “ ” 表示,编译器首先会在用户目录下查找,然后再去系统文件目录下查找头文件包含顺序问题 1 尽量将系统头文件写在自定义头文件的前面 2 在用户自定义头文件中 将使用到的声明的头文件写在前面,否则在调用的时候可能会出现在未声明的问题从而产生错误。原创 2018-03-02 17:51:02 · 1512 阅读 · 0 评论 -
strcpy与strncpy函数的区别及其C语言实现过程
strcpy : 从源串的开始到结尾('\0')完全拷贝到目标串地址,当src串长度大于dest串长度时,程序仍会将整个src串复制到dest区域,可是dest数组已发生溢出.(使用时需注意)strncpy : src串的开始拷贝n个字符到dest串地址,n大于src串长度时,遇到'\0'结束; n小于src串长度时,到第n个字符结束,但不会在dest串尾补'\0'.str...原创 2018-03-05 14:31:41 · 779 阅读 · 0 评论 -
使用main函数的参数,实现一个整数计算器 C语言
使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例如:命令行参数输入:test.exe -a 1 2 执行1+2输出3 #pragma warning (disable:4996)#include<stdio.h>#include<stdlib.h>原创 2018-02-24 23:41:19 · 731 阅读 · 0 评论 -
.写冒泡排序可以排序多个字符串 C语言
#include <stdio.h>#include <windows.h>#include <string.h>#pragma warning(disable: 4996)void Exchange(char * str1, char *str2){ char str_e[10] = "0"; strcpy(str_e, str1); strcpy(str1, str原创 2018-02-24 23:54:27 · 310 阅读 · 0 评论 -
常用字符串函数的模拟实现
模拟实现strlen//不创建临时变量的计数器int Strlen(const char *str){ if (str == '\0') return 0; else return 1 + Strlen(str + 1);}//指针-指针int Strlen(char *s){ char*p = s; while (*p !原创 2018-02-25 00:21:00 · 241 阅读 · 0 评论 -
数组指针及函数指针
数组指针:是指针 (1)int(p)[n]; //p先和结合,故是一个数组指针 ,即指针指向一个数组指针数组: 是数组(2) int *p[n]; //p先和[n]结合,故是一个指针数组,即数组里面的成员是指针函数指针:指向函数的指针变量,本质上是一个指针变量 如:int(*max)(int a, int b)#include <iostream> using namespac原创 2018-02-25 00:43:39 · 195 阅读 · 0 评论 -
如何测试一个机器是大端还是小端
大端:数据中的低位保存在高地址中,数据中的高位保存在低地址中。 小端:数据中的低位保存在低地址中,数据中的高位保存在高地址中。例如16位short型x 的值为 0x1122 如果是小端 : 0x22放低地址 0x11放高地址 如果是大端: 0x22放高地址 0x11放低地址思路:可以定义一个int变量,将其地址强制为char *型地址,检测该地址中...原创 2018-02-24 09:31:14 · 749 阅读 · 1 评论 -
一组数据中只有一个数字出现了一次,其他所有数字都是成对出现的。 请找出这个数字。
方法:两个相同数字异或的结果为0,#includeint main(){int arr[] = { 0, 1, 2, 3, 4, 3, 2, 1, 0 };int i = 0;for (i = 1; i {arr[0] = arr[i] ^ arr[0]; }printf("这个数是:%d\n", arr[0]);return 0;}原创 2017-12-10 00:19:47 · 420 阅读 · 0 评论 -
实现多个字符从两端向中间移动
思想:定义新数组,每次打印两边的一个字符然后用循环语句向中间推进,当不符合判断条件即打印完成。#include<stdio.h>#include<string.h>int main(){ char arr1[] = "my name is himark"; char arr2[] = "#################"; int left = 0; int r原创 2018-01-11 12:12:44 · 368 阅读 · 0 评论 -
模拟用户登录情景,并且只能登录三次
编写代码实现模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。)注意:判断跳出循环条件#include<stdio.h>#include<string.h>int main(){ int i = 0; char psw[10] = ""; for (i = 0; i < 3; ++i) //循环三次后原创 2018-01-12 23:36:29 · 1073 阅读 · 0 评论 -
求1!+2!+.......+10!
#include<stdio.h>int main(){ int i = 1; int sum = 0; int s = 1; for (i = 1; i < 11; i++) { s = s*i; sum = sum + s; } printf("%d\n", sum); return 0;}原创 2018-01-13 00:15:23 · 866 阅读 · 0 评论 -
猜数字小游戏 C语言实现
猜数字小游戏分为三部分#include<stdio.h>#include<stdlib.h>#include<time.h>void menu() //菜单界面{ printf("******************\n"); printf("*******1.play*****\n"); printf("*******0.exit*****\n"); pri原创 2018-01-13 00:58:31 · 647 阅读 · 0 评论 -
实现有序数组的二分查找 C语言
写一个函数实现有序数组的二分查找#include<stdio.h>int Binarysearch(int arr[],int key,int n ) // 数组 ,关键字,数组长度。{ int left = 0; int right = n-1; int mid = 0;原创 2018-02-20 00:16:31 · 4339 阅读 · 0 评论 -
写一个函数只要调用一次就可以将参数的值增加1
void recall(int *i){ (*i)++;}int main(){ int i = 0; recall(&i); recall(&i); printf("%d\n", i); while (1) //终止条件 return 0;}原创 2018-02-20 00:21:49 · 1939 阅读 · 0 评论 -
strncpy函数的模拟实现
strcpu :是用自身的字符数组长度来判断循坏的停止条件,在一些情况下这是不安全的 strncpy:在函数拷贝的过程中,将‘\0’也拷贝出来,并且以‘\0’作为循环的终止条件,这样子就会避免程序找不到结束条件,自己崩溃的现象//strncpy函数的模拟实现#include<stdio.h>#include<string.h>#include<assert.h>char* my_strnc原创 2018-02-25 01:04:20 · 558 阅读 · 0 评论