
c语言
孙堂吉
这个作者很懒,什么都没留下…
展开
-
栈帧
每次调用一个函数,都要为该次调用的函数实例分配栈空间。为单个函数分配的那部分栈空间就叫做栈帧(Stack Frame)。 用一个简单函数Add来理解栈帧,它的功能是求两个数的和。 以下代码运行在Microsoft Visual Studio 2015 X86平台下。#include<stdio.h>#include<stdlib.h>int Add(int i, int j){原创 2017-08-08 12:49:11 · 617 阅读 · 0 评论 -
将一个整形数组奇数排列在前偶数排列在后
一个整形数组,把奇数排列在前,偶数排列在后,例如 arr[]={1,2,3,4,5,6},排列后arr={1,3,5,2,4,6}. 方法一,定义两个指针p1,p2.p1指向数组的首地址,p2指向数组的最后一位数字的地址。如果p1指向的内容不是偶数,把p1加一,如果p2指向的内容不是奇数,把p2加一 ,如果p1指向了偶数并且p2指向了奇数,把p1和p2所指向的内容交换,直到P1大于p2. 代原创 2017-08-09 15:47:46 · 2326 阅读 · 0 评论 -
交换2个数
交换两个数,分别用创建第三个变量,和不创建第三个变量的方法,以及用位运算实现. 交换俩个数,用第三个变量.#include <stdio.h>#include <stdlib.h>int main(){ int a = 10; int b = 20; int temp = 0; printf("a=%d b=%d\n", a, b); temp =原创 2017-08-09 15:48:00 · 325 阅读 · 0 评论 -
模拟实现库函数strcpy
自己动手实现库函数strcpy的功能 定义两个指针,指针dest指向需要进行拷贝的字符串,指针src指向被拷贝的字符串。如果指针src指向的内容不是’\0’,把src所指的内容赋给dest所指的内容。然后把src和dest都加1。函数名为my_strcpy,返回值为char* ,两个参数,分别为字符指针dest,常量字符指针src。该函数没有返回值也可以实现字符串的拷贝,但为了函数的链式访问,原创 2017-08-09 15:48:26 · 208 阅读 · 0 评论 -
谋杀案问题
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。 A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说。 已知3个人说了真话,1个人说的是假话。 现在请根据这些信息,写一个程序来确定到底谁是凶手。 已知3个人说了真话,1个人说的是假话。只需要把他们说的话转换为逻辑表达式,如果相加为3,则说明找到了凶手。 代码如下#incl原创 2017-08-09 15:48:41 · 319 阅读 · 0 评论 -
判断一个字符串是否是另一个字符串翻转后的结果
字符串abcdef向左翻转一位的结果为fabcde,向右翻转翻转一位的结果为bcdefa.向左翻转两位的结果为efabcd,向右翻转两位的结果为cdefab。 要判断一个字符串是否是另一个字符串翻转后的结果,必须遍历向左翻转和向右翻转0-len(arr)-1位的所有情况。我定义了一个翻转函数reverse,返回值为空,参数为两个指针,第一个是翻转的起始地址,第二个是翻转的结束地址。要想实现向左原创 2017-08-13 14:08:47 · 637 阅读 · 0 评论 -
c语言实现动态顺序表
seqlist.h#ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include <stdio.h>#include <stdlib.h>//#include //#include #define DEFAULT_SZ 3 #define DEFAULT_INC 2 typedef int DataType;typedef struct SeqL原创 2017-09-22 17:54:08 · 392 阅读 · 0 评论 -
c语言扫雷游戏
mine.h#ifndef __MINE_H__#define __MINE_H__#include<stdio.h>#include<stdlib.h>#include<time.h>#include<string.h>#define ROW 9 #define COL 9#define ROWS 7#define COLS 7#define MINECOUNT 8extern原创 2017-09-22 18:01:16 · 285 阅读 · 0 评论 -
c语言三子棋游戏
game.h#pragma once#ifndef __GAME_H__#define __GAME_H__#define ROW 3#define COL 3#include<stdio.h>#include<stdlib.h>#include<time.h>void menu();void game(char board[ROW][COL]);void display(char原创 2017-09-22 18:06:05 · 224 阅读 · 0 评论 -
c语言可变参数列表
在计算机程序设计,一个可变参数函数是指一个函数拥有不定引数,即是它接受一个可变数目的参数。 在C语言中,C标准函式库的stdarg.h标头档定义了提供可变参数函数使用的宏。要创建一个可变参数函数,必须把省略号(…)放到参数列表后面。函数内部必须定义一个va_list变数。然后使用宏va_start、va_arg和va_end来读取。例如: 以下代码运行在vs2015开发环境下,可能和标准c原创 2017-08-29 17:49:45 · 451 阅读 · 0 评论 -
c语言中的整形提升
整型提升是C程序设计语言中的一项规定:在表达式计算时,各种整形首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型,然后执行表达式的运算。 #include<stdio.h>int main(){ char a = -1; unsigned char b = -1; char c = a + b; printf("sizeof(原创 2017-09-02 12:05:49 · 879 阅读 · 1 评论 -
c语言动态内存开辟
所谓动态内存分配(Dynamic Memory Allocation)就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。 我们在定义数组时,需要知道数组的大小,当我们不确定数组大小时需要定义足够大的数组来存放数据,这样造成了空间的浪费,一旦空间原创 2017-09-02 21:18:10 · 558 阅读 · 0 评论 -
通讯录c语言实现(动态内存开辟&文件存储)
contact.h#ifndef __CONTACT_H_#define __CONTACT_H_#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#define ADD 2 //每次增加的容量typedef struct peoinfo{ char name[20]; i原创 2017-09-22 16:56:46 · 535 阅读 · 0 评论 -
c语言实现文件拷贝命令
主要知识:main函数参数、文件读写#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>int main(int argc, char* argv[]){ FILE *fpread = NULL; FILE *fpwrite = NULL; int c原创 2017-09-22 17:09:10 · 5469 阅读 · 0 评论 -
二分查找算法
一个有序的数列,使用折半查找效率更高。 先把要查找的值和数列的中间值进行比较,如果二者相等,我们找到了要查找的值。如果要查找的值小于中间值,说明要查找的值在数列的左侧。此时,令数列的右边界为中间值减去1,重新计算中间值。直到找到要寻找的值。如果数列的左边界大于右边界,说明要找的值不在次数列中。如果要查找的值大于中间值,说明要查找的值在数列的右侧。此时,令数列的左边界为中间值减去1,重新计算原创 2017-08-09 15:47:28 · 208 阅读 · 0 评论 -
大小写字母转换
输入一个字母,如果是大写,就转换为小写;如果是小写,就转换为大写。 解题思路:由于大小写字母的ascii码值相差32,把小写字母减去32就得到了大写字母,把大写字母加上32就得到了小写字母。 实现代码#include<stdio.h>#include<stdlib.h>#include <string.h>int main(){ char key[10] = {0};原创 2017-08-09 15:47:07 · 839 阅读 · 0 评论 -
字符数组初始化需要注意的问题
字符数组用不同的方式初始化,结果可能不同 下面这段程序,把字符数组用不同的方式去初始化#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char arr[] = "abc"; printf("%d\n", strlen(arr));//3 printf("%d\n", size原创 2017-08-08 12:57:05 · 604 阅读 · 0 评论 -
字符串翻转
有一个字符数组的内容为:”student a am i”,请你将数组的内容改为”i am a student”. 首先把字符串整体翻转,得到的字符串为“i ma a tneduts”,然后对每个单词进行翻转。定义一个翻转字符串的函数str_reverse,这个函数有两个参数,翻转的起始地址char* begin,翻转的结束地址char* end.此函数并不需要参数数组,因为begin原创 2017-08-08 12:57:27 · 390 阅读 · 0 评论 -
用位运算实现加法和减法
用位运算实现加法和减法 位运算异或可以实现没有进位的加法,比如3+4.他们的二进制分别为 00000000 00000000 00000000 00000011 00000000 00000000 00000000 000001003^4的结果为 00000000 00000000 00000000 00000111转换为2进制为7.但是,要想实现有进位的加法就需实现进位。例原创 2017-08-08 12:59:38 · 1518 阅读 · 0 评论 -
在杨氏矩阵中判断一个数是否存在
杨氏矩阵是一个二位数组,这个数组无论横向纵向都是递增的。 比如数组 1 4 7 2 5 8 3 6 9要想时间复杂度小于o(n)就不能遍历整个数组,其实只需判断这个i行j列的数组的arr[i-1][j-1]是否等于要找的数,如果大于要找的数,说明要找的数一定在该数的左下方。如果小于要找的数,说明要找的数一定在该数的下方。 实现代码如下 c /#include<原创 2017-08-08 12:59:03 · 245 阅读 · 0 评论 -
跳水比赛名次问题
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三。 B选手说:我第二,E第四。 C选手说:我第一,D第二。 D选手说:C最后,我第三。 E选手说:我第四,A第一。 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。 已知每位选手都说对了一半,那么每位选手说的话转换为逻辑表达式后逻辑或的结果为1.遍历五位选手,他们说的话逻辑表达式结果相加为原创 2017-08-08 13:04:08 · 455 阅读 · 0 评论 -
输出菱形
第一种方法输出若干个空格形成菱形,第二种方法半径为r的圆的四条互相垂直的切线形成的图形是菱形。 方法一,每一行输出r-i个空格以及2i-1个*,菱形的上半部分和下半部分需要分别输出. 代码如下#include <stdio.h>#include <stdlib.h>int main(){ int i = 0, j = 0,k = 0; for (i = 1; i <= 7原创 2017-08-08 13:04:32 · 569 阅读 · 0 评论 -
输出100~200之间的素数
所谓素数是指除了1和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被2~16的任一整数整除。因此判断一个整数m是否是素数,只需把m被2~m-1之间的每一个整数去除,如果都不能被整除,那么m就是一个素数. #include<stdio.h>#include<math.h>#include<stdlib.h>int main(){ int i, n; for原创 2017-08-08 13:05:25 · 1005 阅读 · 1 评论 -
三字母词
在ANSIC标准中,定义了9个三字母词(trigraph),三字母词就是几个字符的序列,合起来表示另一个字符。 三字母词使C语言环境可以在缺少一些必需字符的字符集(比如,一些非常老式的键盘上没有[]{}#\^~|)上实现.下图列出了9个三字母词以及它们所代表的的字符。原创 2017-08-08 13:07:10 · 312 阅读 · 0 评论 -
求一个数的二进制从左到右翻转后的值
在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000 首先要求一个数的二进制,然后把它存入数组中,n&1就是这个数最低位的二进制,然后把n右移一位可以求出倒数第二位的二进制,不断进行循环,直到求出n的最高位的二进制。次时数组中存的就是原创 2017-08-08 13:07:36 · 771 阅读 · 0 评论 -
求一个数2进制中1的个数
1.先求出一个数的二进制,然后在计算1的个数 2.用移位操作实现 方法1:一个数除以2的余数就是2进制的最高位,把这个数除以2的结果继续循环,直到除以2的结果为0.循环结束后数组中1的个数,就是结果。 实现代码#include <stdio.h>#include <stdlib.h>int count_one_bits(unsigned int value){ // 返回 1原创 2017-08-09 15:42:00 · 319 阅读 · 0 评论 -
99乘法表
分别使用双层循环,单层循环,goto语句输出99乘法表 使用双层循环输出99乘法表#include<stdio.h>#include<stdlib.h>int main(){ int i, j; for (i = 1; i <= 9; i++) for (j = 1; j <= i; j++) { printf("%原创 2017-08-09 15:46:08 · 427 阅读 · 0 评论 -
c语言sizeof关键字
The sizeof keyword gives the amount of storage, in bytes,associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t. 简言只,其作用就是返回一个对象或者类型所占的内存字节数。例如原创 2017-08-09 15:46:29 · 455 阅读 · 0 评论 -
c语言static关键字
c语言static关键字的用法 下面这段程序的输出结果为10个2#include<stdio.h>#include<stdlib.h>int main(){ int i = 0; for (i = 0; i < 10; i++) { int n = 1; n++; printf("%d ", n);//2 }原创 2017-08-09 15:46:43 · 426 阅读 · 0 评论 -
把c语言注释转换为cpp注释
主要知识点:有限状态机、文件读写comment.h#ifndef _COMMENT_H__#define _COMMENT_H__#include <stdio.h>#include<stdlib.h>enum Status{ NONE_STATUS, //无状态 C_STATUS, //c状态 CPP_STATUS, //cpp状态 END_STATU原创 2017-09-22 17:23:12 · 510 阅读 · 0 评论