C语言学习笔记
记录大一学习C语言时的课堂作业
一、循环结构程序设计
- 求s=1+2+3+……+98+99+100的值。
1 |
|
- 求s=1+3+5+……+97+99的值。
1 |
|
- 求s=1-3+5-7+……+97-99的值。
1 |
|
- 求π的值,已知π/4≈1-1/3+1/5-1/7+…… ,计算至某项的绝对值小于1E-6为止(1E-6表示的是浮点数,即1*10的-6次方)。
1 |
|
- 求s=1+2!+3!+4!+……+19!+20! 的值(n!表示n的阶乘)。
1 |
|
- 求s=1+3!+5!+7!+……+17!+19!的值(n!表示n的阶乘)。
1 |
|
- 任意输入x的值,求sinx≈x-x3/3!+x5/5!-x7/7!+……,直到某项的绝对值小于1E-6为止,最后输出sinx的值(1E-6表示的是浮点数,也就是1*10的-6次方)。
- 若输入x的单位为角度:
1 |
|
- 若输入x的单位为弧度:
1 |
|
- 已知s=1/1+2/1+3/2+5/3+8/5+……,求前40项之和。
1 |
|
- 已知s=1+11+111+1111+……. 一直加到n位1,n的值自己输入。
1 |
|
- 已知s=1+12+123+1234+… 一直加到n位123…n,n的值自己输入。
1 |
|
- 从键盘上输入若干学生的程序设计成绩,计算并输出所有学生的平均分和最高成绩。当输入负数的时候循环结束,再输出结果。
1 |
|
- 任意输入一个正整数,判断其是否是素数,所谓素数就是指质数。(建议使用2到3种方法来实现判断)。
- 版本一:
1 |
|
- 版本二:
1 |
|
- 版本三:
1 |
|
- 输出1000以内所有的质数。
1 |
|
拓展:质数筛
1 |
|
- 输入一个正整数,输出比它小的最大的最多的10个质数。
1 |
|
- 任意输入2个正整数给自变量x和y,求它们的最大公约数和最小公倍数。
1 |
|
- 爱因斯坦阶梯问题:设有一阶梯,每步跨2阶余1阶,每步跨3阶余2阶,每步跨5阶余4阶,每步跨6阶余5阶,每步跨7阶刚好到顶,问该阶梯一共有多少阶?
1 |
|
- 任意输入一个十进制整数,要求输出对应的二进制结果(最后结果表示为4个字节,即32位二进制的形式)。
1 |
|
- 根据媒体发布的信息,2010年中国GDP总量为5.845万亿美元,增长率是10.1%;美国GDP总量是14.536万亿美元,增长率3.3%,在2个GDP增长率保持2010年的水平不变的情况下,编程计算到哪一年中国的GDP总量有望超过美国?
1 |
|
- 从键盘上任意输入2个正整数给a和b,计算a和b之间所有整数(包括a和b)的累加和,并输出结果。
1 |
|
- 张三在10年前存了一笔钱准备用来购房,按照当时的房价,这笔钱可以买房150平方米。已知银行存款年利率为6%,房价却按照每年10%的速度增长,请编写程序,计算张三存的这笔钱现在能购买多少平米的房子?
1 |
|
- 某班级准备举行一次五子棋比赛,参赛选手每人之间必须进行一场对弈,进过统计发现一共进行了300场比赛,编程,计算并输出参赛的人数是多少?
1 |
|
- 输入1000以内所有的完数,所谓完数是指一个数值刚好是它的因子之和(但是因子中不包含本身),例如6=1+2+3,所以6就是完数。
1 |
|
- 一个口袋中有3个红球,5个白球,6个黑球,从其中任意取出8个球,要求至少有一个白球。
输出所有的可能组合。
计算这些可能出现的概率是多少?可参考组合数的通项公式及递推公式。
1 |
|
- 有若干只鸡兔同在一个笼子里,从上面数,有36个头,从下面数,有100只脚。问笼中各有多少只鸡和兔?
1 |
|
- 0-9可以组成多少个没有重复的3位偶数?这里没有重复的就是指该数值中每位上的数值互不相等。
1 |
|
- 编写程序输出9*9乘法表。
1 |
|
- 求出用1元人民币兑换1分,2分,5分硬币的所有兑换方案,要求兑换硬币总数是70枚。
1 |
|
- 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1^3^+5^3^+3^3^。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。
1 |
|
- 输出以下图形(必须用循环的思想来解决)。
1 | * |
1 |
|
- 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。请问,他从多少岁开始过生日party的?
1 |
|
- 输入年月日,计算这天是该年的第几天。
1 |
|
或者:
1 |
|
- 输入一个起始年月日,再输入一个终止年月日,计算这2个日期之间一共有多少天?
1 |
|
- 任意输入一个年份,输出该年的日历(以下公式中的 [ ] 均代表取整)。
- 公式一:输入年月日year-month-day,求出该日期在该年是第S天,再由S和year求出对应星期w。
1 |
|
- 公式二:即蔡勒公式,输入年月日year-month-day,根据方程求出该日期对应星期w。
1 |
|
二、数组
- 输入一个寝室6位同学的身高,要求按照从小到大的顺序输出。
1 |
|
- 输入某班级所有同学的程序设计技术期末成绩(人数是33人),要求输出最好的2位同学的成绩。
1 |
|
- 学校举行校园歌手大赛,一共有n位裁判(n由自己输入),这n位裁判位为选手打分,去掉一个最高分和去掉一个最低分,再计算平均分就是该选手的最后得分,请编写程序模仿7位裁判为某位选手的打分过程。
1 |
|
- 任意输入10个数值,计算出它们的平均值,然后求得并输出与平均值最接近的数。
1 |
|
- 输入班级33位同学的程序设计技术期末成绩(百分制,分数控制在0-100之间),分别统计优,良,中,及格,不及格等5种情况的人数,以及百分比。
1 |
|
- 将一个整数逆序排列并输出。
1 |
|
- FIBONACCI数列,已知该数列的第1个数值是1,第2个数值也是1,从第3个数值开始,每个数值等于其前2个数值之和,请编程输出该数列的前40项。
1 |
|
- 编写程序,请给一个一维数组任意输入6个整数,例如:假设输入如下数值:
1 | 7 4 8 9 1 5 |
要求建立一个具有如下内容的方阵并输出:
1 | 5 7 4 8 9 1 |
1 |
|
- 请编写程序实现功能:从键盘上输入6名学生的5门成绩,分别统计出每个学生的平均成绩和总成绩,并输出。
1 |
|
- 任意输入3行4列的矩阵中的所有值,求转置矩阵。
1 |
|
- 任意输入一个二维数组4行5列的所有制,找到并输出该二维数组中最大值及其位置。
1 |
|
- 编写程序输出n行n列的杨辉三角。n的值自己输入,如下所示:
输入:
1 | 5 |
输出:
1 | 1 |
1 |
|
- 鞍点(Saddle point)在微分方程中,沿着某一方向是稳定的,另一条方向是不稳定的奇点,叫做鞍点。在泛函中,既不是极大值点也不是极小值点的临界点,叫做鞍点。在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。在物理上要广泛一些,指在一个方向是极大值,另一个方向是极小值的点。输入n行n列的矩阵,求出鞍点。
1 |
|
- 任意输入一段英文,统计其中英文字符a的个数,不区分大小写。
1 |
|
- 任意输入一段英文,分别统计出其中26个英文字母各自的个数,不区分大小写。
1 |
|
- 任意输入一段英文,分别统计出英文字符、数字字符、空格字符和其他字符等四大类字符各自的个数。
1 |
|
- 任意输入一段英文,统计其中英文单词的个数。
1 |
|
- 任意输入一段英文,将其中所有的数字字符删除,再输出结果(删除功能采用的是后面往前覆盖的思路设计)。
1 |
|
- 从键盘上任意输入一个字符串,将该字符串中的字符按照ASCII码的顺序从小到大的顺序排序后输出。
1 |
|
- 编程实现输入一行字符,将其中重复出现的字符全部删除。例如:若输入字符串:abcdabghakdmncdgkp,则删除重复字符后应输出:abcdghkmnp。
1 |
|
三、自定义函数
- 任意输入一个整数,编写一个函数isPrimeNumber用来判断输入的整数是否是素数。
1 |
|
- 编写函数求Fibonacci数列的第n项的值,然后在主函数中调用该函数输出第n项的值。
- 递归法,效率低:
1 |
|
- 迭代法,效率高:
1 |
|
- 编写排序的函数sort,实现调用该函数对任意一组数据进行从小到大的顺序排序(建议使用冒泡排序法的格式书写)。
- 冒泡排序法:
1 |
|
- 快速排序法:
1 |
|
- 归并排序法:
1 |
|
- 任意输入一个正整数n,求n!(例如5!=1 *2 *3 *4 *5),要求将求n!的过程写成自定义函数。
- 利用循环求解:
1 |
|
或者:
1 |
|
- 利用递归求解:
1 |
|
- 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,每次移动一个圆盘,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘,柱子可以编号为A B C,编程输出n个圆盘从A柱子移动到C柱子的步骤。
解题思路:
(1)把A柱子上的前N-1个盘子借助C柱子,全部移动到B柱子上(过程暂不考虑),再把第N个盘子由A柱子移动到C柱子上,那么剩下要移动的盘子在B柱子上了。
(2)把B柱子上的前N-2个盘子借助C柱子,全部移动到A柱子上(过程暂不考虑),再把第N-1个盘子由B柱子移动到C柱子上。
(3)重复上面的两个步骤即可把A柱子上的盘子全部移动到C柱子上。
1 |
|
- 任意输入一段英文,分别统计出英文字符、数字字符、空格字符和其他字符等四大类字符各自的个数。要求将统计四大类字符个数的过程书写为自定义函数,输入、调用函数、输出结果放在主函数中完成。
1 |
|
- 一个班级有n位同学(n为正整数,由自己输入),输入他们的程序设计技术期末考试成绩,要求将求所有人的平均分功能、求最高分功能、最低分功能分别写成3个自定义函数。
1 |
|
- 输入2个正整数给x和y,求得这2个数值的最大公约数和最小公倍数,(要求求最大公约数和求最小公倍数的功能必须分别用自定义函数来完成)。
1 |
|
- 验证歌德巴赫猜想:输入一个任何一个不小于6的偶数,它可以表示为两个素数之和,也就是两个质数之和(要求判断某个数是否是素数的过程用自定义函数来实现)。
1 |
|
- 小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!站在台阶前,他突然又想着一个问题:如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?请编写程序计算并输出结果。
1 |
|
- 角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1(要求此题用函数的递归调用方法实现)。
1 |
|
四、指针
- 从键盘输入一个字符串,要求找出大写字母、小写字母、空格、数字和其他字符各自的数量(必须用指针来完成)。
1 |
|
- 输入n个整数(n由自己输入),要求输出最大值和最小值(必须用指针来完成)。
- 普通版:
1 |
|
- 自定义函数版:
1 |
|
- 输入10个整数,存入一维数组a中。要求设计一个函数move,实现如下功能:使数组a中前面各个元素顺序向后移动m个位置,最后m个数变成最前面的m个数(要求此题必须用自定义函数外加指针来实现数据的移动)。
1 |
|
- 自定义一个函数,将一个十进制正整数转换为对应的二进制数(必须用指针来完成)。
- 数组版(转换为补码):
1 |
|
- 指针版(转换为原码):
1 |
|
- 自定义一个函数,删除一个字符串中从第n个字符开始的连续m个字符(必须用指针来完成)。
1 |
|
- n个学生围成圈(n由自己输入),从第1个同学开始报数,(报数的方式是1,2,3),其中报到3的同学出列,重复之,直到最后只剩下一个同学为止。编程求得这个同学的原本的是第几个同学?(必须用指针来实现)。
- 数组版(跳出数字默认为3):
1 |
|
- 指针版(跳出数字默认为3):
1 |
|
- 拓展(跳出数字由自己输入):
1 |
|
五、结构体
- 声明4个结构体类型来描述学生,其成员包括:学号、姓名、性别、C语言课程成绩。再定义一个结构体变量,从键盘输入各成员具体的数据,然后输出。
1 |
|
- 声明一个结构体类型来表示日期,其成员包括:年、月、曰,编写一个函数用于计算某日是本年中的第几天?
1 |
|
- 某班有7名学生,均选修了C语言课程,要求统计该班C语言课程成绩不及格的学生人数,并输出不及格学生的信息(包括学号、姓名、性别、C语言课程成绩)。
1 |
|
- 己知一个班有5名学生,本学期学习了三门课程,分别为C语言、高数和英语。
(1)输出每一门课程的平均成绩;
(2)输出总成绩最高的学生的信息(包括学号、姓名、性别、3门课程的成绩以及总成绩);
(3)按C语言课程的成绩从高到低对全班学生进行排序,并输出排序后的结果。
1 |
|
六、数据读取和数据存储
- 编程统计文本文件”data.txt”中字符’$’出现的次数,并将统计的次数结果写入文本文件”res.txt”中。
1 |
|
- 从源程序当前目录下名为“xhar2.txt”的文本文件中读取前10个字符,依次显示在屏幕上,如果文本文件中不足10个字符,则有多少个字符读取多少个字符,并显示在屏幕上。
1 |
|
- 有2个磁盘文件a.txt和b.txt,要求产生一个新的文件c.txt,将b.txt中的数据追加到a.txt后面,再一并存入到c.txt中。
1 |
|
- 编写程序将全班同学的姓名、地址和电话号码写入到一个文件class.txt中。
1 |
|
- 从文件data.txt中读取2个正整数,计算这2个正整数之间所有正整数的和(包括本身),最后将结束写入到文件he.txt中。
1 |
|
- 从键盘上读取3个字符串,依次写入名为“string.txt”的文本文件。
1 |
|
- 从English.txt文件中读取一段英文,统计单词个数,然后将结果存入result.txt中。
1 |
|
七、基础算法题
- 利用欧几里得算法(又称为辗转相除法)快速计算2个整数的最大公约数。
- 参考公式:
- 示例代码:
1 |
|
- 大数相加:计算两个非负整数A、B的和。不过这一次有些特殊,A、B可能会很大。
- 输入格式:
1 | 第一行输入一个非负整数A。 |
- 输出格式:
1 | 输出A+B的值。不要有多余的前导零。 |
- 样例输入:
1 | 1234567891011121314151617181920123456789 |
- 样例输出:
1 | num1: 1234567891011121314151617181920123456789 |
- 示例代码:
1 |
|
- C++版本:
1 |
|
- 大数相乘:计算两个非负整数A、B的乘积。A、B可能会很大。
- 输入格式:
1 | 第一行输入一个非负整数A。 |
- 输出格式:
1 | 输出A×B的值。不要有多余的前导零。 |
- 样例输入:
1 | 9876543210123456789103 |
- 样例输出:
1 | num1: 9876543210123456789103 |
- 示例代码:
1 |
|
- C++版本:
1 |
|
- 话说大诗人李白,一生好饮。一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:无事街上走,提壶去打酒。逢店加一倍,遇花喝一斗。这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数。
1 |
|
- 某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。每位选手都有一个起步的分数为10分。某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的字符串来表示。例如:0010110011 就是可能的情况。你的任务是算出所有可能情况。每个答案占一行。
1 |
|
- 输入一个十进制数N,将它转换成R进制数输出。在10≤R≤16的情况下,用’A’表示10,用’B’表示11,用’C’表示12,用’D’表示13,用’E’表示14,用’F’表示15。
- 输入格式:
1 | 输入包含两个整数 N(N≤10000)和R(2≤R≤16)。 |
- 输出格式:
1 | 输出一行,表示转换后的数。 |
- 样例输入:
1 | 742035030 16 |
- 样例输出:
1 | 2C3A8E56 |
- 示例代码:
1 |
|
- 给你一个整数x ,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文数,而123不是。
- 示例1:
1 | 输入:x = 121 |
- 示例2:
1 | 输入:x = -121 |
- 示例3:
1 | 输入:x = 10 |
- 代码:
1 |
|
- 一个正整数,如果交换高低位以后和原数相等,那么称这个数为回文数。比如121,2332 都是回文数,13,4567不是回文数。任意一个正整数,如果其不是回文数,将该数交换高低位以后和原数相加得到一个新的数,如果新数不是回文数,重复这个变换,直到得到一个回文数为止。例如,57变换后得到132(57 + 75),132得到363(132 + 231)),363是一个回文数。曾经有数学家猜想:对于任意正整数,经过有限次上述变换以后,一定能得出一个回文数。至今这个猜想还没有被证明是对的。现在请你通过程序来验证。
- 输入格式:
1 | 输入一行一个正整数n。 |
- 输出格式:
1 | 输出第一行一个正整数,表示得到一个回文数的最少变换次数。 |
- 样例输入:
1 | 349 |
- 样例输出:
1 | 3 |
- 示例代码:
1 |
|
- 小华非常喜欢吃布丁。这一天她打算购买原味和抹茶味两种布丁,共n个,之后按照一定顺序将n个布丁全部吃完。然而如果小华连续吃到三个同口味的布丁,她会感到厌腻而无法继续吃。请你帮助小华规划吃布丁的每一种可行的口味顺序,使她能够全部吃完而不产生厌腻感。
- 输入格式:
1 | 输入一个正整数n,表示布丁的数量。 |
- 输出格式:
1 | 每行输出一个由'0'和'1'组成的字符串,表示一种可行的吃布丁的顺序。其中0表示原味,1表示抹茶味。 请将可行的每种方案按字典序升序输入。 |
- 样例输入:
1 | 3 |
- 样例输出:
1 | 001 |
- 数据范围:
1 | 对于100%的数据,保证1≤n≤20; |
- 示例代码:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 不归之海!
评论