循环结构练习Word文件下载.docx
《循环结构练习Word文件下载.docx》由会员分享,可在线阅读,更多相关《循环结构练习Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
![循环结构练习Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-1/6/2208eead-3c75-4dcc-be2f-e3a0a8b33495/2208eead-3c75-4dcc-be2f-e3a0a8b334951.gif)
设原先鱼的总数是x条
设A、B、C、D、E拿之前剩下的鱼数量分别为A、B、C、D、E:
则
A=x;
B=(A-1)*4/5;
C=(B-1)*4/5;
D=(C-1)*4/5;
E=(D-1)*4/5;
E可以是6、11、16。
。
(以5递增)
若E已知,则由E可依次推出D、C、B、A。
此外,D、C、B、A要满足以下约束:
(D-1)mod5==0
(C-1)mod5==0
(B-1)mod5==0
(A-1)mod5==0
*/
#include<
intfish;
intnewfish;
//迭代变量,记录鱼的数量
intfinish,isOK;
//结束标志
inti;
//for循环控制变量
finish=0;
for(fish=6;
finish==0;
fish+=5)//对E进行递增,E满足(E-1)mod5==0
{
newfish=fish;
isOK=1;
for(i=1;
i<
=4&
isOK==1;
i++){//四次循环,依次求得D,B,C,A
newfish=newfish*5/4+1;
if((newfish-1)%5!
=0)//如果不满足(fish-1)mod5==0
isOK=0;
}
if(isOK!
=0)
finish=1;
至少是%d条鱼"
newfish);
3、第6章习题6.9小球反弹
#defineTIMES10
main()
inttimes;
//记录是第几次弹起
doubleheight;
//记录小球弹起时的高度
height=10000.0;
/*height的单位是cm*/
times=1;
/*第一次循环求第1次弹起高度*/
while(times<
=TIMES){
height=height/2;
/*除以2后的height表示第times次弹起的高度*/
times=times+1;
第%d次小球弹起的高度是%f厘米\n"
TIMES,height);
4、//判断回文数:
回文数是指一个数的逆序和自身相等的数,如222,15251等
intnum;
//存放输入的整数
intnum1;
/*循环中处理的数,每循环一次,右边少一位,假设num为1234,则num1初始值为1234,然后是123,然后是12......;
intreverse;
/*是用分解出来的数字组成的新数*/
intm;
/*m:
存放每一个分解出来的数字;
请输入一个小于8位的正整数:
"
);
//读取要判断的整数
scanf("
%d"
&
num);
/*从右到左依次取出各个数字组装成一个新的整数保持到reverse中*/
num1=num;
reverse=0;
while(num1!
=0){
m=num1%10;
/*取出num1的最低位*/
reverse=reverse*10+m;
/*将最低位组装到reverse中*/
num1=num1/10;
/*去掉num1的最低位*/
}
if(num==reverse)
%d是回文数\n"
num);
else
%d不是回文数\n"
system("
PAUSE"
5、第6章习题6.10猴子吃桃
intday;
//表示当前求解的是第几天吃前的桃子数
intpeach;
//示某一天的桃子数
day=9;
//第一次循环求第9天吃前的桃子数
peach=1;
//第10天吃前的桃子数是1
第10天桃子数是:
1\n"
while(day>
=1){
peach=2*(peach+1);
第%d天桃子数是:
day,peach);
day--;
第一天桃子数是:
peach);
6、//从高位分解整数的各个位
//输入的数
intlength;
intn;
//代表10的lenth-1次方,
intk;
//循环控制变量
//代表截取的高位
输入整数:
length=0;
n=num;
if(num==0)//若输入的是0,则其长度位1
length=1;
else//从最低位开始,依次从n中砍掉各位
while(n>
0){
n=n/10;
//去掉n的最低位
length++;
/*从num中分解出一位数字,length加1*/
}
%d的长度是%d位"
num,length);
n=1;
for(k=1;
k<
length;
k++)n=n*10;
while(n>
0)
m=num/n;
num=num%n;
n=n/10;
printf("
%d"
m);
7、投骰子。
投骰子若干次,统计每个面出现的次数。
次数从键盘输入。
time.h>
{
intface,roll,frequency1=0,frequency2=0,frequency3=0;
intfrequency4=0,frequency5=0,frequency6=0;
scanf("
n);
srand(time(NULL));
/*usethetimeofsystemtoseedtherandfunction,anyquestionpleaseask
teacherliuzhenhua*/
for(roll=1;
roll<
=n;
roll++)
face=1+rand()%6;
//rand()functionreturnsapseudorandomintegerintherange0to//RAND_MAX
switch(face)
{
case1:
++frequency1;
break;
case2:
++frequency2;
case3:
++frequency3;
case4:
++frequency4;
case5:
++frequency5;
case6:
++frequency6;
%s%13s\n"
"
Face"
frequency"
1%13d\n"
frequency1);
2%13d\n"
frequency2);
3%13d\n"
frequency3);
4%13d\n"
frequency4);
5%13d\n"
frequency5);
6%13d\n"
frequency6);
pause"
8、第6章习题6.2字符统计
统计字符
问题描述:
输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
输入与输出要求:
输入一个字符序列,字符序列长度小于100,以换行符“\n”结束。
输出各类字符的个数,依次是英文字符,空格,数字,其他字符(以空格分开),占一行。
程序运行效果:
Sample1:
Pleaseinputastring:
Happynewyear#100101!
ThenumberofEnglishcharacters,spaces,numbers,othercharactersare:
12462
Sample2:
yes,thereare2eggs.
15312
charch;
intc1=0,c2=0,c3=0,c4=0;
/*c1表示字母字符个数,c2表示空格字符,c3表示数字字符,c4表示其它字符*/
printf(“Pleaseinputastring:
”);
while((ch=getchar())!
='
\n'
)
if(ch>
a'
ch<
z'
||ch>
A'
Z'
c1++;
elseif(ch=='
'
c2++;
elseif(ch>
0'
9'
c3++;
else
c4++;
%d%d%d%d\n"
c1,c2,c3,c4);
9、打印乘法表
1*1=1
2*1=22*2=4
3*1=33*2=63*3=9
4*1=44*2=84*3=124*4=16
5*1=55*2=105*3=155*4=205*5=25
6*1=66*2=126*3=186*4=246*5=306*6=36
7*1=77*2=147*3=217*4=287*5=357*6=427*7=49
8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64
9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81
inti,j;
for(i=1;
=9;
i++)
for(j=1;
j<
i;
j++)
printf("
%d*%d=%d\t"
i,j,i*j);
%d*%d=%d\n"
10、第6章习题6.14打印实心菱形
已知一个整数n,你要根据n打印出n阶的实心菱形。
输入一个整数n(要打印的菱形阶数)。
输出n阶实心菱形(占2*n-1行)。
Pleaseinputaninteger:
3
Theresultis:
*
***
*****
6
*****
*******
*********
***********
intt,d=0,n,i,j;
scanf("
\n"
for(j=n-i;
j>
=1;
j--)
"
=2*i-1;
*"
for(i=n-1;
i>
i--)
11、打印空心菱形
问题描述:
已知一个整数n,你要根据n打印出n阶的空心菱形。
输入一个整数n,代表要打印的菱形阶数.输出n阶空心菱形,占2*n-1行。
5
**
**
);
=2*i-3;
if(i>
1)
第3题.实验手册中实验4的第4题(进制转换)
Problem4:
进制转换
已知一个只包含0和1的二进制数,二进制数的长度不大于10。
你的任务是将其转换为十进制数并打印出来。
提示:
用除法和求余运算符每次从右到左获取二进制整数的各位数字。
在十进制数值系统中,最右边的数字是个位,个位的左边依次是十位、百位、千位等等。
与之类似,在二进制数值系统中,最右边的数字是1位,左边的数字依次为2位、4位、8位等等。
十进制数234可分解为4*1+3*10+2*100,二进制数1101可分解为1*1+0*2+1*4+1*8,它等价于十进制数1+0+4+8,即13。
输入一个整数n,代表二进制数,二进制数的长度不大于10。
输出二进制转换后的十进制数,占一行。
1101
13
11111
31
intlength,n,sum,temp,i,p2,p10,high;
//计算n的长度
temp=n;
if(n==0)
length=1;
elsewhile(temp)
temp=temp/10;
//计算最高位的位权
for(i=1,p2=1,p10=1;
i++)
p2=p2*2;
p10=p10*10;
//将二进制数转换为十进制数
for(i=1,temp=n,sum=0;
length>
1&
=length;
high=temp/p10;
//截取最高位
sum=sum+high*p2;
//最高位乘以对应的二进制数位权,并累加
temp=temp%p10;
//去掉最高位
p2=p2/2;
p10=p10/10;
if(length==1)
n);
sum);
12、第6章习题6.15,比赛分组
两个乒乓球队进行对抗赛,甲队出A、B、C、D四人;
乙队出W、X、Y、Z四人。
已知部分抽签结果是:
A不与X比赛;
C不与X、Z比赛,D不与W比赛。
你的任务是将全部可能的抽签结果打印出来。
输出比赛抽签结果,占三行,每组后再输出一个空行。
最后输出总方法数,即“Thereare%dwaystoassigntheplayers.”。
Theresultofballotis:
Group1:
AVSW
BVSX
CVSY
DVSZ
Group2:
BVSZ
DVSX
Group3:
AVSY
CVSW
…
Thereare7waystoassigntheplayers.
intd=0,A,B,C,D;
for(A='
W'
;
A<
A++)
for(B='
B<
B++)
if(A!
=B)
for(C='
C<
C++)
{
if(C!
=A&
C!
for(D='
D<
D++)
{
if((D!
D!
=B&
=C)&
(A!
X'
))
{
printf("
Group%d:
++d);
AVS%c\n"
A);
BVS%c\n"
B);
CVS%c\n"
C);
DVS%c\n"
D);
}
}
}
Thereare%dwaystoassigntheplayers.\n"
d);