课程设计文档
- 格式:docx
- 大小:1.11 MB
- 文档页数:12
·《C语言基础》课程设计(一)基本要求题目要求:基本题共30题,任选其中的20道题。
提交实验报告(可手写、可电子版打印)。
【程序1】1题目:任意输入三个整数,编程实现对这三个数由小到大进行排序,并将排序后的结果显示在屏幕上。
1.程序分析:两个数一组使用if进行条件判断,如果逆序则使用中间变量对其进行交换。
2.程序源代码:【程序2】7题目:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将第一天剩下的桃子吃掉一半,有多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想在吃时,发现只剩下一个桃子了。
编写程序求猴子第一天共摘了多少个桃子。
1.程序分析:先找出变量间的关系,即第二天的桃子数加1的2倍等于第一天的桃子数。
利用循环,即求出桃子总数。
2.程序源代码:【程序3】3题目:求100到200之间的全部素数,打印输出。
1.程序分析:素数是大于1的整数,除了能被自身和1整除外,不能被其他正整数整除。
因此判断素数就是从2到根号i进行循环,判断这个数能否被i整除,若能整除则说明不是素数,转而判断下一个。
2.程序源代码:【程序4】题目:编程实现十进制数转化为二进制数,即从键盘输入一个0到32767的十进制数,输出其对应的二进制数。
1.程序分析:十进制数转换为二进制数的过程就是不断对2取余,取余后再除以二继续取余,最后将前面取得的余数序列倒序进行输出,即是该数对应的二进制数。
其中,每次的余数可放在一个整形数组中,方便进行倒序输出。
2.程序源代码:【程序5】题目:一个球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下。
编程求它在第十次落地时,共运动了多少米?第十次反弹多高?1.程序分析:典型的循环问题,设置两个变量分别记录小球反弹的高度和当前运动的距离,循环十次即得到结果。
2.程序源代码:【程序6】题目:从键盘上输入一个表示年份的整数,判断该年是否是闰年,输出结果显示在屏幕上。
1.程序分析:计算闰年的方法用自然语言描述如下:如果某年能被4整除但不能被100整除,或者概念能被400整除则该年为闰年。
本题目主要是考虑if语句中的逻辑表达式的正确描述。
2.程序源代码:【程序7】题目:水仙花数指一个三位数,其各位数字的立方和等于该数本身,例如153=13+53+33。
编程求出所有的水仙花数。
1.程序分析:用穷举法对100到999之间的数字进行数位拆分,然后通过一个if语句进行判断,将满足水仙花数条件的数打印输出即可。
2.程序源代码:【程序8】11题目:编程实现从键盘输入两个正整数,求它们的最大公约数和最小公倍数并打印在屏幕上。
1.程序分析:用辗转相除法求出两数的最大公约数,然后用两数的乘积除以最大公约数即可得到两数的最小公倍数。
2.程序源代码:【程序9】题目:编程求所有满足abcd=(ab+cd)2的四位数,即将四位数分为两段,使之相加求和后平方,结果等于自身。
1.程序分析:用穷举法对1000到9999的所有四位数逐个分解为前后两个数字,再对其进行判断,看是否满足要求,若满足则打印输出,否则进行下次循环。
2.程序源代码:【程序10】题目:用选择排序法对一组数据由小到大进行排序,数据分别为526、36、2、369、56、45、78、92、125、52。
1.程序分析:选择排序法是从待排序的区间中经过比较,选出最小的数存放在a[0]中(通过交换),再从剩余的未排序的9个数中再选出最小的数存放于a[1]中,以此类推,经过9趟选择和交换则排序完成。
要注意它与冒泡排序的不同,冒泡排序是每趟排序边比较边交换,而选择排序是一趟比较完成后仅交换一次。
2.程序源代码:【程序11】题目:小明买橙子,每个橙子1.8元,小明第一天买1个柚子,第二天开始每天买前一天的三倍,直到购买的橙子个数为不超过100的最大值,编程求小明每天平均花多少钱。
1.程序分析:利用循环控制最后一天不超过100个橙子,将每天的花销及天数累加起来,求得平均值。
2.程序源代码:【程序12】题目:变成求出一个整数的任意次方的最后三位数,即求x^y的最后三位数,其中x和y从键盘输入。
1.程序分析:一个整数的任意次方很可能产生越界情况,因此要考虑计算结果是否越界的问题,要避免产生越界问题同时又不使程序结果产生误差。
2.程序源代码:【程序13】题目:根据输入的三角形的三条边的值,判断三角形的类型(等边、等腰、直角、普通、非三角形)并输出。
1.程序分析:先根据两边之和是否大于第三条边来判断是否能够成三角形,若能构成三角形则进一步根据边的值判断是什么类型的三角形。
2.程序源代码:【程序14】题目:完全平方指用一个整数乘以自己例如1*1,2*2,3*3等,依此类推。
若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。
在所有的三位整数100到999中查找符合如下条件的整数在屏幕上输出:这个数既是完全平方数,又有两位数字相同,如121(11的平方)、144(12的平方)等。
1.程序分析:先利用循环判断一个100到999的数是不是完全平方数,若是则进一步分离各位数字,判断是否有两位相同。
2.程序源代码:【程序15】题目:有一种六位数,它本身是一个整数的平方,而且它的第三位和高三位也分别是一个整数的平方,如224625=4752,且225=152,625=252。
求满足该条件的所有六位数。
1.程序分析:穷举法。
利用循环对100000到999999之间的所有数按条件进行试探。
2.程序源代码:【程序16】题目:可逆素数是指将一个素数的各位数字顺序地倒过来构成的反序数依然是素数,按以上叙述求出所有的四位素数。
1.程序分析:定义一个函数用于判断参数是否是素数,对1000到9999之间的数进行穷举,找出符合条件的数并输出。
2.程序源代码:【程序17】题目:已知某公司员工的工资底薪是500元,员工的销售额与提成的计算方式如下:销售额≤2000 没有提成2000<销售额≤5000 提成8%5000<销售额≤10000 提成10%销售额>10000 提成12%利用switch语句编写程序,实现输入员工的销售额计算员工工资。
1.程序分析:先根据员工销售额计算出提成系数,利用switch语句根据系数计算出应发工资。
2.程序源代码:【程序18】题目:打印出以下杨辉三角(要求打印10行)。
11 11 2 11 3 3 11 4 6 4 1……1.程序分析:想要打印杨辉三角,首先要找出图形中数字的规律,即每行第一列和对角线数字均为1,其余数字为上一行同列数字与上一行前列数字之和。
数据存储于二维数组,利用循环输出10行杨辉三角。
2.程序源代码:【程序19】题目:班里来了个新同学,很喜欢学数学。
同学问他今年多大,他说:“我的年龄的平方是个三位数,立方是个四位数,四次方是个六位数;年龄的三次方和四次方正好用遍0、1、2、3、4、5、6、7、8、9这十个数字,那么大家猜猜我年龄多大?”1.程序分析:首先考虑年龄的范围,因为17的四次方是83521,小于六位,22的三次方是10648,大于四位,所以年龄的范围就确定出来了,即18至21。
然后对18到21之间的数字进行穷举,分别计算出它们的三次方和四次方,并将结果的四位数和六位数存于数组中,再对数组中的这十个数字进行判断,看是否0到9每个数字出现了一次。
2.程序源代码:【程序20】题目:有一个八层教学楼,某时间在楼中上课的学生数量共有765人,而且恰巧每层的学生数量都是楼下的两倍,编程求一楼和八楼的学生人数。
1.程序分析:穷举法,对一楼的学生人数进行穷举,每次计算出一楼到八楼的所有学生人数,判断是否等于总学生人数765。
2.程序源代码:【程序21】24题目:编程实现任意输入一行字符(长度不超100),统计其中有多少个单词并输出。
其中,每两个单词之间以空格分隔开,且最后的字符不能为空格。
1.程序分析:首先使用gets()函数将输入的字符串保存在一个字符数组中,然后判断数组中第一个字符是否为结束符或空格,如果是则输出结果,否则则说明是一串正常字符。
利用循环,在遇到结束符之前,统计空格数量,空格数量加一即为单词数。
2.程序源代码:【程序22】题目:不使用字符串处理函数strcpy()来实现字符串的复制。
输入一个字符串,拷贝到另一个字符串中,并打印输出。
1.程序分析:可以使用gets()和puts()进行字符的获取和输出。
利用循环依次赋值进行拷贝,另外应注意结束符的处理。
2.程序源代码:【程序23】题目:统计一个长度为十的整型数组中,最大数和次大数、最小数和次小数的值及下标,要求只能使用一次循环,即最多循环十次。
1.程序分析:本题很简单,要注意题目要求每个数只能读取一次。
2.程序源代码:【程序24】题目:已知有两个长度为5的有序整形数组(升序排列),编程将其合并为一个长度为10的数组,使其依然有序。
两数组中的值为运行时由键盘输入。
1.程序分析:两个数组进行合并,首先定义出新的大小为10的数组,然后利用两数组的下标进行从前到后循环,每次从两数组中挑一个较小的从前到后赋给新数组,循环结束后再把剩下的数赋值过去,合并完毕。
2.程序源代码:【程序25】题目:strlen()函数是C函数库中求字符串长度的函数,请使用递归自己实现这个函数。
1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
2.程序源代码:【程序26】题目:假设有个同学在爬楼梯,他可以一步上1个台阶、2个台阶或3个台阶,问这个同学上n层台阶的楼,总共有几种走法。
1. 程序分析:使用递归思想,类似于“斐波那契数列”的规律。
2.程序源代码:【程序27】题目:使用指针实现两个字符串的连接,比如两个字符串“I am ”和“a student.”,连接后变成“I am a student”。
1.程序分析:定义一个连接函数connect(char *a, char *b, char *c),用于将a和b为首元素指针的两个字符串连接起来,并将首元素地址赋给c。
连接操作使用循环,利用指针+1后移操作,分别将指针a和b所指向字符依次赋给c,最后须注意赋予结束标记。
2.程序源代码:【程序28】题目:寒假马上要来了,使用typedef定义一个寒假结构体类型,包含以下三个成员变量:放假日期(char [20])、假期天数(int)、假期备注(char [100])。
在主函数中定义一个该结构体类型的指针,使用malloc()为其动态分配内存,然后实现程序运行时假期的各项信息的输入和打印输出,最后使用free()释放内存。
1.程序分析:在后面要学习的《数据结构》中,这种结构体指针的定义和动态分配内存的方法非常常用,若不熟悉typedef的使用方法,百度一下。