当前位置:首页 > C程序设计作业集
20.若运行以下程序时,输入2473↙,则程序的运行结果是 。
main ( ) { int c;
while ((c=getchar( )) ! =?\\n?) switch (c-?2?) { case 0 :
case 1 : putchar (c+4) ;
case 2 : putchar (c+4) ; break ; case 3 : putchar (c+3) ;
default : putchar (c+2) ; break ; }
printf(“\\n”); }
A)668977 B)668966 C)66778777 D)6688766
二.填空题
1.C语言三个循环语句分别是 语句, 语句和 语句。 2.至少执行一次循环体的循环语句是 。
3.循环功能最强的循环语句是 。 4.C语言允许循环嵌套使用 层。 5.程序段
for (a=1,i=-1; -1
的运行结果是 。
三.判断题
1.在while循环中允许使用嵌套循环,但只能是嵌套while循环。【 】 2.在实际编程中,do-while循环完全可以用for循环替换。【 】 3.continue语句只能用于三个循环语句中。【 】 4.在不得已的情况下(例如提高程序运行效率),才使用goto语句。【 】 5.语句标号与C语言标识符的语法规定是完全一样的。【 】 6.for循环的三个表达式可以任意省略,while,do-while也是如此。【 】 7.do-while允许从外部转到循环体内。【 】
8.while的循环控制条件比do-while的循环控制条件严格。【 】 9.do-while循环中,根据情况可以省略while。【 】 10.do-while循环的while后的分号可以省略。【 】
四.简答题
1.设计使用二分法求非线性方程f(x)=0在区间[a,b]的实根的算法。 经典算法提示:
从端点x0?a开始,以h为步长,逐步往后进行搜索;对于每一个子区间?xi,xi?1?(其中
:若f(xi)?0,则xi为一个实根,且从xi?xi?1?xi?h)
则xi?1为一个实根,且从xi?1?h开始再往后搜索;若f(xi?1)?0,2h开始再往后搜索;若2f(xi)f(xi?1)?0,则说明当前子区
间内无实根。从xi?1开始再往后搜索;若f(xi)f(xi?1)?0,则说明在当前子区间内有实根。此时,反复将子区间减半,直到发现一个实根或子区间长度小于?为止。在后一种情况下,子区间的中点即取为方程的一个实根。然后再从xi?1开始往后搜索。其中?为预先给定的精度要求。以上过程一直进行到区间有端点b为止。
在使用本方法时,要注意步长h的选择。若步长h选的过大,可能会导致某些实根的丢失;若步长h选的过小,则会增加计算工作量。
2.设计用变步长梯形求积法计算定积分T?经典算法提示:
首先用梯形公式计算: Tn?其中n=1,h=b-a
然后用下列递推公式计算
?baf(x)dx的算法
h[f(a)?f(b)] 21hn?1 T2n?Tn??f(xi?0.5h)
22i?0 2n?n,0.5h?h 直至T2n?Tn??为止
3.设计使用牛顿迭代法求方程f(x)=0的一个实根的算法。 经典算法提示:
设f(x)=0,则满足下列条件:
(1)f(x)在闭区间[a,b]上,其f'(x)与f''(x)均存在,且各自保持固定符号; (2)f(a)f(b)?0;
(3)f(x0)f''(x)?0,且x,x0?[a,b]。
则方程f(x)=0在区间[a,b]上只有一个实根,取初值x0,由牛顿迭代公式:
xn?1?xn?f(xn)/f''(xn)
计算得到的序列x0,x1,?,xn,?收敛于方程f(x)=0的根。
结束迭代过程的条件为f(xn?1)??与xn?1?xn??同时成立,其中ε为预先给定的精度要求。
五.程序阅读题
1.写出下面程序运行的结果。
main ( ) { int x,i ;
for (i=1 ; i<=100 ; i++) { x=i;
if (++x%2==0) if (++x%3==0) if(++x%7==0)
printf(“%d ”,x) ; } }
2.写出下面程序运行的结果。
main ( )
{ int i,b,k=0 ;
for (i=1; i<=5 ; i++) { b=i%2;
while (b--=0) k++ ; }
printf(“%d,%d”,k,b); }
3.写出下面程序运行的结果。
main ( ) { int a,b;
for (a=1,b=1 ; a<=100 ; a++) { if (b>=20) break;
if (b%3==1) { b+=3 ; continue ; } b-=5; }
printf(“%d\\n”,a); }
4.写出下面程序运行的结果。
main ( )
{ int k=1,n=263 ;
do { k*= n ; n/=10 ; } while (n) ; printf(“%d\\n”,k); }
5.写出下面程序运行的结果。
main ( ) { int i=5 ;
do {
switch (i%2) {
case 4 : i-- ; break ; case 6 : i-- ; continue ; }
i-- ; i-- ; printf(“%d”,i); }while (i>0) ; }
6.写出下面程序运行的结果。
main ( ) { int i,j;
for (i=0;i<3;i++,i++) { for (j=4 ; j>=0; j--) { if ((j+i)%2) { j-- ;
printf(“%d,”,j); continue ; } --i ; j-- ;
printf(“%d,”,j) ; } } }
7.写出下面程序运行的结果。
main ( )
{ int a=10,y=0 ; do {
a+=2 ; y+=a ; if (y>50) break ; } while (a=14) ;
printf(“a=%d y=%d\\n”,a,y) ; }
8.写出下面程序运行的结果。
main ( )
{ int i,j,k=19; while (i=k-1) { k-=3 ;
if (k%5==0) { i++ ; continue ; } else if (k<5) break ; i++; }
printf(“i=%d,k=%d\\n”,i,k);
共分享92篇相关文档