C语言
不吃玉米尖尖
正在疯狂输入....
展开
-
【C语言】C语言中static关键字的作用
在C语言中static的作用如下1.在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。2.、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。3.static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存...原创 2019-04-11 13:13:55 · 468 阅读 · 0 评论 -
【C语言】不使用(a+b)/2这种方式,求两个数的平均值
这道题如果不用(a+b)/ 2这种方式的话,就需要考虑与运算、异或运算、位运算来解决。以下是三种方式。#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<math.h>int main(){ int a = 10; int b =...原创 2018-07-31 09:50:12 · 307 阅读 · 0 评论 -
【C语言】调整数组使奇数全部都位于偶数前面。
这道题目呢是这样的:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。首先定义一个函数,函数的功能就是将数组的奇数全部放在前面,偶数全部放在后面。那么要将奇数全部放在数组前面,偶数全部放在数组的后面,就肯定需要两个指针,一个从左边开始找偶数,一个从右边开始找奇数,找到了就交换,直到所有的元素都被交换完毕。那么我们怎么...原创 2018-07-31 09:49:23 · 2665 阅读 · 0 评论 -
【C语言】编写函数: unsigned int reverse_bit(unsigned int value) 这个函数的返回值是value的二进制位模式从左到右翻转后的值
这道题我们用25来举个栗子。在32位机器上25这个值包含下列各位:00000000000000000000000000011001 翻转后:(2550136832)10011000000000000000000000000000 程序结果返回:2550136832这段代码的核心就在于实现函数的过程中,循环拿出二进制序列的每一位,并把它们整个翻转过来。那我们只需用value循环向右移动,每移...原创 2018-07-25 09:52:16 · 475 阅读 · 0 评论 -
【C语言】写一个宏可以将一个数的奇数位与偶数位进行交换
这道题我们用数字11来举个栗子。 它的二进制可以写为00000000 00000000 00000000 00001011可以分为以下几步来解决:①只保留奇数位,奇数位&1,偶数位&0即00000000 00000000 00000000 00001011&01010101 01010101 01010101 01010101--->00000000...原创 2018-07-24 11:18:04 · 580 阅读 · 0 评论 -
【C语言】深度剖析函数调用过程(栈帧)
今天写一下函数的调用过程。先看一个简单的代码:#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>int Add(int x, int y){ int z = 0; z = x + y; return z;}int main(){ int a = 10;...原创 2018-07-23 23:49:55 · 359 阅读 · 0 评论 -
【C语言】宏与函数的对比
有时候解决一个问题会有很多种方法,宏和函数就是一个很好的例子。但是二者到底谁更胜一筹呢?我们来对比一下。 属性 #define 宏 函数 代码长度 每次使用时,宏代码都被插入到程序中,除非是很小的宏,否则程序的代码将大幅度增长 函数代码只出现在一个地方,每次使用这个函数时,都调用那...原创 2018-07-21 18:40:32 · 388 阅读 · 0 评论 -
【C语言】创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。
这个题的思路就在于在main函数里调用自己创建好的函数。函数模块分别实现各个功能。代码如下 :#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>void init(int a[], int sz){ int i = 0; for (i = 0; i < sz...原创 2018-07-21 17:26:23 · 353 阅读 · 0 评论 -
C语言:接收一个整形值。按照顺序打印它的每一位
这道题乍一看很简单,直接用这个数做循环的 ( x / 10 )%10 再用printf输出不就得了。其实不是的,这里要求的是按顺序输出每一位!那就意味着要从左往右依次输出每一位,而不是一下子输出全部。那么我们可以用函数的递归调用来解决。即大事化小。此时我们定义一个print函数。例如依次打印 1234 的每一位。那我们要先打印 1 然后是 2 , 3 , 4 。那我们怎么得到 ...原创 2018-07-20 17:47:31 · 1082 阅读 · 0 评论 -
C语言:编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出。
在这一题里,我们用getchar接收字符,若getchar接收的字符不等于EOF,则循环继续,这样就可以不断地接收字符了。判断大小写字符、数字字符和其他字符采用if判断。例如:①输入小写字符则输出相对应的大写字符 若输入小写字符则给该字符减去32,即可转换为相应的大写字符 ②输入大写字符则输出相对应的小写字符 ...原创 2018-07-20 16:32:43 · 373 阅读 · 0 评论 -
【C语言】关于C语言操作符,你了解多少?
今天来总结一下常见的操作标识符。一、算术操作符。首先了解一下算术标识符都有哪些:+、-、*、/、%。这些运算符都是最基础的操作符,就不多说了。注意1.“%”只能用于整型。并且两个操作数必须为整数,返回的是整除之后的余数。2.“/”如果两个数都是整数,则执行整数除法,只要有浮点数,就执行浮点数除法。二、移位操作符。移位操作符有两种:>>(右移操作符)、&l...原创 2018-06-10 21:08:03 · 259 阅读 · 0 评论 -
【C语言】模拟实现 strlen 函数写一个 my_strlen 函数的常规写法与递归写法
我们知道 strlen 函数是求字符串长度的,当一个字符串传给这个函数的时候,他就可以计算出这个字符串的长度。一个字符串的结束标志是 ‘\0’,所以要模拟实现这个函数并不算难。我们只需要创建一个计数器,和一个指针变量,一开始指针变量指向字符串的开始,while循环走起来指针变量向后走,每走一个,指针变量指向的字符串+1,计数器也+1,那么当指针变量一直走到最后,加到了‘\0’,就是说这个字...原创 2018-08-01 10:47:56 · 789 阅读 · 0 评论 -
【C语言】递归和非递归分别实现求第n个斐波那契数
在写代码之前我们需要知道菲波那切数列是什么?它其实是这样的数列:1 1 2 3 5 8 13 21 44 65 109 ..........也就是说,它的前两项是1,后面的每一项都是它前两项数列之和。那么要实现这个代码其实有两种方法,一种是递归,一种是常规写法。我们先介绍一下常规写法,找到了它的规律,那么我们可以将整个数列前两项定义为a=1,b=1,定义第三项c=a+b。然后定义n=0,就是你...原创 2018-08-02 20:26:34 · 625 阅读 · 0 评论 -
【C语言】写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
这道题依然是要用到函数递归,之前写过一个类似的题,是要按顺序打印一个整数的每一位,这道题可以说是那个题目的变形。感兴趣的可以先看一下这篇文章。https://blog.csdn.net/Miss_Monster/article/details/81135344那么这道题是要将一个整数的每一位相加。我们考虑两种情况:①如果这个数 n < 9,代表它是个位数,那么它的每一位之和就是它本...原创 2018-08-03 17:13:40 · 1010 阅读 · 0 评论 -
【C语言】malloc函数进行内存分配是在什么阶段?
在说这个之前,我们要先明白:程序占用三种类型的内存:静态内存、栈内存、堆内存;静态内存:用来保存局部static对象、类static数据成员以及定义在任何函数之外的变量 。栈内存:用来保存定义在函数内的非static对象。分配在静态内存或栈内存中的对象由编译器自动创建和销毁。对于栈对象,仅在其定义的程序块运行时才存在;static对象在使用之前分配,在程序结束时销...原创 2019-03-25 15:41:04 · 1886 阅读 · 0 评论 -
【C语言】关于static关键字修饰的变量
变量可以被static 修饰,意义有发生变化吗?下面我们举个栗子来说明:(1)变量不加 static 修饰#include <stdio.h>void test(){ int num = 0; num++; printf("%d ", num);}int main(){ int i = 0; for (i = 0; ...原创 2019-03-21 17:43:09 · 1310 阅读 · 0 评论 -
空指针引用故障(空指针解引用)
C语言中的指针机制使得它灵活高效,但由于指针操作不当产生的动态内存错误也有很多,比如内存泄漏(Memory Leakage)、内存的重复释放、空指针解引用(NullPointer Dereference)。其中空指针引用故障,也叫空指针解引用是一类普遍存在的内存故障,是程序设计语言中一类常见的动态内存错误。指针变量可以指向堆地址、静态变量和空地址单元 。当指针指向无效内存地址时对其引用,有可能...原创 2019-01-09 18:52:45 · 6286 阅读 · 0 评论 -
【C语言】深度剖析可变参数列表源码
C语言中可变参数是一个比较有意思的实现,通过将函数实现为可变参数的形式,可以使得函数接收1个以上的任意多个参数。我们先来举个栗子:实现一个函数可以求任意个参数的平均值。#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include<stdarg.h>int average(int n, ...)...原创 2018-07-27 08:08:04 · 357 阅读 · 0 评论 -
【C语言】模拟实现strcpy strcat strstr strcmp
模拟实现strcpy(字符串拷贝)这道题,是将原字符串的内容拷贝到目标字符串中去,一个字符一个字符的拷贝直到遇到 ‘\0’ ,将它也拷贝过去后停止。 #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<assert.h>void my_strcpy(char*dest, const char...原创 2018-09-05 16:30:11 · 238 阅读 · 0 评论 -
【C语言】写冒泡排序可以排序多个字符串
这道题是冒泡排序的简单延伸,代码如下: #define _CRT_SECURE_NO_WARNINGS 1#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<math.h>void bubble_sort(char **a, int sz){...原创 2018-08-19 16:53:52 · 679 阅读 · 0 评论 -
【C语言】main函数参数解析及简易计算器的实现。
具体题目:使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。例如:命令行参数输入:test.exe -a 1 2 执行1+2输出3 这道题主要用到的是main函数的参数这部分内容。main函数既然是参数应该也是存在参数的...原创 2018-08-12 15:11:39 · 858 阅读 · 0 评论 -
【C语言】喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水。编程实现。
这是一个公司的面试题中的益智题。用数学算的话我们很容易就知道可以喝 2n-1 瓶,但是这道题要编程实现。其实也不难。一开始 1 元钱可以喝 1 瓶汽水。那么我们用 total 记录喝的瓶数,用 empty 记录空瓶子数。我们一开始有 20 元。那么 total = money = 20 ,empty = money =20 。接下来,两个空瓶子可以换一瓶汽水。那么此时 total = emp...原创 2018-08-10 15:55:53 · 3609 阅读 · 1 评论 -
【C语言】一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 找出这两个数字,编程实现。
一看到这道题,我想到了之前学习过的异或。我们知道两个相同的数字异或的结果是 0,因为在计算机中,异或运算是按照二进制位来运算的,相同为 0 ,相异为 1 。任何数与 0 异或都等于它自己。既然我们要找出来一组数中不同的两个数字,也可以采用这种方法。但是这次不是直接异或,而是要分组。将数组的数据分成两组,把这两个不一样的数分到两个组里,这样最后的异或结果就是这两个数了。那么具体怎么做呢?第...原创 2018-08-09 15:27:23 · 887 阅读 · 0 评论 -
【C语言】编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中 的字符串操作函数。
这道题要求逆序字符串,写一个递归函数实现这个功能并且不能使用库函数。那么可以这样考虑例如:“abcdefg” ,既然要递归实现,那么可以先逆序 a 和 g ,变成 “gbcdefa” ,然后再逐层递归。那么对于交换首字符和最后一个字符,我们依然可以用指针 str 来表示,要知道最后一个字符,就得知道字符串长度,字符串长度-1就是我们想要的最后一个字符的数组下标。但是题目不允许用库函数,所...原创 2018-08-06 15:34:15 · 800 阅读 · 2 评论 -
【C语言】打印100-200之间的素数;输出乘法口诀表;判断1000-2000之间的闰年
这个周找了三道题练习一下简单的循环以及循环嵌套。上传记录一下。 1. 打印100~200 之间的素数。以下是我原来的错误代码,运行后就像图示,没有结果。感觉是我思路不清晰。#include<stdio.h>int main(){ int i, j; for (i = 100; i <= 200; i++) { for (j = 2; ...原创 2018-05-27 17:36:05 · 481 阅读 · 0 评论 -
【C语言】有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student" 要求: 不能使用库函数。只能开辟有
这道题的关键就在于逆置。解题分为两个步骤:①单词逆置 ②整体逆置 第一步整体逆置,使得字符串变为“i ma a tneduts” ;第二步将每个单词逆置使得字符串变为最终我们想要的:“i am a student” 。先来实现第一个步骤 ——整体逆置。此时则需要再定义 一个reverse 函数,完成整体逆置。在这里思路整体逆置其实非常简单。左右两边两个指针变量同时往里缩,然后彼此交换,直...原创 2018-07-26 08:36:55 · 291 阅读 · 0 评论 -
NULL,0,\0,'0'的区别
我们在学习过程中经常遇到NULL,0,\0,'0',常常疑惑它们是什么关系,下面就来分析一下:1、NULL: NULL 即空指针,不过在C和C++中并不一样。在VS 2013的库文件string.h中可以看到定义:1 /* Define NULL pointer value */2 #ifndef NULL3 #ifdef __cplusplus4 #define NULL ...原创 2019-01-05 14:38:21 · 2973 阅读 · 0 评论 -
可见字符&不可见字符
国际上普遍采用ASCII编码(American Standard Code for Information Interchange,美国信息交换标准代码)作为通用的字符编码。 在ASCII码表中,算上空格, 从32到126共95个是可见字符,不算上空格则为94个。也叫打印字符,即可以被直接打印出来的字符。剩下的则是不可见字符,即不可以被直接打印出来。 ...原创 2019-01-05 14:11:05 · 20222 阅读 · 2 评论 -
【C语言】实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表。
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>void print_table(int line){ int i = 0; for (i = 1; i <= line; i++) { int j = 0; for (j = 1; j <= i; j++)...原创 2018-06-19 22:11:45 · 493 阅读 · 0 评论 -
【C语言】实现一个【函数】判断year是不是闰年(1000-2000)
用函数来实现判断,是提前将判断过程写成一个函数,然后在下边的程序中直接调用就可以了。#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int leap_year(int year){ if ((year % 4 == 0 && year / 100 != 0) ...原创 2018-06-16 16:53:46 · 2090 阅读 · 0 评论 -
【C语言】编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。三次均错,则提示退出程序。
模拟输入密码,最多输入三次,肯定是要用到循环的。当输入正确时提示“登录成功”,否则提示“密码错误”。按照要求,编写如下代码:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>int main(){ int i; char *p = { "123456" }; int a...原创 2018-06-11 17:37:54 · 1462 阅读 · 0 评论 -
【C语言】玩一个猜数字小游戏吧~
既然是猜数字,就说明会用到循环,因为不可能一下子就猜对,猜错了继续猜,直到猜对了为止!这里选用while循环,当猜对了时候,break跳出!#define _CRT_SECURE_NO_WARNINGS#include <Windows.h>#include <string.h>#include <stdio.h>int main(){ int...原创 2018-06-08 16:16:18 · 338 阅读 · 0 评论 -
【C语言】在屏幕上输入菱形图案
这是一道经典的C语言练习题,以下是我自己写的代码:#include <stdio.h>Int main(){ Int i, j, k,m,n; for (i = 1; i <= 7; i++) { for (k = 1; k <= 7-i; k++) printf(" "); for (j = 1; j <= (2*i)-1; j++...原创 2018-06-06 16:49:38 · 2608 阅读 · 0 评论 -
【C语言】求0-999之间的水仙花数
“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3?,则153是一个“水仙花数”。水仙花数也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,是指一N位数,其各个数位之N次方和等于该数。 既然是求0-999之间的水仙花数,那意思就是求0-999之间的所有1位数、2位数、3位数的水仙花数。 根据定义,1位数的水仙花数每...原创 2018-06-03 15:49:46 · 2751 阅读 · 2 评论 -
【C语言】求十个整数的最大值;将三个数从大到小输出;Swap函数;
1.求10 个整数中最大值。#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>int main(){ int a[10]; int max; int i=0; printf("请输入十个整数:"); for (i = 0; i < 10; i++)//这里的循...原创 2018-05-29 23:12:43 · 1133 阅读 · 0 评论 -
【C语言】交换 两个整形变量的值的【三】种方法
这里整理一下三种方法交换两个整形变量的值的问题。其实我自己仅仅能想到前两个而已。最后一个方法是学习到的! 对于交换两个整形变量的值的问题,我一开始想得很简单,就是创建一个临时变量进行交换值的操作。#include <stdio.h>int main() { int a = 3; int b = 4; int c = 0; printf("a=%d ...原创 2018-05-28 18:05:46 · 963 阅读 · 0 评论 -
函数的定义与声明的区别
C语言编译系统是由上往下编译的.一般被调函数放在主调函数后面的话,前面就该有声明.不然C由上往下的编译系统将无法识别。正如变量必须先声明后使用一样,函数也必须在被调用之前先声明,否则无法调用!函数的声明可以与定义分离,要注意的是一个函数只能被定义一次,但可以声明多次。函数声明由函数返回类型、函数名和形参列表组成。形参列表必须包括形参类型,但是不必对形参命名。这三个元素被称为函数原型,函数原型描...原创 2019-01-06 15:42:38 · 27644 阅读 · 7 评论 -
【C语言】C语言的那些操作符
一、算数运算符 +加 -减 *乘 /除 %取模1.除法运算:若两个操作数都为整数则进行整数除法,若两个操作数有一个为浮点数则进行浮点数除法。2.取模操作符的两个操作数都必须为整数。二、移位操作符 <<左移 >>右移1.<<左移:移动二进制序列,向左移动,左边遗弃,右边补0...原创 2019-01-07 18:25:14 · 179 阅读 · 5 评论 -
【C语言】将数组A中的内容和数组B中的内容进行交换。(两个数组一样大)
在此题中,我们要利用for循环以及数组下标的引用,将两个数组中下标相同的元素进行互换,即可完成数组A中的内容和数组B中的内容交换。#include <stdio.h>#include <stdlib.h>int main(){ int arr1[] = { 1, 2, 3, 4, 5 }; int arr2[] = { 6, 7, 8, 9, 10 };...原创 2019-01-07 18:27:13 · 467 阅读 · 0 评论 -
【C语言】代码实现杨氏矩阵中查找一个元素,时间复杂度小于O(N)
这个题,首先要直到杨氏矩阵是什么。杨氏矩阵就是例如下面这样每一行每一列都是递增的矩阵。而在C语言中,我们可以把它定义为一个二维数组。只要把二维数组中每个值和目标值相比较,就能知道能不能找到这个元素。1 2 34 5 67 8 9然而题目还要求时间复杂度小于O(N),所以我们就不能一个一个的对比。那我们可以发现,右上角和左下角的这两个数是最高效率的查找开始点。就用...原创 2018-07-28 12:27:21 · 509 阅读 · 0 评论
分享