C语言练习题1-5及参考答案(6)

2019-04-09 11:08

num++;

printf(\ } } A. 1

B. 1

C. 1

D. 1

2

2 2

3

3

4

【答】C

2. 填空题

(1)以下程序的运行结果是____。 #include main() {

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 main() { int i=1,s=3; do { s+=i++;

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 main() {

int i,j;

for (i=4;i>=1;i--) {

printf(\

for (j=1;j<=4-i;j++) printf(\ printf(\ } }

【答】使用两重循环。本题答案为:

* ** *** ****

(4)以下程序的运行结果是____。 #include main() {

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 main() {

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 main() {

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 main() {

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 main() { int i,j,s1,s=0,n; printf(\输入n:\ scanf(\ for (i=1;i<=n;i++) { s1=0;

/* 求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 #define EOF -1 #define YES 1 #define NO 0 main() { }

(4)编写一个程序,用户输入一个正整数,把它的各位数字前后颠倒一下,并输出颠倒后的结果。

【解】对于正整数n,从高位到低位依次计算出它的各位上的数字d,在计算出d后立即输出该数字,输出序列构成的数正好是n的各位数字前后颠倒的结果。程序如下: /*文件名:exci5_4.cpp*/ #include main() {

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 main() { }

(6)编写一个程序,求出200到300之间的数,且满足条件:它们三个数字之积为42,三个数字之和为12。

【解】采用穷举法求解。使用两重for循环嵌套语句,i、j、k分别表示该数的百位数、十位数、个位数,i只能是2,j和k进行循环。程序如下: /*文件名:exci5_6.cpp*/ #include main() { }

(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 main() { */ */ */ }

(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 main() {

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 main() { }

(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 main()

29

VC++6.0 即为所

(11)某人摘下一些桃子,卖掉一半,又吃了一只;第二天卖掉剩下的一半,又吃了一只;第三天、第四天、第五天都如此办理,第六天一看,发现就剩下一只桃子了。编写一个程序,采用迭代法问某人共摘了多少只桃子。 【解】经分析有:

第6天的桃子数:

第5天的桃子数:第4天的桃子数:第3天的桃子数:第2天的桃子数:第1天的桃子数:

迭代变量为n,迭代初值为

,迭代表达式为

迭代条件为5≥i≥1。程序如下: /*文件名:exci5_11.cpp*/ #include main() { int i,n=1; for (i=5;i>=1;i--)

n=(n+1)*2; printf(\

}

VC++6.0 30


C语言练习题1-5及参考答案(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中级配电线路工技能题库

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: