aopeng 发表于 2017-6-29 12:06:58

东农17春《C语言程序设计》离线作业-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、double19、* *定义变量的完整语句格式是: (         )   (          )变量名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)Int8、*已知 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+b10、* *若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是 (A) 1   (B) 2   (C) 2.0   (D) 2.511、*若变量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)unsigned13 *、下列不正确的转义字符是   (A)'\\'         (B)'\"      (C) '074'      (D) '\014、* *若有以下定义:
 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<1ongint<=float<double      B)char=int<1ongint<=float<double
C)char<int<1ongint=float=double      D)char=int=1ongint<=float<double17、*若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      pow20、*下面四个选项中,均是C语言关键字的选项是
A)auto      B)switch    C)signed    D)if
enum       typedef       union      struct
include   continue      scanf      type21、* *下面四个选项中,均是不合法的用户标识符的选项是。
A)A            B)float       C)b-a       D)一123
    P_0            1a0          goto          temp
    do             一A          int         INT22、*下面不正确的字符串常量是。
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*324、* *以下不正确的叙述是
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; intx;f1oaty;doublez;则表达式w* x+z一y值的数据类型为:
A)float       B)char       C)int          D)double 30、* *若有以下定义,则能使值为3的表达式是:
intk= 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()函数为(   )。2、 *设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、* * * 若有定义语句 “ inta=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(){ inta,c;     charb;    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(){ inta,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=10 b=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,24、 ** 阅读以下程序,当输入数据的形式为:25,13,10<回车>,正确的输出结果是(         )main(){intx,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,当从第一列开始输入数据时,正确的数据输入方式是 (    )
inta1,a2;charc1,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、**已有定义intx;f1oaty;且执行scanf("%3d%f",&x,&y);语句,若从第一列开始输入数据12345678(回车),则x 的值为(    )
A)12345B)123   。C)45       D)34514、**已有定义intx;f1oaty;且执行scanf("%3d%f",&x,&y);语句,若从第一列开始输入数据12345678(回车),则y 的值为: (    )
A)无定值B)45.0000C)678.000000D)123.0000015、**已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A,B,当从第一列开始输入数据时,正确的数据输入方式是: (    )
inta1,a2;charc1,c2;
scanf("%d%d",&a1,&a2);
scanf("%c%c",&c1,&c2);
A)1020AB<CR>B)1020<CR>AB<CR>   C)1020   AB<CR>D)10 20AB<CR>16、*已有程序段和输入数据的形式如下,程序中输入语句的正确形式应当为(    )
main()
{inta;float f;
    printf("\nInput number:");
输入语句
    printf("\nf=%f,a= %d\n ,f,a);
}
Inputnumber: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、**若有以下定义,则正确的赋值语句是:
   inta,b;floatx;
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=10C)x=10D)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()       { intx=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()       { intx=100,a=10,b=20,ok1=5,ok2=0;       if (a<b)            if(b!=15)               if (!ok1)                    x=1;                 elseif(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 ab 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 ab 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为小写字母为真,否则为假”的表达式是()。2、 *设y是int型变量,请写出判断y为5的倍数的关系表达式( ) 。3、 *已知int a=1,b=2;表达式(a<b ? a:b)的值是(   )。 4、 *在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;             elsec=2;                      else c=2     (C) if(a>b) c=1;            (D) if(a>b); c=1;              elsec=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) 36、**当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)18B)2      C)3      D)6
7、**以下程序的输出结果是:
   main()
{inta=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);elsescanf("%d",&y);    D)if(x< y){x++ ;y十十;}
10、***请阅读以下程序:
      #include<stdio. h>
       main()
      {floata,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);
      elseif(a<10.0)b= 1.0/x ;
      elseb=10.0;
    printf("%f\n",y);
    }
若运行时输入2.0(回车),则上面程序的输出结果是:
    A)0.000000   B)0.500000C)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()
    {intx,y;
   scanf("%d",&x);
    y=x > 12?x+10:x一12;
    printf("%d\n",y);
    }
      A)0      B)22C)12       0)10
13、*以下程序的运行结果是:
      main()'
      {intk= 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的值分别是一。
    intx=10,y=9;
    inta,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、**执行以下程序段后的输出结果是
    intw=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,求下列表达式的值(1) 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=%dc=%d\n”,a,b,c);} 25、 ***main( )      {int i=5;do         {switch(i%2)             {case 4: i--; break;            case 6: i--; continue;            }          i-=2;          printf("%5d",i);}while(i>0);} 6. ** 若x=3,y=z=4,求下列表达式的值(1) (z>=y>=x)?1:0(2) z>=y&&y>=x 7、**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:   case7:s++;            break;   case 2:   case 3:   case6:break;   case 0:   case5:s+=2;          break;   }    }   printf(“s=%d\n”,s);} 五、编写程序1、***设计一个判断输入年份是否是闰年的程序。第六章 循环控制一、填空1、*C语言中while和do-while循环的主要区别是(   )的循环体至少无条件执行一次。2、 **要使for(i=0;i<=;printf(“%d\n”,i+=2));程序段输出10个整数,i应<=(   )。3、 **若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) 810、**假定a和b为int型变量,则执行以下语句后b的值为
a=1; b=10;
do
{ b-=a; a++; }
while (b--<0) ;               
(A) 9         (B)-2         (C) -1         (D) 811、 **设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 312、**设有程序段
intk=10;
while(k=0)k= k—1;
则下面描述中正确的是
A)while循环执行10次      B)循环是无限循环
C)循环体语句一次也不执行   D)循环体语句执行一次

13、**有以下程序段
    intx=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!=1C)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、**若有如下语句
intx=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)##3D)**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;elseprintf(“%3d”,i);} 2、***main( )   {       int i,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()                { intx=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()
    {inti,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)
{case0:printf("* ");break;
case1:printf("#");break;
default:printf("\n");
case2: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、***用循环输出下列形式的数字金字塔。file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gifmain ( ) {     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()
      {inta,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()
      {intm=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整除的数。若找到,打印此数后退出循环;若未找到,打印“notexist”。 第七章 数组一、填空1、**说明char s1[]=“china”,s2;要将s1的值复制到s2中的正确语句是(      )。2、 **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)intn;       D)#defineSIZE10;
scanf("%",&J1);int a;
int a;
6、*若有说明:int a;则对a数组元素的正确引用是__。
      A)aB) 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)aB)aC)a    D)a"       "
11、**以下不能对二维数组a进行正确初始化的语句是__。
A)inta={0};                  B)inta[][3」={{1,2,3},{4,5,6}};
C)inta={{1,2,3},{4,5}{6}};      D)   inta[]={{1,0,1},{},{1,1}};
12、**若有说明:inta〔3〕「4〕={0};则下面正确的叙述是
A)只有元素a可得到初值0                      B)此说明语句不正确:。   
C)数组a中各元素都可得到初值,但其值不一定为0。D)数组a中每个元素均可得到初值0
13、***下面程序(每行程序前面的数字表示行号)
1   main()
2   {
3   inta={3*0};
4   inti;
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   inti
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、***下面程序有错的行是
1main()
2{
3   inta={1};
4   inti;
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、***下面程序(每行程序前面的数字表示行号)
1main()
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)doublex={2.0,4,0,6.0,8.0,10.0};       B)inty={0,1,3,5,7,9};
C)charc1[ ]={’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+jB)i*m+j    C)i*m+jD)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)357B)3 69   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()
{inta[6」「6」,i,j;
   for(i=1;i<6;i++)
   for(j=1;j<6,j++)
   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)00001C)10000   D)10001
11111      00010      01000         01010
11111      00100      00100         00100
11111      01000      00010         01010
11111      10000      00001         10001
25、***下面程序的运行结果是 __.
   main()
   {inta,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进行如下初始化      
   chara[]="ABCDEF";
   charb[]={’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 inta[]={9,7,5,3,1,2,4,6,8};       inti,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;       floata,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()        { staticchar 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()
{charch={"12ab56"};
         inti,s=0;
   for(i=0;ch>='0'&&ch<='9';i+=2)
   s=10*s+ch-'0';
      printf("%d\n",s);
       }

6、***当运行以下程序时,从键盘输入:aabb<CR>
cc dd<CR>
(<cR>表示回车),则下面程序的运行结果是
#include<stdio.h>
main()   
{chara1,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()
   {charc;      
       inti=0;
       for(;i<N;c=getchar(),i++);      
   for(i=0;i<N;i++)putchar(c);
}

8、**当运行以下程序时,从键盘输入:AhaMAAha<CR>(<CR)表示回车),
则下面程序的运行结果是
   #include"stdio.h"
   main()
{chars,c='a';
   int i=0;
   scanf("%s",s);
   while(s!='\0')
   {if(s==c)s=s-32;
   elseif(s==c-32)s=s+32;
   i++;
   }
   puts(s);
)

9、**下面程序的运行结果是。
#include<stdio.h>
#inc1ude<string.h>
main()
{chara="LMNP";
       inti=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 5main(){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 string1:\n"); gest(str1);
 printf("\n input string2:\n"); gest(str2);
 i=0;
while((strl==str2&&(str1!= (4)      ))
 i++;
 s= (5) ;
 printf("%d\n",s);

4、**下面程序段是输出两个字符串中对应字符相等的字符。请选择填空。
charx[]="programming";
chary[]="Fortran";
inti=0;
while(x!='\0',&& y!'\0')
{if(x==y) printf("%c"); "   (1)   );
   else    (2)   ;}
}
      5、**有已排好序的字符串a,下面的程序是将字符串s中的每个字符按a中元素 的规律插入到a中。请选择填空。
#indude<stdio.h>
main()
{chara="cehiknqtw";
   chars[]="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()
   {chars;
int i,j;
      gets(s);
       for(i=j=0;s!='\0';i++)
         if(s!='c')(1)
          puts(s);
}
7、**下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间 用空格分隔。请选择填空。      
   #indude<stdio.h>
   main()
       {chars[80」,c1,c2='';
         inti=0,num=0;
         gets(s);
         while(s!='\0')
         {c1=s;
if(i==0)c2=' ';
elsec2=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以file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg方向依此填入二维数组a(5行5列)并按照矩阵形式输出结果。
    file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg   file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg   file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg   file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg   file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg 11    7   4    2    1
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg 16   12   8    5    3
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg 20   1713    9    6
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg 23   21   1814   10
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg25   2422   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(){     staticchar str[]={"happy"};    inti;    i=0;    while(str!='\0')      i++;    printf("thelength of string is %d",i);} 2、**求二维数组A中最大元素值。 3、 ***编一过程判定s字符串是否为一个Palindrome,所谓Palindrome是指其从正反两个方向看都是一样的,如“madam”。 4、 ***已知一个一维数组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) 不允许直接递归调用允许间接递归调用               5、 **以下叙述中不正确的是()。       (A)在不同的函数中可以使用相同名字的变量(B)函数中的形式参数是局部变量(C)在一个函数内定义的变量只在本函数范围内有效(D)在一个函数内的复合语句中定义的变量在本函数范围内有效6、**以下正确的说法是(). 建立函数的目的之一是   a)提高程序的执行效率   b)提高程序的可读性 c)减少程序的篇幅 d)减少程序文件所占内存7、**以下正确的函数定义形式是(). a)double fun(int x,inty)       b)double fun(int x; int y)c)double fun(int x, inty);   d)double fun(int x,y);8、**C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为(). A)地址传递                              B)单向值传递 C)由实参传给形参,再由形参传回给实参   D)由用户指定传递方式9、C语言允许函数值类型缺省定义,此时该函数值隐含的类型是().a)float    b)int    c)long    d)double10、**已有以下数组定义和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;inta=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,25d)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、**longfib(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, 64 2、**有以下程序#include <stdio.h>#define P 3void 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) #definePOWER(x)x*x       B) #definePOWER(x)(x)*(x)C) #definePOWER(x)(x*x)   D) #definePOWER(x)((x)*(x))6、**下面程序的运行结果是      。#include <stdio.h>#define ADD(x) x+xvoid main(){       intm=1,n=2,k=4;    intsum=ADD(m+n)*k;   printf("sum=%d",sum);}A) sum=9   B) sum=10    C) sum=12    D) sum=247、 ***若有以下宏定义#include<stdio.h>#defineN 2#defineY(n) ((N+1)*n)voidmain(){       int z;    z=2*(N+Y(4));    printf("%d\n",z);}A) 28   B) 24    C) 38    D) 268、**执行下面的程序后,a的值是      。#include <stdio.h>#define SQR(X) X*Xvoid main( ){    inta=10,k=2,m=1;   a/=SQR(k+m);   printf("%d\n",a);}A)10      B)2      C)9      D)09、 ** # 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+zmain(){ 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!”;中的字符串是按()处理的,并将()赋值给字符指针变量string15、可以通过字符数组名或()对一个字符串进行整体的输入输出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) chara='A'b='B';   B)float a=b=10.0;    C) int a=10,*b=&a;    D)float *a,b=&a; 4、**有以下程序    main()    { inta=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、*设有定义:inta,*pa=&a;以下scanf语句中能正确为变量a读入数据的是    A)scanf(“%d”,pA);   B)scanf(“%d”,A) ;    C)scanf(“%d”,&pA);    D)scanf(“%d”,*pA) ;6、 **设有定义:intn=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) Bb8、**若程序中已包含头文件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, int y,int*z)   B) intmax(int   x,y)    {*z=x>y? x:y;}            intz ;    z=x>y? x:y;    returnz ;    }   C) max (intx,int y)          D)intmax(intx,int y)    {intz;                     {   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()    { chara,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>    inta=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()    { inta=7,b=8,*p,*q,*r};    }    执行后输出结果是    A)7,8,8    B) 7,8,7   C)8,7,7   D)8,7,816、 **若有说明:intn=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,b18、**若有说明语句: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、 **若定义:inta=511,*b=&a;, 则printf("%d\n",*b);的输出结果为   A) 无确定值   B) a的地址   C) 512       D) 51120、 *若有说明:inti, j=2,*p=&i;,则能完成i=j赋值功能的语句是   A)i=*p;    B)p*=*&j; C) i=&j;   D)i=**p;21、 **下列程序段的输出结果是   A) 2 14 3          B) 1 21 2          C) 1 23 4         D) 2 11 2    void fun(int*x, int *y)    {   printf(“%d%d”, *x, *y);*x=3; *y=4;}    main()    {int x=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()    {int a=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)    {return p;}    该函数的返回值是    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()          {inta,k=4,m=6,*p1=&k,*p2=&m;            a=p1==&m;            printf("%d\n",a);       C   }28、 **有以下程序    int fun(intx,int y,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,2029、 **若有定义和语句:    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,2030、 ***以下程序的输出结果是    #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)BAABBA31、* 若有说明:inti,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(intx,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(intx,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()    {int x=3,y=5,*p=&x,*q=&y;    swap(p,q);    printf(“%d%d\n”,*p,*q);     } 3、**设有以下程序:    main()    {   inta, 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()    {int a=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){   inti,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、**指针实现,判断一个子字符串是否在某个给定的字符串中出现。
页: [1]
查看完整版本: 东农17春《C语言程序设计》离线作业-C语言程序设计