




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 5 章 循环结构程序设计一、 选择题1.有以下程序main()int i;for(i=1;i=40;i+)if(i+%3=0)if (+i%8=0) printf(%d,i);printf(n)执行后的输出结果是_A_。A)832B)24 C)32D)40【解析】:本题考查了自增运算符和for循环。自增运算符“+”分为前缀和后缀两种形式。两种形式的作用效果是一样的,都是使运算变量那个的值加1,但是它们的表达式的值不一样,前缀形式表达式的值为运算变量加1之后的值,而后缀形式表达式的值为运算变量加1之前的值。题目中使用了一个for循环,循环变量i从1递增到40。在循环体中又两条嵌套的if语句,首先判断i+%3=0,即判断i+的值(i加1之前的值)是否能被3整除(判断后i被加1),然后再判断+i的值(i加1之后的值)是否能被8整除(判断后i被加1),若两个条件都满足了,就输出此时的i值。即要输出的数得在1-42(含1和42),且能被8整除,并且将其减2后能被3整除,这样的数有两个,即8和32,但由于输出的格式表达式为”%d”,因此结果为8322. 有以下程序main()int n;for(n=3;n=10;n+)if (n%6=0) break; printf(%d,n);printf(n)执行后的输出结果是_A_。A)345B)4 5 6 C)3 4 5D)456【解析】:本题考查的for循环、if语句和break(break语句结束的是整个循环)。题目中的for循环变量n从3递增到10,在循环体内先判断n是否等于6,如果不等于6,执行输出语句,将n值输出(输出的格式表达式为”%d”,注:无空格),如果n为6,执行break;语句,跳出for循环。因此输出345.正确答案为A.3. 有以下程序main() int i=0,s=0;do if(i%3)i+;continue; i+; s +=i; while(i11); printf(%dn,s);执行后输出结果是_A_A) 22 B) 16 C) 34 D) 21【解析】:本题考查的是dowhile循环、if语句 和continue(continue结束的本次循环,接着判断是否继续执行下一轮循环)。在dowhile循环中,先执行循环体,再判断i是否小于11.if(i%3)判断是否能整除3,余数为0,则进行i+;s+=i;不为0则为真,则进行i+;continue; 由于包含contunue;i+;s+=i;部分不执行,直接进行条件判断。所以当i=0,3,6,9时,进行i+;s+=i;操作。所以s=1+4+7+10=22.4. 运行以下程序后,如果从键盘上输入65 14,则输出结果为:_C_ main() int m, n; printf(Enter m,n;); scanf(%d%d, &m,&n): while (m!=n) while (mn)m-=n; while (nm)n-=m; printf(m=%dn,m); A) m=3 B) m=2 C) m=1 D) m=1【解析】: (1999-04-48)本题考查的是嵌套while循环,外层循环条件是m!=n,由于从键盘输出后m=65,n=14;因此不符合结束条件,进入循环体内。(1)先执行循环体while (mn)m-=n;即判断/mn, 如果是循环执行m-=n,(即m=m-n);因此此循环至少要执行4次m的值才可能不大于n(m=m-n*4=65-14*4=9),即此时m=9,n=14;不符合本循环条件,跳出本循环。(2)由于nm了,执行循环体while (nm)n-=m;,执行后n=n-m=14-9=5,即此时m=9,n=5,不符合本循环条件,跳出本循环。(3)但此时m!=n,因此不跳出外层循环,继续执行while (mn)m-=n;执行后m=4,n=5; 不符合本循环条件,跳出本循环。(4)然后执行while (nm)n-=m;执行后n=1,m=4, 不符合本循环条件,跳出本循环。(5)但此时m!=n,因此不跳出外层循环,继续执行while (mn)m-=n;此循环需要执行3此m的值才可能不大于n(m=m-n*3=4-1*3=1),即此时m=1,n=1; 不符合本循环条件,跳出本循环。(6)由于此时m=n了,因此结束了外层循环,结果m=1,正确答案为C5. 有以下程序main() int n,s=0; for(n=10;n100) break;printf(%dn,s);执行后输出结果是_A_A) 117 B) 147 C) 127 D) 137【解析】:本题考查的是for循环、if语句和continue、break语句,其中break语句结束的。是整个循环,continue结束的本次循环,接着判断是否继续执行下一轮循环。本题中for循环变量n从10递增到29,在循环体中又两条嵌套的if语句,首先判断n%3=0,即判断n的值是否能被3整除,如果能整除,则加这些数累加到s,然后执行continue,跳出本次循环,执行n+,继续判断下一个数,如果不能被3整数,则判断s是否大于100,如果符合,则跳出整个循环。因此本题的主要功能是循环累加10到29中能被3整除的数,如果累加和大于100,则退出循环。因此当n=27时,s=12+15+18+21+24+27=117时,超过了100,退出循环,因此最后输出结果为117,正确答案为A.6. 以下程序执行后sum的值是_C_min() int i , sum; for(i=1;i6;i+) sum+=i; printf(“%dn”,sum);A)15 B)14C) 不确定D)0【解析】: (2001-04-26)此题考查的是for循环,实现1到6的累加并输出,但是由于sum的初始值位设定,因此其最后的值属于不确定值,正确答案为C.7. 有以下程序main( ) int i,n=0; for(i=2;i5;i+) do if(i%4+1) continue; n+; while(!i); n+; printf(“n=%dn”,n);程序执行后的输出结果是_C_A) n=5 B) n=2 C) n=3 D) n=4【解析】:此题考查的是for循环嵌套do-while循环。本题执行for循环的条件是变量i的范围是2-4,循环3次。进入do-while循环体,由于i%4+1的条件永远为真,因此一直执行continue,则跳出n+;执行while(!i);由于!i为假,跳出do-while循环,执行n+;因此n+;执行3次,执行后n的值为3,正确答案为3.以上过程可简写为:i=2, 判断i%4+1,(i%4+1)!=0,执行continue,跳出本次循环,执行n+n=1i=3, 判断i%4+1,(i%4+1)!=0,执行continue,跳出本次循环,执行n+n=2i=4, 判断i%4+1,(i%4+1)!=0,执行continue,跳出本次循环,执行n+n=38. 有以下程序main() int i; for(i=0;i3;i+) switch(i) case 1:printf(%d,i);; case 2:printf(%d,i); default:printf(%d,i+1);程序运行后的输出结果是 _A_A)111223 B)123 C)011023 D)122【解析】:本题考查的是for循环和switch语句,本题for循环的循环变量i从0到2,循环3次。当i=0时,switch语句中,没有case 匹配,进入default,执行printf(%d,i+i);输出1(注输出1后无回车也无其他分隔符);然后跳出switch语句,执行i+=i+1=1,符合循环条件i3,继续执行switch语句。当i=1时,switch语句中,进入case 1分支,执行printf(%d,i);在原来的1后输出1;但由于case 1分支后无break;语句,因此继续执行case 2分支,执行printf(%d,i);在原来的11后输出1,但由于case 2分支后无break;语句,继续执行default语句,执行printf(%d,i+i);在原来的11后输出2,即此步骤执行后为1112。然后跳出switch语句,执行i+=i+1=2,符合循环条件i3,继续执行switch语句。当i=2时,switch语句中,进入case 2分支,执行printf(%d,i);在原来的1112后输出2;但由于case 2分支后无break;语句,继续执行default语句,执行printf(%d,i+i);在原来的11122后输出3,即为111223。然后跳出switch语句,执行i+=i+1=3,不符合循环条件i0|E0) C) (E=0) D) (E!=0) 【解析】: (2006-04-21)本题考查的是逻辑表达式,在C语言中,整型值可以转换为逻辑值,规则是:当整型值为0时,它表示逻辑值假;当整型值不为0时,它表示逻辑值真。所以题目中的while(E)循环是当E等于0时,循环结束,E不等于0时,继续循环。选项C中,当E等于0时,表达式“E=0”为真继续循环,而E不等于0时,表达式为假循环结束,这与题目中的条件不等价,故应该选择C。10. 要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,以下正确的程序段是_A_A) while(ch=getchar()!=N) printf(“%c”,ch); B) while(ch=getchar()!=N) printf(“%c”,ch); C) while(ch=getchar()=N) printf(“%c”,ch); D) while(ch=getchar()=N) printf(“%c”,ch);【解析】: (2006-04-22)本题考查的是逻辑表达式与赋值表达式。在C语言中,逻辑表达式的优先级高于赋值运算符的优先级。 所以在选项B和C中先计算getchar()!=N或getchar()=N部分,然后将得到的一个逻辑值(“真”或“假”)赋给字符变量ch,在while循环体中输出的ch肯定不是我们输入的字符,故不为所选。选项A和D中因为加了括号,所以先计算ch=getchar()部分,将输入的字符读入变量ch。根据题意,要在读入字母N的时候结束循环,即while循环的循环条件是:读入的字符不等于字母N。故应该选择A。11.有以下程序:void main()int k=10,n=0;for(;nk;)n+;if(n+%3!=0) continue;k-;printf(“%d,%dn”,k,n);程序运行后的输出结果是_D_A) 7,7B)6,6C)3,3D)8,10【解析】: 本题考查的是for循环。其中for(;nk;)循环变量n的初始值没直接说明,但在定义时已经初始化,即n=0,而循环条件为nk,具体循环过程如下:n=0时 ,nk(010),符合循环条件,n+;执行后n=n+1=1; 执行判断n+%3!=0 ,即判断n+的值(n加1之前的值)是否不能被3整除(判断后n被加1),由于n值为1,因此n+%3!=0返回真,执行continue退出本次循环,不执行k-;此时n=n+1=2;n=2时,nk(210),符合循环条件,n+;执行后n=n+1=3; 执行判断n+%3!=0 ,由于n值为3,因此n+%3!=0返回假,执行k-;此时k=k-1=10-1=9;n=n+1=3+1=4;n=4时 ,nk(49),符合循环条件,n+;执行后n=n+1=5; 执行判断n+%3!=0 ,由于n值为5,因此n+%3!=0返回真,执行continue退出本次循环,不执行k-;此时n=n+1=6;n=6时,nk(69),符合循环条件,n+;执行后n=n+1=7; 执行判断n+%3!=0 ,由于n值为7,因此n+%3!=0返回真,执行continue退出本次循环,不执行k-;此时n=n+1=7+1=8;n=8时 ,nk(89),符合循环条件,n+;执行后n=n+1=9; 执行判断n+%3!=0 ,由于n值为9,因此n+%3!=0返回假,执行k-;此时k=k-1=9-1=8;n=n+1=9+1=10;n=10时 ,nk(108),不符合循环条件,退出for循环。最后输出8.10.正确答案为D12. 下列叙述中正确的是_D_。A)break语句只能用于switch语句B)在switch语句中必须使用defaultC)break语句必须与switch语句中的case配对使用D)在switch语句中,不一定使用break语句【解析】: (2006-09-21)本题主要考查switch语句的概念。break语句除了能用于switch语句外,还可以用于循环语句中,因此选项A不正确;在switch语句中,可以使用default来执行所有case均失配时的分支,也可以不使用default,此时若所有case均失配跳出switch,因此选项B不正确;在switch语句中,每个case的作用就是标出一个执行的起点,当符合某个case时,程序就从该case所标出的起点处开始执行,若没有break语句中执行的话,程序会一直执行到switch的最后一条语句,而不是碰到下一个case就跳出switch。虽然break和case的配对使用会让所有case分支互不重叠条例明确,但不配对使用在C语言中是不允许的,因此选项C不正确。正确答案为D.13. 下面程序的功能是输出以下形式的金字塔图案是:* * * * *练习册中题目有错,最后一行应该是9个*main( ) int i,j; for(i=1;i=4;i+) for(j=1;j=4-i;j+) printf(“ “); for(j=1;j=_;j+) printf(“*”); printf(“n”); 在下划线处应填入的是_C_A) i B) 2*i-1 C) 2*i+1 D) i+2【解析】: (2004-04-42)本题考查的是嵌套for循环。第一个for循环的循环变量i从1递增到4,用来表示行数为4行;第二个for循环的循环变量j从1递增到4-i,用来输出每行左边的空格,当i=1(第一行),循环4-i=4-1=3次,输出3个空;当i=2(第二行),循环4-i=4-2=2次,输出2个空;当i=3(第三行),循环4-i=4-1=1次,输出1个空;当i=4(第四行),循环4-i=4-2=4次,输出0个空;第二个for循环的循环变量j从1递增到4-i,用来输出每行的*号,当i=1(第一行),需循环3次,输出3个*;当i=2(第二行),需循环5次,输出5个*;当i=3(第三行),需循环7次,输出7个*;当i=4(第四行),需循环9次,输出9个*;根据循环次数与i值的特点,可以发现每次需循环2*i+1次。因此本题则横却答案为C14. 若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)s=a;for(b=1;b=c;b+) s=s+1;则与上述程序段功能等价的赋值语句是_B_A)s=a+b; B)s=a+c; C)s=s+c; D)s=b+c;【解析】: (2003-09-22)本题考查是for循环,循环变量b从1递增到c,每次循环s=s+1,加c个1,s的初始值为a,因此相当于s=a+c;15. 请读程序片段:#includemain() int a, b;for(a=1;b=1;a=20) break;if(b%3=1)b+=3;continue;b-=5;printf(%dn,a);上面程序的输出结果是_B_A) 7 B) 8 C) 9 D) 10【解析】: (1996-04-22)本题考查的是for循环和break、continue语句。For循环的循环变量从1增加到100,判断如果b=20则退出整个循环,否则判断b%3=1,即b整除3是否余1,如果是,则b=b+3;退出本次循环,否则b=b-5;结束本次循环。以下是循环过程:第一次:a=1,b=1,判断b=20不符合条件,不执行break; 判断b%3=1(1%3=1)符合条件,执行b=b+3=1+3=4;然后执行continue退出本次循环。然后a+,a=2,符合a=20这个条件,执行break语句,跳出整个循环。此时a也累加了7次,即a=1+7=8,所以正确答案B。16.以下程序的功能是计算正整数234的各位数字之和。main()int n,sun=0; n=234; while(n) sun=sun+n%10;n=_; printf(“sun=%d”,sun);请把适当的选项填在下划线处_B_A) n/100B)n/10C)n%100D)n%10【解析】:本题考查的是while循环。本题的功能是计算正整数234的各个数字之和,因此需要分离出百位、十位和个位。可以先将234与10取余可以先得到个位数4,然后除以10,变成23,再与10取余可以得到十位数3,再除10,变成2,与10取余可以得到百位数2,将这些数加起来就可以实现题目的功能。可以发现在循环与10取余,并且将原数除以10.而程序中:while(n)是判断n是否为0,如果不为0,执行sun=sun+n%10,实现与10取余并将余数累加,因此在后面得语句主要可以实现将原数除以10的功能,即n=n/10.正确答案为B17. 以下程序中,while循环的循环次数是_D_main() int i=0;while(i10) if(i1) continue;if(i=5) break; i+;.A) 1 B) 10C) 6 D) 死循环,不能确定次数【解析】: (2002-04-25)本题主要考查while循环和continue、break语句.i的初始值为0,当i10时进入循环体,先执行if(i1),由于i=0,满足条件,则执行continue;退出本次循环,不执行if(i=5) break;和i+;因此i没有任何变化,一直执行if(i1) continue;变成了死循环,正确答案为D.18. 以下程序的输出结果是_A_main() int a=0,i;for(i=1;i5;i+) switch(i) case 0:case 3:a+=2;case 1:case 2:a+=3;default:a+=5;printf(%dn,a);A) 31B) 13C) 10D) 20【解析】: (2002-04-26)本题考查的是for循环和switch语句,执行过程如下:i=1 时,进入case 1分支,但其后无任何执行语句,则进入case 2分支,执行a+=3(a=a+3)a=3;但没有遇到break语句,继续执行default部分,a+=5;a=8i=2时,进入case 2分支,执行a+=3(a=a+3)a=11;但没有遇到break语句,继续执行default部分,a+=5;a=16i=3 时,进入case 3分支,执行a+=2(a=a+2)a=18;但没有遇到break语句,进入case 1分支,但其后无任何执行语句,则进入case 2分支,执行a+=3(a=a+3)a=21;但没有遇到break语句,继续执行default部分,a+=5;a=26i=4 时,无case分支匹配,执行default部分,a+=5;a=31i=4 时,不符合循环条件,退出整个循环,因此正确答案为A19.有以下程序main() int y=10; while(y-); printf(“y=%dn”,y);程序执行后的输出结果是_B_A) y=0B) y=-1C)y=1 D)while构成无限循环【解析】: (2006-04-30)本题考查的是while循环与运算符。本题中有一个陷阱,很多考生会根据程序中的书写格式来判断while循环的循环体为printf(“y=%dn”,y);语句。其实while的循环体是一条空语句,即y后面的那个分号就是while的循环体。所以本题只要弄清楚表达式y何时为“假”,即等于0,就能得出结果了。因为运算符是后缀形式,所以表达式y的值是y自减之前的值,即y等于0时,表达式y就等于0,但此时的y还要被减1,所以循环结束后,y的值为-1,因此正确答案为B。20. 有以下函数int fun(char *s) char *t=s;while(*t+);return(t-s); 该函数的功能是_B_A)比较两个字符的大小 B)计算s所指字符串占用内存字节的个数C)计算s所指字符串的长度 D)将s所指字符串复制到字符串t中【解析】: (2007-04-28)本题涉及到4个问题:指针与字符串的关系,字符串的存储,指针的移动,指针的比较。首先是将指针指向字符串开头,然后将指针后移并判断当前内容是不是字符串结尾符0,最后将指针与字符串头指针(地址)比较,求得字符串长度。21. 有以下程序main() int p8=11,12,13,14,15,16,17,18,i=0,j=0; while(i+7) if(pi%2) j+=pi; printf(%dn,j); 程序运行后的输出结果是_B_。A)42 B)45 C)56 D)60【解析】: (2005-04-23)本题考查的while语句和if语句的综合应用,程序中while的循环条件是i+7,由于程序开始时将i初始化为0,而且循环体中没有改变变量i的语句,只有循环条件中i的自增,所以当i从0自增到6时该循环的循环体一共被执行了7此,但是在循环体中,i的值为从1到7。当循环体中只有一条if语句,其条件表达式为pi%2,当pi为奇数时,pi除以2余1,条件表达式的值为“真”,所以整个循环语句所做的事就是:累计p1到p7的奇数到变量j中。所以最后j的值应该为13+15+17=45,正确答案为B22. 有以下程序main()int k=5;while(-k) printf(%d,k-=3);printf(n)执行后的输出结果是_A_。A)1B)2 C)4D)死循环【解析】: (2000-09-22)本题考察的是while循环,其功能是判断k是否等于0,如果不等于0,执行printf(%d,k-=3);否则退出循环,具体执行如下:k=5, -k(k减1后的值4)不为0,输出k-=3的值,即输出1k=1, -k( k减1后的值0)等于0,不满足循环条件,退出整个循环。因此正确答案为A23. 有以下程序 #include main() int s12=1,2,3,4,4,3,2,1,1,1,2,3,c5=0,i; for(i=0;i12;i+) csi+; for(i=1;i5;i+) printf(“%d”,ci); printf(“n”); 程序的运行结果是_C_A)1 2 3 4 B)2 3 4 4 C)4 3 3 2 D )1 1 2 3 【解析】: (2008-04-31)本题主要考查for循环。前一个for循环变量i从0循环递增到11,共循环12此,每次执行csi+;所以,它的功能是,以数组s中的12个元素为下标,对数组c中的元素进行增1操作。s的数组中,共有4个1、3个2、3个3和2个4.所以,循环结束后,数组c的内容是0,4,3,3,2。后一个for循环,从数组c下标为1的元素开始,循环输出后面的4个元素。所以最终输出结果为4,3,3,2,应该选择C.二、填空题1. 当执行以下程序时,输入1234567890,则其中while循环体将执行0 次。include main()char ch;while(ch=getchar()=0) printf(“#”);【解析】: (2007-04-7)通过getchar()来取得输入的数据,再判断是否为0,若是,则循环一次;不是,则不循环。1234567890不是字符,所以应该填写02. 有以下程序,若运行时从键盘输入:10,-2,则程序的输出结果是_死循环_#include main() int a,b; printf(“Enter a,b,”); scanf(“%d,%d”,&a,&b); while(a!=b)while(ab) a-=b;while(ba) b-=a; printf(“%3d,%3dn”,a,b); 【解析】:本题考查的是嵌套while循环,主要功能是当a!=b时进入外循环体,当ab时,循环执行a-=b;当ba时,循环执行b-=a;直到a=b时,退出整个循环。本题中初始值a=10,b=-2,a!=b,进入外循环,由于ab,执行a-=b(a=a-b=12)由于b负数,执行a-=b操作会使a一直大于b,一直执行while(ab) a-=b;循环,因此本题是个死循环。3.以下程序的输出结果是_6_#include main() int s,i; for(s=0,i=0;i3;i+,s+=i); printf(“%dn”,s);【解析】:本题考查的是for循环,其循环体为空语句;,主要功能是s累加循环变量i的值,具体过程如下:s=0,i=0, 执行空语句,然后执行i+,s+=i;执行后i=1,s=1;符合循环条件i3,继续循环;s=1,i=1,执行空语句,然后执行i+,s+=i;执行后i=2,s=3;符合循环条件i3,继续循环;s=3,i=2,执行空语句,然后执行i+,s+=i;执行后i=3,s=6;不符合循环条件i3,退出循环;因此最后输出结果为6。4. 执行以下程序后,输出#号的个数是_6_ 。#include main() int i,j; for(i=1; i5; i+) for(j=2; j=i; j+) putchar(#);【解析】: (2003-09-10)本题考查的是嵌套for循环。具体执行如下:当外循环i=1时,进入内循环,此时j=2,循环条件是j=i(2=1)不符合,因此不执行putchar(#);内循环结束,执行外循环的i+(i=2)符合i5的条件,继续执行循环。(此循环输出0个#)当外循环i=2时,进入内循环,此时j=2,循环条件是j=i符合,可以执行一次循环,即执行一次putchar(#);内循环结束后,执行外循环的i+(i=3)符合i5的条件,继续执行循环。(此循环输出1个#)当外循环i=3时,进入内循环,此时j=2,循环条件是j=i(2=3)符合,可以执行两次循环,即执行两次putchar(#);内循环结束,执行外循环的i+(i=4)符合i5的条件,继续执行循环。(此循环输出2个#)当外循环i=4时,进入内循环,此时j=2,循环条件是j=i(2=4)符合,可以执行三次循环,即执行三次putchar(#);内循环结束,内循环结束,执行外循环的i+(i=5)不符合i5的条件,结束外循环。(此循环输出3个#)因此总共输出6个#.5.写出下列程序的运行结果_345_main() int n; for(n=3;n=10;n+) if(n%6=0) break; printf(“%d”,n);【解析】:本题考查的是for循环和break语句,主要功能是输出循环变量n的值,但是当n=6事,执行break,跳出整个循环。循环变量n的初始值为3,循环条件是n=10,因此当n=3、4、5时不符合break条件,会依次输出,由于输出格式是”%d”,不回车也无任何分隔符,因此输出结果为3456.有以下程序,当输入:1时,程序运行的结果是_0_main()int sum=0,n;scanf(“%d”,&n);while(n=5)sum+n; n+;printf(“sum=%d”,sum);【解析】:本程序考查的是while循环,由于在while循环体中,sum+n;并没有实现给sum变量赋新值,因此sum的值一直不变,依旧为0,最后的输出结果为0.7. 以下程序的功能是:输出100以内(不含100)能被3整除且个位数为4的所有整数,请填空。main() int i,j;for(i=0;i=100;i+)if(_i%3!=0 | i%10!=4_) continue;printf(“%d ”,i); 【解析】:本题的循环范围是1100,if语句中的判断条件为真时,执行continue,跳出本次循环,为假时输入对应的数,题目要求输出输出100以内(不含100)能被3整除且个位数为4的所有整数,也就是判断条件是不能被3整除或者个数不为4的整数,因此可写为_i%3!=0 | i%10!=4_8. 以下程序运行后的输出结果是_无结果,运行有错误_#include main( )int k=1,s=0;doif(k&2)!=0)continue;s+=k;k+;while(k);printf(s=&d/n,s);【解析】:if后面直接跟了一个左花括号“”,语法错误,因此无结果,运行有错误。9. 以下程序的输出结果是_1_#include main() int i,j,sum;for(i=3;i=1;i-) sum=0;for(j=1;j=i;j+) sum+=i*j;printf(%dn,sum);【解析】: (2008-09-8)本题考查for循环的嵌套。外循环的循环变量i从3循环递减到1,所以外循环会进行3次,i的值分别为3、2和1.由于在外循环体中,每次都会让sum重新赋值为0,所以只有最后一个外循环对sum造成的影响有效,故可以考虑最后一个外循环,i为1的情况。sum被赋值为0,进入内循环,内循环变量j从1递增到i,所以只会循环1此,值为1.在内循环中,sum被加上i*j的值,即1*1=1,故最终sum的值为1,所以输出的结果是1.10. 以下程序按下面指定的数据给x数组的下三角置数,并按如下形式输出,请填空。43 72 6 91 5 8 10#includemain() int x44,n=0,i,j; for(j=0;j=j; _ i-_) n+;xij= _n_; for(i=0;i4;i+) for(j=0;j=i;j+) printf(%3d,xij); print(n);【解析】: (2008-09-12)本题考查二重for循环的应用。首先看后main没有空缺的二重for循环,外循环i从0递增到3,内循环j从0递增到i,所以,输出顺序是x00、x11、x21、x22、。然后,我们要找出题目给出的输出结果的规律,不难发现这个下三角的规律是从下往上,从左往右依次为1、2、3、4、5、6、。所以,前一个二重for循环需要依次遍历的数组元素应该是x30、x20、x10、x31、x21、x11、x32、。外循环变量j从0递增到3,正好符合数组第2个维度的变化,所以内循环应该是从3递减到j,因此for(i=3;i=j; _)处填应填入i或其他等价形式。在内循环体中,有一个n+,而n初始为0,所以正好符合规律中从1递增到10的变化,也就是说n+;xij= _;处填n即可。第六章 数组一、选择题1、选B A、没有指定数组维度。 B、定义了一个含有100个元素的一维数组 C、数组的维度不能是小数 D、数组维度不能是变量2、没有答案二维数组只有在以下两种情况中,第一维可以不指定:全部赋值分行赋值此题可以改为:A,B,C不变,D项改为 int a32=1, 2, 3,4 ,正确答案是D3、选D二维数组的第二维元素个数在任何情况下都不能省略,故D项错误4、选D数组的元素个数,即 内的元素只能是常量或常量表达式A、 N是个符号常量,定义了一个5行5列的二维数组。B、 数组a只有1行2列,初始化的时候,却按分行赋值法,赋予了两行,故错误C、 没有指定数组C的第二维个数,错误D、 部分赋值法,赋予了前两行的值,默认第三行的值为05、选B整型变量、实型变量在用scanf函数进行赋值时,变量前要加上取地址符。字符型变量在用scanf函数进行赋值时,变量前不必加取地址符。6、选DD项没有指定数组D第二维的长度,故错误7、选C首先定义了一个含有8个元素的一维数组P,并对其初始化。while(i+7) i的初始值是0,i+的值为0满足循环条件,进入循环,判断if语句,pi=11,11%2=1,满足if条件,执行if后面的语句,j=j+pi=0+11=11,第一轮循环结束 返回while循环,接着判断条件,通过刚才的i+,i的值变为1,此时i+的值为1,满足循环条件,进入循环,判断if语句,pi=12,11%2=0,不满足if条件,不执行if后面的语句,第二轮循环结束 返回while循环,接着判断条件,通过刚才的两轮判断,你会发现,只有pi的值为奇数的时候,才会执行j=j+pi操作。而i是从0自增到7时,循环才结束。也就是说,把p0到p6中的所以奇数相加,就是J的值,也就是j=11+13+15+17=56printf语句,输出j的值8、选D通过全部赋值法,定义了一个三行三列的二维数组t,通过for循环,输出数组中元素的值i=0时,输出t23,由于数组t的第二维元素只有t20、t21、t22三个元素,所以t23属于数组越界,故程序出错。9、选A定义了一个一维数组x,并对其初始化首先看第一个嵌套for循环语句,i=0;j=2,if语句比较x3和x2,如果x3大于x2,则交换二者的值,此时数组变为13752460;接着j=1, f语句比较x2和x1,如果x2大于x1,则交换二者的值,此时数组变为17352460;接着j=0, f语句比较x1和x0,如果x2大于x1,则交换二者的值,此时数组变为71352460;此时内层for循环结束 i=1;j=2,if语句比较x3和x2,如果x3大于x2,则交换二者的值,此时数组变为71532460;接着j=1, f语句比较x2和x1,如果x2大于x1,则交换二者的值,此时数组变为75132460;此时内层for循环结束 i=2;j=2,if语句比较x3和x2,如果x3大于x2,则交换二者的值,此时数组变为75312460;此时内层for循环结束第一个嵌套for循环结束,此时你会发现,这个嵌套for循环实现的是对数组元素x0到x3的从大到小排序(题中有相应的注释语句)接下来看第二个嵌套for循环语句,根据注释我们发现,他实现的是从小到大排序,我们只要搞清楚它是对那些元素的排序就可以了。从内层for循环我们得知,j从4循环到6,比较的是想xj+1和xj,所以我们可以得出,是对x4到x7的从小到大排序。所以可以得出最后的数组为7531024610、选C定义了一个三行三列的二维数组m,并对其初始化for循环中i从0循环到2,也就是相应的输出m20、m21、m22,也就是第三行的元素36911、选A题目有问题,应把第三行的for(i2)改为if(i2)通过分行赋值法定义了一个2行3列的数组。看for循环i=0,满足if语句条件,执行其后面的语句a10= a10-1=4-1=3 i=1, 满足if语句条件,执行其后面的语句a11= a11-1=5-1=4 i=2, 不满足if语句条件,执行else语句a12= 1for循环结束
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年生态停车场租赁合同续签及绿色能源合作协议
- 2025年度高级型安保技能提升培训服务合同
- 订单融资合同管理办法
- 购置土地资金管理办法
- 贵阳宠物饲养管理办法
- 行政协议合同的模板范本
- 交通事故赔偿家属协议书
- 直播运营技术协议书范本
- 电离层等离子体不稳定性理论-洞察及研究
- 新冠疫苗协议协议书范本
- GB/T 3406-2010石油甲苯
- GB/T 3098.9-2020紧固件机械性能有效力矩型钢锁紧螺母
- GB/T 15566.9-2012公共信息导向系统设置原则与要求第9部分:旅游景区
- GB/T 152.2-2014紧固件沉头螺钉用沉孔
- 幼儿园中班绘本:《我喜欢我的小毯子》
- 改革开放以来教育方面的变化课件
- DB44-T 2197-2019配电房运维服务规范-(高清现行)
- 山西省运城市各县区乡镇行政村村庄村名居民村民委员会明细
- 河西走廊课件
- 第2课 绘画作品中的劳动者 课件 五年级美术上册 岭南版(共15张PPT)
- (高职)电子商务英语电子课件教学PPT(完整版)
评论
0/150
提交评论