没有合适的资源?快使用搜索试试~ 我知道了~
C语言竞赛练习题题.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 121 浏览量
2022-07-11
21:08:45
上传
评论
收藏 47KB DOCX 举报
温馨提示
试读
58页
C语言竞赛练习题题.docx
资源推荐
资源详情
资源评论
第 1 页
C 语言竞赛练习题 1
1. 求最大数
问 555555 的约数中最大的三位数是多少?
*问题分析及算法设计
依据约数的定义,对于一个整数 N,除去 1 和它自身外,凡
能整除 N 的数即为 N 的约数。因此,最简单的方法是用 2 到 N-1
之间的全部数去除 N,即可求出 N 的全部约数。本题只要求取约
数中最大的三位数,则其取值范围可限制在 100 到 999 之间。
*程序说明及注释
#include<stdio.h>
void main()
long i;
int j;
printf("Please input number:");
scanf("%ld",&i);
for(j=999;j>=100;j--)
if(i%j==0)
printf("The max factor with 3 digits in %ld
is:%d,\n",i,j);
break;
*运行结果
输入:555555
输出:The max factor with 3 digits in 555555 is:777
2. 高次方数的尾数
求 13 的 13 次方的最终三位数
*问题分析及算法设计
解本题最直接的方法是:将 13 累乘 13 次方截取最终三位即
可。
但是由于计算机所能表示的整数范围有限,用这种“正确”
第 2 页
的算法不可能得到正确的结果。事实上,题目仅要求最终三位的
值,完全没有必要求 13 的 13 次方的完整结果。
探讨乘法的规律发觉:乘积的最终三位的值只及乘数和被乘
数的后三位有关,及乘数和被乘数的高位无关。利用这一规律,
可以大大简化程序。
*程序说明及注释
#include<stdio.h>
void main()
int i,x,y,last=1; /*变量 last 保存求 X 的 Y 次方过程
中的部分乘积的后三位*/
printf("Input X and Y(X**Y):");
scanf("%d**%d",&x,&y);
for(i=1;i<=y;i++) /*X 自乘 Y 次*/
last=last*x%1000; /*将 last 乘 X 后对 1000 取模,
即求积的后三位*/
printf("The last 3 digits of %d**%d
is:%d\\n",x,y,last%1000); /*打印结果*/
*运行结果
Input X and Y(X**Y):13**13
The last 3 digits of 13**13 is:253
Input X and Y(X**Y):13**20
The last 3 digits of 13**20 is:801
3. 借书方案知多少
小明有五本新书,要借给 A,B,C 三位小朋友,若每人每次
只能借一本,则可以有多少种不同的借法?
*问题分析及算法设计
本问题事实上是一个排列问题,即求从 5 个中取 3 个进行排
列的方法的总数。首先对五本书从 1 至 5 进行编号,然后运用穷
举的方法。假设三个人分别借这五本书中的一本,当三个人所借
的书的编号都不相同时,就是满意题意的一种借阅方法。
第 3 页
*程序说明及注释
void main()
int a,b,c,count=0;
printf("There are diffrent methods for XM to
distribute books to 3 readers:\\n");
for(a=1;a<=5;a++) /*穷举第一个人借 5 本书
中的 1 本的全部状况*/
for(b=1;b<=5;b++) /*穷举第二个人借 5 本书
中的一本的全部状况*/
for(c=1;a!=b&&c<=5;c++) /*当前两个人借不
同的书时,穷举第三个人借 5 本书
中的 1 本的全部
状况*/
if(c!=a&&c!=b) /*推断第三人及前
两个人借的书是否不同*/
printf(count%8"%2d:%d,%d,%d
":"%2d:%d,%d,%d\\n ",++count,a,b,c);
/*打印可能的借阅
方法*/
*运行结果
There are diffrent methods for XM to distribute books
to 3 readers:
1: 1,2,3 2: 1,2,4 3: 1,2,5 4:
1,3,2 5: 1,3,4
6: 1,3,5 7: 1,4,2 8: 1,4,3 9:
1,4,5 10:1,5,2
11:1,5,3 12:1,5,4 13:2,1,3
14:2,1,4 15:2,1,5
16:2,3,1 17:2,3,4 18:2,3,5
19:2,4,1 20:2,4,3
21:2,4,5 22:2,5,1 23:2,5,3
第 4 页
24:2,5,4 25:3,1,2
26:3,1,4 27:3,1,5 28:3,2,1
29:3,2,4 30:3,2,5
31:3,4,1 32:3,4,2 33:3,4,5
34:3,5,1 35:3,5,2
36:3,5,4 37:4,1,2 38:4,1,3
39:4,1,5 40:4,2,1
41:4,2,3 42:4,2,5 43:4,3,1
44:4,3,2 45:4,3,5
46:4,5,1 47:4,5,2 48:4,5,3
49:5,1,2 50:5,1,3
51:5,1,4 52:5,2,1 53:5,2,3
54:5,2,4 55:5,3,1
56:5,3,2 57:5,3,4 58:5,4,1
59:5,4,2 60:5,4,3
4. 数制转换
将任一整数转换为二进制形式
*问题分析及算法设计
将十进制整数转换为二进制的方法许多,这里介绍的实现
方法利用了 C 语言能够对位进行操作的特点。对于 C 语言来说,
一个整数在计算机内就是以二进制的形式存储的,所以没有必要
再将一个整数经过一系列的运算转换为二进制形式,只要将整数
在内存中的二进制表示输出即可。
*程序说明及注释
#include<stdio.h>
void printb(int,int);
void main()
int x;printf("Input number:");
scanf("%d",&x);
printf("number of decimal form:%d\\n",x);
第 5 页
printf(" it\'s binary form:");
printb(x,sizeof(int)*8); /*x:整数 sizeof(int):int
型在内存中所占的字节数
sizeof(int)*8:int 型 对
应的位数*/
putchar(\'\\n\');
void printb(int x,int n)
if(n>0)
putchar(\'0\'+((unsigned)(x&(1<<(n-1)))>>(n-1))); /*输
出第 n 位*/
printb(x,n-1); /*归调用,输出 x 的后 n-1 位*/
*运行结果
输入:8
输出:
number of decimal form:8
it\'s bunary form:01000
输入:-8
输出:number of decimal form:-8
it\'s binary form:1111111111111000
输入:32767
输出:number of decimal form:32767
it\'s binary form:11111
输入:-32768
输出:number of decimal form:-32768
it\'s binary form:10000
输入:128
输出:number of decimal form:128
it\'s binary form:00000
5. 打鱼还是晒网
剩余57页未读,继续阅读
资源评论
kfcel5889
- 粉丝: 3
- 资源: 5万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功