分享

C程序结构

 running_to_you 2017-05-17

C程序结构

.选择题

1. a3b4执行“printf(“%d,%d’,(ab),(ba));”的输出是(  

   34                   43              3 3             44

 

2.使用“scanf(”x=%fy%f“,&x&y)”,要使 xy均为1.25,正确的输入是(  

   1.251.25       1.25 1.25      x1.25y1.25       X1.25 y1.25

 

3.设有int i010j=10;则执行“printf(”%d%dn“,++ij--);”的输出是(  

   ll 10                 910            010 9                  10 9  

 

4.ab为字符型变量,执行“scanf(”a%cb%c“,&a&b)”后使a为‘A’,b为‘B’,从键盘上的正确输入是(  

   ①‘AB         ②‘A’,‘B    AABB        a=A, b

 

5.xyzt均为int型变量,则执行以下语句后,t的值为(  

  xyz1t++x||++y&&++z   

 ①不定值                2            l            

 

6.xyz均为int型变量,则执行以下语句后,xy z的值为(  

  x1 y0 z2 y++&&++z ||++ x   

 2l3               203                2l3                  21

  

 7.假定所有变量均已正确定义,下列程序段运行后x的值是(  

  abc0 x35   if(!ax-- else ifb);ifcx3else x=4   

  34               4            35                3 

  

  8.下列语句中,句法错误的是(不考虑语义)(  

     whilexy                  do x++ whilex==10  

    while0);                                     do 2whilea==b);   

  

9.循环语句“forx0 y0;(y=123|| x4);x++);”的循环执行(    

  ①无限次              ②不确定次              4               3

 

10.ij已定义为int类型,则以下程序段中的内循环体的执行次数是(    for i5 i i--   forj 0 j4j++){……}   

 20                 24                   25                   30 

    

11.假定abint型变量,则执行以下语句后b的值为(    

a1 b10   do {b-a a++   }whileb--0);   

  9                -2                    -1                   

     

12.xyint型变量,则执行下面的循环后,y的值为(  

foryl xl y<=50 y++) { 

 ifx>=10 break   ifx2==1){ x+=5 continue}   x - 3 } 

   2                 4            6           

 

13.C语言中,下列说法中正确的是(    

  ①不能使用“do语句while(条件)”的循环   

  ②“do语句While(条件)”的循环中必须使用“break”语句退出循环 

   ③“do语句while(条件)”的循环中,当条件非0时将结束循环 

   ④“do语句while(条件)”的循环中,当条件为0时将结束循环 

  

二.填空题

1.结构化程序设计规定的三种基本结构是________结构,选择结构和_______结构。 

    

2.若有定义“int a25b14 c19;”,以下语句的执行结果是______. 

  if ( a++<=25&&b--<=2&&c++ 

         prinif(“***a=%db=%dc=%dn”, abc); 

  else 

printf(“###a=%db=%dc=%dn”, a bc); 

  

 3.以下两条if语句可合并成一条if语句为_____________. 

  ifa<=b x1   else y2 

  ifabprintf(“****y=%d\n y);   else printf ####x%d\n x); 

   

4. ijk均为 int型变量,则执行完下面的for语句后,k的值为_______. 

  fori=0j10i<=ji++j--kij   

 

5.下列程序的功能是输入一个整数,判断是不是素数,若为素数输出1,否则输出0,请为程序填空。 

  main() 

  {

int ixy=1   

scanf(“%d”,&x);   

fori=2i<=x/2i++ 

         if________________ 

 

y=0 break 

}   

printf(“%dn”,y);  

 } 

  

 程序分析题 

  1.阅读程序,写出运行结果。   

main() 

  {   

int  a10 b4c3       

ifabab       

ifac ac 

         printf(“%d,%d,%d\n”, abc);   

  

 2.阅读下列程序,写出程序的输出结果。  

 main() 

  { 

int  x=100 a10 b20 ok15ok20 

         ifab

ifb!=15

if(!ok1 

x1   

else ifok2 x10   

else x-l 

         printf(“%dn”,x);   

   

3.阅读下列程序,写出程序的输出结果。   

main()   

int y9 

         for(; y0 y--  

 ify3==0

{

 printf(“%d”,--y);

continue

}   

 

 

程序设计题 

  1.编一个程序,输入华氏温度(F),按下列公式计算并输出对应的摄氏温度(C):C 5 F32)/

  

 2.编一个程序,输入一个整数,输出其符号(若≥0,输出1;若<0输出-1)。 

  

 3.编一个程序,输入X的值,按下列公式计算并输出y的值。      

 xxl 

  y 2xllx10      

 \3x-1110x 

  

4.编一个程序,输入三个单精度数,输出其中最小数。 

  

5.编一个程序,求出所有各位数字的立方和等于10993位数。 

  

6.编一个程序,输入10个整数,统计并输出其中正数、负数和零的个数。 

  

7.编程序,按下列公式计算e的值(精度为1e-6): 

  

8.编程序,按下列公式计算y的值(精度为1e-6): 

  y=1/r*r+1 

  

9.编一个程序显示ASCII代码0x20ox6f的十进制数值及其对应字符。   

  

10.用三种循环语句分别编写程序显示1100的平方值。 

  

 

 

 

 

答案解析

1..选择题

2.②「解」在调用格式输出函数的语句中,其中每个格式符对应一个输出项,格式符d要求输出项内容以十进制整数形式输出。第一个输出项(ab)是一个逗号表达式,该表达式的值是b的值,输出4.接着输出字符逗号。第二个输出项(ba)的值是a的值,输出3.所以语句执行将输出43.正解的选择是②。

 

3.③「解」格式输入函数的格式字符串中的字符可以分成三类:空格类字符、其它普通字符和格式转换说明。其中空格类字符用来跳过一个空格类字符序列,直至下一个非空格类字符。普通字符要求输入字符与其完全相同。格式转换说明对输入字符列按格式转换说明进行转换,得到内部值存储到对应输入项所指定的存储位置中。函数调用scanf(“x%fy=%f,&x&y)以普通字符x=开头,输入时也要先输入x=。接着是一个浮点数输入格式,所有能构成一个浮点数1.25的字符序列都能满足要求。接着是普通字符列”,y=“,在输入的浮点数之后也要有字符列”,y=“。最后又是浮点数输入格式,同样所有能构成一个浮点数1.25的字符序列都能满足要求。问题给出的供选择答案中只有x=1.25y1.25是能满足上述要求的。所以正确选择是③。

 

4.②「解」变量ij的初值分别为八进制数010和十进制数 10,函数调用Printf(“%d%dn”,++ij——)中,++i的值是变量 i1后的值,原来值是八进制数 010,等于十进制数8,输出9.j——的值是变量j1之前的值,输出10.格式字符申中的逗号是普通字符照原样输出。所以问题给出的格式输出函数调用将输出910.正确的解答是②。

 

5.④「解」函数调用scanf(“c%cb%c”,&c&b)中,普通字符必须按格式字符串要求照原样输入,c格式对紧接的任何字符都输入。所以实现问题的要求,输入字符列应为“aAbB”。另外要特别指出,在程序中,为表示字符常量,字符前后需加单引号。但用字符格式输入字符时,在要输入字符前后不必另键人单引号。若键人单引号,则这个单引号也将作为字符被输入。正确的解答是④。

 

6.③「解」语句序列“xyzlt++x||++y&&++z;”使变量x的值为1,变量t是赋一个逻辑表达式的值。在C语言中,由逻辑与和逻辑或构成的逻辑表达式有特别的计算规则,顺序计算各逻辑子表达式,并当一旦能得到逻辑表达式的结果时,就立即结束逻辑表达式的计算,不再计算后继逻辑子表达式。本题的逻辑表达式是两个运算分量的逻辑或,而且左运算分量++x的值为非0,立即得到逻辑或运算的结果为1,并将1赋给变量t,所以变量t的值为1.正确解答为③。

 

7.④「解」语句序列“xly0z2 y++&&++z||++x;”先使变量x的值为 1,变量y的值为0,变量z的值为2.由逻辑与和逻辑或构成的逻辑表达式的特别计算规则,顺序计算各逻辑子表达式,并当一旦能得到逻辑子表达式的结果时,就立即结束逻辑子表达式的计算,不再计算该逻辑子表达式。计算y++y的值为0,使y++&&++z的结果为0,立即去计算++x,这次计算使变量y的值变成1,而变量z的值本改变。接着计算++x,使x的值变为2.所以经上述语句执行后,xyz的值依次为212. 正确解答为④。

 

7.②「解」以变量 abc的值均为 0,变量x的值为 35,语句: 

  if(!ax--else ifb);ifcx3else x4 

  由两个if语句组成。首先执行前一个if语句“if(!ax--else ifb);”,因变量a的值为0,条件!a成立,执行x--使x的值变为34.接着执行后继的if语句“ifcx3 else x4;”,因变量c的值为0,条件不成立而执行x4,最终使变量x的值为4.正确解答是②。 

  注意前一个if语句的else部分的成分语句只有“ifb);”,这是一个单分支if语句,且其成分语句为空语句。

 

8.②「解」 while语句的一般形式是:

while(表达式) 语句 

  这里的表达式可以是任何合理的表达式,语句可以是任何语句,包括空语句,或表达式语句。可能书写的while语句没有任何意义,如供选择的①whilexy5;和③while0);,但这两个语句的句法没有任何错误。do-while语句的一般形式是:   do语句while(表达式); 

  其中的成分语句也可以是任何语句,但供选择答案②do x++ whilex==10中的代码x++是一个表达式,不是语句,语句必须要以分号结束,所以是错误的。正确解答是②。

 

9.①「解」for循环语句的初始化部分置变量xy的初值为0,循环条件是(y!=123||x4),每次循环后变量X的值增1.由于循环过程中变量y的值未被修改过,循环条件又是一个逻辑或,其左分量(y!=123)永远成立,也就是循环条件永远成立。所以该循环语句将循环执行无限次。正确解答是①。

 

10.①「解」问题所给的程序段的外循环是一个阶循环语句,它的初始化部分置变量i的初值为5,循环条件简写成i,即i!=0,每次循环后变量i的值减1.所以外循环共控制5次循环。内循环也是一个for循环语句,它的初始化部分置变量j的初值为0,循环条件是j<4,每次循环后变量j的值增1.所以内循环共控制4次循环。这样,如内循环的体内未曾对变量ij有修改,在内、外循环一起控制下,内循环体共被重复执行20次。正确解答是①。

 

11.④「解」在这个程序段中,循环开始前变量a的值为1b的值为10,每次循环从变量b减去a,并让a1,并在循环条件判定时,又让b减去1.第一次循环后,变量b的值变成9,变量a的值变为2,循环判断时,因b的值大于0,循环条件不成立,结束循环。但在循环判断时,让b减去了1,所以循环结束时,变量b的值为8.正确的解答是④。

 

12.③「解」 for循环语句的初始化部分置变量xy的初值为1,循环条件是(y<=50),每次循环后变量y的值增1,控制循环最多执行50次。循环体有三个语句:首先在发现变量x的值大于等于10时,结束循环;接着是当变量x2的余数为1(即变量x是奇数)时,让变量X值增5,让x变成偶数,并直接进入下一轮循环;如变量x是偶数,则从变量x减去3,让变量x变成奇数。由上述分析知,每两次循环使变量x的值增加2.第一次循环后,变量x的值变成6.第二次循环后,变量x的值变成3. 第三次循环后,变量x的位变成8.第四次循环后,变量x的值变成5.第五次循环后,变量x的值变成 10.第六次循环时,因变量x的位大于等于 10,直接跳出循环,这次循环是非正常结束,对变量y的修正只执行了5次。所以循环结束后,变量y的值增至6.正确的解答是③。

 

13.④「解」 do-while语句的一般形式是:   do语句 

  while(表达式); 

  其语义是重复执行其成分语句,直至表示条件的表达式值为0时结束。do-while语句是正常使用的一种循环结构之一。do-while语句的循环结束条件由while后的表达式值为0所控制,并不一定要有break语句跳出循环来结束循环。do-while语句在条件值非0时,将继续循环,而不是结束循环。条件值为0时,才结束循环。所以正确的选择是④

 

二.填空题

1.「解」结构化程序设计的三种基本控制结构是顺序结构、选择结构和循环结构。 

 

2.「解」问题所给的if语句中,条件a++<=25&&b--<=2&&c++是先求逻辑与的第一个运算分量,它是一个关系式,关系成立。接着判定第二个逻辑与运算分量,又是一个关系式,由于变量b的值是14b不小于等于2,运算分量的关系式不成立,导致if语句的条件为假,执行else部分。在求且语句的条件时,计算了2个逻辑与分量,使变量a的值增了1,变量 b的值被减了1.所以输出内容是:###a=26b13c19. 

 

3「解」在以上两条if语句中,两个条件刚巧相反。若将前一个if语句的第一个成分语句与第二个if语句的第二个成分语句合并;第一个if语句的第二个成分语句与第二个if语句的第一个成分语句合并,写成一条if语句如下:   ifa<=b{x1printf(“####x%d\dx);}   else{ y2 printf(“****y%d\n”,y);}  

 

4.「解」该 for语句以i0j10初始化,循环条件是 i<=j,每次循环后 i 1j 1,循环体是将 ij的和赋给 k.这样变量 k将保存的是最后一次赋给它的值。一次循环后 i l.j 9,二次循环后 i 2.j 8,……,五次循环后 i 5.j 5,继续第六次循环,将 i j的和10存于 k后,i 6j 4,结束循环。所以循环执行后 k10.

 

5.「解」为判数x是否是素数,预置变量y的值为1x可能是素数),然后用循环,用2x2的整数i测试对x的整除性,若能被其中的某个整数整除,则x是合数,置y的值为0(不是素数),结束测试循环。若都不能整除,则x为素数。i能否整除x,可用求余运算xi等于0来判定。所以程序中的空框可填 x i==0.测试 X为素数的代码可写成:   yl 

  for i2 i<=x2 i++   ifxi==0{ y0 bleak } 

 

三.程序分析题

1.「解」程序中,第一个if语句ifa<bab,当a<b时,让b值置a,该语句确保a的值不比b小。同样第二个IF语句ifacac,当ac时,让C值置A,使A的值不比C小。实际;情况是a本来就比bc都大,所以a的值没有变,程序输出ab c的原来值:1043.  

 

2.「解」程序预置变量x的值为100a的值为10b的值为20ok15ok20. 

  程序中给出的if语句可以写成更结构化的形式如下: 

  ifab 

{   

ifb!=15

 

                   if(!ok1 x1   

else

                            ifok2 x10   

else x=-l   

   

}  

 } 

  由于条件ab成立,并且条件b=15也成立,而ok1不等于0,执行else后的语句。又因ok2等于0,执行else后的语句赋-1x.所以程序输出-l.  

 

3.「解」循环前,变量y的值为9,其中的循环语句在y大于0情况下循环,每次循环后y的值减1.循环体是当y能被3整除时输出表达式--y,输出的是减1后的y值。这样,第一次循环因y9,能被3整除,输出8y也变成8.又经两次循环,y的值变为6,又让y1变成5,并输出5;又经两次循环,y的值变成3,让y减至变成2,输出2;再经两次循环后,y的值变成0,结束循环。所以程序输出852. 

 

四.程序设计题

1.编一个程序,输入华氏温度(F),按下列公式计算并输出对应的摄氏温度(C):C 5 F32)/

  「解」利用公式:C5F32)/9,输入F氏温度,计算并输出对应的C氏温度,程序要引入两个变量,分别用于存储F氏温度和C氏温度,计算时应采用浮点型,包括公式中的常数也应写成浮点数,不能采用整型和把常数写成整数。因采用整型编写,公式中的除运算变成整除,会得出与实际要求不一致的结果。程序如下:  

 include<stdio.h>   main() 

  { 

float fc/*变量定义*/   

printf(“输入F氏温度”);

scanf(“%f,&f); 

         c 5.0*f32.0)/9.0 

         printf(“对应的C氏温度%6.2fn”,c);   

  

2.编一个程序,输入一个整数,输出其符号(若≥0,输出1;若<0输出-1)。 

 「解」程序可用if语句判断输入数的符号,并控制输出1-l.程序如下:   

 include<stdio.h>  

 main() 

  { 

int  c;/*变量定义*   

 printf(“输入一个整数”);    

scanf(“ d”, c);    

ifc>=0 

printf(“1\n”);    

else printf(“-l\n”);  

 } 

  

3.编一个程序,输入X的值,按下列公式计算并输出y的值。       xxl 

  y 2xllx10       3x-1110x 

  「解」输入x,按公式计算y.这可用一个嵌套的if语句分段判断并计算出y的值。然后输出y值。程序如下: 

   includestdio.h  

 main() 

  { 

int  xy;/*变量定义*  

 printf(“输入一个整数”);   

scanf(“%d”,&x);   

if x<=l yx 

          else ifx10y2*xl   

else y3*x11 

         printf(“y%d\ n”, y);   

 

4.编一个程序,输入三个单精度数,输出其中最小数。 

  「解」设最小数存于变量min中,为求三个数中的最小数,可分以下多步完成,先预置minx,然后分别将其余两个数逐一与min比较,当它们中的某个值比存于min中的值更小时,就用它们更新min.写出程序如下:   

 include<stdio.h>   main() 

  { 

float xyzmin/*变量定义*/  

         printf(“输入三个单精度浮点数”);   

scanf(“%f%f%f”, &x&y&z);

min x 

          ifmin>y 

min y  

         ifmin>z 

minz   

printf(“浮点数%f%f%f中的最小值是%f\n”,xyzmin);   

  

5.编一个程序,求出所有各位数字的立方和等于10993位数。 

  「解」找出所有各位数字的立方和等于10993位整数。 3位整数是100999范围内的整数,设分别用abc存储3位数的百位、十位和个位的数字,程序用三重循环求出abc的立方和为10993位数a*100+b*10c.程序如下:   

 include   main() 

  { 

int  ab c/*变量定义*/    

fora1 a<=9a++    

forb0 b<=9 b++    

forc0c<9c++ 

                                     ifa*a*a+b*b*b+c*c*c==1099       

printf(“%d\n”,(10*ab*10c);   

  若用一个变量i表示3位数,循环体将3位数变量i分拆出它的百位、十位和个位共3个数字,然后判这三个数字的立方和是否是1099,若是就输出该变量的值。程序如下:   

#include<stdio.h>   

main() 

  { 

int iab c/*变量定义*/   

for i100i<=999i++

 {      

ai/100 

                   b=(i%10/10 /*b=(i/10%l0*/     

 c=i%10 

                    ifa*a*a+b*b*b+c*c*c==1099   

printf(“%d\n”, i);   

}   

 

6.编一个程序,输入10个整数,统计并输出其中正数、负数和零的个数。 

  「解」输入10个整数,统计其中正数、负数和零的个数。程序引入3个计数器变量,用于统计大于以小于0和等于0的整数的个数。开始时,这3个计数器都置0,然后用循环逐一输入10个整数,并判定当前输入的整数是大于0,或小于0,或等于0,并按判定结果累加相应计数器。最后,程序输出这3个计数器的值。程序如下:

# include<stdio.h>   

main() 

  { 

int idnzp/*变量定义*/   

nzp0 

         fori1i<=10i++ 

                    print(“ 输入第%d个整数”, i);   

scanf(“%d”,&d);   

ifd<0n++   

else ifd>0p++   

else z++  

 } 

         printf(“负数有%d个,正数有%d个,零有%d个。\n”,npz);   

  

7.编程序,按下列公式计算e的值(精度为1e-6): 

  e1+1/1+1/2+1/3++1/n+ 

  「解」按e的幂级数展开式计算e的值。这是典型的求级数和计算问题。通常采用逐项计算,并累计的方法。计算新的项时,可用上一轮循环计算出的项,这能提高程序的效率。循环直至当前项的值小于精度要求结束。程序如下:   

# include <stdio.h>  

main() 

  { 

double eti/*变量定义*/   

e0.0t=1.0i1.0   

whilet>1.0e-6 

{   e+t   t/= i   i+= 1.0   } 

         printf(“e%.6f\n”, e);   

  

8.编程序,按下列公式计算y的值(精度为1e-6): 

  y=1/r*r+1 

  「解」按所给公式计算数列的和。类似上一小题的解,逐项计算并累计。程序如下:   

# include<stdio.h>   

main() 

double yrt/*变量定义*/   

y0.0r1.0   

while((t=1.0/r*r+1.0))>=1.0e-6 

{   y+=t   r+=1.0   }

printf(“y=%.6f\n”, y);   

 

9.编一个程序显示ASCII代码0x20ox6f的十进制数值及其对应字符。   「解」显示ASCII代码为十六进制0x20ox6f的字符的十进制代码值与其字符。程序可用一个循环,让变量i顺序地取0X20OX6f的值,并逐一输出其十进制代码和对应的字符,程序如下:   

# include<stdio.h>   

main() 

  {

 int ik0 

         fori=0x20 i<=0x6fi++ 

{   

ifk++%10== 0/*每行十个*/   

printf(“\n”); 

                   printf(“(%c=(%d)”, ii);   

         printf(“\n”);   

  

10.用三种循环语句分别编写程序显示1100的平方值。 

  「解」用三种循环语句分别编写显示1100的平方值的程序。直接写出3个程序如下:   

(1) 用输循环实现的程序   

# include<stdio.h> 

  main() /*for循环*/   

{       

 int ik0 

         forili<=100i++ 

{  

 ifk++%5==0 /*每行五个*/   

printf(“\n”); 

                   printf(“%d*%d=%d  ”,iii*i);   

         printf(“\n”);   

  2 while循环实现的程序  

 # include<stdio.h> 

  main() /* while循环*/   

{

 int ik=0    i=1 

         whilei<=100

                   ifk++%5==0/*每行五个*/      

printf(“\n”); 

                    printf(“%d*%d=%d  ”, iii*i);      

i++   

         printf(“\n”);   

}

(3) do-while循环实现的程序   

# include<stdio.h> 

  main() /*do-while循环*/   

 

int  i, k      

i=1   

do

                   ifk++%5==0 /*每行五个*/   

printf(“\n”); 

                   printf(“%d*%d=%d  ”,iii*i);   

i++ 

         } whilei<=100);   

printf(“\n”); 

 

 

 

 

 

 

 

 

 

 

      

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多