C语言
文章平均质量分 57
小威威__
这个作者很懒,什么都没留下…
展开
-
Linux编写C程序指导
Linux编写C程序指导 BY 小威威标签: Linux ubuntu 本文章以ubuntu为例,仅供初学者参考。Linux编写C程序指导为什么要写这篇文章Linux 终端使用有关编写C语言的指令使用终端编写C语言1.为什么要写这篇文章?我是今年的大一新生,在学校上C语言实验课之前,我习惯于用Xcode、Dev C++编写原创 2015-10-16 21:17:17 · 845 阅读 · 1 评论 -
C语言:指针类型强制性转换
C语言:指针类型强制性转换标签:C语言 指针 强制性转换by 小威威1.引入我们知道,每个变量都有对应的地址,地址的距离即为地址之差。然而,地址类型不同,也就不能进行减法运算。假如,我现在要求double类型的变量a与int类型的变量b之间地址的距离(以字节作为单位)那么,该怎样实现这一操作呢?首先,我们知道,地址就是指针,指针就是地址,地址之差即为指针之差,因此不难想到,我们可以将指针转换成同一类原创 2015-12-17 20:35:10 · 2839 阅读 · 0 评论 -
C语言:printf的执行顺序
C语言:printf的执行顺序标签:C语言 printf 执行顺序by 小威威先上一下代码:# include <stdio.h>int main(void) { int a = 21, b = 11; printf("%d\n", --a+b, --b+a); return 0;}输出结果是30而不是31. 首先,我们能够肯定的是输出的是第一个参数,但是为什么不是31原创 2016-01-21 21:22:52 · 5419 阅读 · 2 评论 -
C语言:实现数据的四舍五入
C语言:实现数据的四舍五入标签:C语言 数据 四舍五入by 小威威今天我要介绍在C语言中实现数据四舍五入的算法。我们知道,C语言中去除小数位采用的方法就是强制性转化成整型类型。那么假如我们要对一个小数保留三个小数位而第四个小数位按照四舍五入的规则进行,该怎样实现呢?很简单,我们将数字扩大1000倍,使得第四位小数称为新数字的第一位,然后我们可以给它加上0.5后再进行强制性转化。加0.5的原因就是:假原创 2016-01-21 20:19:13 · 8012 阅读 · 0 评论 -
C语言:快速排序
C语言:快速排序标签: C语言 快速排序by 小威威快速排序是运用二分思想进行排序的。在这里我就不讲解了,因为我找到了一篇写的很好的文章,现在分享给大家 快速排序。下面直接上我的代码:# include <stdio.h># include <stdlib.h>void quicksort(int *pArr, int pbig, int psmall);int main(void) {原创 2015-12-21 23:56:00 · 1033 阅读 · 0 评论 -
C语言:巧用杨辉三角求二项展开式的系数
巧用杨辉三角求二项展开式的系数标签: C语言 杨辉三角 二项式展开式by 小威威1.引入我们知道,求二项式展开式系数可根据牛顿的二项式定理,即利用组合数求系数。其实,二项式展开式系数其实也是满足杨辉三角的。在高中的时候,我们一般用组合数求二项式展开式系数,但是对于编程,这一方法就显得十分勉强。因为当n较大时,n的阶乘非常大,很难有数据类型能够存储。虽然用杨辉三角的方法也会出现类似情况,但是杨辉三角原创 2016-01-06 23:45:08 · 6602 阅读 · 0 评论 -
C语言:利用排序二叉树进行排序
C语言:利用排序二叉树进行排序标签: C语言 二叉树 排序by 小威威1.引入排序二叉树属于二叉树的一种,其主要特色在于构建二叉树与输出二叉树。二叉树的子树很有特点:左子树小于根结点,根结点小于右子树。通过排序二叉树,我们可以了解二叉树三种遍历的其中两种:即是中序遍历和后序遍历。中序遍历:中序遍历就是先读取左子树,再读取根结点,最后再读取右子树。 后序遍历:后序遍历就是先读取左子树,再读取右子原创 2016-01-07 00:27:31 · 7184 阅读 · 0 评论 -
C语言:关于字符串的编程题
题目如下: You’ve gathered some e-mail addresses from a variety of sources, and you want to send out a mass mailing to all of the addresses. However, you don’t want to send out duplicate messages. You need原创 2016-01-07 00:40:06 · 3787 阅读 · 0 评论 -
C语言:选择排序
C语言:选择排序标签: C语言 选择排序by 小威威1.选择排序是什么?选择排序就是选择符合要求的数(一般是最大值或最小值),放到某个指定的位置。通过多次选择排位,进而完成数组内元素的排序。2.选择排序与冒泡排序的联系选择排序是冒泡排序的改进版,缩短了一定的时间。但是二者的原理都是一样的。这两种排序呢都是通过多轮操作实现排序的,每一轮都找出一个最大值或者最小值。冒泡排序是通过两两比较,两两交换实现原创 2015-12-22 22:18:58 · 919 阅读 · 0 评论 -
C语言:从文本文件中读取输入数据
C语言:从文本文件中读取输入数据标签: C语言 文本文件 输入数据by 小威威我们经常通过输入测试数据来调试我们程序:一般都是直接运行程序然后再人为的输入。这样做其实是非常笨的,尤其是在测试数据较多的情况下。因此,我们就想能不能将测试数据进行复制直接输入到程序中?显然是有这种方法的。首先,我们将输入数据复制粘贴到一个新的txt文档中,然后通过程序读取文本文档中的测试数据来实现数据的输入。这里就涉及到原创 2016-01-07 16:01:15 · 43403 阅读 · 2 评论 -
C语言:从文本文件中读取输入数据(升级版)
C语言:从文本文件中读取输入数据(升级版)标签: 文本文件 cat 管道by 小威威我的上一篇博文讲到 C语言:从文本文件中读取输入数据,其实我感觉还是挺麻烦的,其实利用管道就可以实现这一功能,何必再去用I/O输入呢?假如我的文本文件是1.txt,a.out是代码的可执行文件,我要讲文本文件中的数据输入到作为输入的数据输到程序中,我只需用下面的命令行:cat 1.txt | ./a.out记原创 2016-01-08 13:01:51 · 1488 阅读 · 0 评论 -
递归:运用递归思想解题
递归:运用递归思想解题标签:C语言 递归by 小威威递归思想,就是通过不断调用自己直到满足某一条件为止。对于递归的定义,我在这里就不在阐述了,书上都写的很明白,最典型的例子就是“从前山上有一个老和尚和一个小和尚…”。下面我就直接上题目,通过题目来进一步了解递归,学习递归。典例1:给出一个数组,长度为n,编号为0~(n-1),接下来n行,第i行描述关于第i个位置的信息。每行先是一个数k表示从位置i原创 2015-12-07 12:14:42 · 1057 阅读 · 0 评论 -
C语言:折半插入排序与二分查找
C语言:折半插入排序与二分查找标签:C语言 插入排序 二分法by 小威威这部分内容我也是自学的,在网上找资料的时候觉得别人写的文章很难理解,花了我不少时间。所以我写了这一篇博文,希望能帮助你们更好理解二分插入排序的思想。毕竟这篇文章是入门级的~1.什么是折半插入排序?折半插入排序(binary insertion sort)是对插入排序算法的一种改进,所谓排序算法过程,就是不断的依次将元素插原创 2015-12-08 14:18:57 · 5331 阅读 · 0 评论 -
转载:C/C++ time.h 的用法
C/C++ time.h 的用法本文选自C/C++中的日期和时间 我个人觉得这篇文章写的不错就给转了过来!摘要: 本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。关键字:UTC(世界标准时间),Calenda转载 2016-02-20 11:18:23 · 1941 阅读 · 0 评论 -
C/C++: 预处理指令
C/C++: 预处理指令标签: C/C++ 预处理指令by 小威威今天我来简要地总结一下预处理指令。众所周知,预处理指令可用于文件包含,宏定义与条件编译。 文件包含的关键字就是: #include 宏定义的关键字是: #define 条件编译的关键字是: #if #ifdef #ifndef #else #endif 对于文件包含,我觉得我就不用多解释了,相信大家非常熟悉。宏定义,也就是#原创 2016-02-23 22:06:12 · 660 阅读 · 0 评论 -
C/C++: short , int , long , long long数据类型选用
C/C++: short , int , long , long long数据类型选用标签: C/C++ 数据类型by 小威威在C++中,编译器对int类型数据的执行效率最高。一般在符合int条件的情况下优先选择int。 那么,选择数据类型的条件是什么呢? 我认为,大于30000的数字应当使用long类型,超过20亿的数字应当使用long long类型。原因如下:在32位的系统中:`s原创 2016-02-29 00:40:37 · 4758 阅读 · 1 评论 -
操作系统:进程和进程通信
实验目的: 加深对进程概念的理解,明确进程和程序的区别。进一步认识并发执行的实质。了解信号处理认识进程间通信(IPC):进程间共享内存实现shell:了解程序运行1.实验一:进程的创建实验程序一:int main(void) { int pid1 = fork(); printf("**1**\n"); int psid2 = fork(); printf(原创 2017-05-02 15:10:37 · 2120 阅读 · 1 评论 -
C语言:生产者-消费者问题、读者-写者问题
1.生产者-消费者问题:题目要求 • 在 6.6.1 小节中,使用了三个信号量: empty (以记录有多少空位)、full (以记录有多少满位)以及 mutex (二进制信号量或互斥信号量,以保 护对缓冲插入与删除的操作)。对于本项目, empty 与 full 将采用标 准计数信号量,而 mutex 将采用二进制信号量。生产者与消费者作 为独立线程,在 empty、full、mut原创 2017-06-19 11:25:48 · 7867 阅读 · 4 评论 -
易错点:循环临界条件的设置(素数版)
易错点:循环临界条件的设置(素数版)标签:C语言 素数 循环 临界by 小威威1.反思昨晚找了一道很简单的题练手,但没想到居然发现了自己的一个漏洞。对于素数,我通常用最普通的方法,就是判断数字N除以2~N-1是否出现整除情况。我知道有更好的算法,也懂它的原理,但就没有把它打一遍,因为我以为我会,我想如果有需要的话就再改进自己的代码。恰好昨晚用我那种最普通的方法题目总是超时,我便我按照我当时的模糊记忆原创 2015-11-30 09:06:54 · 743 阅读 · 0 评论 -
C语言:定义指向二维数组的指针变量
C语言:定义指向二维数组的指针变量标签: C语言 二维数组 指针 by 小威威1.引入我们知道,要在函数中处理数组,一般要给函数传递指针。那么,对于一维int数组a[10],我们可以定义一个int *类型的指针变量p指向该数组。为什么这样定义?(按照我下面的理解方式有利于理解二维数组指针的定义)首先我们可以把这个一维数组中的10个元素当作10个数组,每个数组都只有一个元素,即指针在每一次移动,原创 2015-12-17 21:14:03 · 35037 阅读 · 4 评论 -
讲解:sicily 1147.谁拿了最多奖学金
讲解:sicily 1147.谁拿了最多奖学金标签:C语言 sicily 结构体by 小威威在新生练手题中,”谁拿了奖学金这道题”的反应比较强烈。因为我之前没有做(挺后悔的),所以今天就去这道题给做了。发现难度倒是没有,就是涉及到了结构体等知识点,还有一些小细节。下面就给大家讲解一下这道题:1147 谁拿了最多奖学金ConstraintsTime Limit: 1 secs, Memory Li原创 2015-11-30 15:54:45 · 661 阅读 · 0 评论 -
Using C-style cast. Use reinterpret_cast<int*>(…) instead [readability/casting] [4]
2015.10.18 google style 报错标签:谷歌风格 C语言 by 小威威目录1018 google style 报错原创 2015-10-18 21:35:14 · 3914 阅读 · 0 评论 -
Runtime Error in C
Run time error in C标签:C语言 RuntimeError目录Run time error in CRun time error 的含义举例子总结1.Run time error 的含义-Run time error 便是指程序运行过程中崩溃了 -导致崩溃的原因有很多: 1)除数为0; 2)数组越界; 3)指针越界; 4)使用已经释放的空间; 5)数组定义过大,占用原创 2015-10-19 07:52:52 · 6644 阅读 · 0 评论 -
入门:链表的基本操作
入门:链表的基本操作标签:C语言 链表By 小威威1.写这篇博文的原因C语言有三大重要部分:流程控制、函数、指针。 对于指针,单单了解它的简单应用是不够的,最重要的还是学习链表。许多参考书对链表的基本操作的概括还是不大完整的,所以在此通过这篇博文介绍链表的几种常用操作,以帮助初学者入门链表。2.链表的基本操作主要有哪一些1)链表的建立; 2)链表的输出; 3)链表结点的插入; 4)链表结点原创 2015-11-05 00:15:02 · 11353 阅读 · 5 评论 -
C语言的编程机制
C语言的编程机制标签:C语言 编译原理by 小威威学习C语言,首先我们要大致了解一下由C语言形成可执行文件的大致流程: 编辑—->预处理—>编译—>链接—>加载1.编辑、预处理、加载1) 编辑编辑是通过编辑器,实现C语言代码的编写,即编辑器提供了编写C语言代码的平台;2) 预处理预处理一般有三个作用:宏定义,文件包含,条件编译。 注:I.宏定义简单的来说就是”#define …”原创 2015-11-06 10:35:59 · 4730 阅读 · 0 评论 -
经典错误:插入for循环后程序无法运行
经典错误:插入for循环后程序无法运行标签:C语言 死循环by 小威威本文的目的主要是为大家提供查找问题的思路。 前几日我写了一个程序:# include <stdio.h>int main(void) { int N, x, y, m = 0, n = 0, i, h = 0, a[50] = {0}; scanf("%d%d%d", &N, &x, &y); prin原创 2015-11-06 10:51:54 · 3962 阅读 · 0 评论 -
C语言中运算符的结合性
对于运算符的结合性,我找到了一篇非常好的文章,推荐给大家~原文地址:http://blog.chinaunix.net/uid-1924596-id-3049989.html----------------------------------------------------在标准C语言的文档里,对操作符的结合性并没有做出非常清楚的解释。一个满分的回答是:它是仲裁者,在几转载 2015-10-22 19:04:25 · 1927 阅读 · 1 评论 -
经典错误:二维数组与实际矩阵的差异所构成的易错点
经典错误:二维数组与实际矩阵的差异所构成的易错点标签:C语言 二维数组 矩阵by 小威威1.矩阵与二维数组的差异在线性代数的课程中,我们接触到了矩阵这一工具,不难发现它很类似于C语言中的二维数组。虽然我们在C语言中可以用二维数组表示矩阵,但是二者的微小差异仍需要我们注意,否则有可能会导致错误。那么,它们两者有何差异呢?很明显,由于数组的性质,二维数组有“0”行、“0”列,而矩阵没有。 即矩阵的原创 2015-11-09 14:38:23 · 1166 阅读 · 0 评论 -
对i++与++i的分析
对i++与++i的分析标签: C语言 ++i i++by 小威威1.纠结点(1)单独使用 i++与++i单独作为一个语句使用时,即i++;++i;二者是等价的,并没有什么争议,相当于语句i+=1;(2)赋值使用 首先,i++与++i有什么本质区别呢? *i++指先取出i,再进行i+=1操作; ++i指先进行i+=1,再取出i。*i++与++i赋值使用时,即a = i++;a = ++i原创 2015-11-12 22:15:24 · 520 阅读 · 0 评论 -
易错点:for循环中循环变量的更新所带来的问题
易错点:for循环中循环变量的更新所带来的问题标签:C语言 for循环 易错点by 小威威1.for循环的介绍for循环的格式如下: for (表达式1;表达式2;表达式3) 其中,表达式1指初始化表达式,表达式2指循环条件表达式,表达式3指循环变量更新表达式。表达式1的位置可为多个赋值表达式,各个表达式之间用逗号隔开,如:for (i = 0, j = 0; i < 100; i++) {原创 2015-11-16 01:00:18 · 4031 阅读 · 0 评论 -
巧妙用栈的思想解题
巧妙用栈的思想解题标签:C语言 栈 数组by 小威威这里我们就通过实例来了解如何运用栈的思想(不是用栈解题噢,是用栈的思想)实例:N couples are standing in a circle, numbered consecutively clockwise from 1 to 2N. Husband and wife do not always stand together. We rem原创 2015-11-16 09:59:21 · 1492 阅读 · 0 评论 -
C语言:sizeof导致的Memory access violation
C语言:sizeof导致内存非法访问标签:C语言 sizeof 内存非法访问by 小威威1. 理解 sizeof我们知道,sizeof是用于计算字节数。然而,sizeof虽然会返回变量或数据类型所占的字节数,但它并不是一个函数。在C语言中,sizeof是一个操作符,它是在编译时运行的,而不是在程序进行时再计算字节数。这一点十分重要,十分重要,十分重要。2.实例int *pArr1, *pArr原创 2015-12-09 22:03:44 · 1531 阅读 · 0 评论 -
C语言易错点:字符串的连接
C语言易错点:字符串的连接标签:C语言 字符串by 小威威利用字符数组对字符串的连接,有一点需要注意,不要忘了最后加’\0’,不要忘了在最后加’\0’,不要忘了在最后加’\0’。还有一个,字符数组的长度要记得包含’\0’噢。代码如下:char* join(char*a, int alength, char*b, int blength) { char *link; link = m原创 2015-12-09 22:15:13 · 745 阅读 · 0 评论 -
入门篇:高精度乘法
高精度乘法标签:C语言 高精度乘法–by 小威威1.为什么写这篇文章在本次实验课作业中,出现了高精度乘法,而老师还没有讲到,所以需要靠我们自己自学。然而,在网上许多高精度是错误的,即放到编译器中无法正常运行,百度百科的高精度算法是个坑!!!同时,即使是正确的,也只是一大段代码扔出来,根本没有详细的解释,很难看懂。故我写这篇文章是为了帮助与我有共同需求的初学者入门高精度乘法。也许我的算法很渣,但足以入原创 2015-11-03 00:04:48 · 10616 阅读 · 6 评论 -
放鸡蛋问题:相同元素分配到相同的空间
放鸡蛋问题:相同元素分配到相同的空间标签: C语言 放鸡蛋 相同元素 相同空间by 小威威1.引入放鸡蛋问题就是指将相同元素分配到相同空间这一类问题。具体问题就是:现在有n个相同的鸡蛋,m个相同的篮子,将这n个鸡蛋分配到篮子中,且篮子可以为空,问一共有多少种分配方法?我们的第一反应就是排列组合,而这一问题很类似于我们高中的隔板法。然而,如果你沿着这条思路,恐怕你就会走近进胡同却又浑然不知。因为隔板原创 2015-12-13 19:27:45 · 1788 阅读 · 0 评论 -
C语言: 贪吃蛇异常退出
C语言: 贪吃蛇标签: C语言 贪吃蛇by 小威威这个贪吃蛇是作业来着,所以按照作业的要求做的,只在12*12的区域移动。在放代码之前,我要说一下我在做贪吃蛇的时候遇到的非常隐蔽的BUG:就是已经实现了贪吃蛇,在吃食物的时候,有的时候程序会出现异常,即贪吃蛇.exe遇到问题需要退出。其实,这主要是栈溢出导致的。那哪里栈溢出了呢?你可以检查一下生成随机食物那一部分代码,你是否用了递归? 如果有,那原创 2015-12-28 20:48:53 · 1873 阅读 · 0 评论 -
C语言:二叉树的中序遍历
C语言:二叉树的中序遍历标签: C语言 二叉树 中序遍历by 小威威这周作业题目是关于二叉树的中序遍历。中序遍历就是先读取左子树,再读取根结点,最后再读取右子树。在本题中的意思就是先输出左子树,再输出根结点,最后再输出右子树。题目如下:使用链表实现二叉树的构造并完成中序遍历。首先在头文件中定义结点结构体如下:typedef struct node {int x;struct node* left;原创 2015-12-30 09:33:16 · 6016 阅读 · 0 评论 -
C语言: 桶排序
C语言: 桶排序标签: C语言 桶排序by 小威威1.桶排序的介绍通俗地来说,桶排序就是将数组内的元素按照一定规则分配到一定数量的桶中,然后将各个桶内的数字进行分别排序,最后再将它们串起来。倘若我们要对很多数据进行冒泡排序,这种分桶的方式就大大提高了冒泡排序的执行效率。因为在处理较少的数据时,冒泡排序的执行效率并不亚于其他排序,甚至不亚于快排。然而,我今天要讲的桶排序是另一种类型。2.桶排序的思想原创 2015-12-15 20:31:23 · 4056 阅读 · 1 评论 -
分析:全局变量,局部变量,自动变量,静态变量
分析:全局变量,局部变量,自动变量,静态变量标签:C语言 变量by 小威威1.全局变量&&局部变量全局变量指在函数体之外定义的变量; 局部变量指在函数体内部定义的变量。想必大家应该能分清这两个变量,我就不再阐述了。下面首先我要分析全局变量与局部变量出现名称相同的情况。(1)全局变量与局部变量出现名称相同的情况直接上例子:# include <stdio.h>void SomeFunc(floa原创 2015-11-26 16:57:19 · 3756 阅读 · 3 评论