C/C++语言经典、实用、趣味程序设计编程百例精解
1.绘制余弦曲线
2.绘制余弦曲线和直线
3.绘制圆
4.歌星大奖赛
5.求最大数
6.高次方数的尾数
7.阶乘尾数零的个数
8.借书方案知多少
9.杨辉三角形
10.数制转换
11.打鱼还是晒网
12.抓交通肇事犯
13.该存多少钱
14.怎样存钱利最大
15.捕鱼和分鱼
16.出售金鱼
17.平分七筐鱼
18.有限 5 位数
19.8 除不尽的自然数
20.一个奇异的三位数
21.4 位反序数
22.求车速
23.由两个平方三位数获得三个平方二位数
24.阿姆斯特朗数
25.完全数
26.亲密数
27.自守数
28.回文数
29.求具有 abcd=(ab+cd)2 性质的四位数
30.求素数
31.歌德巴赫猜想
32.可逆素数
33.回文素数
34.要发就发
35.素数幻方
36.百钱百鸡问题
37.爱因斯坦的数学题
38.换分币
39.年龄几何
40.三色球问题
41.马克思手稿中的数学题
42.最大公约数和最小公倍数
43.分数比较
44.分数之和
45.将真分数分解为埃及分数
46.列出真分数序列
47.计算分数的精确值
48.新娘和新郞
49.委派任务
50.谁在说谎
51.谁是窃贼
52.黑与白
53.迷语博士的难题(1)
54.迷语博士的难题(2)
55.哪个大夫哪天值班
56.区分旅客国籍
57.谁家孩子跑最慢
58.拉丁方阵
59.填表格
60.1~9 分成 1:2:3 的三个 3 位数
61.1~9 组成三个 3 位的平方数
62.由 8 个整数形成奇特的立方体
63.减式还原
64.乘式还原
65.乘式还原(2)
66.除式还原(1)
67.除式还原(2)
68.九位累进可除数
69.魔术师的猜牌术(1)
70.魔术师的猜牌术(2)
71.约瑟夫问题
72.邮票组合
73.和数能表示 1~23 的 5 个正整数
74.可称 1~40 磅的 4 块砝码
75.10 个小孩分糖果
76.小明买书
77.波松瓦酒的分酒趣题
78.求π的近似值
79.求π的近似值(2)
80.奇数平方的一个有趣性质
81.角谷猜想
82.四方定理
83.卡布列克常数
84.尼科彻斯定理
85.回文数的形成
86.自动发牌
87.黑白子交换
88.常胜将军
89.抢 30
90.搬山游戏
91.人机猜数游戏
92.人机猜数游戏(2)
93.汉诺塔
94.兎子产子
95.将阿拉伯数字转换为罗马数字
96.选美比赛
97.满足特异条件的数列
98.八皇后问题
99.超长正整数的加法
100.数字移动
1.绘制余弦曲线
在屏幕上用“*”显示 0~360 度的余弦函数 cos(x)曲线
*问题分析与算法设计
如果在程序中使用数组,这个问题十分简单。但若规定不能使用数组,问题就变得不容易了。
关键在于余弦曲线在 0~360 度的区间内,一行中要显示两个点,而对一般的显示器来说,只能
按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回到上一行。为了获得本文要
求的图形就必须在一行中一次输出两个“*”。
为了同时得到余弦函数 cos(x)图形在一行上的两个点,考虑利用 cos(x)的左右对称性。将屏幕
的行方向定义为 x,列方向定义为 y,则 0~180 度的图形与 180~360 度的图形是左右对称的,
若定义图形的总宽度为 62 列,计算出 x 行 0~180 度时 y 点的坐标 m,那么在同一行与之对
称的 180~360 度的 y 点的坐标就 应为 62-m。程序中利用反余弦函数 acos 计算坐标(x,y)的
对应关系。
使用这种方法编出的程序短小精炼,体现了一定的技巧。
*程序说明与注释
#include<stdio.h>
#include<math.h>
int main()
{
double y;
int x,m;
for(y=1;y>=-1;y-=0.1) /*y 为列方向,值从 1 到-1,步长为 0.1*/
{
m=acos(y)*10; /*计算出 y 对应的弧度 m,乘以 10 为图形放大倍数*/
for(x=1;x<m;x++) printf(" ");
printf("*"); /*控制打印左侧的 * 号*/
for(;x<62-m;x++)printf(" ");
printf("*\n"); /*控制打印同一行中对称的右侧*号*/
}
return 0;
}
*思考题
如何实现用“*”显示 0~360 度的 sin(x)曲线。
在屏幕上显示 0~360 度的 cos(x)曲线与直线 f(x)=45*(y-1)+31 的迭加图形。其中 cos(x)
图形用“*”表示,f(x)用“+”表示,在两个图形相交的点上则用 f(x)图形的符号。
2.绘制余弦曲线和直线
*问题分析与算法设计
本题可以在上题的基础上进行修改。图形迭加的关键是要在分别计算出同一行中两个图形的列方
向点坐标后,正确判断相互的位置关系。为此,可以先判断图形的交点,再分别控制打印两个不
同的图形。
*程序注释与说明
#include<stdio.h>
#include<math.h>
int main()
{
double y;
int x,m,n,yy;
for(yy=0;yy<=20;yy++) /*对于第一个 y 坐标进行计算并在一行中打印图形*/
{
y=0.1*yy; /*y:屏幕行方向坐标*/
m=acos(1-y)*10; /*m: cos(x)曲线上 y 点对应的屏幕列坐标*/
n=45*(y-1)+31; /*n: 直线上 y 点对应的列坐标*/
for(x=0;x<=62;x++) /*x: 屏幕列方向坐标*/
if(x==m&&x==n) printf("+"); /*直线与 cos(x)相交时打印“+”*/
else if(x==n) printf("+"); /*打印不相交时的直线图形*/
else if(x==m||x==62-m) printf("*"); /*打印不相交时的 cos(x)图形*/
else printf(" "); /*其它情况打印空格*/
printf("\n");
}
return 0;
}
*思考题
如何实现 sin(x)曲线与 cos(x)曲线图形的同时显示。
3.绘制圆
在屏幕上用“*”画一个空心的圆