练习题5及参考答案.docx
- 文档编号:24150228
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:19
- 大小:18.84KB
练习题5及参考答案.docx
《练习题5及参考答案.docx》由会员分享,可在线阅读,更多相关《练习题5及参考答案.docx(19页珍藏版)》请在冰豆网上搜索。
练习题5及参考答案
窗体顶部
练习题5及参考答案
1.单项选择题
(1)语句while(!
e);中的条件!
e等价于 。
A.e==0 B.e!
=1
C.e!
=0 D.~e
【答】!
e等价于!
(e!
=0),即e==0。
本题答案为A。
(2)下面有关for循环的正确描述是 。
A.for循环只能用于循环次数已经确定的情况
B.for循环是先执行循环体语句,后判定表达式
C.在for循环中,不能用break语句跳出循环体
D.for循环体语句中,可以包含多条语句,但要用花括号括起来
【答】D
(3)C语言中 。
A.不能使用do-while语句构成的循环
B.do-while语句构成的循环必须用break语句才能退出
C.do-while语句构成的循环,当while语句中的表达式值为非零时结束循环
D.do-while语句构成的循环,当while语句中的表达式值为零时结束循环
【答】D
(4)C语言中while和do-while循环的主要区别是 。
A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do-while的循环控制条件严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
【答】A
(5)以下程序段 。
intx=-1;
do
{
x=x*x;
}
while(!
x);
A.是死循环 B.循环执行二次
C.循环执行一次 D.有语法错误
【答】C
(6)下列语句段中不是死循环的是____。
A.i=100;
while
(1)
{
i=i%100+1;
if(i==20)break;
}
B.for(i=1;;i++)
sum=sum+1;
C.k=0;
do
{
++k;
}while(k<=0);
D.s=3379;
while(s++%2+3%2)
s++;
【答】A
(7)与以下程序段等价的是____。
while(a)
{
if(b)continue;
c;
}
A.while(a) B.while(c)
{if(!
b)c;} {if(!
b)break;c;}
C.while(c) D.while(a)
{if(b)c;} {if(b)break;c;}
【答】A
(8)以下程序的输出结果是____。
#include
main()
{
inti;
for(i=4;i<=10;i++)
{
if(i%3==0)continue;
printf("%d",i);
}
}
A.45 B.457810 C.69 D.678910
【答】B
(9)以下程序的输出结果是____。
#include
main()
{
intnum=0;
while(num<=2)
{
num++;
printf("%d\n",num);
}
}
A.1 B.1 C.1 D.1
2 2 2
3 3
4
【答】C
2.填空题
(1)以下程序的运行结果是____。
#include
main()
{
ints=0,k;
for(k=7;k>=0;k--)
{
switch(k)
{
case1:
case4:
case7:
s++;break;
case2:
case3:
case6:
break;
case0:
case5:
s+=2;break;
}
}
printf("s=%d\n",s);
}
【答】s=7
(2)以下程序的运行结果是 。
#include
main()
{
inti=1,s=3;
do
{
s+=i++;
if(s%7==0)
continue;
else
++i;
}while(s<15);
printf("%d\n",i);
}
【答】执行第1次循环时,i++返回1,i=2,s=3+1=4,执行else部分,i=3;执行第2次循环时,i++返回3,i=4,s=4+3=7,执行if部分;执行第3次循环时,i++返回4,i=5,s=7+4=11,执行else部分,i=6;执行第4次循环时,i++返回6,i=7,s=11+6=17,执行else部分,i=8,此时while条件不满足,退出循环。
所以输出结果为:
8。
(3)以下程序的运行结果是____。
#include
main()
{
inti,j;
for(i=4;i>=1;i--)
{
printf("*");
for(j=1;j<=4-i;j++)
printf("*");
printf("\n");
}
}
【答】使用两重循环。
本题答案为:
*
**
***
****
(4)以下程序的运行结果是____。
#include
main()
{
inti,j,k;
for(i=1;i<=6;i++)
{
for(j=1;j<=20-2*i;j++)
printf("");
for(k=1;k<=i;k++)
printf("%4d",i);
printf("\n");
}
}
【答】使用两重循环。
本题答案为:
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
6 6 6 6 6 6
(5)以下程序的运行结果是____。
#include
main()
{
inti,j,k;
for(i=1;i<=6;i++)
{
for(j=1;j<=20-3*i;j++)
printf("");
for(k=1;k<=i;k++)
printf("%3d",k);
for(k=i-1;k>0;k--)
printf("%3d",k);
printf("\n");
}
}
【答】使用两重循环。
本题答案为:
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1
(6)以下程序的运行结果是____。
#include
main()
{
inti,j,k;
for(i=1;i<=4;i++)
{
for(j=1;j<=20-3*i;j++)
printf("");
for(k=1;k<=2*i-1;k++)
printf("%3s","*");
printf("\n");
}
for(i=3;i>0;i--)
{
for(j=1;j<=20-3*i;j++)
printf("");
for(k=1;k<=2*i-1;k++)
printf("%3s","*");
printf("\n");
}
}
【答】使用两重循环。
本题答案为:
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
3.编程题
(1)编写一个程序,求之值。
【解】使用一个for循环即可。
程序如下:
/*文件名:
exci5_1.cpp*/
VC++6.0
#include
main()
{
inti;
floats;
s=0;
for(i=1;i<=100;i++)
{
if(i%2==0) /*i为偶数*/
s=s-1.0/i;
else /*i为奇数*/
s=s+1.0/i;
}
printf("s=%f",s);
}
程序运行结果:
s=0.688172
(2)编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。
【解】采用两层循环求解,外层i从1到n,里层从1到i。
程序如下:
/*文件名:
exci5_2.cpp*/
VC++6.0
#include
main()
{
inti,j,s1,s=0,n;
printf("输入n:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s1=0; /*求1+…+i*/
for(j=1;j<=i;j++)
s1=s1+j;
s=s+s1;
}
printf("s=%d\n",s);
}
(3)编写一个程序,对用户输入的字符流(以Ctrl+Z结束)中的行、单词和字符个数进行统计。
【解】用nc、nl和nw分别统计字符个数、行数和单词数。
使用lnword作为单词开始与否的标记,开始时为0。
lnword=0表示一个单词可以开始计数,为了使一个单词只计一次,在遇到单词的第一个字符后让lnword为1。
程序如下:
/*文件名:
exci5_3.cpp*/
VC++6.0
#include
#defineEOF-1
#defineYES1
#defineNO 0
main()
{
intc,nl,nw,lnword,nc;
lnword=NO;
nl=1;nw=nc=0;
while((c=getchar())!
=EOF) /*按Ctrl+Z输入结束*/
{
nc++;
if(c=='\n')nl++;/*增加一行*/
if(c==''||c=='\n'||c=='\t')lnword=NO;/*不计空白符*/
elseif(lnword==NO)
{
lnword=YES;++nw;
}
}
printf("字符个数:
%d,行数:
%d,单词个数:
%d\n",nc,nl,nw);
}
(4)编写一个程序,用户输入一个正整数,把它的各位数字前后颠倒一下,并输出颠倒后的结果。
【解】对于正整数n,从高位到低位依次计算出它的各位上的数字d,在计算出d后立即输出该数字,输出序列构成的数正好是n的各位数字前后颠倒的结果。
程序如下:
/*文件名:
exci5_4.cpp*/
VC++6.0
#include
main()
{
intn,d;
printf("输入一个正整数:
");
scanf("%d",&n);
printf("颠倒结果:
");
do
{
d=n%10;
printf("%d",d);
n=n/10;
}while(n!
=0);
printf("\n\n");
}
(5)编写一个程序,求输入的三个正整数的最小公倍数。
【解】采用穷举法求解。
输入三个整数分别为x,y和z,该最小公倍数一定是x的倍数。
程序使用while循环,倍增x查找满足s%y==0&&s%z==0条件的s。
程序如下:
/*文件名:
exci5_5.cpp*/
VC++6.0
#include
main()
{
intx,y,z,s;
printf("输入三个整数=>x,y,z:
");
scanf("%d,%d,%d",&x,&y,&z);
s=x;
while
(1)
{
if(s%y==0&&s%z==0)
break;
s+=x;
}
printf("最小公倍数:
%d\n",s);
}
(6)编写一个程序,求出200到300之间的数,且满足条件:
它们三个数字之积为42,三个数字之和为12。
【解】采用穷举法求解。
使用两重for循环嵌套语句,i、j、k分别表示该数的百位数、十位数、个位数,i只能是2,j和k进行循环。
程序如下:
/*文件名:
exci5_6.cpp*/
VC++6.0
#include
main()
{
inti,j,k;
i=2;
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
if(i*j*k==42&&i+j+k==12)
printf("i=%d,j=%d,k=%d\n",i,j,k);
}
(7)编写一个程序,求出满足下列条件的四位数:
该数是个完全平方数,且第一、三位数字之和为10,第二、四位数字之积为12。
【解】采用穷举法求解。
该数是一个四位数,其平方数只能在32到99之间,使用一个for循环即可。
程序如下:
/*文件名:
exci5_7.cpp*/
VC++6.0
#include
main()
{
inti,j,a,b,c,d;
for(i=32;i<=99;i++)
{
j=i*i; /*j为要找的数*/
a=j/1000; /*a为j的千位数*/
b=j/100-a*10; /*b为j的百位数*/
c=j/10-a*100-b*10; /*c为j的十位数*/
d=j-a*1000-b*100-c*10; /*d为j的个位数*/
if(a+c==10&&b*d==12)
printf("%d",j);
}
}
(8)编写一个程序,求e的值。
【解】设,则。
采用do-while循环语句,程序如下:
/*文件名:
exci5_8.cpp*/
VC++6.0
#include
main()
{
floatt,e=0;
intn=2;
t=1;
do
{
e+=t;
t=t/n++;
}while(t>1.0e-6);
printf("e=%f\n",e);
}
(9)编写一个程序,求满足如下条件的最大的n:
【解】采用穷举法求解。
最大的n从1开始找起,然后递增n,并且每次计算累加平方和s,当s大于1000时,这时的即为所得。
程序如下:
/*文件名:
exci5_9.cpp*/
VC++6.0
#include
main()
{
intn,s;
s=n=0;
while(s<=1000)
{
++n;
s=s+n*n;
}
printf("n=%d\n",n-1);
}
(10)编写一个程序,从键盘输入一个整数,将每位数字转变为英文,如输入9124,则输出:
nine,one,two,four。
【解】使用一个for循环获取输入的每个数字,然后使用switch语句进行转变。
程序如下:
/*文件名:
exci5_10.cpp*/
VC++6.0
#include
main()
{
charc;
inti;
printf("输入一个数:
");
for(i=0;(c=getchar())!
='\n';i++)
{
if(i>0)printf(",");
switch(c)
{
case'0':
printf("zero");break;
case'1':
printf("one");break;
case'2':
printf("two");break;
case'3':
printf("three");break;
case'4':
printf("four");break;
case'5':
printf("five");break;
case'6':
printf("six");break;
case'7':
printf("serven");break;
case'8':
printf("eight");break;
case'9':
printf("nine");break;
}
}
printf("\n");
}
(11)某人摘下一些桃子,卖掉一半,又吃了一只;第二天卖掉剩下的一半,又吃了一只;第三天、第四天、第五天都如此办理,第六天一看,发现就剩下一只桃子了。
编写一个程序,采用迭代法问某人共摘了多少只桃子。
【解】经分析有:
第6天的桃子数:
第5天的桃子数:
第4天的桃子数:
第3天的桃子数:
第2天的桃子数:
第1天的桃子数:
迭代变量为n,迭代初值为,迭代表达式为,迭代条件为5≥i≥1。
程序如下:
/*文件名:
exci5_11.cpp*/
VC++6.0
#include
main()
{
inti,n=1;
for(i=5;i>=1;i--)
n=(n+1)*2;
printf("n=%d\n",n);
}v
窗体底部
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 练习题 参考答案