已有定义int i;float f1,f2; 执行scanf unsigned int("%2f%3d%f",&f1,&i,&f2)时,输入"1234.5

《程序设计基础(C) 》习题指导书第一章 数据类型与表达式一.知识点1.C 语言的特点:①语言简洁、紧凑,使用方便、灵活; ②运算符丰富; ③数据结构丰富; ④具有结构化控制语句; ⑤语法限制不太严格,程序设计自由度大; ⑥可以进行位操作,能实现汇编语言的大部分功能,能直接对硬件进行操作; ⑦生成的目标代码质量高,程序执行效率高; ⑧程序的移植性好。 2.C 程序的组成: ⑴C 程序是由函数构成的; ⑵一个函数包括函数的首部(即函数的第一行)和函数体(即花括号部分) ; ⑶函数体一般包括声明部分和执行部分; ⑷一个 C 程序总是从 main 函数开始执行,从 main 函数结束; ⑸C 程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上; ⑹每个语句和数据定义的最后必须有一个分号; ⑺C 语言本身没有输入输出语句,是通过函数实现输入输出的; ⑻可以用/*??*/对 C 程序的任何部分作注释。 3.C 语言程序的运行:源程序文件的扩展名为.c,目标程序文件的扩展名为.obj,可执行程序文件的扩展名 为.exe。 4.C 的数据类型:基本、构造、指针和空类型,char、int、short、long、unsigned、float、double、enum、 struct、union、typedef。 5.常量与变量的概念,注意符号常量的定义与使用。 6.整型、实型、字符型常量的表示,注意整型常量的十进制、八进制、十六进制的书写。 7.变量的定义,C 的标识符包括关键字、预定义标识符、用户定义标识符;用户定义标识符的可用字符为字 母、数字、下划线,第一个字符为字母或下划线。 8.转义字符:\n、\t、\b、\r、\f、\\、\’、\”、\ddd、\xhh。 9.不同数值型数据的混合运算,低级类型转换为高级类型运算。 10.C 的运算符:注意结合方向和运算的优先级。 11.算术运算符:+、-、*、/、%、++、--,注意自加、减运算符分前缀和后缀两种方式。其中前缀方式为 先自加、减,后引用;后缀方式为先引用,后自加、减;运算符 %要求运算量为整数,运算结果也为整数。 注意除运算时,若运算量为整型时,其运算结果也是整型的规则。 12.赋值类运算符:=、+=、-=、*=、/=、%=,注意含义和数据类型的转换。 13.逗号运算符的使用,注意逗号运算符的运算规则。二.习题 ? 基础篇㈠.填空题 1.C 语言源程序文件的后缀是 .c 或.cpp,经过编译后,生成文件的后缀是 .obj,经过连接后,生 成文件的后缀是 .exe 。 2.设 C 源程序文件名为 text.c,为得出该程序的运行结果,应执行的文件名是.obj,此文件是通过编译产 生的。 3.结构化程序由 顺序 、 选择 、 循环 三种基本结构组成。 4.若 k 为整型变量且赋值 11。请写出运算 k++后表达式的值 11 和变量的值 12 。 5.若 x 为 double 型变量,运算 x=3.2,++x 后表达式的值 4.2 和变量的值 4.2 。第 1 页 共 64 页 《程序设计基础(C) 》习题指导书6.函数体由符号 { 开始,用符号 } 结束。函数体的前面是 声明 部分,其后是 执行 部分。 7.C 语言中的标识符可分为 关键字 、 自定义标识符 和预定义标识符三类。 8.在 C 语言程序中,用关键字 int 定义基本整型变量,用关键字 float 定义单精度实型变量,用 关键字 double 定义双精度实型变量。 9.把 a1、a2 定义成单精度实型变量,并赋初值 1 的定义语句是 float a1,a2;a1=a2=1; 。 10.C 程序中定义的变量,代表内存中的一个 存储单元 。 11.表达式 3.5+1/2 的计算结果是 3.5 。 12.写出数学表达式a?b 三个等价的 C 语言表达式 a*b/(c*d)、a /(c*d)*b、b/(c*d)*a。 c?d13.通常一个字节包含 8 个二进制位。 15 14.当计算机用两个字节存放一个整数时,能存放的最大(十进制)整数是 2 -1 、最小(十进制)整 16 数是 -2 。 15.在 C 语言中整数可用 8 进制数、 十 进制数和 十六 进制数三种数制表示。 16.C 语言中,int 型数据占 2 个字节,long 型数据占 4 个字节,unsigned int 型数据占 2 个 字节, short 型数据占 8 个字节, float 型数据占 4 个字节,double 型数据占 8 个字节, char 型数据占 8 个字节。 17.C 语言规定,标志符只能由_数字_____、_字母______、_下划线_______3 种字符组成,而且,第一个字 符必须是__字母_____或___下划线____。 18.C 语言中,基本数据类型有_int_______、___float____和字符型。 19. ‘x’在内存中占_1_____字节, “x”在内存中占_2_______字节, “\101”在内存中占__1____字节。 ㈡.选择题 1.组成 C 语言程序的是( ) 。 A.子程序 B.过程 C.函数 D.主程序和子程序 2.以下叙述中正确的是( ) 。 A.在 C 程序中无论是整数还是实数,只要在允许的范围内都能准确无误的表示。 B.C 程序由主函数组成。 C.C 程序由函数组成。 D.C 程序由函数和过程组成。 3.以下选项中正确的整型常量是( ) 。 A.12. B.-20 C.1,000 D.4 5 6 4.以下选项中正确的实型常量是( ) 。 2 A.0 B.3. 1415 C.0.329w10 D..871 5.以下选项中不合法的用户标识符是( ) 。 A._123 B.printf C.A$ D.Dim 6.C 语言中运算对象必须是整型的运算符是( ) 。 A.% B./ C. ! D.* 7.C 语言中,#define PRICE 2.56 将 PRICE 定义为( ) 。 A.符号常量 B.字符常量 C.实型常量 D.变量 8.若变量已正确定义并赋值,符合 C 语言语法的表达式是( ) 。 A.a=a+7; B.a=7+b+c,a++ C.int(12.3%4) D.a=a+7=c+b 9.不合法的八进制数是( ) 。 A.0 B.028 C.077 D.01 10.C 语言中合法的字符常量是( ) 。 A.n B.’\n’ C.110 D. “n” 11.表达式 1/5+3%4+4.5/5 的值是( ) 。 A.3.9 B.3.900000 C. 1.100000 D. 1.85第 2 页 共 64 页 《程序设计基础(C) 》习题指导书12.下面 4 个选项中,均是合法转义字符的选项是( ) 。 A. '\&’ '\\' '\n' B. '\' '\017' '\&' C. '\011' '\f' '\}' D. '\abc' '\101' 'xlf' 13.设有语句:char c=’\72’; 则变量 c( ) 。 A. 包含 1 个字符 B. 包含 2 个字符 C .包含 3 个字符' D. 不合法 14.在 C 语言中,int、char 和 short 三种类型数据在内存中所占用的字节数( ) 。 A. 由用户自己定义 B. 均为 2 个字节 C. 是任意的 D. 由所用机器的机器字长决定 ㈢.判断题 1.一个 C 程序的执行是从本程序的第一个函数开始,到本程序文件的最后一个函数结束。 ( )? 2.在 C 程序中,逗号运算符的优先级最低。 ( )? 3.定义的变量都具有默认值,因此变量定义后便可以使用。 ( )? 4. 在 C 语言中, 即使两个整型数据未超出该数据的取值范围, 它们的和也可能会超出该数据的取值范围 ( ) 。 ? ㈣.程序设计题 1.编程输出下列图案 * * * * * * * * ? M E N U ? $ $ $ $ $ $ $ $ 2.编写一个程序,将两个数作为输入数据,并显示它们的和、差、积、商。? 应用篇㈠.填空题 1.若采用十进制数的表示形式,则 077 为______,0111 为______,0xab 为_______。 2.设 C 语言中的一个基本整型数据在内存中占 2 个字节,若欲将整数 135791 正确无误地存放在变量 a 中, 应采用的类型说明语句是_long a=135791_______。 3.若有定义语句:int m=5,y=2;则执行表达式 y+=y-=m*=y 后的 y 值是 -16 。 4. C 程序是由 函数 构成的,一个 C 程序必须有一个 main 函数 。 ㈡.选择题 1.已知各变量的类型说明如下: int i=8,k,a,b; unsigned long w=5; double x=1.42,y=5.2; 则以下正确的表达式是( ) 。 A. a+=a-=(b=4)*(a=3) B. a=a*3=2 C. x%(-3) D. y=float(i) 2.以下正确的叙述是( ) 。 A. 在C程序中,每行中只能写一条语句 B. 若a是实型变量,C程序中允许赋值 a=10,因此实型变量中允许存放整型数 C. 在C程序中,无论是整数还是实数,都能被准确无误的表示 D. 在C程序中,%是只能用于整数运算的运算符 3.sizeof(float)是( ) 。 A. 一个双精度型表达式 B. 一个整型表达式 C. 一种函数调用 D. 一个不合法的表达式 ㈢.判断题 1.若 a 和 b 类型相同,在执行了赋值表达式 a=b 后 b 中的值将放入 a 中,而 b 中的值不变。 ( )? 2.当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值。 ( )?第 3 页 共 64 页 《程序设计基础(C) 》习题指导书3. 一个 C 程序可以有多个函数,其中主函数必须在程序的最开头( ) 。? 4. 若有命令行:#define N 1000,则 N++是不合法的表达式( ) 。 ?? 提高篇㈠.填空题 1.若有定义语句:int a=2,b=7;float x=3.5,y=2.5;则表达式(float)(a+b)/2+(int)x%(int)y 的值为__5.5____。 2.假设变量 a、b 均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为__9____。 ㈡.选择题 1.已知字母A的 ASCII 码为十进制数 65,且定义 c2 为字符型变量,则执行语句 c2='A'+'6'-'3'后;c2 中的 值为( ) 。 A. D B. 68 C. 不确定的值 D. C 2.若有定义语句:int a=7;float x=2.5,y=4.7; 则表达式 x+a%3*(int)(x+y)%2/4 的值是( ) 。 A.2.500000 B.2.750000 C.3.5000000 D.0..设有说明语句: 则表达式 w*x+z-y 值的数据类型为( ) 。 A.float B.char C.int D.double 4. 设有语句:int a=3; 执行语句 printf(“%d”,-a++);后,输出的结果是( ) 。 A.3 B.4 C.-3 D.-12第二章 算法与顺序结构一.知识点1.算法:为解决一个问题而采取的方法和步骤。 2.算法的分类:数值算法、非数值算法。 3.算法的特点:有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性。 4.算法描述方法:自然语言、流程图、改进流程图、N―S 流程图、伪代码、计算机语言。 5.C 语句的类型:控制语句、函数调用语句、表达式语句、空语句、复合语句。 6.输入输出的概念:输入输出是相对主机而言,C 语言是由函数来实现输入输出的。 7.字符数据的输入/输出:getchar() 、putchar() 。 8.格式输入/输出:scanf() 、printf() 。 9.printf 的格式符:d、i,o,x、X,u,c,s,f,e、E,g、G;l,m,n,-。 10.scanf 的格式符:d、i,o,x、X,u,c,s,f,e、E,g、G;l,m,*;&。注意输入数据时数据流的分 隔符,系统默认的分隔符为空格、tab 键和回车。 11.顺序结构的设计思想:声明变量、输入数据、处理(算法) 、输出结果。二.用 N―S 图表示下列问题1.有两个瓶子 A 和 B,分别盛放醋和酱油,要求将它们互换。 2.依次将 10 个数输入,要求将其中最大的数打印出来。 3.有 3 个数 a、b、c,要求按从大到小的顺序把它们打印出来。 4.求 1+2+3+??+100。 5.判断一个数 n 能否同时被 3 和 5 除。 6.将 100~200 之间的素数打印出来。 7.求两个整数 m 和 n 的最大公约数(用辗转相除法) 。 2 8.求方程 ax +bx+c=0 的根;分别考虑有两个不等的实根和有两个相等的实根的情况。三.习题 ? 基础篇㈠.填空题第 4 页 共 64 页 《程序设计基础(C) 》习题指导书1.以下程序段执行后的输出结果是: ⑴ -200 2500 ⑵i=-200,j=2500 int i=-200,j=2500; ⑶ i=-200 printf( “⑴ %d %d” ,i,j) ; j=2500 printf( “⑵ i=%d,j=%d\n” ,i,j) ; printf( “⑶ i=%d\n j=%d\n” ,i,j) ; 2.复合语句在语法上被认为是 一条语句 。空语句的形式是 ; 。 3.C 语句的最后用 ; 结束。 4.以下程序段的输出结果是 x= 127,x= 177,x= 7f,x= 127。 int x=0177;printf( “x=%6d,x=%6o,x=%6x,x=%6u\n” ,x, ,x,x,x) ; 5.以下程序段的输出结果是 a=513.789215,a= 513.79,a=513.,a= 531.。 double a=513.789215; printf( “a=%8.6f,a=%8.2f,a=%14.8f,a=%14.8lf\n” ,a,a,a,a) ; 6.以下程序段的输出结果是 8,3 。 a=3+5,a*4;x=11/3;printf( “%d,%%d\n” ,a,x) ; 7.以下程序输入三个整数值给 a、b、c,程序把 b 中的值给 a,把 c 中的值给 b,把 a 中的值给 c,交换后 输出 a、b、c 的值。请填空: #include &stdio.h& main() { int a,b,c, t ; printf( “Enter a,b,c: ” ) ; scanf( “%d,%d,%d” , &a,&b,&c) ; m=a ;a=b;b=c; c=m; printf( “a=%d,b=%d,c=%d\n” ,a,b,c) ;} 8.以下程序不借助任何变量把 a、b 中的值进行交换。请填空: #include &stdio.h& main() { int a,b; printf( “Input a,b: ” ) ; scanf( “%d,%d” , &a,&b) ; a+= b ;b=a- b ;a=a- b ; printf( “a=%d,b=%d\n” ,a,b) ;} 9.已知 int a=1; printf(&%d\n&,'a');则输出结果是 97 。 10.已知 float a=3,b=2; printf(&%f\n&,a/b);则输出结果是 1.500000 。 11.结构化程序设计的 3 种基本结构是 顺序 结构、 分支/选择 结构和循环结构。 12.若 x 为 int 型变量,则执行语句 x=7;x+=x-=x+x;后 x 的值是__-14______。 13.C 语句的最后用___;___结束。 14.设有一输入函数 scanf(“%d”,k);它不能使 float 类型变量 k 得到正确数值得原因是_输入的格式不正确__和 __应该是 k 的地址_。 15.若已定义:语句:a=-2;b=a;c=b;则 b 中值为 216-2 ,c 中值为 -2 。 16.若 k 为整型变量且赋值 10。请写出运算 k++后表达式的值__10___和变量的值____11___。 17.复合语句在语法上被认为是__一条语句_____,空语句的形式是__;_____。 18 .有如下程序段:设 a 为两个字节, int a=-1;printf(&a1=%d,a2=%u&,a,a); 输出结果为: _ a1=-1,a2=216-1 ________。 ㈡.选择题 1.若 a、b、c、d 都是 int 型变量且初始值为 0,下列不正确的赋值语句是( ) 。 A.a=b=c=100; B.d++; C.c+b; D.d=(c=22)-(b++) ;第 5 页 共 64 页 《程序设计基础(C) 》习题指导书2.以下选项中不是 C 语句的是( ) 。 A.{int i;i++;printf( “%d\n” ,i) ;} B. ; C.a=5,c=10 D.{ ;} 3.以下合法的 C 语言赋值语句是( ) 。 A.a=b=58 B.k=int(a+b) ; C.a=58,b=58 D.--i; 4.以下程序的输出结果是( ) 。 A.0 B.1 C.3 D.不确定的值 main() { int x=10,y=3; printf( “%d\n” ,y=x/y) ;} 5.若变量已正确说明为 int 类型,要给 a、b、c 输入数据,正确的输入语句是( ) 。 A.read(a,b,c) ; B.scanf( “%d%d%d” ,a,b,c) ; C.scanf( “%D%D%D” ,&a,&b,&c) ; D.scanf( “%d%d%d” ,&a,&b,&c) ; 6.若变量已正确定义,要将 a 和 b 中的数进行交换,下面不正确的语句组是( ) 。 A.a=a+b,b=a-b,a=a-b; B.t=a,a=b,b=t; C.a=t;t=b;b=a; D.t=b;b=a;a=t; 7.若变量已正确定义,以下程序段的输出结果是( ) 。 A.输出格式说明与输出项不匹配,输出无定值 B.5.1700 C.5.16800 D.5.16900 x=5.16894;printf( “%f\n” , (int) (x*)/(float)1000) ; 8.执行以下程序段后,c3 中的值是( ) 。 A.0 B.1/2 C.0.5 D.1 int c1=1,c2=2,c3;c3=c1/c2; 9.执行以下程序段后,其输出结果是( ) 。 A.0,0,-10 B.0,0,5 C.-10,3,-10 D.3,3,-10 int a=0,b=0,c=0; c=(a-=a-5) , (a=b,b+3) ; printf( “%d,%d,%d\n” ,a,b,c) ; 10.以下程序的输出结果是( ) 。 A.a=%2,b=%5 B.a=2,b=5 C.a=%%d,b=%%d D.a=%d,b=%d main() { int a=2,b=5; printf( “a=%%d,b=%%d\n” ,a,b) ;} 11.若 int 型占两个字节,以下程序段的输出是( ) 。 A.-1,-1 B.-1,32767 C.-1,32768 D.-1,65535 int a=-1;printf( “%d,%u\n” ,a,a) ; 12.以下程序段的输出结果是( ) 。 A.|3.1415| B.| 3.0| C.| 3| D.| 3.| float a=3.1415;printf( “|%6.0f|\n” , a) ; 13.以下程序段的输出结果是( ) 。 A.9 8 B.8 9 C.6 6 D.以上三个都不对 #include &math.h& main() { double a=-3.0,b=2; printf( “%3.0f %3.0f\n” ,pow(b,fabs(a) ) ,pow(fabs(a) ,b) ) ;} 14.若 a 为整型变量,则以下语句( ) 。 A.赋值不合法 B.输出值为-2 C.输出为不确定值 D.输出值为 2 a=-2L;printf( “%d\n” ,a) ; 15.若有定义 char s=‘\092’ ;则该语句( ) 。 A.使 s 的值包含 1 个字符 B.定义不合法,s 的值不确定第 6 页 共 64 页 《程序设计基础(C) 》习题指导书C.使 s 的值包含 4 个字符 D.使 s 的值包含 3 个字符 16.若 k、g 均为 int 型变量,则下列语句的输出为( ) 。 A.15 B.16 C.15 D.16 6f 70 71 6f k=017;g=111;printf( “%d\n” ,++k) ;printf( “%x\n” ,g++) ; 17.已知字母 a 的 ASCII 十进制代码为 97,执行下列语句后的输出为( ) 。 A.b,c B.a--运算不合法,故有语法错误 C.98,c D.格式描述和输出项不匹配,输出无定值 char a=‘a’ ;a--;printf( “%d,%c\n” ,a+‘2’-‘0’ ,a+‘3’-‘0’ ) ; 18.下列程序的输出为( ) 。 A.27.000000 B.27.500000 C.28.000000 D.28.500000 #include &stdio.h& main() { int m=7,n=4; float a=38.4,b=6.4,x; x=m/2+n*a/b+1/2;printf( “%f\n” ,x) ; } 19.下列程序的输出结果是( ) 。 A.18 B.9 C.-18 D.-9 main() { int a=9;a+=a-=a+a;printf( “%d\n” ,a) ; } 20.下列程序的输出结果是( ) 。 A.0 B.5 C.1 D.不确定值 main() { int a=7,b=5;printf( “%d\n” ,b=b/a) ;} 21.下列程序的输出结果是( ) 。 A.12 B.11 C.10 D.9 main() { int a=011;printf( “%d\n” ,++a) ;} 23.下列是输出显示字符’a’的八进制 ASCII 码语句,正确的是( ) 。 A.printf(&%c\n&,'a'); B.printf(&%d\n&,'a'); C.printf(&%s\n&,'a'); D.printf(&%o\n&,'a'); 24.在 scanf( )函数的格式说明符中,长整型数的输入格式说明符是( ) 。 A.%d B.%lf C.%ld D.%x 25.在 printf()函数的格式说明符中,双精度浮点型的输出格式说明符是( ) 。 A.%ld B.%lf C.%c D.%s 26.将一个双精度浮点型常数 12.345 使用 printf()函数输出显示在屏幕上,要求输出宽度为数值左边有 2 个空格符,小数点后面有 4 位数,正确的输出语句是( ) 。 A.printf(&%9.4lf\n&,12.345); B.printf(&%8.4lf\n&,12.345); C.printf(&%lf\n&,12.345); D.printf(&%9.4f\n&,12.345); 27.putchar 函数可以向终端输出一个( ) 。 A.整型变量表达式的值 B.实型变量的值 C.字符串 D.字符或字符型变量的值 28.下列给出的分隔符中,错误的是( ) 。 A 回车 B 空格 C 制表符 D 双引号 29.以下选项不是 C 语句的是( ) 。 A.{a++; printf(&%d\n&,a); B. ; C.{;} D.b=5 30.若变量已正确定义,要将 a 和 b 的数进行交换,下面不正确的语句是( A.a=a+b,b=a-b,a=a-b; B.t=a,a=b,b=t; C.a=t;t=b;b=a; D.t=b;b=a;a=t;第 7 页 共 64 页) 。 《程序设计基础(C) 》习题指导书31.若变量已说明为 int 类型,要给 a、b、c 输入数据,正确的输入语句是( ) 。 A.scanf(&%d%d%d&,a,b,c); B.read(a,b,c); C.scanf(&%D %D%D&,&a,&b,&c); D.scanf(&%d %d%d&,&a,&b,&c); ㈢.程序设计题 1. 编写程序,从终端键盘输入圆的半径 r,圆柱体的高 h,分别计算出圆周长 c1、圆面积 cs 和圆柱的体 积 cvs。输出计算结果时要求有文字说明,并取小数点后 2 位数字。 2. 输入一个华氏温度,要求输出摄氏温度。公式为:c=5(f-32)/9。 3. 编写程序,读入一个字母,输出与之对应的 ASCII 码,输入输出都要有相应的文字提示。? 应用篇㈠.填空题 1.以下程序的输出结果是_3..142________。 main( ) { printf(&%f,%4.3f\n&,3.14,3.1415); } 2. 以下程序的输出结果是__ c:dec=120,oct=15,hex=78,ASCII=x _______。 main() { char c='x'; printf(&c:dec=%d,oct=%o,hex=%x,ASCII=%c\n&,c,c,c,c); } 3. 已有定义 int d=-2;执行以下语句后的输出结果是________。 printf(&d(1)=%d d(2)=%3d d(3)=%-3d\n&,d,d,d); d(1)=-2 d(2)= -2 d(3)=12 4. 已有定义 int d=-2;执行以下语句后的输出结果是________。 printf(&d(1)=%d d(2)=%3d d(3)=%-3d\n&,d,d,d,d); printf(&d(4)=%x d(5)=%6x d(6)=%-6x\n&,d,d,d,d); 5. 已有定义 float d1=3.5,d2=-3.5;执行以下语句后的输出结果是________。 printf(&d(1)=%e d(2)=%.4e d(3)=%10.4e\n&,d1,d1,d1); printf(&d(1)=%e d(2)=%.6e d(3)=%-12.5e\n&,d2,d2,d2); 6. 若 x 为单精度型变量, y 为字符型变量, z 为整型变量, 执行如下的输入语句: scanf(&%f%c%d&,&x,&y,&z); 后, 从键盘输入 12.77A79A86。 此时, 变量 x、 y、 z 的值分别是__12.77_____、 ____ A ____、 ____79______。 7. 以下程序的运行结果是 。 #include&stdio.h& void main( ) { char s[50]; printf(&Enter a string:&); gets(s); puts(s); } Enter a string:string&回车& string 8. 以下程序的运行结果是________。 #include&stdio.h& void main( )第 8 页 共 64 页 《程序设计基础(C) 》习题指导书{ char c='p'; printf(&%d,%c\n&,c,c); printf(&%d,%c\n&,'a','a');} 112,p 97,a 9. 以下程序的运行结果是________。 #include&stdio.h& void main( ) { float a=3.12345; printf(&%.2f,%.2e\n&,a,a); } 3.12,3.12e0 10.以下程序的运行结果是___221_____。 #include&stdio.h& main( ) { int m=177; printf(&%o\n&,m); } ㈡.选择题 1.执行以下程序段 int a=1,b=2,c;c=a/b 后,c 的值是( ) 。 A.0 B.1/2 C.0.5 D.1 2.以下不符合 C 语法的赋值语句是( ) 。 A.m=(2+1,m+1); B.m=n=0; C.m=1,n=2 D.a=b=c=5; 3.以下能正确地定义整型变量 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; 4.已知 ch 是字符型变量,下面不正确的赋值语句是( ) 。 A.ch=’a+b’; B.ch=’\0’; C.ch=’7’+’9’; D.ch=5+9; 5.已知 ch 是字符型变量,下面正确的赋值语句是( ) 。 A.ch=’123’; B.ch=’\xff’; C.ch=’\08’; D.ch=”\”; 6.以下程序的运行结果是( ) 。 #include&stdio.h& main( ) { int m=5,n=10; printf(&%d,%d\n&,m++,--n); } A.5,9 B.6,9 C.5,10 D.6,10 7.设有以下程序: 程序执行后的输出结果是( ) 。 #include&stdio.h& main( ) {第 9 页 共 64 页 《程序设计基础(C) 》习题指导书int a=201,b=012; printf(&%2d,%2d\n&,a,b); } A.01,12 B.201,10 C.01,10 D.20,01 8.有定义语句 int a,b;若要通过语句 scanf(&%d,%d&,&a,&b);使变量 a 得到数值 6,变量 b 得到数值 5,下面输 入形式中错误的是(C) 。 (注:*代表空格) A.6,5&回车& B.6,**5&回车& C. 6 5&回车& D.6,&回车& 5,&回车& 9.设有如下程序: #include&stdio.h& main() { char ch1='A',ch2='a'; printf(&%c\n&,(ch1,ch2) ); } 则以下叙述中正确的是( ) 。 A.程序的输出结果为大写字母 A B.程序的输出结果为小写字母 a C.运行时产生错误信息 D.格式说明符的个数少于输出项的个数,编译出错 10.以下程序的运行结果是( ) 。 include&stdio.h& main( ) { int x1=0xabc,x2=0 x2-=x1; printf(&%X\n&,x2); } A. ABC B.0Xabc C. 0X333 D.333 ㈢.判断题 1.C 语言标准输入操作中,getchar()函数一次只可读取一个字符。 ( ) ? 2.C 语言标准输入操作中,putchar()函数可以输出显示一个字符串。 ( )? 3.C 语言标准格式输入函数 scanf()的参数表中要使用变量的地址值。 ( )? 4.C 语言标准格式输出函数 printf()的参数表是由若干个表达式组成。 ( )? 5.标准格式输入函数 scanf()可以从键盘接收不同数据类型的数据项。 ( )? 6.任何表达式语句都是表达式加分号组成的。 ( )? 7.表达式语句和表达式没什么区别。 ( )? 8.分号是 C 语言中语句的结束符,不可用作分隔符。 ( )? 9.空格符可用作分隔符,水平制表符不能用?作分隔符。 ( ) 10.C 语言本身不提供输入输出语句,输入输出操作是由函数来实现的。 ( )? ㈣.程序设计题 1.编写程序,输入两个整数 1500 和 350,求出它们的商和余数并进行输出。 2.编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位数 进行四舍五入,最后输出结果。 3. 编程实现用 getchar 函数从键盘输入一个小写字母,并用 putchar 函数输出对应的大写字母。? 提高篇㈠.填空题第 10 页 共 64 页 《程序设计基础(C) 》习题指导书1.已有定义 int x,且执行 scanf(&%3d%f&,&x,&y);语句,若从第一列开始输入数据 &回 车&,则 x 的值为__123___,y 的值为___45_____。 2. 执行以下程序时, 若从第一列开始输入数据, 为使变量 a=3、 b=7、 x=8.5、 y=71.82、 c1=’A’、 c2=’a’, 正确的输入数据形式为_ a=3 b=7 回车_ x=8.5 y=71.82 回车 c1=A c2=a 回车 __________。 main( ) { int a,b;float x,y;char c1,c2; scanf(&a=%d b=%d&,&a,&b); scanf(&x=%f y=%f&,&x,&y); scanf(&c1=%c c2=%c&,&c1,&c2); printf(&a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c&,a,b,x,y,c1,c2); } 3. 若有以下定义和语句,为使变量 c1 得到字符’A’,变量 c2 得到字符’B’,正确的输入形式是 ____A B 回车_________。 char c1,c2; scanf(&%4c%4c&,&c1,&c2); 4. 假设变量 a、b 和 c 均是整数,以下语句借助中间变量把 a、b 和 c 中的值进行交换,即:把 b 中的值给 a,把 c 中的值给 b,把 a 中的值给 c。例如:交换前,a=10、b=20、c=30,交换后,a=20、b=30、c=10。 请填空。_m=a_____;a=b;b=c;_c=m____ ; 5. 假设变量 a 和 b 均为整型,以下语句可以不借助任何变量把 a、b 中的值进行交换。请填空。a+=__b___ ; b=a-____b__; a-=____b__; 6. 已知字母 A 的 ASCII 码值为 65。以下程序的输出结果是__ a=66,b=E ______。 #include&stdio.h& main( ) { char a,b; a='A'+'4'-'3'; b='A'+'6'-'2'; printf(&a=%d,b=%c\n&,a,b); } 7. 若要求下列程序的输出结果为 8.0,请填空 。 #include&stdio.h& main( ) { int k=2,m=5; float s,x=1.2,y=___3.6_ ; s=2/3+k*y/x+m/2; printf(&%4.2f\n&,s); } 8. 以下程序的运行结果是_____20___。 #include&stdio.h& main( ) { int n=0; n+=(n=10); printf(&%d\n&,n); } 9.有以下程序: #include&stdio.h& main( )第 11 页 共 64 页 《程序设计基础(C) 》习题指导书{ int k=0;char c1='a',c2='b'; scanf(&%d%c%c&,&k,&c1,&c2); printf(%d,%c,%c\n&,k,c1,c2); } 若运行时从键盘输入:55 A B&回车&,则输出的结果是__55,A,B______。 10.以下程序输出的结果是_________。 main( ) { int x=1,y=2; printf(&x=%d y=%d sum=%d\n&,x,y,x+y); printf(&10 Squared is :%d\n&,10*10); } x=1 y=2 sum=3 10 Squared is :100 ㈡.选择题 1.以下程序的输出结果是( ) 。 (注:*代表空格) main( ) { printf(&\n-s1=%15s-&,&chinabeijing&); printf(&\-ns2=%-5s-&,&chi&); } A.-s1=chinabeijing***B.-s1=chinabeijing***-s2=--chi-s2=chi**C.-s1=-**chinabeijingD.-s1=***chinabeijing-s2=**chi-s2=chi**2.已有定义 int a=-2;和输出语句:printf(&%8lx&,a);以下正确的叙述是( ) 。 A.整型变量的输出格式符只有%d 一种 B.%x 是格式符的一种,它可以适用于任何一种类型的数据 C.%x 是格式符的一种,其变量的值按十六进制输出,但%8lx 是错误的 D.%8lx 不是错误的格式符,其中数字 8 规定了输出字段的宽度 3.以下程序的运行结果是( ) 。 main( ) { long y=-43456; printf(&y=%-8ld\n&,y); printf(&y=%-08ld\n&,y); printf(&y=%08ld\n&,y); printf(&y=%+81d\n&,y); } A.y=***-43456 B.y=-43456 y=-**43456 y=-43456 y=-0043456 y=-0043456 y=-43456 y=+*-43456 C.y=-43456 D.y=**-43456 y=-43456 y=-0043456 y=-0043456 y= y=**-43456 y=+43456 4.若 x,y 均定义为 int 型,z 定义为 double 型,以下不合法的 scanf 函数调用语句是( ) 。第 12 页 共 64 页 《程序设计基础(C) 》习题指导书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); 5.根据以下定义语句和数据的输入方式,scanf 语句的正确形式应为( ) 。 已有定义:float f1,f2; 数据的输入方式:4.52&回车& 3.5&回车& A.scanf(&%f,%f&,&f1,&f2); B.scanf(&%f%f&,&f1,&f2); C.scanf(&%3.2f %2.1f&,&f1,&f2); D.scanf(&%3.2f%2.1f&,&f1,&f2); 6.阅读以下程序,当输入数据的形式为 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.不确定的值 7.设有以下程序 #include&stdio.h& main( ) { char c1,c2,c3,c4,c5,c6; scanf(&%c%c%c%c&,&c1,&c2,&c3,&c4); c5=getchar(); c6=getchar(); putchar(c1); putchar(c2); printf(&%c%c\n&,c5,c6); } 若运行时从键盘输入数据:abc&回车&,defg&回车&,则输出结果是( ) 。 A.abcd B.abde C.abef D.abfg 8.有输入语句:scanf(&a=%d,b=%d,c=%d&,&a,&b,&c);为使 a 的值为 1,b 的值为 3,c 的值为 2;从键盘输 入数据的正确形式应当是( ) 。 A.132&回车& B.1,3,2&回车& C.a=1*b=3*c=2 &回车& D.a=1,b=3,c=2&回车& 9.若有以下定义,则正确的赋值语句是( ) 。 int a,b; A.a=1,b=2, B.b++; C.a=b=5 D.b=int(x); 10.设 x、y 均是 float 型变量,则以下不合法的赋值语句是( ) 。 A.++x B.y=(x%2)/10; C.x*=y+8; D.x=y=0; ㈢.程序设计题 1.编写程序:输入一个字符,输出该字符的前驱字符和后继字符,并按 ASCII 码值从大到小顺序输出这 3 个字符及其对应的 ASCII 码值。 2.输入三角形的三边长,求三角形的面积。 3. 下面程序的功能是读入直角三角形两直角边的长度,输出斜边长度。请将程序补充完整。 #include&stdio.h& main( ) { int x,y; double z=sqrt(a*a+b*b); printf(“斜边长度为:%lf\n”,z);}第 13 页 共 64 页 《程序设计基础(C) 》习题指导书第三章 选择结构程序设计一.知识点1.关系运算符、逻辑运算符、逻辑值的表示与含义;注意&&、||的运算规则。 2.三种 if 语句。 3.选择结构的嵌套,注意 if 与 else 的配对。 4.条件运算符:?与 : 5.switch 语句,注意其执行过程。 6.选择结构程序设计思想。二.习题 ? 基础篇㈠.填空题 1.C 语言中用 非 0 表示逻辑值“真” ,用 0 表示逻辑值“假” 。 2.C 语言中的关系运算符按优先级别是 、 、 、 、 、 。 答案:&、&、&=、&=、==、!= 3.C 语言中的逻辑运算符按优先级别是 、 、 。 答案:!、&&、|| 4.C 语言中的关系运算符和逻辑运算符的优先级别是 、 、 、 、 、 、 、 、 。 !、&、&、&=、&=、==、!=、&&、|| 5.C 语言中逻辑运算符的 ! 优先级高于算术运算符。 6.将下列数学式改写成 C 语言的关系表达式或逻辑表达式: a=b 或 a&c a==b||a&c |x|&4 x&4||x&-4 7.下列程序的输出结果 1 。 main() { int a=100; if(a&100) printf( “%d\n” ,a&100); else printf(“%d\n” ,a&=100);} 8.若已知 a=10、b=15、c=1、d=2、e=0,请分别给出下列表达式的运算结果: ⑴ a*b && c 1 ⑵ a+b&10 || a+b&0 1 ⑶ e 0 ⑷ c==b&e 1 ⑸ !a&e 0 ⑹ a++ && e++ && c++ 0 ⑺ !e && e==b==++c 1 ⑻ (0&a) && (a&2) 0 ⑼ 1.234 && 5.982 1 ⑽ (b==10) && (a==10) 0 ⑾ !0 || d && a==c+d 1 ⑿ (a+c==b)==(b+d==a) || (c=b+a)&(d=c+b) 1 9.当 a=1、b=2、c=3 时,执行以下 if 语句后,a= 3 、b= 1 、c= 1 。 if(a&c) ;b=a;a=c;c=b; 10.当 a=1、b=2、c=3 时,执行以下 if 语句后,a= 3 、b= 2 、c= 2 。 if(a&c)b=a;a=c;c=b; 11.当 a=1、b=2、c=3 时,执行以下 if 语句后,a= 1 、b= 2 、c= 2 。 if(a&c)b=a,a=c;c=b; 12.将以下两条 if 语句合并为一条 if 语句: if(a&b) scanf( “%d” ,&x) ;else scanf( “%d” ,&y) ; if(a&=b) i++;else j++; 答案:if(a&b) {scanf( “%d” ,&x) ;j++;}第 14 页 共 64 页 《程序设计基础(C) 》习题指导书else {scanf( “%d” ,&y) ;i++;} 13.将以下嵌套的 if 语句改写成不嵌套的 if 语句: if(w&0) k=0;else if(w&=100) k=1; else k=0; 答案:if(w&=0&&w&=100)k=1; else k=0; 14.以下程序判断输入的一个整数是否能被 3 或 7 整除,若能整除,输出“YES” ,若不能整除,输出“NO” 。 请填空: #include &stdio.h& main() { int k; printf( “Enter a int number: ” ) ;scanf( “%d” ,&k) ; if( k%3==0||k%7==0 )printf( “YES\n” ) ;else printf( “NO\n” ) ;} 15.在 switch 语句中,当执行到 break 语句时,使流程跳出开关语句 。 16. C 语言提供三种关系运算符,按优先级高低它们分别是:& & == &= &= !=等。 17.C 语言提供三种逻辑运算符,按优先级高低它们分别是____!__、_&&____、 _||____ 。 18.设 a=1,b=6,c=2,表达式 a+b&c && b==c 运算后的值为____0___。 19.写出命题 “-6&a&-3 或 2&a&=5”的 C 语言表达式__(a&-6&&a&-3)||(a&2&&a&=5)_____ 。 20 . 条 件 “y 能 被 4 整 除 但 不 能 被 100 整 除 , 或 y 能 被 400 整 除 ” 的 逻 辑 表 达 式 是 (y%4==0&&y%100!=0)||(y%400==0) 。 21.设 x,y,z 均为 int 型变量;写出描述“x,y 和 z 中有两个为负数”的 C 语言表达式是 (x&0&&y&0)||(x&0&&z&0)||(y&0&&z&0) 。 22.若有 x=1,y=2,z=3,则表达式(x&y?x:y)==z++的值是 0 。 23.执行以下程序段后,a= 10 ,b= 9 ,c= 11 。 int x=10,y=9 ; int a,b, a = (x--==y++) ? x-- : y++ ; b = x++ ; c = 24.若有条件“2&x&3 或 x&-10”,其对应的 C 语言表达式是 (x&2&&x&3)||x&-10 。 25.将以下两条 if 语句合并为一条 if 语句为 if(a&b){scanf( “ %d”,&a); n++;}else{ scanf( “ %d”,&b); m++;}。 语句 1: if(a&b)scanf( “ %d”,&a); else scanf( “ %d”,&b); 语句 2: if(a&=b)m++; else n++; ㈡.选择题 1.若给定条件表达式(M)?(a++) : (a--) ,则和表达式 M 等价的表达式为( ) 。 A.M==0 B.M==1 C.M!=0 D.M!=1 2.为表示关系 x≥y≥z,应使用的 C 语言表达式是( ) 。 A.(x&=y) && (y&=z) B.(x&=y)AND(y&=z) C.(x&=y&=z) D.(x&=y)&(y&=z) 3.以下程序的输出结果是( C ) 。 A.0 B.1 C.2 D.3 main() { int a=2,b=-1,c=2; if(a&b) if(b&0) c=0; else c+=1; printf( “%d\n” ,c); } 4.以下程序的输出结果是( ) 。 A.1 B.2 C.3 D.4第 15 页 共 64 页 《程序设计基础(C) 》习题指导书main() { int w=4,x=3,y=2,z=1;printf( “%d\n” , (w&x ? w : z&y ? z : x) ) ;} 5.若执行以下程序时,从键盘上输入 3 和 4,则输出结果是( ) 。 A.14 B.16 C.18 D.20 main() { int a,b,s;scanf( “%d %d” ,&a,&b) ; s=a; if(a&b)s=b; s*=s;printf( “%d\n” ,s) ; } 6.在 C 语言中,if 语句后的一对圆括号中,用以决定分支的流程的表达式( ) 。 A.只能用逻辑表达式 B.只能用关系表达式 C.只能用逻辑表达式或关系表达式 D.可用任意表达式 7.下列程序段运行后,x 的值是( ) 。 A.14 B.4 C.15 D.3 ok1=1;ok2=2;ok3=3;x=15; if(!ok1) x--;else if(ok2) if(ok3)x=3;else x=4; 8.在 C 语言中,switch 语句后一对圆括号中 exp 的类型( ) 。 A.可以是任何类型 B.只能为 int 型 C.可以是整型或字符型 D.只能是整型或实型 9.以下各组运算符中,优先级最高的分别为(⑴ ⑵ ⑶ ⑷ ) 。 ⑴A.?: B.++ C.&& D.+= ⑵A.*= B.&= C. (类型) D. , ⑶A.|| B.% C. ! D.== ⑷A.= B.!= C.*(乘) D.( ) 10.若 a 为整型变量,b 为字符型变量,则以下正确的 switch 语句是( ) 。 A.switch( (int)x/10) B.switch(b) { case 1:a++;break; { case ‘\042’ ;x=a/b;break; case 2:b++;break; case ‘6’ ;x=a*b;break; case 3:c++;break;} case ‘\010’ ;x=a+c;break;} C.switch( (int)x/10) ; D.switch(a/100+10) { case 0:a++;break; { case2 :x=a/b;break; default:b++;break; case6 :x=a*b;break; case 3+1:c++;break; case8 :x=a+c;break; case 3:d++;break;} case10 :x=a-c;break;} 11.与条件表达式&(n)?(c++):(c--)&中的表达式(n)等价的表达式是( ) 。 A.(n==0) B. (n==1) C. (n!=0) D.(n!=1) 12.已知 int i=1,j=0;执行下面语句后 j 的值是( ) 。 switch(i) { case 1: i+=1;j++;break; case 2: i+=2;j++;break; case 3: i+=3;j++;break; default: i--;j++;break;} A.1 B.2 C.3 D.死循环 13. 设 a、 b、 C、 d、 m、 n 均为 int 型变量, 且 a=5、 b=6、 c=7、 d=8、 m=2、 n=2, 则逻辑表达式 (m=a&b)&&(n=c&d) 运算后,n 的值位为( ) 。 A.0 B.1 C.2 D.3 14.若执行以下程序时从键盘上输入 9,则输出结果是( ) 。第 16 页 共 64 页 《程序设计基础(C) 》习题指导书main( ) { scanf(“%d”,&n); if(n++&10) printf(“%d\n”,n); else printf(“%d\n”,n--); } A.11 B.10 C.9 D.8 15. 若 a、 b、c1、c2、x、y、均是整型变量,正确的 switch 语句是 ( ) 。 A. swich(a+b); B. switch(a*a+b*b) { case 1:y=a+b; { case 3: case 0:y=a-b; case 1:y=a+b; } case 3:y=b-a, } C. switch a D. switch(a-b) { case c1 :y=a-b; break { default:y=a*b;break case c2: x=a*d; break case 3:case 4:x=a+b;break default:x=a+b; case 10:case 11:y=a-b; } } 16.能正确表示逻辑关系:“a≥=10 或 a≤0”的 C 语言表达式是( ) 。 A. a&=10 or a&=0 B. a&=0|a&=10 C. a&=10 &&a&=0 D. a&=10‖a&=0 17.设 int x=1, y=1; 表达式(!x||y--)的值是 ( ) 。 A. 0 B. 1 C. 2 D.-1 18. 表示关系 X&=Y&=Z 的 c 语言表达式为( ) 。 A. (X&=Y)&&(Y&=Z) B. (X&=Y)AND(Y&=Z) C. (X&=Y&=Z) D. (X&=Y)&(Y&=Z) 19. 表达式:10!=9 的值是( ) A. true B. 非零值 C. 0 D. 1 20. 下面的程序 ( ) main( ) { int x=3,y=0,z=0; if(x=y+z) printf(&* * * *&); else printf(&# # # #&); } A.有语法错误不能通过编译 B. 输出* * * * C.可以通过编译,但是不能通过连接,因而不能运行 D. 输出# # # # ㈢.判断题 1.在 switch 语句中没有必要使用 break 语句。( )? 2. switch 语句的表达式与 case 表达式的类型必须一致。( ) ? 3. if 的嵌套语句可以改写为不带嵌套的形式。( )? 4.if 语句的条件表达式只能是关系表达式或者逻辑表达式,不能是其他表达式。( )? 5.逻辑表达式和关系表达式不能参与算术运算。( )? ㈣.程序设计题: 1.编程判断输入的正整数是是否既是 5 又是 7 的整倍数。若是,则输出 Yes;否则输出 No。 2.用 switch 编程实现: -1 (x&0) y = 0 (x=0) 1 (x &0)第 17 页 共 64 页 《程序设计基础(C) 》习题指导书3.输入三个数,找出并打印最小数。 4.编写程序,输入三角型的三条边长,求其面积。注意:对于不合理的边长输入要输出数据错误的提示信息。 5.编程:判断输入数据的正负性和奇偶性。 6.编写程序实现功能:输入一个复数,输出共轭复数。例如,输入 2+3i (回车)后,自动输入其共轭复数 2-3i;输入 2-3i (回车)后,自动输入其共轭复数 2+3i; 7.编程实现,界面提示输入选择项:“Y”(代表圆形)、“J”(代表矩形)、“S”(三角形),当用户 按照提示输入‘Y’、‘J’、‘S’中的任意一个时,根据其代表意义,输出该图形的面积计算公式。 8.已知银行整存整取存款不同期限的月息利率分别为: 0.315% 期限一年 0.330% 期限二年 0.345% 期限三年 0.375% 期限五年 0.420% 期限八年 要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。 9. 编写一个程序,根据用户输入的字母判定它代表星期几。例如:如果输入 M(m)则代表 Monday;如果输 入 T(t)则可能代表 Tuesday 或 thursday,需要进一步确认是哪一天,因此需要输入 u 和 h。(提示:对 于星期几,需要对第一个字符的大小写都进行判断,而不需要对第二字符判断大小。) 10.从键盘输入任意的字符,按下列规则进行分类计数。 第一类 '0','1','2','3','4','5','6','7','8','9' 第二类 '+','-','*','/','%','=' 第三类 其它字符 当输入字符'\'时先计数,然后停止接收输入,打印计数的结果。 11.从键盘输入一个字母,若是大写字母,要求改用小写字母输出。 2 2 12.求 ax +bx+c=0 的根。a、b、c 由键盘输入,设 b -4ac&=0.? 应用篇㈠.填空题 1.设 a=3,b=6,c=5 表达式 !(a&b) && !c || 1 运算后的值为___1________。 2.有 int x=3,y=-4,z=5;则表达式(x&&y)==(x||z)的值为 1 。 3.以下程序对输入两个整数,按从大到小顺序输出.请在________内填入正确内容. main( ) { int x,y,z; scanf(“%d,%d”,&x,&y); if (_x&y_______) {z=x; _x=y;y=z;______} pringf(“%d,%d”,x,y);} 4.请阅读下面的程序: main( ) {int s,t,a,b; scanf(“%d,%d”,&a,&b); s=1; t=1; if (a&0) s=s+1; if (a&b) t=s+t; else t=2*s; prinf(“s=%d,t=%d”,s,t);} 为了使输出结果 t=4,输入量 a 和 b 应满足的条件是_________。 5. 若下面程序运行时输入:16 &回车&,则以下程序的运行结果是 you are a yong man!第 18 页 共 64 页。 《程序设计基础(C) 》习题指导书#include &stdio.h& void main( ) { printf( “input your year:”); scanf( “%d”,&year); if (year&=18) printf ( “you are an adult!”); else printf ( “you are a yong man!”);} 6. 若下面程序运行时输入:2 &回车&,则运行结果是 2nd class postage is 14p! #include &stdio.h& void main( ) { printf( “Enter 1for lst class post or 2 for 2nd post”); scanf( “%c”,&class); if (class==’1’) printf ( “1st class postage is 19p!”); else printf ( “2nd class postage is 14p!”);} 7. 以下程序的运行结果是 T main() { if(2*2==5&2*2==4) print (“T”); else print( “F”);}。。8.以下程序的运行结果是 -1 。 main() { int a=2,b=3,c; c=a; if(a&b)c=1; else if(a==b) c=0; else c=-1; printf(“%d\n”,c);} 9. 若有以下程序段,当 city 的值为‘X’,则输出结果为____ Xi’an _______。 switch(city) { case ‘B’: printf( “Beijing”);break; case ‘S’: printf( “Shanghai”); break; case ‘G’: printf( “Guang”); break; case ‘X’: printf( “Xi\’an”); break; default: printf( “error”); break; } ㈡.选择题 1. 能正确表示 a 和 b 同时为正或同时为负的逻辑表达式是 ( ) 。 A.(a&=0‖b&=0)&&(a&0‖b&0) B.(a&=0&&b&=0)&&(a&0&&b&0) C.(a+b&0)&&(a+b&=0) D.(a&=0&&b&=0)||(a&0&&b&0) 2.以下关于 switch 语句和 break 语句的描述正确的是( ) 。 A.在 switch 语句中必须使用 break 语句 B.break 语句只能用于 switch 语句体中 C.break 语句只能用于循环语句中 D.在 switch 语句中可以使用 break 语句第 19 页 共 64 页 《程序设计基础(C) 》习题指导书3.当把以下四个表达式用作 if 语句的控制表达式时,有一个选项与其它三个选项含义不同,这个选项是 ( ) 。 A.k%2 B.k%2==1 C.(k%2)!=0 D.!k%2==1 4.设有定义:int a=2,b=3,c=4;,则以下选项中值为 0 的表达式是( ) 。 A.(!a==1)&&(!b==0) B.(a&b)&& !c||1 C.a && b D.a||(b+b)&&(c-a) 5.有以下程序 main( ) { int i=1,j=1,k=2; if((j++‖k++)&&i++) printf(&%d,%d,%d\n&,i,j,k); } 执行后输出结果是( ) 。 A.1,1,2 B.2,2,1 C. 2,2,2 D. 2,2,3 6. 有以下程序: main( ) { int a=5,b=4,c=3,d=2; if(a&b&&b&c) printf(&%d\n&,d); else if((c-1&=d)==1) printf(&%d\n&,d+1); else printf(&%d\n&,d+2); } 执行后输出结果是 ( ) 。 A. 2 B. 3 C. 4 D. 编译时有错,无结果 7. 有以下程序 main( ) { int a=15,b=21,m=0; switch(a%3) { case 0:m++; case 1:m++; switch(b%2) { default:m++; case 0:m++; } } printf(“%d\n”,m); } 程序运行后的输出结果是( ) 。 A. 1 B. 2 C. 3 D.4 8. 有如下程序 main( ) { int x=1,a=0,b=0; switch(x) { case 0: b++; case 1: a++ ; case 2: a++;b++ } printf(“a=%d,b=%d\n”,a,b); } 该程序的输出结果是 ( ) 。 A. a=2,b=1 B. a=1,b=1 9.以下程序的输出结果是( ) 。 C. a=1,b=0第 20 页 共 64 页D.a=2,b=2 《程序设计基础(C) 》习题指导书A. -1 1 B. 0 1 C. 1 0 D. 0 0 main( ) { int a= -1,b=1,k; if((++a&0)&& ! (b-- &=0)) printf(&%d %d\n&,a,b); else printf(&%d %d\n&,b,a);}10.若有以下定义:int a,b; 则正确的 switch 语句是( ) 。 A.switch(x) B.switch(x) { case1.0:printf(&*\n&); { case1,2:printf(&*\n&); case2.0:printf(&**\n&); case3:printf(&**\n&); } } C.switch (a+b) D.switch (a+b); { case 1: printf(&\n&); { case 1: printf(.&*\n&); case 1+2: printf(&**\n&); case 2: printf(&**\n&); } } ㈢.判断题 1.if 语句中的表达式不限于逻辑表达式,可以是任意的数值类型。( ) ? 2.switch 语句可以用 if 语句完全代替。( ) ? 3.switch 语句的 case 表达式必须是常量表达式。( ) ? 4.switch 语句的各个 case 和 default 的出现次序不影响执行结果。( ) ? 5.在 switch 的 default 语句后面是可以不用写 break 语句的。( )? ㈣.程序设计题 1. 编程实现:输入整数 a 和 b,若 a2+b2 大于 100,则输出 a2+b2 百位以上的数字,否则输出两数之和。 2.用 switch 语句编一程序, 对于给定的一个百分制成绩, 输出相应的五分制成绩, 设: 90 分以上为‘A’,80~ 89 分为‘B’,70~79 分为‘C’,60~69 分为‘D’,60 分以下为‘E’。 3.输入年份 year 和月 month,求该月有多少天。判断是否为闰年,可用如下C语言表达式:year%4==0 && year%100!=0 || year%400==0。若表达式成立(即表达式值为 1),则 year 为闰年;否则,表达式不成立 (即值为 0),year 为平年。 4.编写一个简单计算器程序,输入格式为:data1 op data2。其中 data1 和 data2 是参加运算的两个数,op 为运算符,它的取值只能是+、-、*、/。 5.某单位的奖金税率如下(a 代表奖金,r 代表税率): 奖金数目范围 a&500 500&=a&&=a&&=a&&=a 税率 r 0% 5% 8% 10% 15%请编写程序实现从键盘输入奖金额以后自动计算应缴税金和实得奖金。? 提高篇㈠.填空题 1.设 a=3,b=454,c=0,表达式 !(a+b) + c C1 && b + c/2 运算后的值为________1____。第 21 页 共 64 页 《程序设计基础(C) 》习题指导书2.设 a=3,b=5,c=0 表达式 !( (c&3)&&(b&1))&&!( (a+b)&5&&(b&3)) ||2+b 运算后的值为_______1_____。 3.已知 A=7.5,B=2,C=3.6,表达式 A&B && C&A || A&B && !C&B 的值是 0 。 4.若有以下程序段,当 city 的值为 ‘S’,则输出结果为_Shanghai Guang Xi’an__________。 switch(city) { case ‘B’: printf( “Beijing”);break; case ‘S’: printf( “Shanghai”); case ‘G’: printf( “Guang”); case ‘X’: printf( “Xi/’an”); break; default: printf( “error”); } 5.以下程序的功能是判断输入的某个年份是否为润年。请填空补齐程序。 main() { int y,f; scanf( “%d”,&y); if(y%400==0)f=1; else if(_y%100!=0&&y%4==0______) f=1; else __f=0_____; if(f) printf(“%d is a leap year .\n”,y); else printf(“%d is not a leap year .\n”,y); } 6.将以下含有 switch 语句的程序段改写成对应的 if 形式的语句应该为 。 int x,y,m; y=(int)(x/10) switch(y) { case 10: m=4; case 9: m=3; case 8: m=2; case 7: m=1; default : m=0; } if(y==10) m=4; else if(y==9)m=3; else if(y==8)m=2; else if(y==7)m=1; else m=0; 7.若 a、b、c 均已正确定义且 a=0,b=2,c=3,则以下程序段的输出是___%*_____。 switch(a) { case 0: switch(b) { case 1: printf( “&\n”); case 2: printf( “%%\n”); } case 1: switch(b) { case 1: printf( “$\n”); case 2: printf( “*\n”);第 22 页 共 64 页 《程序设计基础(C) 》习题指导书default : printf( “#”); } } 8.请读程序: #include&stdio.h& main( ) { int x=1, y=0,a=0,b=0; switch(x) {case 1: switch(y) { case 0:a++; case 1:b++; } case 2: a++; b++; } prinf(“a=%d,b=%d”,a,b); } 上面程序的运行结果是_a=2,b=1________ 。 10.以下程序输出 x,y,z 三个数中的最小值,请填空使程序完整。 main ( ) { int x=4,y=5,z=8 ; int u,v; u = x&y ? x :y________ ; v = u&z ? u :z_________; printf (“%d”,v); } ㈡.选择题 1.如果 int a=1,b=2,c=3,d=4;则条件表达式&a&b?a:c&d?c:d&的值是( ) 。 A. 1 B. 2 C. 3 D. 4 2.为判断字符变量 c 的值不是数字也不是字母时,应采用下述表达式( ) 。 A. c&=48||c&=57&&c&=65||c&=90&&c&=97||c&=122 B. !(c&=48||c&=57&&c&=65||c&=90&&c&=97||c&=122) C. c&=48&&c&=57||c&=65&&c&=90||c&=97&&c&=122 D. !(c&=48&&c&=57||c&=65&&c&=90||c&=97&&c&=122) 3.为表示关系 x≥y≥z,应使用 C 语言表达式 ( ) 。 A. (x&=y)&&(y&=z) B.(x&=y)AND(y&=z) C.(x&=y&=z) D.(x&=y)&(y&=z) 4.若 x 和 y 代表整型数,以下表达式中不能正确表示数学关系|x-y|&10 的是( ) 。 A.abs(x-y)&10 B..x-y&-10&& x-y&10 C. @(x-y)&-10||!(y-x)&10 D. (x-y)*(x-y)&100 5.以下程序段中与语句 k=a&b?(b&c?1:0):0;功能等价的是( ) 。 A. if((a&B) &&(b&C) ) k=1; B. if((a&B) ||(b&C) ) k=1 ; else k=0; C. if(a&=B) k=0; D.if(a&B) k=1; else if(b&=C) k=1; else if(b&C) k=1; else k=0;第 23 页 共 64 页 《程序设计基础(C) 》习题指导书6. 有以下程序: main( ) { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) printf(&%d %d %d\n&,i,j,k); } 程序运行后的输出结果是( ) 。 A.1 2 3 B.2 3 4 C.2 2 3 D.2 3 3 7.有以下程序: main( ) { int a=3,b=4,c=5,d=2; if(a&b) if(b&c) printf(&%d&,d++ +1); else printf(&%d&,++d +1); printf(&%d\n&,d); } 程序运行后的输出结果是( ) 。 A. 2 B. 3 C. 43 D. 44 8.当 a=1,b=3,c=5,d=5 时,执行下面一段程序后,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. 1 B. 2 C. 3 D. 6 9.请读程序: #include&stdio.h& main( ) { int x=1, y=0, a=0, b=0; switch(x) { case 1: switch(y) { case 0: a++; case 1: b++; } case 2: a++; b++; } printf(&a=%d, b=%d\n&,a,b); } 上面程序的输出结果是( ) 。 A. a=2, b=1 B. a=1, b=1 C.a=1, b=0 10. 输入 A,以下程序的运行结果是( ) 。 #include &stdio.h&第 24 页 共 64 页D. a=2, b=2 《程序设计基础(C) 》习题指导书void main( ) { ch=getchar( ); switch(ch) {case 65: printf(“%c”,’A’); case 66: printf(“%c” 66); default : printf(“%s\n”, “other”); } } A.A B.ABother C.Aother D.编译错误,无法运行 ㈢.判断题 1.if 语句,switch 语句可以嵌套,而且嵌套的层数没有限制( )。? 3.多个 case 可以执行相同的程序段( )。? 4.内层 break 语句可以终止嵌套的 switch,使最外层的 switch 结束( )。? 5.switch 语句的 case 分支可以使用{ }复合语句,多个语句序列( )。? ㈣.程序设计题 1.编程实现:输入一个整数,判断输入的整数是是否分别被 3、5、7 整除,并输出一下信息: ⑴能同时被 3、5、7 整除; ⑵能被其中两个整除,并指出是哪两个; ⑶能被其中一个整除,并指出是哪个; ⑷不能被任何一个整除。 2.设计程序实现:从键盘输入年月信息后,程序自动计算所输入年月中当月的天数并输出。 3.编写程序实现功能:根据下表中的函数关系,对输入的每个 x 值,计算出相应的 y 值并输出。x x&0 0& x &=10 10& x &=20 20& x &=40 40& xy 0 x 10 -0.5x+20 x/10+34.通过键盘输入字符,将输入的字符分为控制、数字、大写字母、小写字母、转义字符、其它字符等六类, 并给出相应的信息说明。 5.编写一个程序根据用户输入的三角形的三边判定三角形的类型并求其面积(设三角形的三变为 a、b、c , 是否能组成三角形的条件:a+b&c&&a+c&b&&b+c&a ;如果组成三角形 ,判断是什么类型三角形? 等边三角 形、等腰三角形、直角三角形 一般三角形,最后计算机三角形面积)。第四章 循环结构程序设计一.知识点1.循环的概念,C 实现循环的方法; 2.goto 语句,注意标号的书写; 3.while 语句,注意条件表达式的设计; 4.do??while 语句,注意条件表达式的设计,及 while 之后的分号; 5.for 语句,注意 for 中三个表达式的一般含义; 6.循环的嵌套;第 25 页 共 64 页 《程序设计基础(C) 》习题指导书7.break 与 continue 语句,注意二者之间的区别; 8.循环结构程序设计思想。二.习题 ? 基础篇㈠.填空题 1.已知执行语句 while(i++&4);后变量 i 的值为 不确定 。 2.下面的 for 循环语句最多可执行 4 次。 for(x=0,y=0;(y!=99)&&(x&4);x++) 3.循环语句 for(i=0;i&5;i++)printf(&%d&,9-i)的执行结果是 98765 。 4.以下循环体中对循环变量 i 的值不改变,要使循环重复 5 次,则 for 语句的格式为: for(i=0;i&10; i=i+2 ){? ?} 5.有如下循环,则循环次数是 无限次 。 t=1; while(t=1)t=0; 6.以下程序段的输出结果 y=7,x=21 。 x=y=0;while(x&20)y++,x+=3; printf( “y=%d,x=%d\n” ,y,x) ; 7.当执行以下程序段后,i 的值是 5 、j 的值是 4 、k 的值是 6 。 int a,b,c,d,i,j,k;a=10;b=c=d=5;i=j=k=0; for( ;a&b;++b)i++; while(a&++c) j++; do k++;while(a&d++) ; 8.以下程序段的输出结果 16 。 int k,m,n;n=10;m=1;k=1; while( (k+=2)&=n) m*=2; printf( “%d\n” ,m) ; 9.以下程序的输出结果为 -1 。 main() { int x=2;while(x--) ;printf( “%d\n” ,x) ;} 10.以下程序段的输出结果 11 。 int i=0,sum=1;do{ sum+=i++;}while(i&5) ;printf( “%d\n” ,sum) ; 11.下面程序的功能是读入 20 个整数,统计非负数个数,并计算非负数之和。 #include &stdio.h& main( ) { int i,a[20],s, s=count=0; for(i=0;i&20;i++) scanf(&%d&, &a[i] ); for(i=0;i&20;i++) { if(a[i]&O) continue ; s 十=a[i]; count++: } printf(&s=%d\t countt=%d\n&,s,count); } 12.下面程序的运行结果是 s=254 。 #include&stdio.h&第 26 页 共 64 页 《程序设计基础(C) 》习题指导书main( ) {int a,s,n, a=2; s=O; n=1;count=1; whiIe(count&=7) { n=n*a; s=s+n; ++ printf(&s=%d&,s); } 13.等差数列的第一项 n=2,公差 d=3,下面程序的功能是在前 n 项和中,输出能被 4 整除的所有的和。请填 空。 #include&stdio.h& main( ) {int a,d, a=2;d=3;sum=0; do {sum+=a; a+=d; if( sum%4==0 )printf(&%d\n,sum); }while(sum&200); } 14.当运行以下程序时,从键盘输入 1 2 3 4 5 -1&cR&(&CR&表示回车),则下面程序的运行结果是 k=15 n=-1 。 #indude&stdio.h& main() {int k=O,n; do{scanf(&%d&,&n);k+=n;}while(n!=-1); printf(&k=%d n=%d\n&,k,n); } 15.下面程序段是找出一个整数的所有因子,请填空。 scanf&%d&,&x); i=1; for(;i&=) {if(x%i==0)printf(&%3d&,i); i++; } ㈡.选择题 1.以下程序段的输出结果是( ) 。 A.9 B.1 C.11 D.10 int k,j,s; for(k=2;k&6;k++,k++){ s=1;for(j=k;j&6;j++) s+=j;} printf(“%d”,s); 2.以下程序段的输出结果是( ) 。 A.12 B.15 C.20 D.25 int i,j,m=0; for(i=1;i&=15;i+=4) for(j=3;j&=19;j+=4〉m++; printf( “%d\n” ,m) ; 3.以下程序段的输出结果是( ) 。 A.10 B.9 C.10 D.9第 27 页 共 64 页 《程序设计基础(C) 》习题指导书9 8 8 7 7 6 int n=10;while(n&7){ n--;printf( “%d\n” ,n) ;} 4.以下程序段的输出结果是( ) 。 A.1 B.3 0 C.1 -2 D.死循环 int x=3;do { printf( “%3d” ,x-=2) ;}while(! (--x) ) ; 5.以下程序的输出结果是( ) 。 A.15 B.14 C.不确定 D.0 main() { int i,sum;for(i=1;i&6;i++)sum+=sum;printf( “%d\n” ,sum) ;} 6.C 语言中有关循环描述正确的是( ) 。 A.不能使用 do-while 语句构成的循环 B.do-while 语句构成的循环必须使用 break 语句才能退出 C.do-while 语句构成的循环,当 while 语句中的表达式值为非零时结束循环 D.do-whilc 语句构成的循环,当 while 语句中的表达式值为零时结束循环 7.以下描述正确的是( ) 。 A.continue 语句的作用是结束整个循环的执行 B.在循环体内和 switch 语句体内都可以使用 break 语句 C. 在循环体内使用 break 语句和 continue 语句的作用相同 D. 从多重循环嵌套中退出时,只能使用 goto 语句 8.与 while(e);等价的 for 循环语句为( )。 A. for(e=0;e==0;); B. for(;e;); C. for(e;;) D. for(;;e++); 9.while(ch=getchar( ));执行的次数是( ) 。 A.0 B.有限次 C.由循环体的内容决定 D.死循环 10.以下程序的执行结果为( ) 。 main( ) { int i,j; for(i=1;i&100;i++) if(i%10==0) printf(“%d \t”,i); } A.100 B.1 2 3 4 5 6 7 8 9 10 C.10 20 30 40 50 60 70 80 90 D.1 2 3 4 ?? 98 99 11.下面有关 for 循环的正确描述是( ) 。 A.for 循环只能用于循环次数已经确定的情况 B.for 循环是先执行循环体语句,后判断表达式 C.在 for 循环中,不能用 break 语句跳出循环体 D.for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 12.以下程序段,则该循环是一个( ) 。 x=-1; do{x=x*x;}while(!x); A.是死循环 B.循环执行二次 C.循环执行一次 D.有语法错误 13.以下描述中正确的是( ) 。 A.由于 do-while 循环中循环体语句只能是一条可执行语旬,所以循环体内不能使用复合语句 B.do-while 循环由 do 开始,用 while 结束.在 while(表达式)后面不能写分号第 28 页 共 64 页9 88 7 《程序设计基础(C) 》习题指导书C.在 do-while 循环体中,一定要有能使 while 后面表达式的直值为零(”假”)的操作 D.do-while 循环中,根据情况可以省略 while 14.执行语句 for(i=1;i++&4;);后变量 i 的值是( )。 A.3 B.4 C.5 D.不确定 15.若 i 为整型变量,则以下循环执行次数是( )。 for(i=2:i==0;) printf(“%d\n”,i--); A.无限次 B.0 次 C.1 次 D .2 次 16.语句 while(!E);中的表达式 E 等价于( )。 A.E==O B.E!=1 C.E!=0 D. E==l 17.设有程序段: int k=10;C 语言中 while 和 do while 循环的主要区别是( )。 A.do-while 的循环体至少无条件执行一次 B.while 的循环控制条件比 do-while 的循环控制条件严格 C.do-while 允许从外部转到循环体内 D.do 一 while 的循环体不能是复合语句 18.while(k=0) k=k-l;则下面描述中正确的是( )。 A.while 循环执行 10 次 B.循环是无限循环 C.循环体语句一次也不执行 D.循环体语句执行一次 ㈢.程序设计题 1.编写程序,求 1-3+5-7+?-99+101 的值。 2.求 1+2+3+?+100 的值。 3.把 100~200 之间的不能被 3 整除的数输出。 4. 输入 10 整数,计算它的平均值。 5. 编程打印 2000 至 3000 年所有的闰年。 -5 6. 编程计算 1/2+1/4+1/8+1/16+??的近似值(要求进度为 10 ) 。 7. 有个数.被 3 陈余 2,被 5 除 3,被 7 除余 2,问满足该条件的数至少是多少。 8. 连续输入 n 个整数,要求找出其中的最大数和最小数。 9. 编写程序,输出用一元人民币兑换成 1 分,2 分和 5 分硬币的不同兑换方法。? 应用篇㈠.填空题 1.有以下程序段: s=1.0;for(k=1;k&=n;k++)s=s+1.0/(k*(k+1) ) ;printf( “%f\n” ,s) ; 要使下面的程序段的功能与上面程序段的功能相同,请填空: s=0.0;k=0; d=1 ; do{ s=s+d; k=k+1 ;d=1.0/(k*(k+1) ) ;}while( k&=n ) ; printf( “%f\n” ,s) ; 2.下列程序段中,for 循环的循环次数为 0 。 a=2;b=10;for(i=b;i&=a;i--,a++) printf( “%3d” ,i) ; 3.鸡兔共有 30 只.脚共有 80 个,下面程序段是计算鸡免各有多少只,请填空, for(x=1;x&=29;x++) {y=30-x; if( 2*x+4*y==80 )printf(&%d,%d\n&,x,y); } 4.下面程序的运行结果是 。 #include&stdio.h&第 29 页 共 64 页 《程序设计基础(C) 》习题指导书main( ) { int i; for(i=1;i&=5;i++) switch(i%2) { case 0:i++;printf(&#&);break; case 1:i+=2;printf(&*&); default:printf(&\n&); } } 答案: * # 5.下面程序的运行结果是 1,-2 。 #include&stdio.h& main( ) { int y,a; y=2;a=1; while(y--!=-1) { do(a*=y; a++; }while(y--);} printf(&%d,%d&,a,y); } 6.下面程序的功能是打印 100 以内个位数为 6 且能被 3 整除的所有数。请填空。 #include&stdio.h& main( ) {int i,j; for(i=0; i&10 ;i++) {j=i*10+6; if( j%3==0 )continue; printf(&%d&,j); } ㈡.选择题 1.以下程序的输出结果是( ) 。 A.741 B.852 C.963 D.875421 main(){ int y=10; for( ;y&0;y--)if(y%3==0){ printf( “%d” ,--y) ;continue;} } 2.以下叙述正确的是( ) 。 A.do_while 语句构成的循环不能用其它语句构成的循环来代替。 B.do_while 语句构成的循环只能用 break 语句退出。 C.用 do_while 语句构成循环时,只有在 while 后的表达式为非零时结束循环。 D.用 do_while 语句构成循环时,只有在 while 后的表达式为零时结束循环。 3.以下程序的输出结果是( ) 。 A.39 81 B.42 84 C.26 68 D.28 70 main() { int x,i; for(i=1;i&=100;i++) { x=i;if(++x%2==0)if(++x%3==0)if(++x%7==0)printf( “%d ” ,x) ;}第 30 页 共 64 页 《程序设计基础(C) 》习题指导书printf( “\n” ) ; } 4.对下面程序段描述正确的是( ) 。 A.while 循环执行了 10 次 B.循环是无限循环 C.循环体语句一次也不执行 D.循环体语句只执行一次 int x=10;while(x=0)x=x-1; 5.以下关于 for 循环的正确描述是( ) 。 A.for 循环只能用于循环次数已确定的情况 B.for 循环是先执行循环体语句,后判断表达式 C.在 for 循环中,不能用 break 语句跳出循环体 D.for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 6. 若有以下语句: int x=3; do{ printf(&%d\n&,x-=2); )while(!(--x)); 则以上程序输出结果是( ) 。 A.输出的是 1 B.输出的是 1 和-2 C.输出的是 3 和 0 D.是死循环 7.下列循环语句中有语法错误的是( ) 。 A. while(x==y)5; B. while(0); C. do{ 2;}while(x==11); D. do{ x++}while(x==1O); 8.已知 char ch;执行语句&while(ch=getchar()!='\n');&时输入:abcde&回车&后, 变量 ch 的值是( ) 。 A. ch='e' B. ch='\n' C.ch='0' D. ch=NULL 9.下面程序的运行结果是( ) 。 #include&stdio.h& main( ) {int y=10; do{y--;}while(--y); printf(&%d\n&,y-- ); } A.-l B.l C.8 D.0 ㈢.程序设计题 1.求 Fibonacci 数列前 40 个数。 2.打印 1000 以内的所有素数。 3.利用辗转相除法计算输入的两个数 m,n 的最大公约数。 4.输入一个数 n,输出这个数的所有因子。 5.编程打印如下图形(行数 n 由键盘输入): * * * * * * * * * * 6.利用近似公式 e≈1/1!+1/1!+??+l/n!,计算自然对数的底 e 的近似值(n 从键盘输入,n&10)。 7.编写程序求 1000 以内的所有完全数。(说明:一个数如果恰好等于它的因子之和(除自身外),则称该数为 完全数,例如:6=l+2+3,6 为完全数。 8.每个苹果 0.8 元,第一天买 2 个苹果,第二天开始,每天买前一天的 2 倍,直至购买的苹果个数达到不超 过 l00 的最大值。编写程序,求每天平均花多少钱?第 31 页 共 64 页 《程序设计基础(C) 》习题指导书 ? 提高篇㈠.填空题 1.以下程序段的输出结果 8*6*4*2*0 回车 8*6*4*2*0 。 for(i=0;i&3;i++,i++) { for(j=10;j&0;j--) { if( (j+i)%2){ j--;printf( “*%d ” ,j) ;continue;} --j;--j;printf( “%d ” ,j) ;} printf( “\n” ) ;} 2.以下程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结 束输入。请填空: main() { float x,amax,amin; scanf( “%f” ,&x) ;amax=x;amin=x; while( x&0 ) { if(x&amax)amax=x; if( x&amin )amin=x; scanf( “%f” ,&x) ;} printf( “\namax=%f\namin=%f\n” ,amax,amin) ; } 3.以下程序段的输出结果 。 a=10;y=0; do { a+=2;y+=a; printf( “a=%d,y=%d\n” ,a,y) ; if(y&50)break;}while(a=14) ; 答案: a=2,y=12 a=16,y=28 a=16,y=44 a=16,y=60 ㈡.选择题 1.阅读程序.写出程序的输出结果( ) 。 #include&stdio.h& main() { char i,j: for(i='0',j='9';i&j;i++,j--) printf(&%c%c&,i,j); printf(&\n&); A.
C. D. 以上三个答案均不对 2 2 2 2 2.求取满足式 l 十 2 十 3 十? ? ? ? ? ?十 n ≤1000 的 n.正确的语句是( ) 。 A. for(i=1,s=0;(s=s+i*i)&=l000;n=i++) B.for(i=1,s=0;(s=s+i*i)&=l000;n=++i) C.for(i=1,s=0;(s+++i*i)&=l000;n=i) D.for(i=1,s=0;(s=s+i*i++)&=l000;n=i) 3.下列程序段中是死循环的是( ) 。 A.int n=1;while(!n)n++; B.int n=1;do { n--;}while(n) ;第 32 页 共 64 页 《程序设计基础(C) 》习题指导书C.int n=1;do { n++;}while(n) ; D.for(n=5;n&1; ) ; 4.以下能正确计算 1w2w3w?w10 的程序段是( ) 。 A.do { k=1;n=1;n=n*k;k++;}while(k&=10) ; B.do { k=1;n=0;n=n*k;k++;}while(k&=10) ; C.k=1;n=1;do { n=n*k;k++;}while(k&=10) ; D.k=1;n=0;do { n=n*k;k++;}while(k&=10) ; 5.若 x 是 int 型变量,以下程序段的输出结果是( ) 。 A.**3 B.##3 C.##3 D.**3##4 ##4 **4 **4##5 **5 **5 ##5 for(x=3;x&6;x++)printf( (x%2)?( “**%d” ) : ( “##%d\n” ) ,x) ; 6.以下程序的输出结果是( ) 。 A.*#*#*#$ B.#*#*#*$ C.*#*#$ D.#*#*$ main() { int i; for(i=1;i&=5;i++) { if(i%2)printf( “*” ) ;else continue; printf( “#” ) ;} printf( “$\n” ) ; } ㈢.程序设计题 1.设 100 以内能被 3 整除的所有数之和为 s1,能被 4 整除的数为 s2,判断 s1 和 s2 的大小。 2.试编程序,找出 1 至 99 之间的全部同构数。同构数是这样一组数:它出现在平方数的右边。例如:5 是 25 右边的数,25 是 625 右边的数,5 和 25 都是同构数。2 x sin( x ) 3.使用梯形法计算 ? 0 e dx 的值。4.利用二分法计算 x3+x*sin(x)-2=0 在区间(0,2)的近似解。 5.编写程序求解下式中各字母所代表的数字。 P E A R - A R A P E A第五章 数组及其应用一.知识点1.数组的概念与定义; 2.数组的初始化; 3.数组元素的引用; 4.字符数组的定义、使用、字符串处理函数; 5.数组数据的一般处理方式。二.习题 ? 基础篇㈠.填空题 1.若有定义:double w[10];则 w 数组元素下标的上限是 9 2.以下程序的输出结果是 12 。 main() { int arr[10],i,k=0;第 33 页 共 64 页,下限是0。 《程序设计基础(C) 》习题指导书for(i=0;i&10;i++) arr[i]=i; for(i=0;i&4;i++) k+=arr[i]+i; printf( “%d\n” ,k) ; } 3.以下程序的输出结果是 -850,2,0 。 main() { int i,j,row,col,m; int arr[3][3]={{100,200,300},{28,72,-30},{-850,2,6}}; m=arr[0][0]; for(i=0;i&3;i++) for(j=0;j&3;j++) if(arr[i][j]&m){ m=arr[i][j];row=i;col=j;} printf( “%d,%d,%d\n” ,m,row,col) ; } 4.在 C 语言中,二维数组元素在内存中的存放顺序是 先行后列 。 5.若二维数组 a 有 m 列,则计算任一元素 a[i][j]在数组中相对位置的公式为 i*m+j+1 。 6. 若有定义: int a[3][4]={{1, 2}, {0}, {4, 6, 8, 10}}; 则初始化后, a[1][2]得到的初值是 0 , a[2][1] 得到的初值是 6 。 7.若有说明 char s[20];如果想从键盘上把字符串“This is a book.”输入到数组 s 中,应当调用的函数 是 gets() ;函数调用语句的形式是 gets(s); 。 8.若有 char str1[20]={“a good”},str2[ ]={“ student”};能把 str2 中的字符串接到 str1 中的字 符串后面的函数调用语句是 strcat(str1,str2); 。 9.若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值为______ 0_____。 10.若有定义 int a[2][5],则整型数组 a 包含有 _____10 _____个元素。 11.若有说明:int a[ ][3]={1,2,3,4,5,6,7};则 a 数组第一维的大小是____ 3____。 12.若二维数组 a 有 m 列,则在 a[i][j]前的元素个数为____ _i*m+j_____。 14.下面程序段的运行结果是 ab 。 char c[5]={'a','b','\0','c','\0'}; printf(&%s&,c);} 15.下面程序段的运行结果是 C 。 char a[7]=&abcdef&; char b[4]=&ABC&; strcpy(a,b); printf (&%c&,a[2]); 16.判断字符串 s1 是否大于字符串 s2 应当使用语句 if(strcmp(s1,s2)&0) 。 ㈡.选择题 1.以下程序的输出结果是( ) 。 A.不确定的值 B.3 C.2 D.1 main() { int n[2]={0},i,j,k=2; for(i=0;i&k;i++) for(j=0;j&k;j++)n[j]=n[i]+1; printf( “%d\n” ,n[k]) ;} 2.以下对一维数组 a 的正确说明是( ) 。 A.char a(10) ; B.int a[ ]; C.int k=5,a[k]; D.char a[ ]={‘a’ , ‘b’ , ‘c’}; 3.若有说明语句:int a[2][4];则对 a 数组元素的正确引用是( ) 。 A.a[0][3] B.a[0][4] C.a[2][2] D.a[2][2+1] 4.以下能对二维数组 y 进行正确初始化的语句是( ) 。第 34 页 共 64 页 《程序设计基础(C) 》习题指导书A.int y[2][ ]={{ 1,0,1 },{ 5,2,3 }}; B.int y[ ][3]={{1,2,3},{4,5,6}}; C.int y[2][4]={1,2,3},{4,5},{6}; D.int y[ ][3]={{1,0,1,0},{ },{1,1}}; 5.若有说明语句:int y[ ][4]={0,0};则下面不正确的叙述是( ) 。 A.数组 y 的每个元素都可以得到初值 0; B.二维数组 y 的行数为 1; C.该说明等价于 int y[ ][4]={0}; D.只有元素 y[0][0]和 y[0][1]可得到初值 0,其余元素均得不到初值 0; 6.若有说明语句:int a[ ][3]={1,2,3,4,5,6,7,8};则 a 数组的行数为( ) 。 A.3 B.2 C.无确定值 D.1 7.若有以下语句,则正确的描述是( ) 。 char x[ ]=“12345” ;char y[ ]={‘1’ , ‘2’ , ‘ 3’ , ‘4’ , ‘5’}; A.x 数组与 y 数组的长度相同 B.x 数组长度大于 y 数组长度 C.x 数组长度小于 y 数组长度 D.x 数组等价于 y 数组 8.下面程序段的运行结果是( ) 。 A. ‘a’ ‘b’ B.ab C.ab c D.abc char c[5]={‘a’ , ‘b’ , ‘\0’ , ‘c’ , ‘\0’};printf( “%s” ,x) ; 9.有两个字符数组 a、b,则以下能正确为 a、b 进行赋值的语句是( ) 。 A.gets(a,b) ; B.scanf( “%s%s” ,&a,&b) ; C.getchar(a) ;getchar(b) ; D.gets(a) ;gets(b) ; 10.有字符数组 s1[80]和 s2[80],则以下能正确对 s1、s2 进行输出的语句是( ) 。 A.puts(s1,s2) ; B.printf( “%s,%s\n” ,s1,s2) ; C.putchar(s1,s2) ; D.puts(s1) ,puts(s2) ; 11.下面描述正确的是( ) 。 A.两个字符串所包含的字符个数相同时,才能比较字符串; B.字符个数多的字符串比字符个数少的字符串大 C.字符串“STOP ”与“STOP”相等 D.字符串“That”小于字符串“The” 12.以下对字符数组的描述中错误的是( ) 。 A.字符数组中可以存放字符串 B.字符数组中的字符串可以整体输入、输出 C.可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 D.不可以用关系运算符对字符数组中的字符串进行比较 13.语句 printf( “%d\n” ,strlen( “school” ) ) ;的输出结果是( ) 。 A.7 B.6 C.存在语法错误 D.不定值 14.有语句 char s1[10],s2[10]={“books”};则能将 s2 的值正确赋给 s1 的语句是( ) 。 A.s1={“books”}; B.strcpy(s1,s2) ; C.s1=s2; D.strcpy(s2,s1) ; 15.若有说明:int a[3][4]; 则对 a 数组元素的正确引用是( ) 。 A. a[2][4] B. a[1,3] C. a[1+1][0] D. a(2)(1) 16.若有说明:int a[] 「4]={0,0};则下面不正确的叙述是( ) 。 A.数组 a 的每个元素都可得到初值 0 B.二维数组 a 的第一维大小为 1 C.因为二维数组 0 中第二维大小的值除以初值个数的商为 1,故数组 a 行数为 1 D.只有元素 a[0] 「0」和 a[0] 「1」可得初值 0,其余元素均得不到初值 0 17.若有说明:int a[3] 「4] ;则数组 a 各元素( ) 。 A.可在程序的运行阶段得到初值 0 B.可在程序的编译阶段得到初值 0 C.不能得到确定的初值 D.可在程序的编译或运行阶段得初值 0 ㈢.判断题 1.数组的长度是固定的。( )?第 35 页 共 64 页 《程序设计基础(C) 》习题指导书2.若有说明:int a[3][4],则 a[1+1][0]不是对 a 数组元素的正确引用。( )? 3.char a[]={0,1,2,3,4,5,6}是正确的数组说明语句。( )? 4.字符串“this”大于字符串“that” 。( )? 5.C 语言的数组名是一个地址常量,不能对它进行加、减和赋值运算。( )? ㈣.程序设计题 1.编写程序打印九九乘法表。 2.打印杨辉三角形的前 10 行。 3.用选择排序法对十个随机整数进行排序。 4.编程求一个 3×3 矩阵对角线元素之和。 5.Fibonacci 数列为 1、1、2、3、5、8、13、??,编程输出该数列的前 20 项。? 应用篇㈠.填空题 1.以下 findmax 函数返回数组 s 中最大元素的下标,数组中元素的个数由 t 传入,请填空。 findmax(int s[ ],int t) { int k,p; for(p=0,k=p;p&t;p++) if(s[p]&s[k]) k=p ; return k ; } 2.以下程序统计从终端输入的字符中每个大写字母的个数,num[0]中统计字母 A 的个数,其它依次类推。 用#号结束输入,请填空。 #include “stdio.h” #include “ctype.h” main() { int num[26]={0},i; char c; while(c=getchar()!=‘#’ ) if(isupper(c) ) num[ c-‘A’ ]+=1; for(i=0;i&26;i++) if(num[i]) printf( “%c: %d\n” ,i+‘A’ ,num[i]) ; } 3.以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。 请填空。 main( ) { int i,a[20],sun, suum=count=0; for(i=0;i&20;i++) scanf(&%d&, &a[i] ); fro(i=0;i&20;i++) { if(a[i]&0) { count++; sum+= a[i] ; } } printf(&sum=%d,count=%d\n&,sum,count); } 4.以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生 成绩,用输入负数结束输入。请填空。第 36 页 共 64 页 《程序设计基础(C) 》习题指导书main( ) { float x[1000], sum=0.0, ave, a; int n=0, i; printf(&Enter mark:\n&);scanf(&%f&,&a); while(a&=0.0&& n&1000) { sum+=a; x[n]=a ; n++; scanf(&%f&,&a); } ave= sum/n ; printf(&Output:\n&); printf(&ave=%f\n&,ave); for( i=0;i& n;i++ ) if(x[i]&ave ) printf(&%f \n&,x[i]); } 5.函数 YangHui 的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下 1 11 121
其构成规律是:第 0 列元素和主对角线无素均为 1,其余元素为其左上方和正上方元素之和, 数据的个数每行递增 1。请将程序补充完整。 #defint N 6 void YangHui(int *x[N][N]) { int i,j; x[0][0]=1 for(i=1;i&N;I++) { x[i][0]=x[i][i] =1; for(j=1;j&i;j++) x[i][j]= x[i-1][j-1]+x[i-1][j] ; } } 6.以下程序运行后的输出结果是 main( ) { int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i&3;i++) for(j=i+1;j&3;j++) a[j][i]=0; for(i=0;i&3;i++) { for(j=0;j&3;j++) printf(&%d &,a[i][j]); printf(&\n&); } } 答案: 123 056 009第 37 页 共 64 页 《程序设计基础(C) 》习题指导书㈡.选择题 1.若二维数组 y 有 m 列,则在 y[i][j]前的元素个数为( ) 。 A.j*m+i B.i*m+j C.i*m+j-1 D.i*m+j+1 2.下面程序(每行程序前面的数字表示行号)中( ) 。 1 main( ) 2 { 3 int a[3]={3*0}; 4 5 for(i=0;i&3;i++) scanf(&%d&,&a[i]); 6 for(i=1;i++) a[0]=a[0]+a[i]//此行有错 7 printf(&%d\n&,a[0]); A.没有错误 B.第 3 行有错误 C.第 5 行有错误 D.第 7 行没有错误 3.下面程序 (每行程序前面的数字表示行号) 中( ) 。 1 main( ) 2 { 3 float a[10]={0.0}; 4 int i; 5 for(i=0;i&3;i++) scanf(&%d&,&a[1]); 6 for(i=0;i&10;i++) a[0]=a[0]+a[i]; 7 printf(&%d\n&,a[0]); 8 } A.没有错误 B.第 3 行有错误 C.第 5 行有错误 D.第 7 行有错误 4.下面程序有错的行是( ) 。 1 main( ) 2{ 3 int a[3]={1}; 4 5 scanf(&%d&,&a); 6 for(i=1;i&3;i++) a[0]=a[0]+a[i]; 7 printf(&a[0]=%d\n&,a[0]); 8 } A.3 B.6 C.7 D.5 5.下面程序(每行程序前面的数字表示行号) 中( ) 。 1 main( ) 2 { 3 int a[3]={0}; 4 5 for(i=0;i&3;i++)scanf(&%d&,&a[i]); 6 for(i=1;i&4;i++)a[0]=a[0]+a[i]; 7 printf(&%d\n&,a[0]); 8 } A.没有错误 B.第 3 行有错误 C.第 5 行有错误 D.第 6 行有错误 6. 有以下程序 #include &stdio.h& #include &string.h& main( )第 38 页 共 64 页 《程序设计基础(C) 》习题指导书{ char a[7]=&China&; int i,j; i=sizeof(a); j=strlen(a); printf(&%d %d\n&,i,j); } 程序运行后的输出结果是( ) 。 A. 5 5 B. 7 6 C. 7 5 D. 6 6 7.以下程序的输出结果是( ) 。 main( ) { int i,x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i&3;i++) printf(&%d,&,x[i][2-i]); } A. 1,5,9, B. 1,4,7, C. 3,5,7, D. 3,6,9, 8.对两个数组 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 长度相同 ㈢.判断题 1.若 int a[2][2]={{1},{2,3}};则 a[0][1]的值为 0。( )? 2. 有如下说明语句 int a[10]={6,7,8,9,10};因为数组长度与初值的个数不相同,所以此语句不正确。 ( )? 3.字符个数多的字符串比字符个数少的字符串大。( )? 4.字符数组的字符串可以整体输入、输出。( )? 5.可以在赋值语句中通过赋值运算符&=&对字符数组整体赋值。( )? ㈣.程序设计题: 1.用随机函数产生 20 个 100 以内的整数,用选择法对它们排序。 2.用随机函数产生 50 个 200 以内的整数,用冒泡法对它们排序。 3.有一篇文章,共有 3 行文字,每行有 80 个字符。要求统计出其中英文大写字母、小写字母、数字、空格 以及其他字符的个数。 4.查找数组数据中的最大元素和次大元素。 5.编程从输入的 10 个数中,去掉一个最大数和一个最小数,求剩余数的平均值。 6.编程输入 5 个字符串,要求按从小到大的顺序排序并输出。 (排序方法不限) 。? 提高篇㈠.填空题 1.若有以下程序 main( ) { int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}}; int i,j,s=0; for(i=0;i&4;i++) { for(j=0;j&4;j++) { if(a[i][j]&0) if(a[i][j]==0)第 39 页 共 64 页 《程序设计基础(C) 》习题指导书s+=a[i][j]; } } printf(&%d\n&,s); } 执行后输出的结果是 58 。 2.若有定义语句:char s[100],d[100];int j=0;且 s 中已赋字符串,请填空以实现字符串拷贝。 (注意: 不得使用逗号表达式) while(s[i]) {d[j]= s[i++] ;j++} d[j]=0; 3. 以下程序的功能是将字符串 s 中的数字字符放入 d 数组中,最后输出 d 中的字符串。例如,输入字符串: abc123edf456gh,执行程序后输出:123456。请填空。 #include #include main( ) { char s[80], d[80]; int i,j; gets(s); for(i=j=0;s[i]!='\0';i++) if( s[i]&=’0’&&s[i]&=’9’ ) { d[j]=s[i]; j++; } d[j]='\0'; puts(d); } 4.函数 fun 的功能是:使一个字符串按逆序存放,请填空 void fun (char str[]) { int i,j; for(i=0,j=strlen(str);i& j-1 ;i++,j--) { m=str[i]; str[i]= str[j-1] ; str[j-1]=m; } printf(&%s\n&,str); } 5.以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的 ASCII 码之差,例如:输入的两个字符串分别为 abcdef 和 abceef,则输出为-1。请填空: #include main( ) { char str1[100],str2[100],c; int i,s; printf(&\n input string 1:\n&); gest(str1); printf(&\n input string 2:\n&); gest(str2); i=0; while((strl[i]==str2[i]&&(str1[i]!= ’\0’ )) i++; s= str1[i]-str2[i] ; printf(&%d\n&,s); } 6. 有

我要回帖

更多关于 scanf int 的文章

 

随机推荐