C语言
文章平均质量分 66
yiichan
这个作者很懒,什么都没留下…
展开
-
函数调用栈详解
前几天忙里偷闲重做6.828,发现在lab 1 exercise 11卡住了,才发现之前觉得很熟了的函数调用栈已经因为太久没接触忘了,一年没有用过这些东西了。看了几篇博客,发现理解还是不够深入,只能自己再手动测一下试一试了。写了一个C文件,叫temp.c#include <stdio.h>int double_add_int(int a, int b) { int c = a; int d = b; int e = a + b + c + d; retu原创 2021-07-09 11:08:09 · 1142 阅读 · 3 评论 -
一道简单的字母循环金字塔问题
一道简单的字母循环金字塔问题标签(空格分隔): 编程错题【原题】 要求用户从键盘输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案: A ABA ABCBA ABCDCBA程序运行结果示例1: Please input a capital: D↙ ____A ___ABA __ABCBA _ABCDCBA这道题很简单,思路一看就懂原创 2017-12-12 08:45:35 · 5441 阅读 · 5 评论 -
条件语句
条件语句标签(空格分隔): C 双学位高级语言程序设计 C选择结构if条件语句条件语句语法有if、if-else、else if三种,在此细说多个if和多分支else i的区别。多个if条件语句执行时,从头开始执行,无论真假,每个if语句都要挨个判断真假;而多分支else if语句执行时,如果一个为真,则马上跳并列的其他else if选择语句。else与离他最近且未和其他e原创 2017-12-12 08:46:19 · 566 阅读 · 0 评论 -
数组
数组标签(空格分隔): C 双学位高级语言程序设计 C数组这一块我学的很差,很差。数组名做函数参数数组名做函数参数时,不加方括号,只写上数组名字就行了,表示数组的首地址数组名做函数参数时,是直接对数组的地址进行处理,所以这样会改变数组的值。原创 2017-12-12 08:46:39 · 152 阅读 · 0 评论 -
数据溢出和数据精度
数据溢出和数据精度标签(空格分隔): C 双学位高级语言程序设计 C数据类型如果赋值运算左边的变量和右边的表达式的类型不一致,就可能发生数据溢出,造成数据精度的丢失。float类型精度是6~7位有效数字,double类型精度是16位有效数字即便用精度大的类型来保存精度小的类型,也不是没有风险的。比如用float来保存长整型数据,就可能出现错误,因为float有效数字位数只有6~原创 2017-12-12 08:47:02 · 1755 阅读 · 0 评论 -
高精度正整数除法 大整数除法
高精度正整数除法 大整数除法标签(空格分隔): 算法竞赛 算法 编程错题 高精度单词: divident:被除数 divisor:除数 quotient:商大整数除法 OpenJ_Bailian - 2737 题目要求:求两个大的正整数相除的商。 input:第1行是被除数,第2行是除数。每个数均不超过100位。 out原创 2018-01-27 15:13:24 · 2214 阅读 · 0 评论 -
缓冲区溢出与缓冲区溢出攻击
缓冲区与缓冲区溢出问题标签(空格分隔): C C字符串注意:单个字符用单引号!字符串才用双引号!不然不能通过编译!!!缓冲区溢出是指用有安全隐患的字符串处理函数,在输入超出规定字符串长度的字符之后,对该数组末尾的内存单元的覆盖。例如#include <stdio.h>#include <string.h>int main(){ cha...原创 2018-02-24 16:21:24 · 294 阅读 · 0 评论 -
指针
定义指针变量是变量的一种类型,用于存储元素地址。在内存中,元素地址都是以十六进制整数表示的。指针变量定义方法: 类型标识符 *指针变量名; 注意:如果这样定义int* p,a;只会将p定义为指针变量,a还是整型变量。变量的引用方法方法有两种,直接引用和间接引用;直接引用:直接调用变量,处理其中的值。间接引用:通过调用变量的地址,处理调用地址中对应的值...原创 2018-03-03 15:12:00 · 396 阅读 · 0 评论 -
两个有序链表序列的合并
两个有序链表序列的合并标签(空格分隔): 数据结构 算法竞赛02-线性结构1 两个有序链表序列的合并(15 分)本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。函数接口定义:List Merge( List L1, List L2 );其中List结构定义如下:typedef struct Node *PtrToNode;struct No...原创 2018-03-18 17:13:26 · 1207 阅读 · 3 评论 -
UVA 1339 Ancient Cipher 古老的密码 字符出现次数
UVA 1339 Ancient Cipher 古老的密码 字符出现次数标签(空格分隔): 编程错题 算法竞赛 算法 紫书题干很长,不妨参考紫书上的解释。 给定两个长度相同且不超过100的字符串,判断是否能把其中一个字符串的各个字母重排,然后对26个字母做一个一一映射,使得两个字符串相同。例如,JWPUDJSTVP重排后可以得到WJDUPSJPVT,然后把每个字母映射到它前原创 2018-02-06 12:57:07 · 339 阅读 · 0 评论 -
UVA 213 ACM-ICPC World Finals 1991 信息解码
UVA 213 ACM/ICPC World Finals 1991 信息解码标签(空格分隔): 算法竞赛 编程错题 紫书原题很长,在这里我就不做过多叙述了,我直接贴个链接吧。 UVA 213 ACM/ICPC World Finals 1991 信息解码 题目里面包含了连个很有用的自定义的函数实现:连接被换行隔开的字符串readchar、二进制转十进制函数readint。这个原创 2018-02-05 17:45:56 · 306 阅读 · 0 评论 -
UVA 489 Hangman Judge 自顶向下逐步求精
UVA 489 Hangman Judge 自顶向下逐步求精标签(空格分隔): 算法 算法竞赛原题如下,但这种做法是我逐步改进的结果,是逐步找到漏洞,逐渐修复的结果。我觉得这个比刘汝佳书上的方法要蠢得多。 In “Hangman Judge,” you are to write a program that judges a series of Hangman games.原创 2018-02-02 12:43:08 · 237 阅读 · 0 评论 -
更相减损法和辗转相除法(GCD)求最小公倍数和最大公约数
更相减损法和辗转相除法(GCD)求最小公倍数和最大公约数标签(空格分隔): 算法 算法竞赛这两种算法平时经常听到,听起来也很装逼,但是我老是忘了他们的原理,今天好好想想,写下来。更相减损法 更相减损法最早起源于我国的《九章算术》,用于求两个数的最小公倍数。大意是给定两个数a,b,如果存在偶数,就将偶数以2;否则,就比较两数大小,用大数减小数,得到一个差;对差和剩下的那个小数重复...原创 2018-03-25 17:55:54 · 1287 阅读 · 0 评论 -
一道铺地砖问题,关于向上取整算法。
一道铺地砖问题,关于向上取整算法。标签(空格分隔): 编程错题 C 双学位高级语言程序设计 编程竞赛原题如下: 【Problem description】 Theatre Square in the capital city of Berland has a rectangular shape with the size n × m meters. On the occasion原创 2017-12-12 08:45:12 · 1643 阅读 · 0 评论 -
用getchar和%C输入字符型数据
用getchar和%C输入字符型数据标签(空格分隔): C 双学位高级语言程序设计 C输入输出getchar函数的输入模式,是以回车键为结束标志,将回车之前的所有数据都放入缓冲区中,每进行一次赋值,就调用缓冲区内的一个字符。如果输入字符比赋值字符少,那会把回车也算作字符。键盘上的一切输入内容,包括空格回车,都能被输入其中。而用%c输入数据,就会碰到其他情况。scanf函数会把起始时原创 2017-12-12 08:44:47 · 1071 阅读 · 0 评论 -
用scanf函数检验输入非法字符
用scanf函数检验输入非法字符标签(空格分隔): C 双学位高级语言程序设计 编程错题 C输入输出在规定输入数据格式之后,scanf函数可以根据数据类型确定数据是否合法。如下面这个例题根据scanf()的返回值判断scanf()是否成功读入了指定的数据项数,使程序在用户输入123a时,能输出如下运行结果:123a↙Input error!输入格式: "%d %d"原创 2017-12-12 08:43:58 · 6357 阅读 · 0 评论 -
goto、迭代与循环控制
goto、迭代与循环控制标签(空格分隔): C 编程窍门 C循环结构C语言的循环控制方法很多样,如果表示跳出循环,可以用goto、break、exit(0).goto语句是无条件转向符,格式是 goto a; a: state1;意思是程序执行到goto时,自动转到标记a处的语句执行state1,。标记a的命名规则和变量的命名规则相同。state可以是空语句,即只有一个分号。 2原创 2017-12-11 09:09:26 · 308 阅读 · 0 评论 -
scanf函数对异常输入的处理
scanf函数对异常输入的处理标签(空格分隔): C 双学位高级语言程序设计 编程窍门 C输入输出如果想用C语言的scanf函数筛选正常输入,过滤异常输入,那便可以用scanf函数的返回值了。 scanf函数有返回值,但是我们一般都仅用其输入功能。返回值用法如下。#include <stdio.h>int main(){ int a; ret = scanf("%d",&a);原创 2017-12-11 09:07:54 · 3960 阅读 · 1 评论 -
函数的递归调用
函数的递归调用标签(空格分隔): 双学位高级语言程序设计 C C函数在函数中直接或间接的调用自己,就称为递归调用 看下面这个求阶乘的例子 求n的阶乘,数学函数形式是这样的 {1 n=0,1 n!={ {n*(n-1)! n>=2#include <stdio.h>long Fact(int n){ if (n <0) ret原创 2017-12-11 09:06:40 · 343 阅读 · 0 评论 -
for、while循环
for、while循环标签(空格分隔): C 双学位高级语言程序设计 C循环结构循环分三种控制方式计数控制条件控制标记控制 其中,for循环是计数控制。 for循环格式如下 for(exp1,exp2,exp3){ sta1; sta2;}先执行表达式1,再执行表达式2,如果2成立,就执行循环内语句;执行完一次语句,再执行表达式3,再执行表达式2,如此循环。如果ex原创 2017-12-11 09:05:53 · 276 阅读 · 0 评论 -
变量的生存期
变量的生存期标签(空格分隔): C 双学位高级语言程序设计 C函数这节课我们要学习以下几个问题:编译器是如何给变量分配内存的?变量的存储类型有哪几种?变量的存储类型决定了什么?自动变量和静态局部变量有什么不同?编译器是如何区分不同作用域中的同名变量的呢? 编译器将它们分配给了不同的地址,所以能够区分。程序运行时,编译器是如何为程序分配内存空间的呢? 存储区分类 内存数据分原创 2017-12-11 09:04:37 · 2223 阅读 · 0 评论 -
数据的格式化屏幕输出
数据的格式化屏幕输出标签(空格分隔): C 双学位高级语言程序设计 C输入输出printf()格式字符: %d 输出十进制有符号int型 %u 输出十进制无符号int型 %f 以六位小数形式输出float型,double型 %e 以标准指数形式输出float型,double型 printf()的格式修饰符 l 在d、u前加,输出long...原创 2018-03-03 15:12:08 · 600 阅读 · 0 评论 -
数据的格式化键盘输入
数据的格式化键盘输入标签(空格分隔): C 双学位高级语言程序设计 C输入输出C语言中,如果scanf函数的格式控制字符串和被输入变量类型不匹配,就会出错。scanf函数的格式控制符 %d %f,%e 输入float型(不能够指定输入精度) %c 输入一个字符(包括空格、回车等一切输入) 注意: 1. scanf中不能引用换行符,如 ...原创 2018-03-03 15:12:16 · 520 阅读 · 0 评论 -
宏常量和const常量
宏常量和const常量标签(空格分隔): C 双学位高级语言程序设计 C算术运算和表达式宏常量对于那些经常使用常量,为了防止多次使用后弄错,或者忘记这个常量的含义,所以需要定义宏常量,用字符代替常量定义格式如下 #define Pi(宏常量名) 3.14(字符串)意为执行编译预处理命令(#define),在以后的运行中,将所有宏常量名Pi都替换为常量3.1...原创 2018-03-03 15:12:48 · 2645 阅读 · 2 评论 -
函数定义、调用、参数传递和函数原型
函数定义、调用、参数传递和函数原型标签(空格分隔): C 双学位高级语言程序设计 C函数函数定义 返回值类型 函数名(形参) { 语句 return x; } 虽然return可以在函数内出现多次,但是每个函数只能执行一个return。 形参的类型定义不必须写,但是写上便于查错,写上是一个好习惯。函数调用 函数被调用的时候,输入的参数就叫实际参数;函...原创 2018-03-03 15:11:43 · 954 阅读 · 0 评论 -
浮点数四舍五入算法
浮点数四舍五入算法标签(空格分隔): 编程竞赛不用网上那么麻烦,那么多代码,只需要几行就行了。 n为正数:(int)(n+0.5) n为负数:(int)(n-0.5) 写成程序如下 #include <stdio.h>int main(){ float n; scanf("%f",&n); if (n...原创 2018-03-03 15:11:24 · 2323 阅读 · 0 评论 -
自动类型转换和强制类型转换
自动类型转换和强制类型转换标签(空格分隔): C 双学位高级语言程序设计 C算术运算和表达式C语言中经常遇到不同数据类型在同一运算中转化的情况,这遵循下述规则。long double > double > float > unsigned long > long > unsigned int > int > char、short虽然自动类型转换使数据精度不容易丢失,但是他的自动原创 2017-12-12 08:42:48 · 1095 阅读 · 0 评论 -
运算精度丢失和数值丢失问题
运算精度丢失和数值丢失问题标签(空格分隔): 编程竞赛 编程错题在做题时,我经常会碰到程序很对,但结果出错的问题。如下面这个。【题目描述】 经常出国旅行的驴友都知道,需要及时了解当地的气温状况。但不少国家采用了不同的温度计量单位:有些使用华氏温度标准(F),有些使用摄氏温度(C)。现在,请你根据温度转换公式设计一个温度转换程序,可以进行温度转换。如果输入摄氏温度,显示转换的华氏温原创 2017-12-12 08:43:22 · 3464 阅读 · 0 评论 -
变量的作用域
变量的作用域标签(空格分隔): C 双学位高级语言程序设计 C函数变量的作用域变量能被读写访问的范围取决于变量在源程序中被定义的位置局部变量在语句块(函数、复合语句)内部定义的变量仅能在定义它的语句块内访问它由于C标准不同,有的可以在复合语句内定义变量,有的不可以(如for(int i=0;i<=9;i++),C99支持,C89不支持)面对不同的作用域,可以重名;如果出现重名变量,优先原创 2017-12-11 09:18:33 · 786 阅读 · 0 评论