
c语言
Z_JUAN1
这个作者很懒,什么都没留下…
展开
-
使用main函数的参数,实现一个整数计算器
程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例如:命令行参数输入:test.exe -a 1 2 执行1+2输出3 首先我们知道参数个数为4个,其次在用switch判断为哪种计数int main(int argc, char *argv[]) int ret = 0; if (argc != ...原创 2018-05-16 20:36:17 · 367 阅读 · 0 评论 -
接收键盘字符,小写字符就输出对应的大写字符,大写字符,就输出对应的小写字符,如果是数字不输出。
#include<stdio.h>#include<stdlib.h>int main(){ int ch = 0; printf("请输入一个字符:\n" ); while ((ch = getchar()) != EOF) { if (ch >= 'a'&&ch <= 'z'); { printf("%c\n", ch - 32); ...原创 2018-04-05 21:43:35 · 309 阅读 · 0 评论 -
获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
一、#include<stdio.h>#include<stdlib.h>int Numberof_oddbits_evenbits(unsigned int num)//无符号整型的形参{ int arrOdd[16] = { 0 }; int arrEven[16] = { 0 }; int i = 0; int flag = 1; int m = 0; for ...原创 2018-04-06 09:30:39 · 169 阅读 · 0 评论 -
输出1~100的奇数
原创 2018-04-06 09:49:24 · 1574 阅读 · 0 评论 -
打印1~10的数字
原创 2018-04-06 10:17:15 · 2878 阅读 · 0 评论 -
多个字符从两端移动,向中间汇聚
#include<stdio.h>#include<stdlib.h>int main(){ char arr1[] = "wel com bit ..."; char arr2[] = "###############"; int left = 0; int right = strlen(arr1) - 1; printf("%s\n", arr2); ...原创 2018-04-06 10:41:36 · 269 阅读 · 0 评论 -
计算1!+2!+3!+.........+10!
原创 2018-04-06 11:20:23 · 1209 阅读 · 0 评论 -
实现一个函数判断year是不是润年。
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int leap(int X){ if (((X % 4 == 0) && (X % 100 != 0)) || (X % 400)) { return 0; } else { return 1; }}int main(...原创 2018-04-07 17:54:16 · 347 阅读 · 0 评论 -
实现一个函数,判断一个数是不是素数。
一、#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int leap(int n){ int i = 0; for (i = 2; i <= n - 1; i++) if (n%i == 0) { return 1; } else { return 0; }}int main(...原创 2018-04-07 20:34:32 · 396 阅读 · 0 评论 -
创建一个数组, 实现函数init、empty、reverse
#include<stdio.h>#include<stdlib.h>void init(int a[],int sz){ int i = 0; for (i = 0; i < sz; i++) { a[i] = i; printf("%d ", a[i]); /*初始化*/ } printf("\n");}void empty(int a[],int s...原创 2018-04-07 21:58:03 · 265 阅读 · 0 评论 -
三个数从小到大输出
int main(){ int x = 10; int y = 220; int z = 30; if (x > y&&x > z) { printf("1=%d\n", x); if (y > z) { printf("2=%d\n", y); printf("3=%d\n", z); } else { printf("2=%d\n&am原创 2018-04-09 16:07:54 · 873 阅读 · 0 评论 -
求最大公约数
一、#include<stdio.h>#include<stdlib.h>#pragma warning(disable:4996)int main(){ int x = 10; int y = 6; int min = x > y ? y : x; while (min >= 1) { if (x%min == 0 && y%min == 0...原创 2018-04-09 16:34:56 · 174 阅读 · 0 评论 -
模拟用户登录情景,并且只能登录三次。
#include<stdio.h>#include<stdlib.h>#pragma warning(disable:4996)#define PASSWORD "1234abcd"int main(){ char ps[64]; int i = 0; for (i = 0; i < 3; i++) { printf("please enter password:&...原创 2018-04-09 17:00:41 · 376 阅读 · 0 评论 -
写一个函数,每次用一次函数,就会将num的值增加1,。
#include<stdio.h>#include<stdlib.h>void inc(){ static int num = 0; num++; printf("%d\n", num);}int main(){ int i=0; for (i = 0; i < 10; i++) { inc(); } system("pause"); return 0;}原创 2018-04-11 21:57:00 · 438 阅读 · 0 评论 -
C语言操作符
我的总结:操作符共分为:<1>算数操作符 <2>移位操作符 <3>位操作符 <4>赋值操作符 <5>单目操作符 <6>关系操作符 <7>逻辑操作符<8>条件操作符 <9>逗号表达式 <10&原创 2018-04-05 20:51:46 · 226 阅读 · 0 评论 -
编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
我的思想:定义两个整形数字,对其逐位和1进行“&‘’运算,得出不同的bit位.#pragma warning (disable:4996)#include <stdio.h>#include <stdlib.h>void fun(int value1, int value2){ int count = 0; int num = 0; while (num<32...原创 2018-04-05 20:00:40 · 129 阅读 · 0 评论 -
输出一个整数的每一位。
#include<stdio.h>#include<stdlib.h>#pragma warning (disable:4996)int main(){ int n; printf("请输入整数:"); scanf("%d", &n); while (n) { printf("%d\n", n%10); n = n / 10; } system...原创 2018-04-05 19:31:21 · 277 阅读 · 0 评论 -
关于递归
一、.递归方式实现打印一个整数的每一位 在这里printf有两种方法输出:1.符合条件输出2.不符合,跳出上层递归输出注意:printf是右向左依次输出#include<stdio.h>#include<stdlib.h>void print(int n){ if (n > 9) { print(n / 10); } printf("%d ", n ...原创 2018-05-11 17:24:37 · 314 阅读 · 0 评论 -
函数的调用(栈帧)
一、栈的结构:出栈(pop)、入栈(push)都是从一端进行的,因此栈遵循先入后出的规则二、寄存器:1.通用寄存器:EAX、EBX、ECX、EDX 2.EIP(PC):程序计数器(指向当前正在执行指令的下一条指令的地址) 3.ESP(栈顶)、EBP(栈底):esp和ebp之间就是一个函数的栈帧,这个栈帧的大小就是通过对函数内定义的临时变量所需要的空...原创 2018-05-11 14:59:04 · 306 阅读 · 0 评论 -
递归和非递归
一、递归和非递归分别实现求第n个斐波那契数斐波那契数:亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契...原创 2018-05-09 21:32:37 · 389 阅读 · 0 评论 -
判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0. 首先我们先了解两个函数:1.strcat用于将两个char类型链接的函数。函数原型:extern char *strcat(char *dest,char *src);参数:dest 目标数组指针src 源字符串指针返回值:返回指向dest的指针函数功能:把src所指字符串添加到des...原创 2018-05-09 20:17:20 · 251 阅读 · 0 评论 -
实现一个函数,可以左旋字符串中的k个字符。
例如:ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法一:我们用指针来实现,具体程序及解释如下:#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>#include <string.h>void left_remove(c...原创 2018-05-08 19:38:13 · 161 阅读 · 0 评论 -
深剖内存中的存储
一、我们先看看地址空间:接着我们在linux中写一段代码 来验证上面的存储方式:运行结果:我们可以看到地址是递增的 下来我们再验证堆区和栈区是相对而生:这是一段代码:运行结果:我们可以看到堆区的地址是递增的,栈区是递减的。二、两个关键字:const、volatile我们知道被const修饰的变量不可以被直接修改,可以通过指针的方式进行修改运行结果:可以看到第一次编译的结果为20,但是当我们对程...原创 2018-05-05 21:03:11 · 213 阅读 · 0 评论 -
有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N)
想法:首先我们如果利用循环逐个去找,时间复杂度就会等于0(n);接下来我们看到题目说是这个数组是从左到右递增,从上到下递增,利用行和列我们就会将问题变得简单。举个例子: 上述假若要找的数字大于右上角的数字那么我们就删除右上角数字所在的那一行。假若找不到打印not find,找到了就打印行列号程序如下:结果:...原创 2018-05-02 22:04:32 · 351 阅读 · 0 评论 -
一个整数数组中,使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
想法:先判断数组的第一位arr[i]是奇数还是偶数,若为奇数则接着判断第二位,若arr[i]为偶数就将其和最后一位arr[j]进行交换,然后 j--, i--再依次进行判断。下面我们来看看程序吧程序结果图:...原创 2018-05-01 13:23:27 · 935 阅读 · 0 评论 -
编写函数:unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。
思想:首先:让最高位放到最低位,我的想法是定义一个new_value=0,让value的最高位&1,若其结果为1,就放到new_value的最低位,若为0,则直接返回,以此类推。利用循环,将32位全部进行运算,最后放到new_value。就可以实现从左到右的翻转。程序结果:...原创 2018-04-30 17:46:16 · 243 阅读 · 0 评论 -
有一个字符数组的内容为student a am i,请你将数组的内容改为i am a student
要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。想法:首先我们将整个字符串进行逆置,接下来在对每个单词进行逆置。这里需要两个指针,首指针和尾指针来确定一个区域,对其区域里面的进行逆置。这里值得注意的是:最后一次跳出while循环时,对最后一个单词没有进行逆置。我们来看看代码:运行结果:...原创 2018-04-26 12:48:12 · 407 阅读 · 0 评论 -
一组数据中只有一个数字出现了一次,其他所有数字都成对出现,找出这个数字
思想:采用异或的方法,首先我们先来说一下异或运算,一个数连续两次异或用一个数还是它本身,比如:6(0110)^4(0100)=2(0010) ; 2(0010)^4(0100)=6(0110). 我们可以利用异或这一特性,只要数组中成对出现那么他们就会抵消,最后输出的值就是单出来的。程序运行结果:...原创 2018-04-25 22:06:31 · 332 阅读 · 0 评论 -
不使用(a+b)/2这种方式,求两个数的平均值
我们若采用:a+(b-a)/2这种方式,若一个数为负数就会出错,因此我们采用以下方法:我们采用位运算取出两个数相同的,在取出不同的数除以2,再将两者相加。取两个数相同的位,我们会想到采用按位&,取出两个数不同的我们会想到按位或int main(){ int a = 10; int b = 20; printf("avg:%d\n", (a&b) + ((a^b) >&...原创 2018-04-25 21:15:24 · 181 阅读 · 0 评论 -
写一个宏可以将一个数字的奇数位和偶数位交换。
思想:想要交换二进制的奇数位和偶数位,我们首先要去取出其奇数位和偶数位,再将其进行运算使得其奇数位和偶数位交换。那么我们来举例说明吧:例:我们将5(0101)的奇偶为交换得到的是10(1010.这就是将1、2位进行交换,3、4位进行交换,以此类推。先将其奇偶为提取出来,在进行交换。设数字为X:将(X) & (0x55555555)) << 1 :X按位与0x55555555之...原创 2018-04-25 20:33:48 · 240 阅读 · 0 评论 -
使用宏实现两个数中求较大值。
#define MAX(x,y) ((x)>(y)?(x):(y))int main(){ printf("%d\n", MAX(24, 89)); system("pause"); return 0;}原创 2018-04-25 17:42:55 · 812 阅读 · 0 评论 -
关于冒泡
数组在传参时应该注意:原创 2018-04-17 20:31:01 · 186 阅读 · 0 评论 -
写一个函数返回参数二进制中 1 的个数
比如: 15 0000 1111 4 个 1 我的想法:用右移位的最后一位与1按位于“”&“”,看结果是否为1。一、#include<stdio.h>#include<stdlib.h>int count_one_bits(unsigned int n){ int i; int count = 0; for (i = 0; i < 32; i++); { i...原创 2018-04-05 18:50:40 · 130 阅读 · 0 评论 -
二分法查找
一、#include<stdio.h>#include<stdlib.h>int main(){ int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int left = 0; int right = sizeof(arr) / sizeof(arr[0])-1; int key = 7; int mid = 0; while (l...原创 2018-04-02 17:03:47 · 221 阅读 · 0 评论 -
一些c语言的练习(找不同的两个数字,喝汽水)
思想:1.首先进行整体异或,那么得出的结果为两个不同数字异或的结果2.这两个不同数字至少会有一位是不同的,我们设立一个flag从最低位进行寻找,找出第一次出现的不同位的位置3.我们通过flag找出的那个不同位来对整个数组进行分组:一组为flag位为0的,另一位为flag位为1的4.我们对两组分别进行异或,即可找到下面我们来看看具体的代码:void find_data(int arr[], int ...原创 2018-05-15 20:20:23 · 837 阅读 · 0 评论 -
指针(1)
一、指针:1. 指针就是地址,通过它能够找到以它为地址的内存单元,指针变量是变量,变量里面放的是指针。2. 指针是存放地址才出现的,指针是为了标示一块地址空间3. 指针变量让地址有地方存放,指针让内存的访问更加方便4. 在32位机器上,指针变量的大小为4个字节、在64位机器上,指针变量的大小为8个字节5.指针的类型:type+*的方式6.指针的+-:(指针+1,看起来是+1,其实是+其所指类型的大...原创 2018-05-16 18:37:15 · 226 阅读 · 0 评论 -
可变参数列表源码的剖析
我们用main函数来说明。首先我们得知道main函数是有参数的,那么我们就来看看main函数的原型:int main(int argc,int *argv[],char *envp[]){ program-statements}那么我们看到这里有三个参数第一个参数:argc是个整形参数,表示命令行参数的个数(含第一个参数)第二个参数:argv是个字符指针数组,每个元素是一个字符指针,指向一个字...原创 2018-05-16 21:08:10 · 260 阅读 · 0 评论 -
两个推理题
一、5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三; E选手说:我第四,A第一; 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。 首先的判断条件为名次,名次为1—5在通过题目中给的条件进行判断,由于没人说的话只有一半是对的,那么我们让他们一真一假 || 上一假一真 来使...原创 2018-05-17 21:19:11 · 495 阅读 · 0 评论 -
模拟实现strncpy、strncat、strncmp
1..模拟实现strncpy 原型声明:char *strncpy( char *strDest, const char *strSource, size_t count );功能:把strSource所指向的字符串中以strDest地址开始的前n个字节复制到strDest所指的数组中,并返回strDest。这里值得注意的是:此拷贝并不会将'\0'拷到目标字符串中接下来我们自己实现此函数:char...原创 2018-05-22 19:32:57 · 272 阅读 · 0 评论 -
指针(2)
之前我们已经知道了指针名代表整个数组的两种情况:1、sizeof(数组名),这里的数组名代表整个数组2、&数组名,这里的数组名代表整个数组原创 2018-05-22 21:07:53 · 169 阅读 · 0 评论