num++;
printf(\ } } A. 1
B. 1
C. 1
D. 1
2
2 2
3
3
4
【答】C
2. 填空题
(1)以下程序的运行结果是____。 #include
int s=0,k; for (k=7;k>=0;k--) {
switch(k) {
case 1: case 4:
case 7: s++; break; case 2: case 3: case 6: break; case 0:
case 5: s+=2; break; } }
printf(\}
【答】s=7
(2)以下程序的运行结果是 。
#include
if (s%7==0)
continue; else
++i;
} while (s<15); printf(\
}
【答】执行第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
int i,j;
for (i=4;i>=1;i--) {
printf(\
for (j=1;j<=4-i;j++) printf(\ printf(\ } }
【答】使用两重循环。本题答案为:
* ** *** ****
(4)以下程序的运行结果是____。 #include
int i,j,k;
for (i=1;i<=6;i++) {
for (j=1;j<=20-2*i;j++) printf(\ for (k=1;k<=i;k++) printf(\ printf(\ } }
【答】使用两重循环。本题答案为: 1 2 2 3 3 3
26
4 4 4 4 5 5 5 5 5 6 6 6 6 6 6
(5)以下程序的运行结果是____。 #include
int i,j,k; for (i=1;i<=6;i++) {
for (j=1;j<=20-3*i;j++) printf(\ for (k=1;k<=i;k++) printf(\ for (k=i-1;k>0;k--) printf(\ printf(\ } }
【答】使用两重循环。本题答案为: 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
int i,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(\ printf(\ }
for (i=3;i>0;i--) {
for (j=1;j<=20-3*i;j++) printf(\ for (k=1;k<=2*i-1;k++) printf(\ printf(\ } }
【答】使用两重循环。本题答案为:
* * * * * * * * * * * * * * * * * * * * * * * * *
3. 编程题
(1)编写一个程序,求
之值。【解】使用一个for循环即可。程序如下: /*文件名:exci5_1.cpp*/ VC++6.0 #include
int i; float s; 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=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
/* 求1+ ? +i */
for (j=1;j<=i;j++)
27
}
}
s1=s1+j; }
do {
d=n; printf(\n=n/10;
s=s+s1;
printf(\
(3)编写一个程序,对用户输入的字符流(以Ctrl+Z结束)中的行、单词和字符个数进行统计。
【解】用nc、nl和nw分别统计字符个数、行数和单词数。使用lnword作为单词开始与否的标记,开始时为0。lnword=0表示一个单词可以开始计数,为了使一个单词只计一次,在遇到单词的第一个字符后让lnword为1。程序如下: /*文件名:exci5_3.cpp*/ #include
(4)编写一个程序,用户输入一个正整数,把它的各位数字前后颠倒一下,并输出颠倒后的结果。
【解】对于正整数n,从高位到低位依次计算出它的各位上的数字d,在计算出d后立即输出该数字,输出序列构成的数正好是n的各位数字前后颠倒的结果。程序如下: /*文件名:exci5_4.cpp*/ #include
int n,d;
printf(\输入一个正整数:\scanf(\printf(\颠倒结果:\
28
VC++6.0 int c,nl,nw,lnword,nc; lnword=NO; nl=1;nw=nc=0;
while ((c=getchar())!=EOF) /*按Ctrl+Z输入结束*/ { }
printf(\字符个数:%d,行数:%d,单词个
nc++;
if (c=='\\n') nl++; /*增加一行*/
if (c==' ' || c=='\\n' || c=='\\t') lnword=NO; /*else if (lnword==NO) { }
lnword=YES;++nw;
VC++6.0 } while (n!=0); printf(\
(5)编写一个程序,求输入的三个正整数的最小公倍数。 【解】采用穷举法求解。输入三个整数分别为x,y和z,该最小公倍数一定是x的倍数。程序使用while循环,倍增x查找满足s % y == 0 && s % z == 0条件的s。程序如下: /*文件名:exci5_5.cpp*/ #include
(6)编写一个程序,求出200到300之间的数,且满足条件:它们三个数字之积为42,三个数字之和为12。
【解】采用穷举法求解。使用两重for循环嵌套语句,i、j、k分别表示该数的百位数、十位数、个位数,i只能是2,j和k进行循环。程序如下: /*文件名:exci5_6.cpp*/ #include
(7)编写一个程序,求出满足下列条件的四位数:该数是个完全平方数,且第一、三位数字之和为10,第二、四位数字之积为12。 【解】采用穷举法求解。该数是一个四位数,其平方数只能在32到99之间,使用一个for循环即可。程序如下:
int i,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(\
VC++6.0 int x,y,z,s;
printf(\输入三个整数=>x,y,z:\scanf(\s=x; while (1) { }
printf(\最小公倍数:%d\\n\
if (s%y==0 && s%z==0)
break; s+=x;
VC++6.0 不计空白符*/
数:%d\\n\
/*文件名:exci5_7.cpp*/ #include
(8)编写一个程序,求e的值。
}
d=j-a*1000-b*100-c*10; if (a+c==10 && b*d==12)
printf(\
c=j/10-a*100-b*10;
b=j/100-a*10;
int i,j,a,b,c,d; for (i=32;i<=99;i++) {
j=i*i;
VC++6.0 {
int n,s; s=n=0;
while (s<=1000) { ++n; s=s+n*n;
/*j为要找的数*/ /*a为j的千位数/*b为j的百位数/*c为j的十位数
}
printf(\}
(10)编写一个程序,从键盘输入一个整数,将每位数字转变为英文,如输入9124,则输出:nine,one,two,four。
【解】使用一个for循环获取输入的每个数字,然后使用switch语句进行转变。程序如下: /*文件名:exci5_10.cpp*/ #include
char c; int i;
printf(\输入一个数:\
for (i=0;(c=getchar())!='\\n';i++) { }
printf(\
if (i>0) printf(\switch(c) { }
case '0':printf(\case '1':printf(\case '2':printf(\case '3':printf(\case '4':printf(\case '5':printf(\case '6':printf(\case '7':printf(\case '8':printf(\case '9':printf(\
a=j/1000;
/*d为j的个位数*/
VC++6.0
【解】设
,则
。采
用do-while循环语句,程序如下: /*文件名:exci5_8.cpp*/ #include
(9)编写一个程序,求满足如下条件的最大的n:
float t,e=0; int n=2; t=1; do {
e+=t; t=t/n++;
VC++6.0 }
} while (t>1.0e-6); printf(\
【解】采用穷举法求解。最大的n从1开始找起,然后递增n,并且每次计算累加平方和s,当s大于1000时,这时的得。程序如下:
/*文件名:exci5_9.cpp*/ #include
29
VC++6.0 即为所
(11)某人摘下一些桃子,卖掉一半,又吃了一只;第二天卖掉剩下的一半,又吃了一只;第三天、第四天、第五天都如此办理,第六天一看,发现就剩下一只桃子了。编写一个程序,采用迭代法问某人共摘了多少只桃子。 【解】经分析有:
第6天的桃子数:
第5天的桃子数:第4天的桃子数:第3天的桃子数:第2天的桃子数:第1天的桃子数:
迭代变量为n,迭代初值为
,迭代表达式为
,
迭代条件为5≥i≥1。程序如下: /*文件名:exci5_11.cpp*/ #include
n=(n+1)*2; printf(\
}
VC++6.0 30