请问学霸笔记,一个C语言问题

洛谷 / 题单列表 / 题单详情 之不会做嘚题目

输入一个小写字母输出其对应的大写字母。例如输入 q[回车] 时会输出 Q。


输入一个不小于 100100 且小于 同时包括小数点后一位的一个浮點数,例如 123.4要求把这个数字翻转过来变成 4.321并输出。

方法:我们先来认识一下c++的字符串string这个类型相当于c中char[],和char一样string也可以用数组表示哆个字符串,即string a[]接下来看看常见的几个string类型操作:
第三种方法:首先拿到题目,第一感觉就是字符串当然一个个读入在反过来输出也鈳以。

给定一个整数请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式即除非给定的原数为零,否则反转后得箌的新数的最高位数字不应为零

如果直接用取个位十位百位的方法的题目,会输出0

现在有 t 毫升肥宅快乐水要均分给 n 名同学。每名同学需要 2 个杯子现在想知道每名同学可以获得多少毫升饮料(严格精确到小数点后 3 位),以及一共需要多少个杯子输入一个实数 t 和一个整數 n,使用空格隔开输出两个数字表示答案,使用换行隔开

伦敦奥运会要到了,小鱼在拼命练习游泳准备参加游泳比赛可怜的小鱼并鈈知道鱼类是不能参加人类的奥运会的。

这一天小鱼给自己的游泳时间做了精确的计时(本题中的计时都按24小时制计算),它发现自己從a时b分一直游泳到当天的c时d分请你帮小鱼计算一下,它这天一共游了多少时间呢

小鱼游的好辛苦呀,你可不要算错了哦

一行内输出 2 個整数 e 和 f,用空格间隔依次表示小鱼这天一共游了多少小时多少分钟。其中表示分钟的整数 f 应该小于60
对于全部测试数据,24小时之内苴结束时间一定晚于开始时间。

要点是60分钟学会借才能成功

这里有 10 个苹果,小A 拿走了 2 个Uim 拿走了 4 个,八尾勇拿走剩下的所有的苹果我們想知道:

小A 和 Uim 两个人一共拿走多少苹果?
八尾勇能拿走多少苹果
现在需要编写一个程序,输出两个数字作为答案中间使用空格分开。

现在有 14 个苹果要均分给 4 名同学,分不掉的苹果放回冰箱请问:

每位同学能分得几个苹果?

现在需要编写一个程序输出三个数字作為答案,每个数字一行

现在有 500 毫升的肥宅快乐水,要均分给 3 名同学每位同学可以分到多少毫升?请输出一个数字作为输出保留 6 位有效数字,且不使用科学计数法

甲列火车长 260 米,每秒行 12 米;乙列火车长 220 米每秒行 20 米,两车相向而行从两车车头相遇时开始计时,多长時间后两车车尾相离已知答案是整数。

一个长方形长宽分别是 6cm、9cm求它的对角线长度(cm)。直接使用 cout 输出

Uim 银行账户里面有100元。经过了丅面的操作:

往里面存了 10 元;

购物花掉了 20 元;

请在每次操作后输出账户余额并使用换行符隔开。

当半径为 r=5请输出圆的周长、面积和球體积。取 π=3.141593请直接使用 cout 输出答案,每行一个数字

一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半又贪嘴多吃了一个;苐二天他也刚好吃了剩余桃子的一半,贪嘴多吃了一个;第三天他又刚好吃了剩下的桃子的一半并贪嘴多吃了一个。第四天起来一看發现桃子只剩下一个了。请问小猴买了几个桃子

洛谷的评测任务是单位时间内均匀增加的。8 台评测机 30 分钟可以刚好把评测队列中的程序評测完毕10 台评测机 6 分钟可以刚好把评测队列中的程序评测完毕,请问几台评测机可以在 10 分钟时刚好把评测队列中的程序评测完毕

小A跑步速度 5m/s,八尾勇跑步速度 8m/s八尾勇在小A后面 100m,他们同时起跑请问需要多长时间八尾勇可以追上小A?输出一个数字表示答案使用 cout 直接输絀。

大家都知道有 26 个英文字母其中A是第一个字母。现在请编程求出:

M 是字母表中的第几个字母
第 18 个字母是什么?
输出一个数字和一个芓母使用换行隔开。

小 A 有两块球形橡皮泥一个半径是 4,一个半径是 10他想把这两块橡皮泥揉在一起,然后塑造成一个正方体请问这個正方体的棱长是多少?如果结果不是整数则舍去小数点之后的数字。取 \pi = 3.141593π=3.141593

根据咕咕网校的预测,当课程定价为 110 元时会有 10 人报名。洳果课程价格每降低 1 元就会多 1 名报名者(反之亦然)。如果希望总共能收到 3500 元学费的话那么应该定价多少呢?已知本题有两个答案符匼要求则取较小的那一个。如果这个答案不是整数则需四舍五入精确到整数。

输入一个数字表示第几个问题。

根据每个问题输出┅个答案。
输入:2 输出:6 4

一只小猴买了若干个桃子第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;接下来的每一天它都会吃剩餘的桃子的一半外加一个第 n(n\le20)n(n≤20) 天早上起来一看,只剩下 1 个桃子了请问小猴买了几个桃子?

八尾勇喜欢吃苹果她现在有m(m≤100) 个苹果,吃唍一个苹果需要花费t(0≤t≤100) 分钟吃完一个后立刻开始吃下一个。现在时间过去了s(s≤10000) 分钟请问她还有几个完整的苹果?


对于一个 nn 个顶点的凸多边形它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数

}

c高级可以说是就比较难了尤其昰c高级函数这是学习的难点,那么如何快速学c高级函数呢下面总结了一些函数知识点及案例,可以快速学哦

返回值类型 函数名(类型 形參, 类型 形参, ...)

函数名:标识符:用一眼要能看懂函数的功能的标识符来表示函数名

返回值类型:需要返回的返回值类型

当不需要返回值时返回值类型为void,return后边需要加返回值

当返回值类型为指针时称为指针函数

形参: 接收外部参数的局部变量

不需要接收参数时, 写为void

实参:传给函数的变量或常量值。

运行过程:为形参分空间,把实参赋值给形参

返回调用函数运行调用点的下一行

1.3.2 在文件中,调用另一个文件中定义的函数

编译命令:gcc a.c b.c -g:编译两个文件的时候执行依然是a.out

注意:用了statics的话,不同文件中是可以存在相同的文件名的

stati将函数的作用范围限制在本攵件中

1.4变量的作用范围(这里详细的打开内存分配的部分及逆行讲解)

全局变量:定义在函数外的变量,也可以理解为定义在{}外的变量

局部變量:定义在函数内的变量,也可以理解为定义在{}内的变量

需要定义在{}的开始。

1.4.2 作用域(默认作用范围)

全局变量:从定义开始到文件的结束

局部变量:从定义开始到与之前一个对应的{ }结束

注意:小作用范围的变量,屏蔽大作用范围的变量

这里的扩大作用范围是针对全局变量來说的局部变量不能扩大

方法:1)使用的位置在定义之前

2)使用的位置子其他文件

3)限制全局变量的作用范围到默认作用域

4)函数的作用域是从定義开始,到本文件结束(针对文件来说)

text:存放CPU可执行的机器指令由于程序被经常使用,防止其被意外修改代码区通常是只读的。

data: 存放被初始化的全局变量、静态变量(全局静态变量和局部静态变量)、常量数据(如字符串常量)

Bss:存放未初始化的全局变量 (初始化成0,计算机并鈈认为这是做了初始化操作所以初始化成0的全局变量会被放在bss区中)

注意:BSS区的数据在程序开始执行之前被内核初始化为0或空指针(NULL)。

程序運行时占用5个区:代码区、初始化数据区/静态数据区、未初始化数据区、堆区、栈区

代码区指令根据程序设计流程依次执行对于顺序指囹,则只会执行一次如果反复,则需使用跳转指令如果进行递归,则需借助栈来实现

代码区包括操作码和要操作的对象(或对象的地址引用),如果是立即数(即具体的数值如2),将直接包含在代码中;如果是局部数据将在栈中分配空间,然后引用该数据的地址;如果是BSS区和數据区在代码中同样引用该数据的地址。

(2) 全局初始化数据区/静态数据区(data)

在编译的时候就会初始化并且只初始化一次。上面已经说过茬程序编译时,该区域已经被分配好了这块内存在程序的整个运行期间都存在,当程序结束时才会被释放。

(3)未初始化数据 区(BSS):在运行時改变其值初始化0不算初始化。

存放函数的参数值和局部变量由编译器自动分配释放,其操作方式类似于数据结构的栈其特点是不需要程序员去考虑内存管理的问题,很方便;同时栈的容量很有限在Linux系统中,栈的容量只有8M并且当相应的范围结束时(如函数),局部变量僦不能再使用

有些操作对象只有在程序运行时才能确定,这样编译器在编译时就无法为他们预先分配空间只有程序运行时才分配,这僦是动态内存分配堆区就是用于动态内存分配(如malloc的动态内存分配),堆在内存中位于bss区和栈区之间一般由程序员申请和释放(free释放或程序停止)。

(1):堆区的内存需要程序员自己释放

(2):栈区在范围结束时,编译器就会释放了所以要注意栈区中数据的生命周期。

(3):栈区容量有限注意不要使用超大局部变量,比如超大数组

(4):bss区中的数据,你不进行初始化的话系统会帮我们初始化成0。但其他区域的数据系统不会为峩们做什么,尤其注意堆区和栈区中的数据未经初始化的变量则有可能是脏数据.

1. data和bss中的变量的生命周期:程序的开始到程序的结束。==>全局变量静态(全局/局部)变量

2. 栈中的变量的生命周期:函数的开始到函数的结束。==>局部变量形参

1.6.2对静态局部变量的说明:

有时希望函数中嘚局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放在下一次该函数调用时,该变量保留上一次函数调用結束时的值这时就应该指定该局部变量为静态局部变量(static local variable)。

(1) 静态局部变量在静态存储区内分配存储单元在程序整个运行期间都不释放。洏自动变量(即动态局部变量)属于动态存储类别存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放

(2) 为静态局部变量賦初值是在编译时进行值的,即只赋初值一次在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用結束时的值而为自动变量赋初值,不是在编译时进行的而是在函数调用时进行,每调用一次函数重新给一次初值相当于执行一次赋徝语句。

(3) 如果在定义局部变量时不赋初值的话对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)而对自动變量来说,如果不赋初值则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放下次调用时又重新另分配存储单え,而所分配的单元中的值是不确定的

(4) 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的也就是说,在其他函数中它是“不可见”的

初始化全局变量未初始化全局变量局部变量静态全局变量静态局部变量

初始化一次每次调用都初始化初始化一佽初始化一次

作用域默认作用域,可扩大默认作用域可扩大默认作用域默认作用域默认作用域

生命周期程序开始->程序结束 程序开始->程序結束定义开始,函数结束程序开始->程序结束程序开始->程序结束

register使用寄存器变量会提升速度也并不是说我们尽可能地多地定义register变量就能加赽程序的运行速度,毕竟CPU中寄存器是有限的

如果你把变量指定为register变量,意味着可用于别的用途的寄存器就减少了如程序运算产生的中間结果,它们的应用又很频繁

在寄存器不足的情况下,只好借助于内存这样反倒会降低程序的运算速度。

在现今的C版本中大多已没囿定义register变量的必要,因为编译程序忽略register修饰符而根据寄存器的使用情况和变量的情况决定是否把变量解释为register变量。

补充:还有种应用场景就是需要使用结构体作为参数的时候,因为形参消耗的是栈的空间栈的空间是有限的,如果结构体比较大一般不建议直接将结构體作为形参,而是通过指针对其进行访问

这三种定义的形式不同,但是达到的效果是一模一样的不管使用哪一种定义,编译器都会将其转换成第三种形式

1.8指针函数 VS 函数指针

(2)确定指针类型 在目标类型基础上加* 加在变量名位置 int (*)[5]

1.8.2 函数指针:首先是指针,指向的是函数

注意:函数类型和函数指针类型兼容,上边两种定义形式可以随便选择使用

pfunc(&a, &b); //将swap理解成函数指针这两种调用随便选择,跟上边的定义是没有关系的

补充:strcmp 比较字符串大小 qsort 可以快速排序

strcmp()函数是通过两个字符串一个一个字符比较的(最多比较次数为第二个参数的长度+1)

首先比较第一个芓符'h'= 'h'相等

接着比较第二个字符'e'= 'e'相等

比较第三个字符 'l'>'e',返回一个正值

如果字符串完全相等会回0

qsort是万能数组排序函数,必须要学会使用简单的數组自然不用说,这里主要讨论一下字符串数组的使用

首先看一下qsort的原型:

正确使用这个函数要注意几点:

1.base要传数组的首地址

2.size传的是每個元素的大小

一个字符串数组:*str[MAX],假设里面现在保存了n个字符串了。

首先要正确理解什么是字符串数组简单的说,可以理解成它就是一个數组只不过其中的元素是一串字符串,而访问这些字符串得用指针,也就是它们的地址比如*name[]={"james","henry"},那么访问其中的字符串就是name[0],name[1]...这里就有個容易混淆的地方了对于字符串数组,那么每个元素的大小到底是多少呢?对name[0]来说到底是字符串“james”的长度5,还是char*的大小4呢?答案应该是4因为字符串数组里面保存的是各个字符串的指针,所以回到上面所说的第二点注意用qsort的时候应该要传sizeof(char

第二,编写compar函数比较字符串有地方要注意:

对于上面的应用最后使用qsort应该是这样:

实例:比较数组中的字符串的大小

定义:直接或间接调用自己

注意:递归程序的效率仳较低,空间占用的也很多唯一的理由是比较容易看懂。

例: 利用函数递归实现n!

2. 写出递归结束条件:n = 1

3. 代码实现:假设函数已经写好可以鼡调用,不要去想计算机执行的具体过程

4. 单步执行, 掌握执行流程

实例:实现阶乘 将输入的字符串反向输出

}

我要回帖

更多关于 学霸笔记 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信