第5章 循环结构程序设计习题解答

更新时间:2024-01-26 14:46:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第5章 循环结构程序设计习题解答

1.输入n个整数,求这n个数之中的偶数平均值,并输出。 #include void main() {

int n,i,x,k=0,s=0;

printf(\ scanf(\

printf(\ for(i=0;i

scanf(\

if(x%2==0){s+=x;k++;} } s/=k;

printf(\}

2.输入一串字符,直到输入一个星号*为止,统计(输出)其中字母个数和数字字符个数。 #include void main() {

int n=0,m=0; char c;

printf(\ do {

scanf(\ if(c>='0'&&c<='9') n++;

else if(c>='A'&&c<='Z'||c>='a'&&c<='z') m++; }while(c!='*');

printf(\ printf(\}

3.从键盘输入一正整数n,计算该数各位数字之和并输出。例如,输入数是5246,则计算5+2+4+6=17并输出。 #include void main() {

int n,r,m=0,s=0;

printf(\

scanf(\ do {

r=n; s=s+r; n/=10; if(m==0)

printf(\加式中的第1项不带“+” else

printf(\ m++; }while(n>0);

printf(\ }

4.输入一个字符串,将其中的大写字母改为小写字母,小写字母改为大写字母,然后输出。 #include void main() {

char c;

printf(\ do {

scanf(\ if(c>='A'&&c<='Z') c+=32;

else if(c>='a'&&c<='z') c-=32;

printf(\ }while(c!='*'); putchar('\\n'); }

注:可以使用逐位异或运算^,实现大小字母变为小写字母,小写字母变为大写字母: #include void main() {

char c;

printf(\ do {

scanf(\

if(c>='A'&&c<='Z' || c>='a'&&c<='z') c^=0x20; //大、小写转换 printf(\

}while(c!='*'); putchar('\\n'); }

5.设某县2000年工业总产值为200亿元,如果该预计平均年工业总产值增长率为4.5%,那么多少年后该县年工业总产值超过500亿元? #include void main() {

double x=200; int i;

for(i=0;x<=500;i++) x*=(1+0.045);

printf(\}

6.输出1~999中能被3整除,而且至少有一位数字是5的所有数字。 #include void main() {

int i,a1,a2,a3,m,n=0; for(i=1;i<1000;i++) {

a1=i,m=i/10; a2=m,m=m/10; a3=m,m=m/10;

if(i%3==0 && (a1==5 || a2==5 || a3==5)) {

printf(\ n++;

if(n==10) {

putchar('\\n'); n=0; } } }

putchar('\\n'); }

7.求爱因斯坦数学题。有一条长阶,若每步跨2阶,则最后剩1价;若每步跨3阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨6价,则最后剩5阶;若每步跨7阶,最后正好一阶不剩。求该长阶有多少级台阶。 为了方便编程,设长阶的级数不超过1000级。 #include

void main() {

int i;

for(i=7;i<1000;i++)

if(i%2==1 && i%3==2 && i%5==4 && i%6==5 && i%7==0) printf(\}

8.输入一个3位数,判断是不是一个水仙花数。水仙花数是指3个数的各位数字的立方和等于这个3位数本身。例如,153=1*1*1+5*5*5+3*3*3。 #include void main() {

int i,k,s=0,a,r;

for(i=100;i<1000;i++) {

a=i;

for(k=0;k<3;k++) {

r=a; s=s+r*r*r; a=a/10; }

if(s==i)

printf(\ s=0; } }

9.计算斐波那契分数序列前n项之和(n是某个常数,斐波那契分数列为分析:从已知的各项可以得到一个递推关系: xn?1?1?2358。 ,,,?)

12351 xn#include void main() {

int i,n;

float x=2,s=0;

printf(\ scanf(\ for(i=2;i<=n;i++) {

x=1+1/x; s=s+x; }

printf(\}

10.输入一个正整数,各输出n行的正(倒)三角宝塔图案。 正三角宝塔图: #include void main() {

int i,j,n;

printf(\ scanf(\ for(i=1;i<=n;i++) {

for(j=n-i;j>0;j--)

putchar(' '); //输出空格 for(j=1;j<=i*2-1;j++)

printf(\输出\ putchar('\\n'); //换行 } }

倒三角宝塔图: #include void main() {

int i,j,n;

printf(\ scanf(\ for(i=1;i<=n;i++) {

for(j=i;j>0;j--)

putchar(' '); //输出空格 for(j=1;j<=2*n-2*i+1;j++) printf(\输出\ putchar('\\n'); //换行 } }

11.输出九九表。 #include void main() {

int i,j;

for(i=1;i<=9;i++) {

for(j=1;j<=i;j++) {

printf(\ putchar(' '); }

putchar('\\n'); } }

12.输入一串数字,直到输入一个0为止,统计(输出)其中的正整数和负整数个数以及所有正整数的平均值和所有负数的平均值(原题有误,误为一串字符)。 #include void main() {

int a,n=0,m=0,ps=0,ns=0;

printf(\ do {

scanf(\ if(a>0) {

ps+=a; n++; }

else if(a<0) {

ns+=a; m++; }

}while(a!=0); ps/=n; ns/=m;

printf(\ printf(\}

13.一个整数等于该数所有因子之和,则称该数是一个完数。例如,6和28都是完数。因为6=1+2+3,28=1+2+4+7+14。输出1000以内的所有完数。 #include void main() {

int i,j,s;

for(i=1;i<1000;i++) {

s=1;

for(j=2;j<=i/2;j++) {

if(i%j==0)

s+=j; }

if(s==i) //是完数输出各因数 {

printf(\ for(j=2;j<=i/2;j++) {

if(i%j==0)

printf(\ }

printf(\ } } }

14.编写程序,按下列公式计算e的值(精度为1.0e-6)。

e?1?1111????? 1!2!3!n! #include

void main() {

int i=1; long t=1; double e=1.0; do {

t*=i; e+=1.0/t; i++;

}while(1.0/t>1.0e-6); printf(\}

32

15.用二分法求方程2x-4x+3x=0 在(-10,10)附近的根(二分法:先找到a、b,使f(a)、f(b)异号,说明在区间(a,b)内一定有零点,然后求f((a+b)/2)<0,则在区间((a+b)/2,b)内有零点,按上述方法再求盲从该区间中点的函数值,通过每次把f(x)的零点所在的小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,该值即

是方程的根)。

2

分析:方程可以写为x(2x-4x+3)=0,可以知道0是f(x)的零点,是一个根,另外两个根都

22

是(2x-4x+3)的零点,若x<=0,f(x)= (2x-4x+3)>0,在程序中从0求使f(x)变号的x值。f(0)=3,且二次系数a=2>0,开口向上,没有其它的零点,所以题目是没有其它的解的。

实验5 循环结构程序设计 6.程序填空。

⑴求出100以内的整数中最大的可被13整除的数是哪一个数。 #include int main() {

int i;

for(i=100;i>0;i--) {

if(i==0)break; }

printf(\ return 0; }

⑵以下程序用“辗转相除法”来求两个正整数的最大公约数,请填空。 #include main() {

int m,n,r; do {

printf(\ scanf(\ }while(m<=0||n<=0); do {

r=m%n;m=n;n=r; }while(r!=0); printf(\ return 0; }

⑶以下程序打印如下图案,程序运行后输入4给变量n,请填空。

#include #define S ' ' void main() {

int i,j,n;

printf(\ scanf(\&n); for(i=1;i<=n;i++) //控制输出前年n行 {

for(j=1;j<=10;j++)putchar(S);

for(j=1;j<=n-i;j++)putchar(S);//每行的启始空格越来越少 for(j=1;j

for(i=1;i<=n-1;i++) //控制输出后n-1行 {

for(j=1;j<=10;j++)putchar(S);

for(j=1;j<=i;j++)putchar(S); //每行的启始空格越来越多 for(j=1;j<(n-i)*2;j++)putchar('*');//每行的'*'越来越少 putchar('\\n'); } }

注:各星号之间带空格:

程序如下:

#include #define S ' ' void main() {

int i,j,n;

printf(\ scanf(\

for(i=1;i<=n;i++) //控制输出前n行 {

for(j=1;j<=10;j++)putchar(S);

for(j=1;j<=n-i;j++){putchar(S);putchar(S);}//每行的启始空格越来越少 for(j=1;j

for(i=1;i<=n-1;i++) //控制输出后n-1行 {

for(j=1;j<=10;j++)putchar(S);

for(j=1;j<=i;j++){putchar(S);putchar(S);}//每行的启始空格越来越多 for(j=1;j<(n-i)*2;j++){putchar('*');putchar(' ');}//每行的'*'越来越少 putchar('\\n'); } }

7.编程。 ⑴求:

?k??k111001002

#include void main() {

int i,k;

long s,s1=0,s2=0; printf(\ scanf(\ for(i=1;i<=100;i++) s1+=k;

for(i=1;i<=200;i++) s2+=k*k; s=s1+s2;

printf(\ }

⑵从键盘输入一个整数,判断它是否为素数。 #include #include main() {

int m,i,k; short prime;

printf(\ scanf(\ prime=1;

k=(int)(sqrt(m)); for(i=2;i<=k;i++) if(m%i==0) {

prime=0; break; } if(prime)

printf(\ else

printf(\ return 0; }

⑶求3~150之间的所有素数之和。 #include #include main() {

int i,k,j,s=0,n=0; short prime;

for(i=3;i<=150;i+=2) {

prime=1;

k=(int)(sqrt(i)); for(j=2;j<=k;j++) if(i%j==0) {

prime=0; break; } if(prime) {

s=s+i;

printf(\ n++;

if(n==0)putchar('\\n'); } }

printf(\~150_prime:%d\\n\ return 0; }

⑷有一个八层灯塔,每层所点灯数都等于上一层的两倍,一共有765盏灯,求塔底灯数。 分析:

设最高层为x盏灯,则:

x+2*x+4*x+8*x+16*x+32*x+64*x+128*x=765 x*(1+2+4+8+16+32+64+128)=765

塔底灯数=x*2 #include #include int main() {

int x,y,i,n=1,s=0; for(i=1;i<8;i++) {

n*=2; s+=n; }

x=765/s;

y=x*pow(2,7);

printf(\ return 0; }

⑸如果要用15个小圆圈排成三角形,三角形的第一行只有一个小圆圈,第二行有两个小圆圈,以此类推。构成有n行的小圆圈的总数=1+2+3+??+n,即为“三角数”。

7

注:用“*”代替小圆圈。

#include int main() {

int i,j,k,n;

printf(\ scanf(\ for(i=1;i<=n;i++) {

for(k=1;k<=10;k++)putchar(' '); //每行都先输出10个空格,把图形右移 for(k=0;k

⑹求[1,100]间有奇数个不同因子的整数共有多小个,其中最的是哪一个。 #include int main() {

int i,j,n,k=1,max=0,m; for(i=1;i<=100;i++) {

for(j=1,n=0;j

printf(\ if(i>max){max=i;m=n;} k++; }

if(k==0){putchar('\\n');k=1;} }

putchar('\\n');

printf(\:%d:%d\\n\ return 0; }

⑺已知A>B>C>0, A,B,C为整数,且A+B+C<100,求满足少组。

满足的条件两边同乘ABC可以改写为:BC?AC?AB #include int main() {

int A,B,C,n=0;

for(A=1;A<=100;A++) for(B=1;B<=100;B++) for(C=1;C<=100;C++)

if(A+B+C<100 && B*B*C*C+A*A*C*C==A*A*B*B) {

n++;

printf(\ }

printf(\:%d\\n\ return 0; }

222222222111 的A,B,C共有多??222ABC

本文来源:https://www.bwwdw.com/article/b40w.html

Top