aopeng 发表于 2018-11-17 13:56:13

东农18秋《C语言程序设计》离线作业题目

东北农业大学网络教育学院
C语言程序设计网上作业题
第一章C语言概述
一、填空
1. *C语言中任何程序的运行总是从主函数开始,在()函数中结束。
2. *一个C语言程序总是从()函数开始执行。
3. *C语言源程序的扩展名为()。
4.*C语言源程序的扩展名为*.C、目标文件的扩展名为()、可运行文件的扩展名为()。
5.*C语言属于面向(      )语言。
6. *C语言程序的注释可以出现在程序的任何地方,它总是以(   ) 符号作为开始标记,以(   )符号作为结束标记。
7. *C语言中规定标识符只能由字母、数字、下划线组成,且第一个字符必须是(   )或(    )。
8. *结构化设计中的三种基本结构是(      )、(       )和循环结构。
9. * *程序开发的四个步骤是(   )、 (   )链接和执行。
二、单项选择题
1.*在C程序中所用的变量使用前(    )
(A)可以不定义 (B)先定义后使用(C)随时定义随时用(D) 其他
2.**C语言程序从main()函数开始执行,所以这个函数要写在(    )。
A) 程序文件的开始 B) 程序文件的最后C) 它所调用的函数的前面 D) 程序文件的任何位置
3. * *下列关于C语言的叙述错误的是(    )
A) 大写字母和小写字母的意义相同      
B) 不同类型的变量可以在一个表达式中
C) 在赋值表达式中等号(=)左边的变量和右边的值可以是不同类型
D) 同一个运算符号在不同的场合可以有不同的含义
4. *一个C程序的执行是从(    )。 ?A)本程序的main函数开始,到main函数结束 ?B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 ?C)本程序的main函数开始,到本程序文件的最后一个函数结束 ?D)本程序文件的第一个函数开始,到本程序main函数结束
5. * *以下叙述正确的是(    )。 A)在C程序中,main函数必须位于程序的最前面   B)C程序的每行中只能写一条语句 C)C语言本身没有输入输出语句    D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误
6. * *以下叙述不正确的是(    )。 A)一个C源程序可由一个或多个函数组成       B)一个C源程序必须包含一个main函数 C)C程序的基本组成单位是函数            D)在C程序中,注释说明只能位于一条语句的后面 7. *一个C语言程序是由(    )?。
A)一个主程序和若干子程序组成????B)函数组成   C)若干过程组成??????????????????D)若干子程序组成 第三章 数据类型、运算符与表达式
一、填空
1、* *x=2,y=-3,z=3,则表达式x||y+z&&y-z的值为 ()。
2、*在C语言中实型变量分为两种类型,它们是()和 ()。
3 * *、十进制11转化为八进制的值为()。   
4、* *十进制数159转换为八进制数是()   
5、* *已知int x=6; 表达式x%2+(x+1)%2的值是()。
6、*C语言中char型变量在内存中占() 个字节的内存单元
7、*C语言的变量名:TEA与tea是()同的。
8、* *设x的值为15,n的值为2,则表达式x%=(n+=3)运算后,x的值为(  )。
9、* *表达式( 5<3) && (2 || 8<4 ) 的值是(    )。
10、* *十六进制数2a转换为十进制数是()。
11、* *计算 x 、 y 之和的平方,表达式应写作 () 。
12、* *执行语句“ a=5+(c=6); ”后,变量 a 、 c 的值依次为() 。
13、* *设x是个实型变量。满足数学式|x|>4的c语言表达式是()。
14、* *若s 是整型变量,则计算表达式 s=22/3%2 后s的值为() 。
15、*C语言用(   )号括起来的单个或多个字符表示字符串常量。
16、*float x, y, z;是将x, y, z; 定义为 (      )
17、*目前常用C语言的一个整型变量的存储容量为(   )个字节。
18、*无符号基本整型的数据类型符为(            ),双精度实型数据类型符为(      )。
答案:unsigned int、double
19、* *定义变量的完整语句格式是: (         )   (          )变量名1=初值1,变量名2=初值2,...;。
20、* *设有下列运算符:<<、+、++、&&、<=,其中优先级最高的是(),优先级最低的是()。
21、** “ = ” 是(   )符号,不是等号。在C语言中等于号用 “ (   ) ” 表示。
22、* *表达式10/3的结果是(   ),10.0/3的结果是(      )。
23.* *表达式10%3的结果是(      ),3%10的结果是(       )。
24. * *定义int x,y;执行y=(x=1,++x,x+2);语句后,x的值是(    ),y的值是(    )。
二、单项选择题
1、*(    )是不正确的字符常量。
(A)'n'      (B)'1'       (C)"a"       (D)'/101'
2、 *(    )把x、y定义成float类型变量,并赋同一初值3.14。
(A)float x, y=3.14;       (B)float x, y=2*3.14;(C)float x=3.14, y=x=3.14;(D)float x=y=3.14;      
3、* *若有以下定义和语句: int?u=010,v=0x10,w=10; printf(″%d,%d,%d\n″,u,v,w); 则输出结果是(    )。
(A)8,16,10    (B)10,10,10      (C)8,8,10    (D) 8,10,10   
4、*以下正确的字符常量是(    )
(A)“x”(B) ‘W’(C)‘’(D)‘XYZ’
5、 * 在C语言的算术运算符中只能用于整型数的运算符是(    )
(A)++   (B)/      (C) %      (D)*
6、 *已知 int a; 那么 &a表示(    )   
   (A)变量名(B)变量a的地址      (C)变量a的值 (D)其他
7、*不正确的标识符是(   )   
(A)_a2         (B)2ai         (C)a2_i             (D)Int
8、*已知 int a=2,b=5; 则表达式a+5>b+3的值是(    )
(A)0   (B)1    (C)不确定( D)表达式错误
9、* *若变量已正确定义并赋值,下面符合C语言语法的表达式是
(A) a:=b+1 (B) a=b=c+2 (C) int 18.5%3 (D) a=a+7=c+b
10、* *若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是
(A) 1   (B) 2   (C) 2.0   (D) 2.5
11、*若变量a、i已正确定义,且i已正确赋值,合法的语句是   
(A) a==1   (B) ++i;   (C) a=a++=5;   (D) a=int(i);
12、* *以下不是c语言规定保留字的是( )。
    (A)float???? (B)integer???? (C)signed???? (D) unsigned
13 *、下列不正确的转义字符是   
(A) '\\'         (B)'\"      (C) '074'      (D) '\0
14、* *若有以下定义:  char a; int b;  float c; double d;  则表达式a*b+d-c值的类型为        (A) float    (B)int      (C) char       (D) double   
15、* *常数的书写格式决定了常数的类型和值, 0x1011 是 ( )   
(A) 8 进制整型常量    (B)字符常量    (C) 16 进制整型常数   (D)2 进制整型常数
16、* *在C语言中(以16位PC机为例),5种基本数据类型的存储空间长度的排列顺序为 A)char<int??<1ong??int<=float<double      B)char=int<1ong??int<=float<double C)char<??int??<1ong??int=float=double      D)char=int??=1ong??int<=float<double
17、*若x,i,j和k都是int型变量,则执行下面表达式后x的值为 ?x=(i=4,j=16,k=32) ?A)4???B)16   ??C)32????   ?D)52
18、*假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是: ?A)7????B)8???C)6???D)2
19、* *下列四组选项中,均不是C语言关键字的选项是 A)define????B)getc????C)include???D)while ?IF???????????char???????scanf????????go type??????????printf???????case????????pow
20、*下面四个选项中,均是C语言关键字的选项是 A)auto??????B)switch????C)signed????D)if ?enum???????typedef???????union??????struct ?include?????continue??????scanf??????type
21、* *下面四个选项中,均是不合法的用户标识符的选项是。 ?A)??A????????????B)float???????C)b-a???????D)一123 ????P_0????????????1a0??????????goto??????????temp ????do?????????????一A??????????int???????????INT
22、*下面不正确的字符串常量是。 ??A)'abc'??   B)"12'12"????   ?C)"0"?????D)""
23、* *若有代数式3ae/bc,则不正确的C语言表达式是: ?A)?a/b/c*e*3??????B)3*a*e/b/c   ?C)3*a*e/b*c???????D)a*e/c/b*3
24、* *以下不正确的叙述是 A)在C程序中,逗号运算符的优先级最低 B)在C程序中,APH和aph是两个不同的变量 C)若a和b类型相同,在执行了赋值表达式a=b后b中的值将放人a中,而b中的值不变。 D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值。
25、* *以下正确的叙述是: A)在C程序中,每行中只能写一条语句 B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数 C)在C程序中,无论是整数还是实数,都能被准确无误地表示 D)在C程序中,%是只能用于整数运算的运算符
26 、* *以下符合C语言语法的赋值表达式是 A)d=9+e+f=d+9       B)??d=9+e,f=d+9      C)d=9十e,e++,d十9?????D)d=9十e++=d十7
27、* *已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'十'6'一'3';后,c2中的值为 A)D?????   B)68   ???C)不确定的值????   ?D)C
28、* *设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为 ?A)int?????B)??float?   ?C)??double?    ?D)不确定
29、*设有说明:??char?w;?int??x;??f1oat??y;??double??z;则表达式w*?x+z一y值的数据类型为: A)float????   B)char??    ?C)int????   ?D)double
30、* *若有以下定义,则能使值为3的表达式是: int??k=?7,x?=12; A)??x%=(k%=?5)    B)??x%=(k一k%5)   C)??x%=k-?k%5???D)??(x%=k)一(k%=5)
第四章顺序程序设计
一、填空
1、*在屏幕上输出整型变量a,b值,每个数占5位,输出数据前有说明字符的 printf()函数为(   )。
*设charc=’A’,则语句printf(″%c″,c+32)结果为() 。
3、*通过键盘输入整型变量a的scanf()函数为(          )。
4、*已知 int a,b,c; a或者b两个中间有一个小于c的表达式是(    )。
5、* *已知 int x; 如果用scanf(“%f”,&x);给x赋值,错误的原因是()。
6、*float a=3.54;   printf("% 2.3f ",a);的输出结果是(      )
7、* * * 若有定义语句 “ int a=25,b=14,c=19; ” ,以下语句的执行结果是()。
if(a++<=25&&b--<=2&&c++) printf("***a=%d,b=%d,c=%d\n",a,b,c);
else                     printf("###a=%d,b=%d,c=%d\n",a,b,c);
8、* * *以下程序输入1 2 3<CR>后的执行结果是(               )。
#include <stdio.h>
main()
{ int a,c;
    char b;
    scanf("%d%c%d",&a,&b,&c);
    printf("a=%d,b=%c,c=%d\n",a,b,c);
}
9、* *以下程序输入123456<CR>后的执行结果是(               )。
#include <stdio.h>
main()
{ int a,b;
    scanf("%2d%3d",&a,&b);
    printf("a=%d,b=%d\n",a,b);
}
10、* *若有说明int i,j,k;则表达式i=10,j=20,k=30,k*=i+j的值为(   )。
二、单项选择题
1、?*设变量定义为“int a, b;”,执行下列语句时,输入(   ),则a和b的值都是10。
scanf("a=%d, b=%d",&a, &b);
(A)10 10         (B)10, 10      (C)a=10b=10       (D)a=10, b=10   
2、*若t为int类型,表达式t=1,t+5,t++的值是(   )。
(A)1            (B)6             (C)2                  (D)1      
3、**设x、y均为整型变量,且x=10 ,y=3,则以下语句的输出结果是(   ) printf("%d,%d\n",x--,--y);   
(A) 10,3       (B) 9,3      (C) 9,2         (D)10,2
4、 ** 阅读以下程序,当输入数据的形式为:25,13,10<回车>,正确的输出结果是(                        )
main()
{int x,y,z;
scanf(“%d%d%d”,&x,&y,&z);
printf(“x+y+z=%d\n”,x+y+z);                  
}
(A)x+y+z=48       (B)x+y+z=35          (C)x+z=35         (D)不确定值
5、**已知 int a=5,y; y=a++;问a,y=? (    )
(A)a=6 , y=5    (B)a=6 , y=6(C)a=6 , y=7    (D)a=5 , y=6
6、*已知 int a =5; 赋值表达式a+=a*a的值为(    )
(A)5;(B)10;(C)30;(D)50;
7、**若有以下程序段,
int c1=1,c2=2,c3;
c3=1.0/c2*c1;
则执行后,c3中的值是
(A) 0   (B) 0.5   (C) 1    (D) 2      
8、*putchar函数可以向终端输出一个: (    ) A)整型变量表达式值   B)实型变量值    C)字符串   D)字符或字符型变量值
9、**printf函数中用到格式符%5s?,其中数字5表示输出的字符串占用5列。如果字符串长度大于5,则输出按方式 (    ) A)从左起输出该字串,右补空格   B)按原字符长从左向右全部输出 C)右对齐输出该字串,左补空格   D)输出错误信息 10、**已有定义?int?a=-2;和输出语句:printf("%8lx",a);以下正确的叙述是: (    ) A)整型变量的输出格式符只有%d一种 B)%x?是格式符的一种,它可以适用于任何一种类型的数据 C)%x?是格式符的一种,其变量的值按十六进制输出,但%8lx?是错误的 D)%8lx?不是错误的格式符,其中数字8规定了输出字段的宽度
11、**若x?,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是: (    ) A)??scanf("?%d%lx,%le",&x,&y,&z);   B)??scanf("%2d?*?%d%lf"&x,&y,&z?);?? C)??scanf("%x?%*?d%o",&x,&y);      D)??scanf("%x%o%6.2f",&x,&y,&z);???
12、**已有如下定义和输入语句?,若要求a1,a2,c1,c2值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是 (    ) int??a1,a2;??char??c1,c2; scanf("%d%c%d%c",&a1,&c1,&a2,&c2); A)10A?20B<?CR>?B)10?A?20?B<CR>   C)10A20<CR>?? ?D)10A20?B<cR>。
13、**已有定义int??x;??f1oat??y;且执行scanf("%3d%f",&x,&y);语句,若从第一列开始输入数据12345??678(回车),则x?的值为(    ) A)12345??B)123???。??C)??45???????D)??345
14、**已有定义int??x;??f1oat??y;且执行scanf("%3d%f",&x,&y);语句,若从第一列开始输入数据12345??678(回车),则y?的值为: (    ) A)无定值B)45.0000??C)??678.000000??D)??123.00000
15、**已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A,B,当从第一列开始输入数据时,正确的数据输入方式是: (    ) int??a1,a2;??char??c1,c2; scanf("%d%d",&a1,&a2); scanf("%c%c",&c1,&c2); ?A)??1020AB<CR>??B)10??20<CR>AB<CR>    C)10??20???AB<CR>??D)10?20AB<CR>
16、*已有程序段和输入数据的形式如下,程序中输入语句的正确形式应当为(    ) ?main() {int??a;float?f; ????printf("\nInput?number:"); ??输入语句 ????printf("\nf=%f,a=?%d\n?,f,a); } Input??number:??4.5???2<CR> A?)scanf("%d,%f",&a,&f);??B)scanf("%f,%d",&f,&a) C)scanf("%d%f",&a,&f);???D)scanf("%f%d",&f,&a); 17、*以下能正确地定义整型变量a,b和c?并为其赋初值5的语句是 (    ) ?A)int?a=b=?c=?5;?? ?B)?int?a,b,?c=?5; ?C)a=?5,b=5,c=5;?????D)??a=?b=?c=5;
18、*已知ch是字符型变量,下面不正确的赋值语句是 (    ) A)ch='a+b';??B)ch='\0';??C)ch='7'+'9';??D)??ch=5+9;
19、已*知ch是字符型变量,下面正确的赋值语句是?(    ) A)??ch=?'123';??B)??ch=?'\xff';??C)??ch=?'\08';??D)??ch="\";
20、**若有以下定义,则正确的赋值语句是: ?int??a,b;float??x; ??A)??a=1,b=2,????B)b++;??C)??a=?b=?5?????D)??b=?int(x);
21、*设x?、y均为f1oat型变量,则以下不合法的赋值语句是(    ) A)++x;???B)y=(x%2)/10;?C)??x*=y+8;??D)x=y=0;
22、**x,y,z均为int型变量,则执行语句x=(y=(z=10)+5)一5;后,x?、y?和之的值是: (    ) ??A)??x=10????B)??x=10??C)??x=10? ?D)??x=10 ???????y=15?   y=10?????? ?y=10??????? y=5 ???????z=10   ?z=10??????? z=15??????? z=10 23、*逻辑运算符两侧运算对象的数据类型(    )。 ??A)只能是0或1         ?B)只能是0或非0正数 ??C)只能是整型或字符型数据 ?D)可以是任何类型的数据
24、***下关于运算符优先顺序的描述中正确的是(    )。 A)关系运算符<?算术运算符<?赋值运算符<?逻辑与运算符 B)逻辑?运算符<?关系运算符<?算术运算符<?赋值运算符 C)赋值运算符<?逻辑与运算符<?关系运算符<?算术运算符 D)算术运算符<?关系运算符<?赋值运算符<?逻辑与运算符
25、*下列运算符中优先级最高的是(    )。 ??A)<???B)十???C)&&?????D)!=
三、阅读程序,写出程序运行结果
1、*main()
{ int a=1,b=2;
a=a+b;b=a-b;a=a-b;
printf("%d,%d \n",a,b);
}2、*main()
       { int x=7,a=2,b=2,c;
         c=x/a%b;
         printf(c=%d\n”,c);}3、**以下程序输入100<CR>后的执行结果是(          )。
#include <stdio.h>
main()
{ int n;
    scanf("%o",&n);
    printf("n=%d\n",n);
} 4、**以下程序输入x=1.23,y=50<CR>后的执行结果是(                     )。
#include <stdio.h>
main()
{ float x,y;
    scanf("x=%f,y=%f",&x,&y);
    printf("x=% 7.2f ,y=% 7.2f \n",x,y);
} 5、***阅读下列程序,写出程序的输出结果。
      main()
      { int x=100,a=10,b=20,ok1=5,ok2=0;
      if (a<b)   
         if (b!=15)   
            if (!ok1)
                   x=1;
                else if(ok2)
                        x=10;
                     elsex=-1;
      printf("%d\n",x);
      } 6、**阅读下列程序,写出程序运行的输出结果。
      main()
      { int y=9;
      for (;y>0;y--)
            if(y%3==0)
            {
               printf("%d",--y);
               continue;
            }
      } 7、*阅读下列程序:
    main()
    {int a;
   char b;
   float c;
   printf("input a b c:");
   scanf("%d%c%f",&a,&b,&c);
   printf("a=%d,b=%c,c=%f\n",a,b,c);
    }
    程序运行后若输入“1234r1234.567(回车)”,写出程序的输出结果。 8、**阅读下列程序:
    main()
    {int a;
   float b,c;
   printf("input a b c:");
   scanf("%2d% 3f % 4f ",&a,&b,&c);
   printf("a=%d,b=%f,c=%f",a,b,c);
    }
    程序运行后若输入“12345678987654321(回车)”,写出程序的输出结果。 9、***阅读下列程序:
    main()
    {int a;
   float b,c;
   scanf("%d%f%f",&a,&b,&c);
   printf("a=%d,b=%f,c=%f",a,b,c);
    }
    程序运行后若输入“12 345 6789 87654321(回车)”,写出程序的输出结果。 第五章 选择结构程序设计
一、填空
1、**能正确表示“当ch为小写字母为真,否则为假”的表达式是()。
*设y是int型变量,请写出判断y为5的倍数的关系表达式() 。
*已知int a=1,b=2;表达式 (a<b ? a:b)的值是(    )。
*在switch语句中出现的break语句的功能是(    )。   
5、**能正确表示“当A=5时布尔量BL为真,否则为假”的表达式是()。                  
6、*已知 int a,b; a、b中有一个小于0的表达式是(    )。
7、*在C语言中,表示逻辑量“真”用1,表示逻辑量“假”用( )。
8、**若x=5,y=10,则x>y和x<=y的逻辑值分别为()和()。
9、*C语言中的逻辑运算符按优先级别是()、() 、()。
10、*C语言中逻辑运算符()的优先级高于算术运算符。
11、**将下列数学式(A) a=b 或 a<c   (B) |x|>4改写成C语言的关系表达式或逻辑表达式()和()
12、* 请写出以下程序的输出结果()。
main()
   { int a=100;
   if (a>100) printf(“%d\n”,a>100);
   else      printf(“%d\n”,a<=100);
}13、**当a=1,b=2,c=3时,以下if 语句执行后,a 、b 、c 中的值分别为()、()、 ()。
               if (a>c)
                      b=a;a=c; c=b;二、单项选择题
1、**已知整型变量k的值为3,下面程序段执行的结果是(    )            
switch(k)
             { case 1:putchar(‘A’);break;
               case 2:putchar(‘B’);break;
               case 3:putchar(‘C’);
               case 4:putchar(‘D’);
               default:putchar(‘E’);
             }
(A) CDE   (B) C   (C) ABC   (D) ABCD
2、***以下程序段正确的是(   )      
    (A)if(a>b) c=1            (B) if(a>b) c=1;
            else c=2;                      else c=2
    (C) if(a>b) c=1;            (D) if(a>b); c=1;
             else c=2;                     else c=2;      
3、**以下程序运行的结果是(    )
         main()
            {int x=12,y;
             y=x>12 ? x+10 : x-12;
             printf(“y=%d\n”,y);}
(A)y=0   (B) y=22   (C)y=12(D)y=10
4、**表示关系x<=y<=z的c语言表达式为   
 (A) (X<=Y)&&(Y<=Z)    (B)(X<=Y)AND(Y<=Z)   (C) (X<=Y<=Z)    (D) (X<=Y)&(Y<=Z)
5、**假定所有变量均已正确说明,下列程序段运行后x的值是       a=b=c=0;x=35;    if(!a)x--;    else if(b);    if(c)x=3;    else x=4;       (A)34      (B)4      (C) 35      (D) 3
6、**当a=1,b=3,c=5,d=4?,执行完下面一段程序后x?的值是?: ???????if(a<b) ???????if(c<d)x=1; ???????else ???????if(a<c) ???????if(b<d)x=2; ???????else?x=?3; ???????else?x=6; ???????else?x=7; ??????A)18   B)2??????C)3??????D)6
7、**以下程序的输出结果是: ???main() ??{int??a=100,x?=10,y=20,okl=5,ok2=0; ????if??(x<y) ????if(y?!?=10) ????if(!okl)??a=1; ???else ?????if(ok2)??a=10; ??????a=-1: ????printf(?"%d\n",a?) ??} ??A)??1??????B)??0????C)一1????D)值不确定 8、*为了避免在嵌套的条件语句If一else中产生二义性,C语言规定else子句 ????总是与(??)配对。 ????A)缩排位置相同的if?????B)其之前最近的if????C)?之后最近的if   ?D)同一行上的if 9、**以下不正确的语句为: ??A)??if(x>y);                                    ??B)??if??(x=?y)?&&(x!?=?0)??x+=?y; ??C)??if(x!=?y)scanf("%d",&x);??else??scanf("%d",&y);    ?D)if(x<?y){x++?;y十十;} 10、***请阅读以下程序: ??????#include<stdio.?h> ???????main() ??????{float??a,b ??????scanf("%f",&a); ??????if?(a<10.0)?b=1.0/x; ??????else?if((a<0.5)&&(a!=2.0))b=?1.0/(a十2.0); ??????else??if(a<10.0)??b=?1.0/x?; ??????else??b=10.0; ????printf("%f\n",y); ????} ?若运行时输入2.0(回车),则上面程序的输出结果是: ????A)0.000000???B)0.500000??C)??1.?000000???D)?0.250000 11、*若有条件表达式(exp)????a++:b--,则以下表达式中能完全等价于表 ????达式(exp)的是: ????A)??(exp==0)    ?B)??(exp!=0)   ??C)??(exp==?1 )?   D)??(exp!=1)??? 12、**若运行时给变量x?输入12,则以下程序的运行结果是: ????main() ????{int??x,y;? ?????scanf("%d",&x); ????y=x?>?12?x+10:??x一12; ????printf("%d\n",y); ????} ??????A)0??????B)22C)12???????0)10 13、*以下程序的运行结果是: ??????main()' ??????{int??k=?4,a=3,b=2,c=; ???????printf("\n?%d\n",k<?a???k:c<b??c?:a); ????} ????A)4??????B?)3?????C)2??????D)1 14、*执行以下程序段后、变量a,b,c的值分别是一。 ????int??x=10,y=9; ????int??a,b,c; ????a?=(-?-x?=?=?y++)?-?-x:++y?; ????b?=?x?++; ????c?=?y; ????A)a=9,b=?9,c=?9???????B?)a=8,b=8,c=10??C)a=9,b=?10,c=9??????0)a=1,b=?11,c=10 15、**若w,x,y,z,m均为int型变量,则执行下面语句后的m值是: ????w=?1;x?=?2;y=?3;z=4; ????m=(w<y)?w:x; ????m=?(m<y)???m:y; ????m=(m<z)?m:Z; ????A)1    B?)2?????C)3      D)4 16*若w=1,X?=?2,y=?3,z=4,则条件表达式w<x?w:y<z?y:z的值是:?? ????A)4??????B)3??????C)20   D)1
17、**执行以下程序段后的输出结果是 ????int??w=3,??z=7,x?=10; ????printf("%d\n",x>?10???x+100:x?一10); ????printf("%d\n",w++||z++?); ????printf("%d\n",!w>z); ????printf("%d\n",w&&z); ????A)0???????B)???1???????C)0??????D)?0
三、阅读程序,写出程序运行结果
1、** main()                           
{ int i, j=4 ;                  
for(i=j; i<=2*j; i++)
switch (i/j)
{case 0 :
case 1: printf(“*”); break ;
    case 2: printf(“#”,a);
}
}
2、* 若x=2,y=3,z=2,求下列表达式的值
x﹤y?y:z
(2)x﹥y? (++x):( ++z)
3、* main()
    { int a=10,b=5,x;
      x=a<b?b:a;
      printf(“x=%d\n”,x);}
4、* main()
         { int a=1, b=2, c=3;
         if(a>c)
             b=a; a=c; c=b;
         printf(“a=%d   b=%d   c=%d\n”,a,b,c);} 2
5、 ***main( )
      {inti=5;
do
         {switch(i%2)
             {case4: i--; break;
            case6: i--; continue;
            }
          i-=2;
          printf("%5d",i);
}while(i>0);
} 6. ** 若x=3,y=z=4,求下列表达式的值
(z>=y>=x)?1:0
z>=y&&y>=x7、**main()
{ int a, b;
for(a=1, b=1; a<=100; a++)
{ if(b>=10) break;
if (b%3= =1)
{ b+=3; continue; }
}
printf("%d\n",a);
}8、**#include <stdio.h>
main( )
{
   int s=0,k;
   for (k=0; k<=7;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=%d\n”,s);
}五、编写程序
1、***设计一个判断输入年份是否是闰年的程序。
第六章 循环控制
一、填空
1、*C语言中while和do-while循环的主要区别是(   )的循环体至少无条件执行一次。
**要使for(i=0;i<=;printf(“%d\n”,i+=2));程序段输出10个整数,i应<=(   )。
**若While((ch=getchar())==’e’) printf(“*”);输入字符串:abcde<回车>,则循环体将执行 () 次。
4、*在while(表达式) 循环语句中,表达式的值是(   )时可以循环,至少循环(   )次。
5、**循环语句for(;;) printf("OK \n");和do { printf("OK\n");} while(0);执行完毕循环,循环次数分别是(   )和(   )。
6、*结构化程序设计的三种基本结构是:选择结构、顺序结构和(   )。
7、***当循环体中的switch语句内有break语句,则只跳出(   )语句。同样,当switch语句中有循环语句,内有 break 语句,则只跳出(   )语句。
8、*循环体执行遇到continue 语句时(   )。 二、单项选择题
1、**以下程序的输出结果是
   main( )
   { int i;for(i='A';i<'I';i++,i++)
       printf("%c",i+32);printf(" \n");}
(A) 编译不通过,无输出         (B) aceg   (C) acegi                   (D) abcdefghi   
2、**执行以下程序后,输出的结果是
   main ()
   { int y=10;do { y - -;} while(- - y);
       printf("%d\n",y --);}
(A) -1   (B) 1   (C) 8   (D) 0   
3、**若变量已正确定义,语句“if(a>b) k=0; else k=1;”和()等价。   
(A)k=(a>b)?1:0;                (B)k=a>b;
(C)k=a<=b;                     (D)a<=b ? 0 : 1;   
4、* 设有程序段int k=10;while (k=0)k=k-1;则下面描述中正确的是(                        )
(A)循环执行十次                (B)循环是无限循环      
(C)循环体语句一次也不执行      (D)循环体语句执行一次      
5、 *已知:int i; for(i=0; i<=10;i++);如果表达式1即i=0缺省那么完成表达式1功能的语句可以( )
(A)放在for语句的前面   (B)放在循环体中
(C)放在for语句的后面   (D)放在程序的任何地方
6、**以下可以正确计算s=1*2*3*4*5的程序段是(    )
         (A)for(i=1;i<=5;i++)      (B) for(i=1;i<=5;i++)
{ s=1;                     { s=0;
s=s*i;}                     s=s*i;}
         (C)s=1;                  (D) s=0;
    for(i=1;i<=5;i++)         for(i=1;i<=5;i++)
   s=s*i;                         s=s*i;
7、*以下叙述正确的是(? )。 ? (A)do-while语句构成的循环不能用其他语句构成的循环来代替 ? (B)do-while语句构成的循环只能用break语句退出 ? (C)do-while语句构成的循环,在while后的表达式为非零时结束循环 ? (D)do-while语句构成的循环,在while后的表达式为零时结束循环
8、*以下程序段输出的结果是(    )
          a=-1;
          do
         { a=a*a;}while(a<0);
   (A) 循环一次         (B) 循环两次          (C) 死循环      (D) 有语法错误
9、**设x和y均为int型变量,则执行下的循环后,y值为     for(y=1,x=1;y<=50;y++)  { if(x>=10))break;  if (x%2==1)  { x+=5; continue;}  x-=3;  } (A) 2          (B)4         (C) 6            (D) 8
10、**假定a和b为int型变量,则执行以下语句后b的值为 a=1; b=10; do { b-=a; a++; } while (b--<0) ;                (A) 9         (B)-2         (C) -1         (D) 8
11、 **设j为int型变量,则下面for循环语句的执行结果是        for( j=10;j>3;j--)  { if(j%3)j--;  --j; --j;  printf("%d ",j);  } (A) 6 3      (B)7 4         (C) 6 2         (D) 7 3
12、**设有程序段 ??int??k=10; ??while??(k=0)??k=?k—1; ??则下面描述中正确的是 A)??while循环执行10次??????B)循环是无限循环 C)循环体语句一次也不执行???D)循环体语句执行一次 13、**有以下程序段 ????int??x=0,s=0; ????while??(!??x!=?0)??s+=++x; ????printf("%d",s); ????则 A)运行程序段后输出0         ?B)运行程序段后输出1 C)程序段中的控制表达式是非法的???????D)程序段执行无限次 14、**语句while(!E)中的表达式!E等价于: A)??E==0???B)??E!=1??C)??E!=0????D)??E==1 15、**下面程序段的运行结果是 ????a=1;b=?2;c=2; while(a<b<c)??{???t=?a;a=?b;??b=t;?c-?-;} printf("%d,%d,%d",a,6,c); A)1,2,0????B)2,1,0????C)1,2,1????D)2,1,1 16、**下面程序段的运行结果是: x?=?y=?0; while(x<15)??y++,x?+?=?++y; printf("%d,%d",y,x); A)??20,7????B)6,12??????c)??20,8??????D)8,20 17、**若有如下语句 ?int??x=3; ?do?{?printf("?%d\n",x?-=2);}?while(!(--x)); ????则上面程序段 ????A)输出的是?1??B)输出的是1和-2   ??C)输出的是3和0??? ???D)是死循环 18、**下面有关for循环的正确描述是:??? ????A)??for循环只能用于循环次数已经确定的情况 ????B)??for循环是先执行循环体语句,后判断表达式 ????C)??在for循环中,不能用break语句跳出循环体 ????D)??for循环的循环体语句中,?可以包含多条语句,但必须用花括号括起来 19、**对for(表达式1;;表达式3)可理解为: A)??for(表达式1;??0;表达式3)         B)??for(表达式1;1;表达式3) C)????for(表达式1;表达式1;表达式3)    D)????for(表达式1;表达式3;表达式3) 20、*若i为整型变量,则以下循环执行次数是: ??for??(i=2;i==0;)??printf("%d",i--?);? ??A)无限次???B)?0次???C)?1?次?????D)??2次 21、**以下for循环的执行次数是: ??for??(x=0,y一0;??(y=123)&&(x<4);??x++); ??A)是无限循环?B)循环次数不定?C)执行4次??D)执行3次 22、**以下不是无限循环的语句为: ??A)??for??(y=0,x=1;x?>?++y;x?=i++)??i=x?;      ?B)???for?(;;??x++=i); ??C)??while??(1){x?++;}                     ?D)??for(i=10;?;i--)sum+=i; 23、**下面程序段的运行结果是: for?(y=?1;y<10;)?y=((x=3*?y,x+1),x-1); printf??("x=%d,y=%d",x,y); A)x=27,y=27??   ?B)x=12,y=13??   ?C)x=15,y=14???D)x=y=27 24、**下面程序段的运行结果是 ?for(x=3;x<6;x++)printf((x?%2)?("**%d"):("?##%d\n"),x); ???A)**3??????B?)##3?????C)##3??D)**3##4 ??????##4??**4?**4##5?**5 ??????**5??##5 25、*执行语句for(i=1;i++<4;);后变量i的值是 ??A)3????B?)4?????C)5????D)不定 26、**以下正确的描述是。 ?? A)continue语句的作用是结束整个循环的执行 ????B)只能在循环体内和switch语句体内使用break语句 ????C)在循环体内使用break语句或continue语句的作用相同 ????D)从多层循环嵌套中退出时,?只能使用goto语句 27、**下面程序段:???? ??????for??(t=1;??t<=100;t++) ??{scanf("%d",&x);? ???if(x<0)??continue;? ??????printf("%3d",t);}? ???A)?当x<0时整个循环结束       ???B)?x>=0时什么也不输出 ???C)?printf函数永远也不执行      ???D)最多允许输出100个非负整数 28、*以下描述正确的是 ????A)??goto语句只能用于退出多层循环    ????B)??switch语句中不能出现continue语句 ????C)??只能用continue语句来终止本次循环 ??D)??在循环中break语句不能独立出现
三、阅读程序,写出程序运行结果
1、* *main()
   {inti=1;
while(i<=10)
if(++i%2!=0)continue;
else printf(“%3d”,i);
}2、***main( )
   {        inti,j,k;
        charspace=‘’;
        for(i=1;i<=3; i++)
        { for(j=1;j<=10-i;j ++)
        printf(“%c”, space);
        for(k=1;k<=2*i; k++)
        printf(“*”);
        printf(“\n”); }
}
                  
3、**main()
{inti,j,sum=0,a;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
   {a=i+j;
   if(i==j) sum+=a; }
printf(“%d”,sum);
}4、* main()
         { intx=10, y=6, i=0;
            for(i=y; i<= x ; i++) printf(“i=%d\n”,i);}5、*   main()
               { int x=0,y=0;
               do
                  { y++;
                  x=x*x;
                   }while((x>0)&&(y>5));
               printf(“x=%dy=%d\n”, x, y);}
6、*main()
       { int x=2,y=3,z;
          z=x;
          if(x>y) z=1;
          else if(x==y) z=0;
               else z=-1;
          printf(“z=%d\n”,z);}
7、*main()
{ int a[]={1,2,3,4,5,6,7,8,9,10}, s=0, i;
                for(i=0; i<10; i++)
                if(a%2==0) s=s+a;
                printf(“s=%d”, s);}
8、**main()
{ int n=2345,k=0;
while(n>1)
{
k++;
n= n/10 ;
}
printf(“%d\n”,k);
}

9、*main()
         { int x=1, y=1, i=0;
            do
             { x=x+y ; y=x+y ;i++;
               printf (“x=%dy=%d\n”, x, y);
             } while(i<=3);}
10、***#include<stdio.h>
main ( )
{
   int j=1,k,sum,m,n=5;
   sum=0;
   while(j<=n)
   {
      m=1;
      for(k=1; k<=j;k++)
             m=m*k;
      sum=sum+m;
      j++;
}
printf(“sum=%d\n”,sum);
          }
11、**?????#include<stdio.?h>????? ?????main() ????{int??i,sum=?0;?? ??????for(i=1;i<=50;i++) if(??i%7==0)??sum+=i; ??????printf("%d",sum); ????}????? 12、**下面程序的运行结果是: ????#include??<stdio.?h> ??????main()????? ????{int?i; for(i=1;i<=5;i++) ??switch(i%5) {case??0:printf("*?");break; ??case??1??:printf("#");break; ??default??:printf("\n"); ??case??2??:printf("&"); ????} ??13、**下面程序的运行结果是: ????#include?<stdio.?h> ??????main() ?????{??int????x,i;???? ??????for(j-1;i<=100;i++) ??????{x=i; ??if(++x%2==0) ????if(++x%3==0) ?? ??????if(++x%7==0) ??????printf("%d",x); ?? ??} ??????}
14、**下面程序的运行结果是: main()
{
int k,n,m;
n=10;m=1;k=1;
while (k++<=n)
m*=2;
printf("%d\n",m);
}
四、程序填空
1、***所谓水仙花数是指一个三位正整数,其各位数字的立方之和等于该正整数。例如编写程序,求得并输出全部水仙花数的个数。请填空完善程序。 ? #include <stdio.h> ? main() ? { ???? int hun,ten,one;?? /*百位数、十位数、个位数*/ ???? int num,count=0; ???? for (num=100;_____(1)_____;num++) ???? { ?????? hum=________(2)_________; ?????? ten=________(3)_________; ?????? one=________(4)_________; ?????? if (________(5)___________) ?????? { ???????? printf("%5d",num); ???????? count++; ??????? } ????? } ????? printf("\n"); ????? printf("No.=%d\n",count); ???? }
2、**从键盘上输入10个数,求其平均值。 main() {int i; float f,sum; for(i=1,sum=0.0;i<11;i++) {_____(1)_____ ; _____(2)_____; } printf(“average=%f\n”,sum/10); }
3、**以下程序的功能是:从键盘上输入若干个学生的成绩, 统计并输出最高成绩和最低成绩,当输入负数时结束输入.请填空. main() { float x,amax,amin; scanf("%f",&x); amax=x; amin=x; while(_____(1)_____) { if(x>amax) amax=x; if(_____(2)_____) amin=x; scanf("%f",&x); printf("\namax=%f\namin=%f\n",amax,amin); *
4、***用循环输出下列形式的数字金字塔。

main ( ) {
   int i, j;
   for (i=1; _____(1)_____;i++) {
         for (j=i;j<=10;j++) printf(" "); /* 输出若干个空格 */
         for (j=1; _____(2)_____;j++) printf ("%2d",j);
         for (_____(3)_____;j>=1;j--) printf ("%2d",j);
         printf ("_____(4)_____");
   }   
}   
5、**下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环。 ??#indude??<Stdio.h> ??????main() ??????{int??a,b,t; scanf("%d%d",&a,&b); while(??_____(1)_____??) {if(a>b) ?{t=a;a=b;b=t;} ??printf("%d,%d",a,b); scahf("%d%d",&a,&b);人 } 6、**下面程序的功能是从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m、n中的较大者,请选择填空: ????#indude???"stdio.h"??? ??????main() ??????{int??m=0,n=0; ??????char????c;??1 ??????while((?_____(1)_____)!='\n') ??????{?if(c>='A'?&&?C<='Z')?m++?; ??????if(c>='a'??&&?c<='z')??n++;?}????? ??????printf("%d\n",??m<n??n:m);????}????? 7、*下面程序段的功能是计算1000!的末尾含有多少个零。 ?????(提示:只要算出1000!中含有因数5的个数即可 ) ????for(k=0,i=5;i<=1000;??i+=5) ????? ????while(_____(1)____){k++;?m=m/5;}
五、编写程序
1、 **从键盘输入20个整型数,统计其中负数个数并求所有正数的平均值。2、*编写一个函数,重复打印给定的字符n次3、*编一程序,输入10个数,并求出它们的和4、*编一程序,显示如下图案

**
***
****
***** 5、*求出所有正整数相乘乘积为64的数对6、**打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和就等于该数本身。例如:153是一个“水仙花数”,因为153=13+53+33。7、**编写程序打印出以下形式的乘法九九表。
**乘法口诀**
       (1)    (2)   (3)   (4)   (5)   (6)   (7)   (8)   (9)
                                                         
(1)   1      2   3   4   5   6   7   8   9
(2)   2      4   6   8    10    12    14    16    18
(3)   3      6   9    12    15    18    21    24    27
(4)   4      8    12    16    20    24    28    32    36
(5)   5   10    15    20    25    30    35    40    45
(6)   6   12    18    24    30    36    42    48    54
(7)   7   14    21    28    35    42    49    56    63
(8)   8   16    24    32    40    48    56    64    72
(9)   9   18    27    36    45    54    63    72    81
                                                         8、 **编程实现求解下面的式子的结果 s=1*2+2*3+3*4+…+20*21
9、*** 从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印“not exist”。第七章 数组
一、填空
1、**说明char s1[]=“china”,s2;要将s1的值复制到s2中的正确语句是(      )。
**a数组定义如下char a;,按照内存排列顺序,a数组中的所有元素是(      )。
3、*已知 int a[]={0,1,2,3,4,5}; 它的最大下标是(    )。   
4、*已知 int a;内存开辟有()个存储单元。
5、*在一维数组中,不同数组元素的数据类型是否可以不同( )?
6、*3行4列的二维数组,共有()个元素。
7、**将 str定义为字符数组并初始化为“Lei”的语句是(    )。
8、*系统判断字符串结束的标志是            。 二、单项选择题
1、*定义一个有 4 个元素的一维整型数组,正确的是(   )
(A) float a ;   (B) int a[]={1,2,3,4,5} ;
(C) int a[]={1,2,3} ; (D) int a={1}
2、**以下对数组的初始化正确的是(    )
(A)int x={0,1,2,3,4,5};(B)int x[]={0,1,2,3,4,5};
(C)int x={5*0};          (D)int x[]=(0,1,2,3,4,5);   
3、**给出以下定义: char x[ ]="abcdefg"; char y[ ]={'a','b','c','d','e','f','g'}; 则正确的叙述为    (A) 数组X和数组Y等价                (B)数组x和数组Y的长度相同 (C) 数组X的长度大于数组Y的长度      (D) 数组X的长度小于数组Y的长度
4、*在c语言中,引用数组元素时,其数组下标的数据类型允许是__. ????????A)整型常量?????????B)整型表达式 ???c)整型常量或整型表达式D)任何类型的表达式 5、*以下对一维整型数组a的正确说明是__。 ????????A)??int?a(10);??B)int?n=?10,a; ????c)??int??n;???????D)??#define??SIZE??10; scanf("%",&J1);??int?a; int?a; 6、*若有说明:int?a;则对a数组元素的正确引用是__。 ????????A)a ?B)?a? C)?a?D)?a 7、*在C语言中,一维数组的定义方式为:,类型说说明符?数组名__。 A)?[常量表达式]??   ?B)?[整形表达式]???? c)[?整型常量]或[整型表达式]?    D)[整型常量] ?8、*以下对二维数组a的正确说明是__。 ??????A)??int?a[];???B)??floatf?a(3,4); ????c)??double?a;??D)??float?a(3)(4); 9、**若有说明:int?a;?则对a数组元素的正确引用是__。 ????????A)??a?????B)??a???C)??a????D)??a(2)(1); 10、**若有说明:int?a;则对a数组元素的非法引用是__。 ?? A)??a??B)??a??C)a????D)a"???????" 11、**以下不能对二维数组a进行正确初始化的语句是__。 ??A)??int??a={0}; ?                B)??int??a[]={{1,2,3},{4,5}{6}};   ?D)???int??a[]={{1,0,1},{},{1,1}};? 12、**若有说明:??int??a〔3〕「4〕={0};则下面正确的叙述是 ?A)只有元素a可得到初值0?                  ?B)此说明语句不正确:。???? ?C)数组a中各元素都可得到初值,但其值不一定为0。 ?D)数组a中每个元素均可得到初值0 13、***下面程序(每行程序前面的数字表示行号) ?1???main() ?2?????{ ?3?????int??a={3*0}; ?4?????int??i; ?5?????for(i=0;i<3;i++)??scanf("%d",&a); ?6?????for(i=1;i++)?a=a+a ?7?????printf("%d\n",a); A)没有错误   B)第3行有错误    C)第5行有错误?   D)第7行没有错误?
14、***下面程序每行程序前面的数字表示行号)。 1????main() 2????{ 3?????float?a={0.0}; 4?????int??i 5?????for(i=0;i<3;i++)??scanf("%d",&a); 6?????for(i=0;i<10;i++)??a=a+a; 7?????printf("%d\n",a); 8?????} A)没有错误?????????B)第3行有错误    C)第5行有错误??????D)第7行有错误??
15、***下面程序有错的行是 ?1??main() ?2{ ?3???int??a={1}; ?4???int??i; ?5???scanf("%d",&a); ?6???for(i=1;i<3;i++)??a=a+a; ?7???printf("a=%d\n",a); ?8???} ?A)3??????B)6???C)7??????D)5 16、***下面程序(每行程序前面的数字表示行号) ?1??main() ?2??{ ?3???int?a={0}; ?4???int?i; ?5???for(i=0;i<3;i++)scanf("%d",&a); ?6???for(i=1;i<4;i++)a=a+a; ?7???printf("%d\n",a); ?8?????????????????????} ?A)没有错误????????????B)第3行有错误    ?C)第5行有错误????????D)第6行有错误 17、**若二维数组a有m列,则计算任一元素a在数组中位置的公式为 (假设a位于数组的第一个位置上。) ?A)i*m+j????B)j*p+i。C)i*m+j-1????D)i*m+j+1?? 18、**对以下说明语句的正确理解是 ?int?a={6,7,8,9,10}; ?A)将5个初值依次赋给a至a          B)将5个初值依次赋给a至a ?C)将5个初值依次赋给a至a         D)因为数组长度与初值的个数不相同,所以此语句不正确 19、*以下不正确的定义语句是__. ?A)??double??x={2.0,4,0,6.0,8.0,10.0};      ?B)??int??y={0,1,3,5,7,9}; ?C)??char??c1[ ]={’1’,’2’,’3’,’4’,’5’};???      ?D)??char?c2[ ]=}{'\x10','\xa','\x8'}; 20、*若有说明:int??[]={1,2,3,4,5,6,7};则a数组第一维的大小是__. ?A)??2????B)??3??    C)??4??    D)无确定值 21、**若二维数组a有m列,则在a前的元素个数为__. ?A)j*m+j??B)i*m+j????C)i*m+j??D)i*m+j+1 22、**定义如下变量和数组:? ?int?k;? ?int?a={1,2,3,4,5,6,7,8,9}; ?则下面语句的输出结果是 ?for(k=0;k<3;k++)??printf??("%d",a); ?A)??3??5??7B)3?6??9???C)?1?5?9?D)??1?4?7 23、***若有以下程序段: ...... ?int?a[]={4,0,2,3,1};i,j,t; ?for(i=1;i<5;i++) ?{t=a;j=i-1; ?while(j>=0&&t>a) ???{a=a;j--;} ????????...... ?则该程序段的功能是?__.?? ?A)对数组a进行插入排序(升序)      ?B)对数组a进行插入排序(降序) ?C)对数组a进行选择排序(升序)       ?D)对数组a进行选择排序(降序) 24、***下面程序的运行结果是__。
?main()? ?{int??a=(i/j)*(j/i); ???for(i=1;i<6;i++) ?????{for(j=1;j<6;j十十) ???printf("%2d",a); ???????printf("\n"_);} ?????????} ?? A)11111?????B)00001? C)10000?????D)10001 11111????????00010????01000?????????01010 11111????????00100????00100?????????00100 11111????????01000????00010?????????01010 11111????????10000????00001?????????10001 25、***下面程序的运行结果是?__. ?????main() ?????{int??a,i; ?????????for(i=1;i<6;i++) ?????{a=9*(i-2+4*(i>3))%5; ??????printf("%2d",a); }???????? ???????} ?????A)40404   B)40403 ????C)40443   D)40440 26、**对两个数组a和b进行如下初始化???????? ???char??a[]="ABCDEF"; ???char??b[]={’A’,’B’,’C’,’D’,’E’,’F’}; ???则以下叙述正确的是?__.??? ???A)??a与b数组完全相同???????B)??a与b长度相同 ???C)??a和b中都存放字符串?????D)??a数组比b数组长度长 27、**有两个字符数组a、b,则以下正确的输入格式是??__. ???A)??gets??(a,b);???B)??scanf??("%s%s",a,b); ???C)??scanf??("%s%s",&a,&b);??D)??gets??("a"),??gets??("b"); 28、*有字符数组a和b,则正确的输出形式是__. A)??puts??(a,b);??B)??printf??("%s,%s,a[],b[]);   C)??putchar(a,b);??D)??puts??(a),??puts??(b); 29、**判断字符串a和b是否相等,应当使用__. A)??if??(a==b)???B)??if??(a=b)    C)??if??(strcpy(a,b)),??D)??if??(strcmp(a,b)) 30、**下面描述正确的是__. ?A)两个字符串所包含的字符个数相同时,才能比较字符串 ?B)字符个数多的字符串比字符个数少的字符串大 ?C)字符串"STOP?"与STOp"相等 ?D)字符串"hat"小于字符串"he" 31、**下述对C语言字符数组的描述中错误的是 ?A)字符数组可以存放字符串 ?B)字符数组的字符串可以整体输入、输出 ?C)可以在赋值语句中通过赋值运算符"="对字符数组整体赋值 ?D)不可以用关系运算符对字符数组中的字符串进行比较
32、**说明: int a; 则对a数组元素的正确引用是()。
(A)a   (B) a(C) a    (D)a(2)(1)   
33、* 以下数组定义中不正确的是(      )    (A) int a;         (B) int b[ ]={0,1,2,3}; (C) int c={0};   (D) int d[ ]={{1,2},{1,2,3},{1,2,3,4}};
三、阅读程序,写出程序运行结果
1、***阅读程序,写出运行结果:
      main()
      { static int a[]={9,7,5,3,1,2,4,6,8};
      int i,j,s1=0,s2=0;
      for(i=0;i<3;i++)
             for(j=0;j<3;j++)
               { if(i==j)s1=s1+a;
                   if(i+j==2) s2=s2+a;
               }
      printf("%d\n%d\n",s1,s2);
      }
2、***说明下列程序的功能。
      main()
      { int i,j;
      float a,b,x;
      for(i=0;i<3;i++)
            for(j=0;j<3;j++)
                { scanf("%f",&x);a=x;}
      for(i=0;i<3;i++)
            for(j=0;j<3;j++)b=a;
      for (i=0;i<3;i++)
            { printf("\n");
            for(j=0;j<3;j++) printf("%f ",b);
            }
       } 3、***写出下列程序的运行结果。
       main()
       { static char a[]={'*','*','*','*','*'};
         int i,j,k;
         for(i=0;i<5;i++)
             { printf("\n");
               for(j=0;j<i;j++)printf("%c",' ');
               for (k=0;k<5;k++) printf("%c",a);
             }
       } 4、***说明下列程序的功能。
       main()
       { int i,j;
         float a,b,c,x;
         for(i=0;i<3;i++)
             for(j=0;j<3;j++)
               {scanf("%f",&x);a=x;}
         for(i=0;i<3;i++)
             for(j=0;j<3;j++)
               {scanf("%f",&x);b=x;}
         for(i=0;i<3;i++)
             for(j=0;j<3;j++) c=a+b;
         for(i=0;i<3;i++)
             { printf("\n");
               for(j=0;j<3;j++) printf("%f ",c);
             }
         }5、**下面程序的运行结果是 ???#indude<stdio.h> main() ??{char??ch={"12ab56"}; ?????????int??i,s=0; ???for(i=0;ch>='0'&&ch<='9';i+=2) ?????s=10*s+ch-'0'; ????????printf("%d\n",s); ???????} 6、***当运行以下程序时,从键盘输入:aa??bb<CR> cc?dd<CR> (<cR>表示回车),则下面程序的运行结果是 ?#??include<stdio.h> ?main()???? ?{char??a1,a2,a3,a4; ?scanf("%s%s",a1,a2);? ?gets(a3);??gets(a4); ?puts(a1);??puts(a2); ?puts(a3);??puts(a4); ???????}
7、**当运行以下程序时,从键盘输入:ab<CR> ????c<CR> ????dd<CR> ?(<cR>表示回车),则下面程序的运行结果是 ?#include<stdio.h> ???#define?N?6 ??main() ???{??char??c;??????? ???????int??i=0; ???????for??(;i<N;c=getchar(),i++);?????? ???for(i=0;??i<N;??i++)??putchar(c); } 8、**当运行以下程序时,从键盘输入:AhaMA??Aha<CR>(<CR)表示回车), ?则下面程序的运行结果是 ???#include??"stdio.h" ???main() ?{char??s,c='a'; ???int?i=0; ???scanf("%s",s); ???while(s!='\0') ?????{if(s==c)??s=s-32; ???else??if(s==c-32)??s=s+32; ?????i++; ?????} ???puts(s); ) 9、**下面程序的运行结果是。 ?#include<stdio.h> ?#inc1ude<string.h> ?main() ?{char??a="LMNP"; ???????int??i=0; ???????strcat(a,b);? ???whi1e(a!='\0')b=a; ???puts(b); ?} 10、**下面程序的运行结果是 ??#include?<stdio.h> ???main() { char?str[]="SSSWLIA",c; int?k; for(k=2;(c=str!='\0';k++) {switch? {case?'I':++k;break; case?'l':continue; default:putchar?;continue; } putchar('*'); } }
11、**下面程序的运行结果是 ?#include?<stdio.h> main() {char?a[]="morming",t; int?i,j=0; for(i=1;i<7;i++)?if(a<a)j=i; t=a;a=a; a=a;puts(a); } 四、程序填空
1、***下面程序将按如下形式输出杨辉三角形。






1















1



1











1



2



1







1



3



3



1



1



4



6



4



1

#define N 5
main()
{inti,j,a;char space=’ ’;
for(i=0;i<N;i++)
      {         =1;         =1;}
      for(i=2;i<N;i++)
       for(j=1;         ;j++)
      a=            +a;
      for(i=0;i<N;i++)
   { for(j=0;j<4-i;j++)
       printf(“%c ”,space);
      for(j=0;          ;j++)
       printf("%4d",a);
      printf("\n");}
      }
2、**函数fun的功能是使一个字符串按逆序存放,请填空  void fun (char str[])  { char m; int i,j;  for(i=0,j=strlen(str);i<      (1)   ;i++,j--)  { m=   (2)    ;  str=   (3)      ;  str=m;  }  printf("%s\n",str);  }
3、***以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdef和abceef,则输出为-1。请填空。  #include  main()  { char str,str2,c;  int i,s;  printf("\n input string 1:\n"); gest(str1);  printf("\n input string 2:\n"); gest(str2);  i=0;  while((strl==str2&&(str1!=   (4)      ))  i++;  s=      (5) ;  printf("%d\n",s);
4、**下面程序段是输出两个字符串中对应字符相等的字符。请选择填空。 char??x[]="programming"; char??y[]="Fortran"; int??i=0; while??(x!='\0',&&?y!'\0') ?{if??(x==y)?printf??("%c");?"   (1)   );?? ?????else?   (2)   ;} } ??????
5、**有已排好序的字符串a,下面的程序是将字符串s中的每个字符按a中元素?的规律插入到a中。请选择填空。 ?#indude<stdio.h> ??main() ?{char??a="cehiknqtw"; ???char??s[]="fbla"; ???int?i,k,j; ???for(k=0;s!='\0';k++) ????{j=0;??? ??????while(s>=a&&a!='\0')(1); ???????for(i=str1en(a);i>=j;i--)?(2); ??????a=s; ?????} ?puts(a); ???}
6、*下面程序的功能是将字符串5中所有的字符c删除。请选择填空。 ?#include??<stdio.h> ?main() ?????{char??s; int?i,j; ??????gets(s); ???????for(i=j=0;s!='\0';i++) ?????????if(s!='c')(1)    ???? ?????puts(s); ? }
? 7、**下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间?用空格分隔。请选择填空。??????? ???#indude<stdio.h> ???main() ???????{char??s!='\0') ?????????{c1=s; if(i==0)??c2=' '; else??c2=s; if((1))??num++; i++; ?) ?????printf("There?are?%d?words.\n",num); ?} ?? ?????? 8、**下面程序是用冒泡法对10个数进行从小到大排序的程序。
main( )
{ int      ,i,j,temp;
printf("请输入10个整数:\n");
for(i=0;i<10;i++)
scanf("%d",         );
for(i=1;i<10;i++)      
for(j=0;         ;j++)   
    if(a      a)
      { temp=a;         ; a=temp;}
printf("\n排好序的10个整数为:\n");
for(i=0;i<10;i++)
   printf("%5d",a);
}

9、***编写程序,实现:将自然数1、2、3、···、25以方向依此填入二维数组a(5行5列)并按照矩阵形式输出结果。 ??? ?? ?? ?? ??  ? 11??? 7??? 4??? 2??? 1 ? 16?? 12??? 8??? 5??? 3 ? 20?? 17?? 13??? 9??? 6 ? 23?? 21?? 18?? 14?? 10 ?? 25?? 24?? 22?? 19?? 15 ?请填空完善程序。 ?#include <stdio.h> ? #define N 5 ? main() ? { ???? int i,j,k; ???? int a; ???? k=1; ???? for (i=N-1;i>=0;i--) ?????? for (j=0;j<N-i;j++) ?????? { ????????? a=k; ????????? k++; ??????? } ????? for (i=1;i<=N-1;i++) ????????? for (j=0;j<______(1)______;j++) ????????? { ????????????? __________(2)_________=k; ???????????? ___________(3)__________; ?????????? } ?????? for (i=0;i<N;i++) ???????? { ???????????? for (j=0;j<N;j++) ??????????????? printf("%4d",______(4)________); ??????????? ____________(5)___________; ????????? } ??????? } 五、编写程序
1、**检测某一给定字符串的长度(字符数),不包括结束符’\0’。
答案:
#include<stdio.h>
main()
{
        static char str[]={"happy"};
        int i;
        i=0;
        while(str!='\0')
                i++;
        printf("the length of string is %d",i);
}2、**求二维数组A中最大元素值。
***编一过程判定s字符串是否为一个Palindrome,所谓Palindrome是指其从正反两个方向看都是一样的,如“madam”。***已知一个一维数组a中有10个数,求出其中前n个数的和并放入a中。其中n由键盘输入。5、**编程序,输入单精度型一维数组a,计算并输出a数组中所有元素的平均值。6、**编程序,输入10个整数存入一维数组,再按逆序重新存放后再输出。7、**编程序,输入两个字符串(<40个字符),连接后输出(不准用系统函数)。8、***编程序,按下列公式计算s的值(其中x1、x2、…、xn由键盘输入):
   s=(x1-x0)2+(x2-x0)2+.....+(xn-x0)2(其中x0是x1、x2、…、xn的平均值)      
#include <stdio.h>
#defineN 10
main()
{int i;
float s=0,x;
x=0;
for(i=1;i<=N;i++)
    {scanf("%f",&x);x=x+x;}
x=x/N;
for(i=1;i<=N;i++) s=s+(x-x)*(x-x);
printf("%f",s);
} 9、***输入一个3×5的整数矩阵(假设所有的数据互不相同),输出其中最大值、最小值和它们的下标。10、***设某班50名学生的三科成绩表如下:
      课程一      课程二      课程三
         …            …            …
    试编一个程序,输入这50个学生的三科成绩,计算并输出每科成绩的平均分。 11、**编一个程序,输入一个短整型数据,输出每位数字,其间用逗号分隔。例如输入整数为2345,则输出应为:2,3,4,5。第八章 函数
一、填空
1、*若用数组名作为函数调用的实参,则传递给形参的是()。
2、*可执行的c语言程序系由一个或多个()组成。
3、**C语言程序是函数的集合,是功能相对独立完整的程序段。C语言函数可分为 ? (),()和空函数. ?
?4、**程序可以通过改变局部变量的存储类型来改变变量的生存期,变量的存储类型有四种,自动的,(),   (   )和寄存器的?
5、**函数调用自身时,就形成了递归调用。递归调用有两种()和(   )。?
二、单项选择题
1、*在C程序中,若对函数类型未加说明,则函数的隐含类型为(      )。
(A)int         (B)double      (C)void      (D)char            
2、*当调用函数时,实参是一个数组名,则向函数传送的是(      ).
(A) 数组的长度             (B) 数组的首地址
(C)数组每一个元素的地址    (D)数组每个元素中的值
3、**C语言规定,程序中各函数之间 (A) 既允许直接递归调用也允许间接递归调用(B) 不允许直接递归调用也不允许间接递归调用 (C) 允许直接递归调用不允许间接递归调用    (D) 不允许直接递归调用允许间接递归调用               
**以下叙述中不正确的是(? )。      
? (A)在不同的函数中可以使用相同名字的变量
? (B)函数中的形式参数是局部变量
? (C)在一个函数内定义的变量只在本函数范围内有效
? (D)在一个函数内的复合语句中定义的变量在本函数范围内有效
6、**以下正确的说法是(? ).
建立函数的目的之一是   
a)提高程序的执行效率   b)提高程序的可读性 c)减少程序的篇幅 d)减少程序文件所占内存
7、**以下正确的函数定义形式是(? ).
a)double fun(int x,int y)       b)double fun(int x; int y)
c)double fun(int x, int y);   d)doublefun(int x,y);
8、**C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为(? ).
A)地址传递                              B)单向值传递
C)由实参传给形参,再由形参传回给实参   D)由用户指定传递方式
9、C语言允许函数值类型缺省定义,此时该函数值隐含的类型是(? ).
a)float    b)int    c)long    d)double
10、**已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array
的错误定义方式为(? ).   
   int a;
   f(a);
   a)f(int array[])   b)f(int array[])c)f(int array[])   d)f(int array)
11、***以下程序的正确运行结果是(? ).
#include <stdio.h>
void num()
{extern int x,y;int a=15,b=10;
   x=a-b;
   y=a+b;
}
int x,y;
main()
{
int a=7,b=5;
   x=a+b;
   y=a-b;
num();
printf("%d,%d\n",x,y);
}
a)12,2    b)不确定   c)5,25   d)1,12
三、阅读程序,写出程序运行结果
1、** intx,y
   num()
{intx,y;
   inta=10,b=5;
   x=a+b;y=a-b;
   }
   main()
{inta=8,b=3;
   x=a-b;y=a+b;
   num();
   printf("%d,%d",x,y)
   }
2、**long fib(int n)
   { if(n>2) return(fib(n-1)+fib(n-2));
       else return(2);
   }
    main0
   { printf(“%d\n”,fib(3));
         }3、**int a, b;
void fun()
{ a=100; b=200; }
main()
{ int a=5, b=7;
fun();
printf("%d%d \n", a,b);
}4、**以下程序的运行结果是   
#include<stdio.h>
main()
{int a=1,b=2,c;
   c=max(a,b);
   printf("max is %d\n",c);
   }
max(int x,int y)
{intz;   
   z=(x>y)?x:y;
   return(z);
}
5、**以下程序的运行结果是   
   int a=5;intb=7;
   main()
{ int a=4,b=5,c;
    c=plus(a,b);
    printf("A+B=%d\n",c);
   }
plus(int x,int y)
   {int z;
   z=x+y;
   return(x);
   }
6、***以下程序的运行结果是   
main()
{incx();
incy();
incx();
incy();
incx();   
incy();
}
incx()
{
int x=0;
printf("x=%d\t",++x);
}
incy()
{static int y=0;      
printf("\ny=%d\n",++y);
}四、程序填空
1、***函数gongyu的作用是求整数num1和num2的最大公约数,并返回该值。请填空。
gongyu(int num1,int num2)
{int temp,a,b;
   if(__1___)
    {temp=num1;num1=num2; __2___;}
   a=num1;b=num2;
   while(_3___)
    {temp=a%b;a=b;b=temp;}
   __1___;
}五、编写程序
1、 ***编写程序,在主函数中输入10个数,在函数invert中将10个数按反序存放,并在主函数中输出结果。2、 **已有变量定义和函数调用语句:int x=57 ; isprime(x); 函数isprime( ) 用来判断一个整形数a是否为素数,若是素数,函数返回1,否则返回0。请编写isprime函数。3、** a是一个2X4的整型数组,且各元素均已赋值。函数max_value可求出其中的最大的元素值max,并将此值返回主调函数。今有函数调用语句max_value(int arr[])4、***编写函数,求最大公约数和最小公倍数
第九章
一、填空
1、**C语言提供()预处理的功能,有利于程序的可移植性,增加程序的灵活性,其命令以符号()开头。
2、*使用宏名代替一个(),可以减少程序中重复书写某些字符串的工作量,提高程序的可读性和可移植性。
3、*在预处理宏定义时,不做()检查,只有在编译已被宏展开后的源程序时才报错。
4、*宏名的有效范围为()之后到本源文件结束。
5、**可以用()命令终止宏定义的作用域。
6、*带参数的宏定义在展开时,不仅进行字符串的替换,还要进行()的替换。
7、*宏名不是变量,故无类型,其参数也无类型。所以在宏定义时,字符串可以是()类型的数据。,
8、*宏替换不占运行时间,只占()时间。
9、* * “文件包含”处理是指将另外的文件包含到()之中,它可以减少程序设计人员的重复劳动,通过()命令来实现。
10、*被包含文件与其所在的源文件,在预编译后成为()个文件。
11、**一般情况下,源程序中所有的行都参加编译。如果希望对其中一部分内容只在满足一定条件时才进行编译,这就是()。
二、单项选择题
1、**有以下程序
#include <stdio.h>
#define f(x) (x*x)
void main()
{
        int i1, i2;
        i1=f(8)/f(4) ;
        i2=f(4+4)/f(2+2);
        printf("%d, %d\n",i1,i2);
}
程序运行后的输出结果是______。
 A)64, 28       B)4, 4       C)4, 3       D)64, 642、**有以下程序
#include <stdio.h>
#define P 3
void F(int x){return(P*x*x);}
void main()
{
printf("%d\n",F(3+5));
}
程序运行后的输出结果是______。
A)192       B)29       C)25       D)编译出错3、**以下叙述中正确的是______。
A)预处理命令行必须位于源文件的开头
B)在源文件的一行上可以有多条预处理命令
C)宏名必须用大写字母表示
D)宏替换不占用程序的运行时间4、 *在宏定义#define PI 3.14中,宏名PI代替一个       。
A) 单精度数           B) 双精度数            C) 常量            D) 字符串5、 * 以下在任何情况下计算平方数时都不会引起二义性的宏定义是       。
A) #define POWER(x)x*x       B) #define POWER(x)(x)*(x)
C) #define POWER(x)(x*x)   D) #define POWER(x)((x)*(x))
6、**下面程序的运行结果是      。
#include <stdio.h>
#define ADD(x)x+x
void main()
{   
        int m=1,n=2,k=4;
    int sum=ADD(m+n)*k;
    printf("sum=%d",sum);
}
A) sum=9    B) sum=10    C) sum=12   D) sum=24
7、 ***若有以下宏定义
#include <stdio.h>
#define N 2
#define Y(n) ((N+1)*n)
void main()
{   
        int z;
    z=2*(N+Y(4));
    printf("%d\n",z);
}
A) 28   B) 24    C) 38    D) 26
8、**执行下面的程序后,a的值是      。
#include <stdio.h>
#define SQR(X) X*X
void main( )
{
        int a=10,k=2,m=1;
        a/=SQR(k+m);
        printf("%d\n",a);
}
A)10      B)2      C)9      D)0
9、 ** # define能做简单的代替,用宏代替计算多项式5*x*x+4*x+3之值的函数f( )正确的定义是       。
(A)#define f(x)5*x*x+4*x+3         (B)#define f5*x*x+4*x+3   
(C)#define f(x)(5*(x)*(x)+4*(x)+3)      (D)#define (5*x*x+4*x+3) f(x)
10、**设有以下宏定义: #define N 3 #define Y(n) ( (N+1)*n) 则执行语句:z=2 * (N+Y(5+1));后,z的值为 (A) 出错          (B)42            (C) 48         (D) 54
11、**已知宏定义 #define SQ(x) x*x,执行语句printf("%d",10/SQ(3));后的输出结果是____。
A) 1 B) 3 C) 9 D) 10
三、阅读程序,写出程序运行结果
1、** main()
          { int a[]={1,3,5,2,7};
            int b[]={5,3,9,4,6};
            int c,i;
            for(i=0; i<5; i++)
             {c=a*b;
            printf(“%d”, c);
             }
}
  
2、**#define M(x,y,z) x*y+z
main()
{ int a=1,b=2, c=3;
printf("%d\n", M(a+b,b+c, c+a));
}

第十章指针
一、填空
1、*指针变量是把内存中另一个数据的()作为其值的变量。
2、* 能够直接赋值给指针变量的整数是()。
3、*** 如果程序中已有定义:int k;
1)???? 定义一个指向变量k的指针变量p的语句是()。
2)???? 通过指针变量,将数值6赋值给k的语句是()。
3)???? 定义一个可以指向指针变量p的变量pp的语句是()。
4、 **当定义某函数时,有一个形参被说明成int *类型,那么可以与之结合的实参类型可以是 ()、 ()    等。
5、假设有语句j=3,jp=&j;则JP的值为(   ),*JP的值为(   )。
6、设jp是指向变量j的指针变量,则语句*jp=3和语句j=3;的作用是相同的即*代表变量j。此说法正确吗?()。
7、运算符&、*、++、--的优先级别相同,但按自右而左方向结合.故表达式*p++的值和表达式(*p)++的值是()。表达式*++p和++*P的作用是()。
8、指针变量可以作为函数的参数,其作用是传递或接受一个变量的()。
9、可以通过指向数组的指针变量来访问一个数组元素且可司以带下标,所以p
*(p+i)是等价的、此说法正确吗?()
10、定义P为指向整型数据的指针变量的指针变量的语句为()。
11、设p为指针数组.它指向包含n个整形数据元素的一维数组,则定义语句为()
语句int *p(){};表示函数名为(),函数返回值为()
12、语句int (*)p();表示p为指向()的指针,函数返回值为()
13、在C程序中有两种方法实现一个字符串,一是(),二是()。
14、char *string=”Hello!”;中的字符串是按()处理的,并将()赋值给字符指针变量string
15、可以通过字符数组名或()对一个字符串进行整体的输入输出
16、一个函数在编译时被分配一个地址,这个入口地址被称为函数的()
17、函数的调用可以通过函数名调用,也可以通过函数()调用。
18、一个函数可以返回一个指针型的数据。则在函数定义语句中,函数名前面要加一个()符号。二、单项选择题
1、**设有定义:intn1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是
   A)*p=*q;B)p=q;   C)*p=&n1;   D)p=*q; 2、**若有定义:intx=0, *p=&x;,则语句printf("%d\n",*p);的输出结果是
   A)随机值B)0   C)x的地址   D)p的地址
3、*以下定义语句中正确的是
   A) char a='A'b='B';   B) float a=b=10.0;    C) int a=10,*b=&a;    D) float *a,b=&a;
4、**有以下程序
    main()
    { int a=7,b=8,*p,*q,*r;
      p=&a;q=&b;
      r=p; p=q;q=r;
      printf("%d,%d,%d,%d\n",*p,*q,a,b);
    }
    程序运行后的输出结果是
    A) 8,7,8,7   B) 7,8,7,8   C) 8,7,7,8   D) 7,8,8,7
5、*设有定义:int a,*pa=&a;以下scanf语句中能正确为变量a读入数据的是
    A) scanf(“%d”,pA) ;   B) scanf(“%d”,A) ;
    C) scanf(“%d”,&pA) ;    D) scanf(“%d”,*pA) ;
6、 **设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是
    A) p=1;    B) *q=2;    C) q=p;    D) *p=5;
7、 **有以下程序
    voidfun(char*a,char*b)
    {a=b;    (*a)++;}
    main ()
    { char   c1="A", c2="a", *p1, *p2;
    p1=&c1;p2=&c2;   fun(p1,p2);
    printf(“&c&c\n”,c1,c2);
    }
    程序运行后的输出结果是
    A) Ab      B) aa      C) Aa         D) Bb
8、**若程序中已包含头文件stdio.h,以下选项中,正确运用指针变量的程序段是
    A) t*i=NULL;                  B) float*f=NULL;
    scanf("&d",f);                  *f=10.5;
    C) chart="m", *c=&t;          D) long   *L;
    *c=&t;                        L=‘\0’;
9、* 有以下程序
    #inc1ude   <stdio.h>
    main()
    {printf("%d\n", NULL);}
    程序运行后的输出结果是
    A) 0          B) 1            C) -1          D) NULL没定义,出错
10、*已定义以下函数
    fun (int   *p)
    {return   *p:}
    该函数的返回值是
    A) 不确定的值                   B) 形参p中存放的值
    C) 形参p所指存储单元中的值   D) 形参p的地址值
11、 **下列函数定义中,会出现编译错误的是
    A) max(intx, inty,int*z)   B) intmax(int   x,y)
    { *z=x>y? x:y;}             intz ;
    z=x>y? x:y;
    returnz ;
    }
   C) max (intx,inty)          D) intmax(intx,inty)
    {int   z;                     {   return(x>y?x:y) ; }
    z=x>y?x:y;return(z);
    }
12、**有以下程序段
    main()
    { inta=5,*b,   **c;
    c=&b;   b=&a;
    ……
    }
    程序在执行了c=&b:b=&a;语句后,表达式:**c的值是
    A) 变量a的地址B) 变量b中的值 C) 变量a中的值D) 变量b的地址
13、**有以下程序
    main()
    { char a,b,c,*d;
   a=’\’;b=‘\xbc’;
   c=‘\0xab’;d="\017";
   print("%c%c%c\n",a,b,c,*d);
    }
    编译时出现错误,以下叙述中正确的是
    A) 程序中只有a=’\’;语句不正确 B) b=‘\xbc’;语句不正确
    C) d="\0127";语句不正确         D) a=’\’;和c=‘\0xab’;语句都不正确
14、**若有以下定义和语句
    #include    <stdio.h>
    int a=4,b=3,*p,*q,*w;
    p=&a;q=&b;w=q;q=NULL;
    则以下选项中错误的语句是
    A) *q=0;   B) w=p;   C) *p=a;D) *p=*w;
15、***有以下程序
    int *f(int *x,int *y)
    { if(*x<*y)
      return x;
   else
      return y;
    }
    main()
    { int a=7,b=8,*p,*q,*r};
    }
    执行后输出结果是
    A) 7,8,8    B) 7,8,7   C) 8,7,7   D) 8,7,8
16、 **若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是
    A) p=q;   B) *p=*q;C) n=*q;D) p=n;
17、**有以下程序
    void fun(char *c,int d)
    {   *c=*c+1;d=d+1;
    printf(“%c,%c,”,*c,d);
    }
    main()
    {char a=’A’,b=’a’;
    fun(&b,a);printf(“%c,%c\n”,a,b);
    }
    程序运行后的输出结果是
    A)B,a,B,a      B) a,B,a,B   C) A,b,A,b   D) b,B,A,b
18、**若有说明语句:inta,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是
    A) scanf("%d%d%d",&a,&b,d);    B) scanf("%d%d%d",&a,&b,&d);
    C) scanf("%d%d%d",a,b,d);      D) scanf("%d%d%d",a,b,*d);
19、 **若定义:int a=511,*b=&a;, 则printf("%d\n",*b);的输出结果为
   A) 无确定值   B) a的地址   C) 512       D) 511
20、 *若有说明:inti, j=2,*p=&i;,则能完成i=j赋值功能的语句是
   A) i=*p;    B)p*=*&j;C) i=&j;   D) i=**p;
21、 **下列程序段的输出结果是
   A) 2 1 4 3          B) 1 2 1 2          C) 1 2 3 4         D) 2 1 1 2
    void fun(int*x, int*y)
    {   printf(“%d%d”, *x, *y); *x=3; *y=4;}
    main()
    {intx=1,y=2;
       fun(&y,&x);
       printf(“%d %d”,x, y);
    }
22、 **下列程序的运行结果是
   A) 63            B) 3   6          C) 编译出错         D) 00
    void fun(int*a, int*b)
    {int*k;
       k=a; a=b; b=k;
    }
    main()
    {inta=3, b=6,*x=&a, *y=&b;
       fun(x,y);
       printf(“%d%d”, a, b);
}
23、 *有如下程序段
    int*p,a=10,b=1
    p=&a;a=*p+b;
    执行该程序段后,a的值为
    A) 12            B) 11            C) 10             D) 编译出错
24、 **有以下函数
    charfun(char *p)
    {returnp;}
    该函数的返回值是
    A) 无确切的值                        B) 形参p中存放的地址值
    B) 一个临时存储单元的地址            D) 形参p自身的地址值
25、** 请选出正确的程序段
   A) int*p;                      B) int*s, k;
            scanf("%d",p);                   *s=100;
            …                               …
   C) int*s, k;                   D) int*s, k;
            char *p, c;                      char *p, e;
            s=&k;                            s=&k;
            p=&c;                            p=&c;
            *p='a';                        s=p;
            …                               *s=1;
                                             …
26、 *若有以下定义和语句:
         doubler=99, *p=&r;
         *p=r;
      则以下正确的叙述是
   A) 以下两处的*p含义相同,都说明给指针变量p赋值
   B) 在"doubler=99, *p=&r;"中,把r的地址赋值给了p所指的存储单元
   C) 语句"*p=r;"把变量r的值赋给指针变量p
   D) 语句"*p=r;"取变量r的值放回r中
27、 *以下程序运行后,a的值是
   A) 4             B) 1            C) 0            D) 运行时出错,a无定值
         main()
          {int   a,k=4,m=6,*p1=&k,*p2=&m;
             a=p1==&m;
             printf("%d\n",a);
       C   }
28、 **有以下程序
    int fun(intx,inty,int   *cp,int*dp)
    {*cp=x+y;    *dp=x-y;}
    main()
    {int a, b, c, d;
    a=30;b=50;
    fun(a,b,&c,&d);
      printf("%d,%d\n", c, d);
    }
    输出结果是
   A) 50,30          B) 30,J50          C) 80,-20          D) 80,20
29、 **若有定义和语句:
    int **pp,*p,a=10,b=20;
    pp=&p;p=&a;p=&b;printf("%d\n",*p,**pp);
    则输出结果是:
    A)10,20       B)10,10       C)20,10         D)20,20
30、 ***以下程序的输出结果是
    #include
    subl(chara,char b)    {char c; c=a;a=b;b=c;}
    sub2(char* a,char b)    {char c; c=*a;*a=b;b=c;}
    sub3(char* a,char*b)    {char c; c=*a;*a=*b;*b=c;}       { char a,b;
      a='A';b='B';sub3(&a,&b);putchar(a);putchar(b);
      a='A';b='B';sub2(&a,b);putchar(a);prtchar(b);
      a='A';b='B';sub1(a,b);putchar(a);putchar(b);
    }A
    A) BABBAB      B) ABBBBA   C) BABABA          D) BAABBA
31、* 若有说明:int i,j=7, *p=&i;,则与i=j;等价的语句是
    A) I= *P;      B) *P=*&J;      C) i=&j;             D) i=* *p;
32、 **要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确招待此功能的函数是
    A)funa(int *x,int *y)            B) funb(int x,int y)
    {int *p;                              {int t;
    *p=*x;*x=*y;*y=*p;}                   t=x;x=y;y=t;}
    C) func(int *x,int *y)             D) fund(int x,int y)
    {*x=*y;*y=*x;}                        {*x=*x+*y; *y=*x-*y; *x=*x-*y; }
三、阅读程序,写出程序运行结果
1、 **有以下程序
    void f( int y,int *x)
    {y=y+*x;*x=*x+y;}
    main( )
    {int x=2,y=4;
       f(y,&x);
       printf(“%d   %d\n”,x,y);
    }
执行后输出的结果是()。      
2、 **下面程序的运行结果是。
    void swap(int *a,int *b)
    {int*t;
    t=a;   a=b;b=t;
    }
    main()
    {intx=3,y=5,*p=&x,*q=&y;
    swap(p,q);
    printf(“%d%d\n”,*p,*q);
    }
3、**设有以下程序:
    main()
    {   int   a, b, k=4, m=6, *p1=&k, *p2=&m;
    a=pl==&m;
    b=(*p1)/(*p2)+7;
    printf(“a=%d\n”,a);
    printf(“b=%d\n”,b);
    }
   4、**下列程序的输出结果是。
    void fun(int *n)
    {while( (*n)--);
         printf(“%d”,++(*n));
    }
    main()
    {inta=100;
       fun(&a);
    }
5、**下列程序的输出结果是
main() { char *p,*q; char str[]="Hello,World\n"; q = p = str; p++; printf(q); printf(p); }
6、**下*列程序的输出结果是
main() { short ar={1,2,3,4,5,6,7,8,9,0,11}; short* par=&ar; int i; for(i=0; i<10; i++) { printf("%-5hd%-5hd%-5hd", ar, par,*(ar+i)); } }7、***下列程序的输出结果是
main() { short *p, *q; short ar={0}; p = q = ar; p++; printf("%5d", p-q); printf("%5d", (char*)p - (char*)q); printf("%5d", sizeof(ar)/sizeof(*ar)); } 假设sizeof(short)==2
四、程序填空
1、 **函数 void fun(float*sn, in t n)的功能是:根据以下公式计算S,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。   
      
             voidfun( float *sn, int n)
             {floats=0.0, w, f=-1.0;
                int i=0;
                for(i=0; i<=n; i++)
                { f=__(1)___ * f;
                  w=f/(2*i+1);
                  s+=w;
                }
               __(2)___=s;
             }2、*以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换。请填空。
         exchange(int*x,int*y)
         {int t;
            t=*y;   *y= __(1)___;    *x= __(2)___;
         }3、**下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。   
       int add(int x,int y,__(1)___z)
{__(2)___=x+y;}4、***以下count函数的功能是统计substr在母串str中出现的次数。
int count(char *str,char *substr)
{   int i,j,k,num=0;
for(i=0;   ①   ;i++)
{for(   ②   ,k=0;substr==str;k++,j++)
if(substr[   ③   ]==’\0’)
{num++;break;}
}
return num;
}5、 ***以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。
void Delblank(char *s)
{int i,t;
char c;
for(i=0,t=0;   ①   ;i++)
if(!isspace(    ②    ))c=s;
c=‘\0’;
strcpy(s,c);
}
6、***以下conj函数的功能是将两个字符串s和t连接起来。
char *conj(char *s,char *t)
{    char *p=s;
while(*s)   ①   ;
while(*t)
{*s=   ②   ;s++;t++;}
*s=‘\0’;
   ③   ;
}
五、编写程序
1、 ** 指针实现,对传递进来的两个整型量计算它们的和与积之后,通过参数返回。
2、**指针实现,将用户输入的字符串中的所有数字提取出来。
3、**指针实现,计算字符串的串长。
4、**指针实现,将一个字符串中的字母全部转换为大写。
5、**指针实现,计算一个字符在一个字符串中出现的次数。
6、**指针实现,判断一个子字符串是否在某个给定的字符串中出现。
www.ap5u.com提醒答案可以联系qq 761296021
页: [1]
查看完整版本: 东农18秋《C语言程序设计》离线作业题目