c
王老桔
这个作者很懒,什么都没留下…
展开
-
C库:rand和srand的实现原理以及C库中源代码
一、rand和srand的使用示例博主前言:对rand和srand函数使用熟练的人,这步可直接跳过不看。1.代码示例1和运行结果//只有rand,没有srand生成随机种子#include<stdio.h>#include<unistd.h>void test(){ int i=0; for(;i<10;i++) ...原创 2018-05-04 21:16:51 · 12567 阅读 · 24 评论 -
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三; E选手说:我第四,A第一; 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。(不考虑并列的情况)#include <stdio.h>#include <windows.h>int fun(int arr[])//判断数组内的值是否有重复的{ int i =原创 2017-10-16 14:51:14 · 276 阅读 · 0 评论 -
左旋字符串的三种算法
abcd1234 左旋4个字符 —–> 1234abcd方法一:循环移动这里先把’a’右移7个单位,得到bcd1234a,然后再把’b’右移7个单位>>得到cd1234ab。按这个步骤循环四次后得到1234abcd。代码如下:void left_rotate(char *str, int len, int k){ if (str != NULL && len > 0) {转载 2017-11-09 21:47:47 · 556 阅读 · 0 评论 -
两个乒乓球队进行比赛,各出三人。甲队为A、B、C 3人,乙队为X、Y、Z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Y比,请编程序找出3三队选手的对阵名单
int main(){ char A = 0; char B = 0; char C = 0; for (A = 'x'; A <= 'z'; A++) for (B = 'x'; B <= 'z'; B++) for (C = 'x'; C <= 'z'; C++) { if ((A != 'x') && (C != 'x'原创 2017-10-15 17:13:52 · 1922 阅读 · 0 评论 -
编程序找出1000之内的所有完数,并按下面格式输出其因子:6 its factors are 1,2,3
一个数如果恰好等于它的因数之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。 因子就是所有可以整除这个数的数,不包括这个数自身,6是第一个完数,28是第二个完数,496是第三个完数。#include <stdio.h>#include <windows.h>int main(){ int i = 0; int j = 0; in原创 2017-10-15 16:17:18 · 13875 阅读 · 12 评论 -
输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数
#include <stdio.h>#include <windows.h>int main(){ int i=0; int length=0;//字符串长 int num1 = 0;//字母 int num2 = 0;//数字 int num3 = 0;//空格 int num4 = 0;//其他字符 char c=' '; c原创 2017-10-15 15:45:44 · 1346 阅读 · 0 评论 -
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。 A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说的是假话。
#define _CRT_SECURE_NO_WARNINGS -1#include <stdio.h>#include <windows.h>int fun(){ int A = 0; int B = 0; int C = 0; int D = 0; printf("请从A、B、C、D中选择凶手:\n"); char ch = ' ';原创 2017-10-15 11:40:30 · 490 阅读 · 0 评论 -
调整数组使奇数全部都位于偶数前面
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。 #include <stdio.h>#include <windows.h>void fun(int arr[],int sz){ int *left = arr; int *right = &arr[sz-1]; while (left<right原创 2017-10-31 22:17:44 · 273 阅读 · 0 评论 -
个人总结操作符的特性,包括:按位操作符、位移操作符和单目操作符中的sizeof
按位操作符1. 按位与 |个人理解,与数学中的交集 ∩ 相似特性1.遇1不变,遇0为0 两个bit位a,b a=1,b=1 a&b=1; a=1,b=0 a&b=0; a=0,b=0 a&b=0; 举例说明: 10的二进制为:00001010; 5的二进制为:00000101; 10&5:原创 2017-10-13 19:44:59 · 489 阅读 · 0 评论 -
常见的内存错误及对策
以下内容总结(部分摘抄)于 陈正冲《C语言深度剖析》第五章1.指针没有指向一块合法的内存定义了指针变量,但是没有为指针变量分配内存。1.1结构体成员指针未初始化eg:struct student{ char *name; int score;}stu,*pstu;int main(){ strcpy(stu.name,"Tom"); stu.score=90;原创 2017-10-30 16:23:13 · 295 阅读 · 0 评论 -
单链表的基本操作,正序/逆序建表(尾插法/头插法)、计算单链表长度、输出单链表内容、插入、删除,给出完整代码
#include "iostream"using namespace std;typedef struct Node//结点类型定义{char data;struct Node * next;}Node,*LinkList;//*LinkList用来定义单链表的头结点,Node用来定义单链表中的结点(头结点不属于单链表的内容)LinkList Init_List原创 2017-09-11 19:35:31 · 1290 阅读 · 0 评论 -
编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
#define _CRT_SECURE_NO_WARNINGS -1#include <stdio.h>#include <windows.h>void fun1(int value1,int value2){ int count = 0; int num = 0; while (num<32) { if ((value1 & 1) != (va原创 2017-10-12 21:09:14 · 269 阅读 · 0 评论 -
输出一个整数的每一位
#define _CRT_SECURE_NO_WARNINGS -1#include <stdio.h>#include <windows.h>void fun(int value){ while (value) { printf("%d\n",value % 10); value = value / 10; }}int main()原创 2017-10-12 20:54:08 · 423 阅读 · 0 评论 -
自己模拟strcat库函数写的功能函数my_strcat实现strcat的功能,完整代码
#include <stdio.h>#include <string.h>#include <windows.h>#include <assert.h>char *my_strcat(char *pdest,const char *psrc){ char *ret = pdest; assert(pdest!=NULL); assert(psrc != NULL);原创 2017-10-05 09:51:07 · 2055 阅读 · 0 评论 -
在屏幕上打印杨辉三角
#include <stdio.h>#include <windows.h>//杨辉三角的每个数等于多项式的系数:C(n,m)//C(n,m)=n!/(m!*(n-m)!)int factorial(int num)//阶乘{ int tmp = 1; if (num==0) return tmp; else { int i =原创 2017-10-16 16:10:26 · 340 阅读 · 0 评论 -
尾递归:通过斐波那契的迭代法和尾递归法了解
1.斐波那契的递归写法:int fib(int n){ if(n<=2) return 1; else { return fib(n-1)+fib(n-2); }}其流程图(以求第4个斐波那契数为例)如下: 缺点: ①只是使用于n比较小的时候,否则效率低,因为会做很多次重复操作 ②而且该例递归属于多分支递归,容易造成栈溢出原创 2017-12-07 19:41:53 · 872 阅读 · 0 评论 -
在屏幕上用“*”输出指定行数的菱形图案
![程序运行结果图:](http://img.blog.csdn.net/20170928140711452?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd195X3hfeQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)#include <st原创 2017-09-28 14:08:36 · 959 阅读 · 0 评论 -
通讯录的实现(I/O文件版本)
MailList.h文件#ifndef __MAILLIST__H__#define __MAILLIST__H__#include <stdio.h>#include <stdlib.h>#include <windows.h>#include <assert.h>#define M 10 //通讯录默认大小,即默认存储10个人#define N 5 //扩大/缩小一次通讯录容量的大小原创 2017-12-03 13:47:48 · 467 阅读 · 0 评论 -
找出一句英文中的元音字母,使用库函数strpbrk
#include <stdio.h>#include <windows.h>#include <string.h>void InputVowel(const char *str)//找出一句英文中的原因字母{ char *ret = NULL; printf("%s\n",str); ret = strpbrk(str,"aeiou"); while (ret!原创 2017-11-22 21:53:15 · 572 阅读 · 0 评论 -
分析时间复杂度&空间复杂度,以二分查找和斐波那契数的递归和非递归算法为例
一、时间复杂度:实际是指程序运行次数,而不是程序运行时间1.我们一般讨论的是最坏时间复杂度,这样做的原因是:最坏情况下的时间复杂度是算法在任何输入实例上运行时间的上限,以最坏代表最全。2.时间复杂度的书写规则: ①忽略常数项,用O(1)表示 ②选取最坏时间复杂度即选取增长最快的项 ③递归的时间复杂度=递归总次数 * 每次递归中基本操作所执行的次数例1,代码如下:void Test2原创 2017-12-06 18:27:38 · 8688 阅读 · 2 评论 -
关于大小端的简单介绍以及使用C写一个函数判断当前系统是大端存储还是小端存储
大端模式: 字数据的高字节存储在低地址中,而字数据的低字节存储在高地址中。 小端模式: 字数据的低字节存储在低地址中,而字数据的高字节存储在高地址中。 如图: 用C写一个函数判断当前系统的存储模式#include <stdio.h>#include <windows.h>int endian(){ int i = 1; char *p = (char *)&i;原创 2017-10-25 21:53:41 · 1927 阅读 · 0 评论 -
获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
#define _CRT_SECURE_NO_WARNINGS -1#include <stdio.h>#include <windows.h>int count_one_bits(unsigned int value)// 返回 1的位数{ int count = 0; while (value) { value = value&(value - 1)原创 2017-10-12 20:46:50 · 854 阅读 · 0 评论 -
可变参数列表源码剖析及实例解析
一、源码剖析 在介绍可变参数列表之前,先补充两个宏1._ADDRESSOF(v)源码 :#define _ADDRESSOF(v) ( &(v) )作用:对变量v取地址2._INTSIZEOF(n)源码:#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )作用:将n的长度化为int长度的整数原创 2017-11-04 18:19:56 · 384 阅读 · 0 评论 -
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。编程实现。
#include <stdio.h>#include <windows.h>int bottle_num(int yuan)//喝汽水{ if (yuan)//零元返回零瓶 { while (1 != yuan) { if (yuan & 1)//如果是奇数瓶 { re原创 2017-11-13 17:59:45 · 1100 阅读 · 0 评论 -
浅谈函数的调用过程,栈帧的创建和销毁,附图讲解
本文以简单的加法函数Add为例解释函数栈帧 适合有简单汇编知识基础的初学者结合下面代码的汇编代码进行阅读。 代码如下:#include <stdio.h>int Add(int x, int y){ int z = 0; z = x + y; return z;}int main(){ int a = 1; int b ...原创 2017-11-03 17:05:20 · 403 阅读 · 0 评论 -
浅谈数组指针、指针数组、函数指针、函数指针数组、函数指针数组指针,个人见解。
对于这几个概念,用以下几幅图进行解析:1.数组指针 2.指针数组 3.函数指针、函数指针数组、函数指针数组指针 如有错误,恳请指点。原创 2017-11-17 17:03:27 · 369 阅读 · 0 评论 -
自己模拟strcpy库函数写的功能函数my_strcpy实现strcpy的功能,完整代码
#include <string.h>#include <stdio.h>#include <windows.h>#include <assert.h>char * my_srecpy(char *pdest,const char *psrc){ char *ret = pdest; assert(pdest!=NULL); assert(psrc != NULL)原创 2017-10-04 20:39:56 · 1246 阅读 · 0 评论 -
自己模拟strlen库函数写的功能函数my_strlen实现strlen的功能,完整代码
#include <stdio.h>#include <string.h>#include <windows.h>#include <assert.h>int my_strlen(const char *p){ int num = 0; assert(p!=NULL); while (*p++ != '\0') num++; return num原创 2017-10-05 17:28:42 · 805 阅读 · 0 评论 -
C语言,进制转换之二进制转十进制,完整代码
#include "iostream"using namespace std;#define MAX 50int main()//二转十{ cout << "请输入二进制数,并以‘$’结束:"; char elem2[MAX]; int flag = 1; char ch; int i = 0; while (flag) {原创 2017-09-26 10:11:34 · 9041 阅读 · 0 评论 -
C语言,进制转换之十进制转二进制,完整代码
#include "iostream"using namespace std;#define MAX 50int _10to2()//十转二{ cout << "请输入一个整型十进制数:"<<endl; int number; cin >> number; int elem2[MAX]; int i = 0; int length=0;原创 2017-09-25 20:14:21 · 12571 阅读 · 0 评论 -
C语言,进制转换之八进制转二进制,完整代码
#include "iostream"using namespace std;#define MAX 50int main()//八转二{ int elem2[MAX]; char elem8[MAX]; cout << "请输入八进制数,并以‘$’结束:"; int flag = 1; char ch; int i = 0; whil原创 2017-09-25 20:15:54 · 8327 阅读 · 0 评论 -
C语言,进制转换之十六进制转二进制,完整代码
int _16to2()//十六转二{ int elem2[MAX]; char elem16[MAX]; cout << "请输入十六进制数,并以‘$’结束:"; int flag = 1; char ch; int i = 0; while (flag) { cin >> ch; if (ch !原创 2017-09-25 20:06:50 · 28281 阅读 · 2 评论 -
自己写的顺序表的基本操作,插入、删除、修改,给出完整代码,其中运用到goto语句
#includeusing namespace std;#define MAXSIZE 100typedef int DataType;typedef struct{DataType data[MAXSIZE]; //通常用一位数组来描述顺序表的数据存储int SeqLength; /*线性表长度*/} SeqList;SeqList *Init_Seq原创 2017-09-09 01:39:23 · 6092 阅读 · 0 评论 -
对fflush(stdin)功能以及实际应用的个人体会,对初学者应该挺有用
fflush(stdin)的功能是清空输入缓冲区,至于什么是输入缓冲区,在下面会有解释。举个例子,“现在要求往一个整型数组里输入3个整数,并且输出指定序号对应的元素”。比如输入11,12,13,之后输出第2个元素,应该输出12。代码如下:#include "iostream"using namespace std;int main(){int elem[20原创 2017-09-08 19:10:10 · 1800 阅读 · 0 评论 -
C语言,进制转换之二进制转十六进制,完整代码
#include "iostream"using namespace std;#define MAX 50int _2to16()//二转十六{ cout << "请输入二进制数,并以‘$’结束:"; char elem2[MAX]; int flag = 1; char ch; int i = 0; while (flag) {原创 2017-09-26 10:13:00 · 26281 阅读 · 1 评论 -
C语言,进制转换之二进制转八进制,完整代码
#include "iostream"using namespace std;#define MAX 50int main()//二转八{ cout << "请输入二进制数,并以‘$’结束:"; char elem2[MAX]; int flag = 1; char ch; int i = 0; while (flag) {原创 2017-09-26 10:09:31 · 9334 阅读 · 1 评论 -
用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。
#include <stdio.h>#include <windows.h>void int_to_char(int num){ if (num == 0) printf("%c",48); else if ((num /= 10) != 0) { int_to_char(num); printf("%c", num %原创 2017-10-19 18:51:59 · 8383 阅读 · 0 评论 -
写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串
#include <stdio.h>#include <windows.h>void reverse(char arr[],int sz){ int i = 0; char tmp = ' '; for (i = 0; i < sz/2; i++) { tmp = arr[i]; arr[i]=arr[sz - i - 1];原创 2017-10-19 15:20:33 · 7645 阅读 · 0 评论 -
写一个函数,输入一行字符,将此字符串中最长的单词输出。
#include <stdio.h>#include <windows.h>void put_longest_string(char *p){ char *p1 = p; char *p2 = p; char *ret = p; int count1 = 0; int count2 = 0; while (*p2!='\0') {原创 2017-10-19 15:00:42 · 6038 阅读 · 0 评论 -
在杨氏矩阵中找数字,存在返回下标,不存在返回“不存在”,杨氏矩阵:每行每列的数字都是递增排序的
#include <stdio.h>#include <windows.h>void search_number(int arr[][4],int num){ int i = 0; int j = 3; int count = 0; while (i<=3&&j>=0) { if (num == arr[i][j]) {原创 2017-10-19 12:51:52 · 213 阅读 · 0 评论