编程练习
1.编程程序,提示用户输入一元二次方程的三个系数a,b,c,计算并显示根的判别式的结果,然后计算并显示方程的根。
2.编写程序随机产生一个1到12之间的整数,并且根据所输入的数字显示对应的英文月份,如随机产生的1,则输出January,2对应输出February,……
3.扩展第2题,使之可以实现多次月份转换,停止转换条件由用户输入特定的字符。
4.编写一个程序,提示用户输入代表今天日期的数字(周日为0,周一为1,…,周六为6)。同时,提示用户输入一个今天之后的天数,作为代表将来某天的数字,然后显示这天是星期几。如:输入今天的日期为1(即今天为周一),输入代表将来的数字是3(即3天后),则输出代表星期四的Thursday……
5.扩展第4题,使之可以实现多次类似判断,直到输入的日期不符合特定要求。
6.编程:先输入一个double的值,用于表示总钱数(单位为元),要求将其转换为“X元Y角Z分”的形式输出,如用户输入2.34,则输出为: 2元3角4分,需求特别提醒的是,当0元(角/分)时,则不必输出,如用户输入2.04,则输出:2元4分。
7.ISBN-10(国际标准书号)以前是一个10位整数d1d2d3d4d5d6d7d8d9d10,最后一位是d10是一个校验和,它是使用下面的公式用另外9个数计算出来的:
(d1*1+d2*2+d3*3+d4*4+d5*5+d6*6+d7*7+d8*8+d9*9)%11
如果校验和为10,那么按照ISBN-10的习惯,最后一位应该表示为X。编写程序,提示用户输入前9个数,然后显示10位ISBN(包括前面可能的0,即d1=0,…),要求输入时,各位数字之间不允许有任何空格、换行等符号。
8.编写程序,显示一个随机点与矩形的关系,矩形中心位于(0,0),宽100,高200。提示,点与矩形的关系包括:“矩形内部”、“矩形外部”及“恰在矩形上”三种。
9.编程程序,读取三角形的三条边,如果输入值合法则计算三角形的周长和面积,否则,显示这些输入值不合法。
10.已知第一条直线上的两个点(x1,y1)、(x2,y2),第二条直线上的两个点(x3,y3)、(x4,y4),请编程判断这两条直线的关系。如果两直线相交,请输出两条直线的交战坐标格式为(x,y)。
11.编程,提示用户输入两个矩形中点的坐标(x,y)以及它们的宽度和高度,然后判断第二个矩形是在第一个矩形内,还是和第一个矩形重叠(即有交叉)。
12.给定一个从点p0(x0,y0)和p1(x1,y1)的有向线段, 可以使用下面的条件来确定点p2(x2,y2)是在线段的左侧、右侧,或者在该直线上:
编写一个程序,提示用户输入这三个点p0、p1和p2,显示p2是否在p0到p1的线段的左侧、右侧,或者在该直线上。
13.编写一个程序,提示用户输入 3个整数值,分别代表年、月、日,例如用户输入了2017、12、2,程序以2nd December 2017的格式输出该日期。
必须在日期值的后面加上th,nd,st和rd。例1st,2nd,3rd,4th,11th,12th,13th,14th,21st,22nd,24th.
13.编写程序,提示用户输入从正五边形中心到顶点的距离,计算正五边形的面积。
正五边形面积的计算公式为:面积=(5*s2)/(4*tan(π/5)),其中s表示边长。连长可以使用公式s=2rsin(π/5)计算,其中r是从五边形中心到顶点的距离。结果保留小数点后两位数字。
14.编写一个程序,产生一个圆心在(0,0),半径为40的圆上面的三个随机点,显示由这三个随机点组成的三角形的三个角的度数。(提示:产生一个0~2π之间的一个以弧度为单位的随机角度α,则由这个角度所确定的点为(rcosα,rsinα))。
15.假设一个正五边形的中心位于(0,0),其中一个点位于原点位置,编写一个程序,提示用户输入正五边形外切圆的半径,显示正五边形上五个顶点的坐标。
16.编写一个程序,提示用户输入一个十进制数,显示其对应的二进制数,如输入B,输出:1011。
17.改写第7题,将ISBN号作为一个字符串输入。
18.编写程序,读入未指定个数的整数,判断读入的正数有多少个,读入的负数有多少个,然后计算这些输入值的总和及其平均值,当输入为0时,表示程序结束。要求平均值保留小数点后两位。
19.编写程序,提示用户输入学生的个数,每个学生的名字及其分数,最后显示得到最高分的学生的名字及其分数。
20.显示100到1000之间所有能被5和6整数的数,每行显示10个,数字之间用一个空格字符隔开。
21.编写一个程序,对从键盘输入的正整数进行质因子分解,并以如下格式输出:例如输入120,则输出120=2*2*2*3*5
22.打印1000以内的全部素数(质数),每行显示8个素数,数字之间用一个空格字符隔开。
23.编写一个嵌套的for循环,打印下面的图案:
1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
1 2 4 8 16 32 16 8 4 2 1
1 2 4 8 16 32 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 64 32 16 8 4 2 1
24.编写程序,计算下面数列的和:
25.使用下面的数列计算圆周率的近似值:
26.使用下面的数列计算e的近似值:
编写程序,显示当i=10000,20000,…,100000时的e的值。
27.编写程序,显示从101到2100期间所有闰年,每行显示10个。数字之间用一个空格字符分隔,同时统计并显示这期间闰年的数目。
28.如果一个正整数等于除它本身之外其他所有因子这和,就称这个数为完全数。例如:6=1+2+3。编程显示10000以内的全部完数。
29.编写程序,提示用户输入一个十进制整数,然后显示对应的二进制值。
30.编写一个程序,提示用户输入两个字符串,显示两个字符串最长的共同前缀。如字符串1:Welcome to C++,字符串2:Welcome to programming。
31.重写第30题,不同的是忽略大小写。
32.编写一个函数,计算一个整数的各位数字之和,并在主函数中输入一个整数,调用该函数求得该数的各位数字和,然后输出。
33.写一个函数判断一个整数是否为回文数,在主函数中,通过调用该函数输出 10~10000以内的全部回文数,每行输出8个,每个数占8格。
34.编写一个函数用于判断一个整数是否为质数,并在主函数中通过调用该函数输出1000以内的全部素数,每行输出8个,每个数占8格。
35.一些网站对于密码具有一些特定的规则。编写一个函数,检测字符串是否是一个有效密码,假定密码规则如下:
(1)密码必须至少8位字符;
(2)密码仅能包含字母和数字;
(3)密码必须至少含有2个数字
编写一个主函数,提示用户输入一个密码,调用上述函数,如果符合规则,则显示Valid Password,否则输出Invalid Password。
36.编写一个函数,计算并返回两个正整数的最大公约数,在主函数中输入两个整数,调用上述函数计算并显示它们的最大公约数和最小公倍数。
37.编写程序,读取在1~100之间的整数,然后计算每个数出现的次数。假定输入是以0结束。
38.编写一个程序,读入个数不确定的考试分数,并且判断有多少个分数大于或等于平均分,多少个分数是低于平均分的。输入一个负数表示输入结束,假设最高分为100分。
39.编写一个程序,读入10个数并且显示互不相同的数,即一个数如果出现多次,只显示一次,要求按照数第一次出现的先后顺序显示。
40.编写一个函数,实现用冒泡法将整型数组元素按由小到大顺序排序,要求等排序数组及参与排序的元素个数通过参数传递,在主函数中随机产生10个200以内的整数,调用上述函数实现对数组全部元素的排序,要求显示排序前后的数组元素,元素之间用一个空格分隔。
41. 编写一个函数,实现用选择法将整型数组元素按由大到小顺序排序,要求等排序数组及参与排序的元素个数通过参数传递,在主函数中随机产生10个200以内的整数,调用上述函数实现对数组全部元素的排序,要求显示排序前后的数组元素,元素之间用一个空格分隔。
42.编写一程序,提示用户输入10个整数,然后显示从这10个数中选出两个的所有组合,每行显示一组,同一组的两个数之间用一个空格分隔。
43.编写一程序,在平面上随机产生20个互不重叠的点,计算两点间距离最近的点及其它们间的距离,如果有多对,则输出全部点对,保留小数后2位。
44.随机产生一个5*5的整数矩阵,求出该矩阵的鞍点,所谓鞍点,即该位置的数是所在行中的最大数,同时是所在列的最小数,如果有多个鞍点,则输出全部鞍点,如果一个都没有,则输出“不存在”。
45.假定所有雇员每周工作的小时数存储一个二维数组中。每行将一个雇员7天的工作时间记录在7列中,例如:下面显示的数组存储了4个雇员的工作时间,编写一程序,按照总工时降序的方式显示雇员和他们的总工时。
Su M T W Th F Sa
Employee0 2 4 3 4 5 8 8
Employee1 7 3 4 3 3 4 4
Employee2 3 3 4 3 3 2 2
Employee3 9 3 4 7 3 4 1
46.编写程序,提示用户输入一个方阵的尺寸(最大尺寸20),在矩阵中填入0和1,打印这个矩阵,然后找出整行、整列或者对角线都是0或1的行、列或对角线。
47.如果两个一维数组m1和m2相应的元素相等的话,则认为它们是严格相同的。写一个函数判断两个数组是否严格相同,如果相等返回1,否则返回0。
48.如果两个一维数组m1和m2具有相同的内容,则认为它们是相同的。写一个函数判断两个数组是否相同,如果相等返回1,否则返回0。
49.在计算几何中,经常需要从一个点集中找到最右下角的点。编写一个函数,从一个平面点集中返回最右下角的点的坐标。
50.给定一个元素为0或者1的方阵,编写一个程序,找到一个元素都为1的最大子方阵。程序提示用户输入矩阵的列数。然后显示最大子方阵的最左上角元素位置以及该子方阵的行数。
51. 计算如下规律式子的值。其中a与n的值都是由键盘输入确定。如当a为2,n为3时,该式子表示的含义为2+22+222,故结果为246。
52. 打印所有“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数自身。
53. 现有一数组,其元素已按由大到小的顺序排列,现从键盘输入一个数,插入到该数组中,要求插入后的数组元素依然由大到小排列。
54. 设有存放于一维数组中一组整数,且已按由小到大顺序排序,现从键盘输入一个整数,在数组中查找该数,如果数组中含有该数,则输出该数的出现位置,否则输出“**不存在”,**代表该数值。
55. 编写一个函数实现从一字符串中删除指定的字符。
56. 现有一个英文句子,请编程统计其中的单词数,已知单词之间用空格分隔(空格数大于等于1),不考虑单词是否为合法英语单词,特别提醒,第一单词之前也可能有若干空格。
57. 现有一个实型一维数组,请编程分别找出其中的最大值和最小值,并将最大值与数组的最后一个元素交换,最小值与数组的第一个元素交换。
58. 用筛法求1000以内的全部素数。
59. 分别写一个递归和非递归函数用于求字符串的长度,字符串结束符不统计在内,递归函数原型为:int rec_strlen(char str[]),非递归函数原型为:int non_rec_strlen(char str[]).
60. 从键盘输入若干个字符,将其中的小写英文字母写入d盘根目录下名为“yw.txt”文本文件中,将其它字符显示在屏幕上,若输入字符‘#’,则程序结束。
61. 将磁盘上一个文本文件中的信息显示在屏幕上,然后将这个文件中的英文字母复制到另一个文本文件中。
62.分别编写一个递归和非递归函数,实现将含有n个整数的一维数组循环右移位m个位置,即使其前面(低索引)各数顺序向后(高索引)移m个位置,最后m个数则移至最前面。函数原型分别为:非递归void move(int *arr,int n,int m);递归:void move_rec(int *arr,int n,int m)
63. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人 退出圈子,问最后留下的是原来第几号的那位。
64. 编一个函数fun(int *a,int n,int *odd,int *even),函数的功能是分别求出数组中所有奇数之 和以及所有偶数之和。形参n给了数组中数据的个数:利用指针odd返回奇数之和,利 用指针even返回偶数之和。例如:数组中的值依次为:1,8,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。
65. 分别编写一个递归和非递归函数,实现将含有n个整数元素的一维数组颠倒。函数原型分别为:非递归void reverse(int *arr,int n);递归:void reverse_rec(int *arr,int n)