【4.78】马步遍历问题:已知国际象棋棋盘有8*8共64个格子。设计一个程序,使棋子从某位置开始跳马,能够把棋盘上的格子走遍。每个格子只允许走一次。 【4.79】八皇后问题:
在一个8×8的国际象棋盘,有八个皇后,每个皇后占一格;要求棋盘上放上八个皇后时不会出现相互\攻击\的现象,即不能有量个皇后在同一行、列或对角线上。问共有多少种不同的方法。
【4.80】编制一个计算函数y=f(x)的值程序,其中: -x + 2.5 0<= x <2
y= 2 - 1.5(x-3)*(x-3) 2<= x <4 x/2 - 1.5 4<= x <6
【4.81】编写程序,实现比较两个分数的大小。
【4.82】求这样一个三位数,该三位数等于其每位数字的阶乘之和。 即: abc = a! + b! + c!
【4.83】已知两个平方三位数abc和xyz,其中数码a、b、c、x、y、z未必是不同的;而ax、by、cz是三个平方二位数。编写程序,求三位数abc和xyz。任取两个平方三位数n和n1,将n从高向低分解为a、b、c,将n1从高到低分解为x、y、z。判断ax、by、cz是否均为完全平方数。
【4.84】找出一个二维数组中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。二维数组也可能没有鞍点。
【4.85】将数字1、2、3、4、5、6填入一个2行3列的表格中,要使得每一列右边的数字比左边的数字大,每一行下面的数字比上面的数字大。编写程序求出按此要求可有几种填写方法?
【4.86】编写一个函数实现将字符串str1和字符串str2合并,合并后的字符串按其ASCII码值从小到大进行排序,相同的字符在新字符串中只出现一次。 【4.87】已知计算x的n阶勒让德多项式值的公式如下: 1 (n=0)
Pn(x) = x (n=1)
( (2n-1)*x*Pn-1(x)-(n-1)*Pn-2(x))/n (n>1) 请编写递归程序实现。
【4.88】编写函数,采用递归方法实现将输入的字符串按反序输出。 【4.89】编写函数,采用递归方法在屏幕上显示如下杨辉三角形:
【4.90】编写函数,采用递归方法将任一整数转换为二进制形式。
【4.91】设有字母a、b、c,请编程用递归的方法产生由这些字母组成的,且长度为n的所有可能的字符串。例如,输入n=2,则输出: aa ab ac ba bb bc ca cb cc
【4.92】将一个数的数码倒过来所得到的新数,叫作原数的反序数,如果一个数等于它的反序数,则称它为对称数。编写程序,采用递归算法求不超过1993的最大的二进制的对称数。 【4.93】从1到n(n<1000)个自然数中选出r个数进行组合,并按指定的格式输出组合的结果。例如:n=5,r=3时,共有10种组合,运行程序,要按下面的格式输出:
请用递归算法实现。
【4.94】从键盘输入十个整数,用合并排序法对输入的数据按照从小到大的顺序进行排序,将排序后的结果输出。
【4.95】编写程序,读入一个以符号\结束的长度小于20字节的英文句子,检查其是否为回文(即正读和反读都是一样的,不考虑空格和标点符号)。例如: 读入句子:MADAM I'M ADAM. 它是回文,所以输出:YES 读入句子:ABCDBA). 它不是回文,所以输出:NO
【4.96】编写程序,其中包括一个函数,此函数的功能是:对一个长度为N 的字符串从其
第K个字符起,删去M个字符,组成长度为N-M的新字符串(其中N、M<=80,K<=N)。例如输入字符串\,利用此函数进行删除\的处理,输出处理后的字符串是\。
【4.97】编写函数,通过指针将一个字符串反向。
【4.98】编写一个函数insert(s1,s2,ch),实现在字符串s1中的指定字符ch位置处插入字符串s2。
【4.99】编写程序将输入的两行字符串连接后,将串中全部空格移到串首后输出。 【4.100】编写程序,输入字符串,分别统计字符串中所包含的各个不同的字符及其各自字符的数量。如:输入字符串: abcedabcdcd 则输出:a=2 b=2 c=3 d=3 e=1。 【4.101】利用结构:struct complx { int real; int im; };
编写求两个复数之积的函数cmult,并利用该函数求下列复数之积: ⑴ (3+4i)×(5+6i) ⑵ (10+20i)×(30+40i
【4.102】编写成绩排序程序。按学生的序号输入学生的成绩,按照分数由高到低的顺序输出学生的名次、该名次的分数、相同名次的人数和学号;同名次的学号输出在同一行中,一行最多输出10个学号。
【4.103】编写程序,实现输入的时间屏幕显示一秒后的时间。显示格式为HH:MM:SS。程序需要处理以下三种特殊情况:
⑴ 若秒数加1后为60,则秒数恢复到0,分钟数增加1; ⑵ 若分钟数加1后为60,则分钟数恢复到0,小时数增加1; ⑶ 若小时数加1后为24,则小时数恢复到0。
【4.104】编写程序,从键盘输入3个学生的数据,将它们存入文件student;然后再从文件中读出数据,显示在屏幕上。
【4.105】编写程序,从键盘输入一行字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件\中保存。
【4.106】编写程序,读入磁盘上C语言源程序文件\,删去程序中的注释后显示。 【4.1】参考答案: #include main( ) { int year;
float money,rate,total; /* money:本金 rate:月利率 total:本利合计*/ printf(\;
scanf(\; /* 输入本金和存款年限 */ if(year==1) rate=0.00315; /* 根据年限确定利率 */ else if(year==2) rate=0.00330; else if(year==3) rate=0.00345;
else if(year==5) rate=0.00375; else if(year==8) rate=0.00420; else rate=0.0;
total=money + money * rate * 12 * year; /* 计算到期的本利合计 */ printf(\; }
【4.2】参考答案: #include main( )
{ int year, month, days;
printf(\; scanf(\; switch (month)
{ case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31; break; /* 处理\大\月 */ case 4: case 6: case 9: case 11: days=30; break; /* 处理\小\月 */
case 2: if(year%4==0&&year0!=0 || year@0==0) days=29; /* 处理闰年平月 */
else days=28; /* 处理不是闰年平月 */ break;
default: printf(\; /* 月份错误 */ days=0; }
if( days!=0 )
printf(\; }
【4.3】参考答案: #include main ( )
{ float data1, data2; /* 定义两个操作数变量 */ char op; /* 操作符 */
printf(\;
scanf(\; /* 输入表达式 */ switch(op) /* 根据操作符分别进行处理 */ { case '+' : /* 处理加法 */
printf(\; break; case '-' : /* 处理减法 */
printf(\; break; case '*' : /* 处理乘法 */
printf(\; break; case '/' : /* 处理除法 */ if( data2==0 ) /* 若除数为0 */ printf(\; else
printf(\; break;
default: /* 输入了其它运算符 */ printf(\; } }
【4.4】分析:打印此图形用两重循环实现。
图形要重复n行,故采用循环结构实现循环n次,循环体内部打印一行'*'号,把上述思路表示为:
for(i=1;i<=n;i++) 打印一行'*'号;
每行有n个'*'号,再采用循环结构实现n次循环,循环内部用格式输出语句打印一个'*'号,即:
for(j=1;j<=n;j++) printf(\;
按照上述思路,实现打印矩形。 参考答案: main() { int i,j,n;
printf(\; scanf(\; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf(\; printf(\; } }
【4.5】分析:此图形和上题的区别在于在每一行先要打印空格,然后再打印n个'*'号,在上题第一层循环体内打印'*'号的循环前面增加一个循环打印空格。每行空格的个数是逐行减少的,由于第一层循环的控制变量i是逐行增1,所以用一个固定值的数减去i就可实现对空格个数的控制,在此题中固定值可使用变量n。 参考答案: main( )