1、典型试题详解 1.以下叙述正确的是________. A)构成C程序的基本单位是函数. B)可以在函数中定义另一个函数. C)main( )函数必须放在其他函数之前. D)所有被调用的函数一定要在调用之前进行定义. 2.一个C程序中________。 A)main函数必须出现在所有函数之前 B)main函数可以在任何地方出现 C)main函数必须出现在所有函数之后 D)main函数必须出现在固定位 3. 以下叙述中正确的是________. A)C语言比其他语言高级. B)C语言可以不用编译就能被
2、计算机识别执行. C)C语言以接近英国国家的自然语言和数学语言为语言的表达形式. D)C语言出现最晚,具有其他语言的一切优点. 4. C语言中用于结构化程序设计的三种基本结构是___. A)顺序结构、选择结构、循环结构 B)if、switch、break C)for、while、do-while D)if、for、continue 第1章 基本概念 习 题 1. 一个C语言源程序中 ( ) A) 必须有一个主函数. B ) 可以有多个主函数. C ) 必须有主函数和其他函数 D) 可
3、以没有主函数。 2.以下说法中正确的是 ( ) A) C程序总是从第一个定义的函数开始执行. B) 在C程序中,要调用的函数必须在main( ) 函数中定义. C) C程序总是从main( )函数开始执行. D) C程序中的main( )函数必须放在程序的开始部分。 3.以下叙述不正确的是 . A) 一个C源程序必须包含一个main函数 B) 一个C源程序可由一个或多个函数组成. C) C程序的基本组成单位是函数. D) 在C程序中, 注释说明只能位于一条语句的后面.
4、 4.以下叙述正确的是 A) 在对一个C程序进行编译的过程中,可发现注释中的拼写错误. B) 在C程序中,main函数必须位于程序的最前面 C) C语言本身没有输入输出语句 D) C程序的每行中只能写一条语句. 5.下列四组选项中,均不是C语言关键字的选项是 。 A) define IF type B) getc char printf C) include case scanf D) while go pow 6.下列四组选项中,均是
5、不合法的用户标识符的选项是 。 A) W P_0 do B) b-a goto int C) float la0 _A D) -123 abc TEMP 7.下列四组选项中,均是不合法的用户标识符是 。 A) W P_0 do B) b-a goto int C) float la0 _A D) -123 abc TEMP 二、程序分析题 1. 写出下列程序的输出结果。 main(
6、 ) { printf("\n"); printf("Good morning,everyone!\n"); printf("Good morning,Mr.Zhong!\n"); } 三、填空题 1. C程序是由 构成的,其中有且只能有一个 函数,该函数名为 。 2. 用高级语言编写的程序称为 程序,它要经过 程序一次翻译产生 程序然后执行,或经过 程序翻译一句执行一句的方式执行。 3. C语言源程序文件名的后辍是 ,经过编译后,生成文件的后辍是
7、 ,经过连接后,生成文件的后辍是 。 四、编程题 1. 编写一个C程序,输入a,b,c三个实数值,计算并输出基平均值ave=(a+b+c)/3. 2. 请参照例题,编写一个C程序,输出以下信息。 ********************************************* Hello , World! ********************************************* 3 C语言以函数为程序的基本单位,有什么优点? 4. 如何给
8、C源程序加注释? 5. C语言中,表达式和表达式语句有什么关系? 6. 在C语言的编辑状态下,如何实现块的定义、复制、移动和删除? 7. 在C语言的编辑状态下如何获取帮助? 8. 在C语言的编辑状态下如何打开功能菜单? 习题 -- 算法 1 名词解释:程序、数据、数据结构、数据类型。 2 什么叫算法?它具有哪些特点? 3 程序设计的一般步骤是什么? 4 结构化程序设计的方法有哪些特点? 1. 算法具有五个特性,以下选项中不属于算法特性的是________。 A)有穷性 B)简洁性 C)可行性 D)确定性
9、解答题 设计算法并用传统流程图表示出来。 1. 从键盘输入一个圆的半径,计算圆的周长和面积。 2. 计算1~100之间整数的和。 3. 求5!的算法用流程图表示。 4. 将例2.2的算法用流程图表示。将50个学生之中成绩在80分以上的学号和成绩输出。 5. 将例2.3 判定2000---2005年中的每一年是否闰年的算法用流程图表示。 6. 将例2.4的算法用流程图表示。求1-1/2+1/3-1/4+…+1/99-1/100 7. 将例2.5判断素数的算法用流程图表示。 习 题 三 1.下列符号属于c语言用户标识符的是( ) A) do
10、 B) IF C) while D) for 2.下列数据中不合法的c实数是( ) A) 3e-5 B) .6 C) 5. D) 4e3.5 3. 下列数据中合法的C字符常数是( ) A) ’as’ B ) ”a” C) ’\123’ D) ’\’ 4. 表达式(int)33.0/5的结果为 A) 6 B) 6.6 C) 7 D) 以上都不对 以下选项中可作为C语言合法整数的是 ( ) A、10110B B、0386
11、 C、0Xffa D、x2a2 若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是( ) A、 1 B、 2 C、 2.0 D、 2.5 5. 表达式(int)33.0/5.0的结果为 A) 6 B) 6.6 C) 7 D) 以上都不对 6. 表达式37/5的值为: A) 7 B ) 7.4 C) 8 D) 以上都不对。 7. 设有int a=4;b=3;c=2; printf(“%d,%d,%d”,(a,b,c),b,c); 的输出结果为
12、 A) 4,3,2 B) 3,3,2 C) 2,3,2 D) 以上都不对 填空: 1. 设int a=3, b ; 则 b=3*a++;的结果为 。 2. 结构化程序设计的三种基本结构为 。 3. 表达式x+a%3*(int)(x+y)%2/4 的结果为 (设x=2.5, y=4.7, a=7)。 4. 表达式(5<4)?(
13、4?1:0): (0?3:2)的结果为 。 5. C语言中标识符得命名规则为 。 三、程序分析题 1.下面程序的输出结果是____。 main ( ) { int i=010, j=10, k= 0x10; printf (“%d,%d,%d\n”,i,j,k); } 如何表示下列各项 1) y= sinx + cosx - 20x 2) X ∈ [1,10] 3) 年份 year 为闰年. 4) 5) 习 题 4 --- 顺序结构 选 择 题 1.put
14、char函数可以向终端输出一个 。 A) 整型变量表达式 B) 实型变量值 C) 字符串 D) 字符或字符型变量值 2.printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。如果字符串长度大于5,则输出按方式 ;如果字符串长度小于5,则输出按方式 。 A) 从左起输出该字符串,右补空格 B) 按原字符长从左向右全部输出.C) 右对齐输出该字符串,左补空格 D) 输出错误信息 3.设int a=3,b; 则 b=3*a++;的结果为 。 4.现有int a,b,c; 若想用
15、scanf (“%d: %d:%d”,&a,&b,&c);函数使a=10, b=20,c=30; 则输入数据流应为 。
5.现有int a=0; if (a=0) printf (“China\n”) ; else printf (“America”); 则输出结果为 。
6.阅读以下程序,当输入数据的形式为:25,13,10
16、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) 不确定值 二、填空题 1. C的标准数学函数都包含在头文件_________中。 2. 若有定义 float x=1.23444355;则“printf("%f\n",x);”的输出结果为__________。 4. 标准C的输入输出是通过________________来实现的。 4.设m=3,n=7,k=9,若有语句“scanf("%dm%dn%dk",&a,&b,&c);”,则
17、正确的输入格式为__________。 5. C的所有输入输出函数都包含在头文件_____中。 #include "stdio.h" #include "conio.h" main( ) { int a=1234; printf("%d %d %d %d\n",++a,a++,--a,a--); printf("%d %d \n",a+=5,a-=3); printf("%d\t%d\t%d \n",a*=2,a/=3,a%=100); printf("Hello,\tworld\n"); printf("Hello,
18、 world\n"); getch(); } 编程题 1.假设m是一个三位数,写出将m的个位,十位,百位反序而成的三位数(例如:123反序为321)的C语言表达式。 2.已知int x=10,y=12; 写出将x和y的值互相交换的表达式。 思考与练 习 -- 选择结构 1. if语句的嵌套结构中,else总是与_____配对。 A)与最近的if 配套 B)与第一个if 配套 C)按缩进位置相同的if配套 D)与最近的且尚未配对的if 配套. 2.判断变量a, b的值均不为0的逻辑表达式为 . 3. 将 ch= (c
19、h>='A' && ch<='Z') ? (ch+32) : ch ; 用if语句实现 . 4. 逻辑运算符两侧运算对象的数据类型() A)只能是0或1 B)只能是0或非0正数 C)只能是整型或字符型数据 D)可以是任何类型的数据 5.下面 是错误的if语句(设int x, a, b;) A)if (a=b) x++; B)if (a=
20、 ; 6. 以下程序片段 。 main ( ) { int x=0,y=0,z=0; if (x=y+z) printf(“***”); else printf(“###”); } A)有语法错误,不能通过编译 B)输出:*** C)可以编译,但不能通过连接,所以不能运行 D)输出:### 7. 下面 是错误的。 A) if语句中的表达式不限于逻辑表达式,可以是任意的数值类型。 B) switch语句与if 语句可以完全相互替换
21、 C) switch语句的case表达式必须是常量表达式。 D) if语句、switch语句可以嵌套,而且嵌套的层数没有限制。 E) 多个case可以执行相同的程序段。 习 题 选择结构 1. 若有int a=10,b=20,c=30 ; 则执行语句 if(a>b) a=b;b=c;c=a; 后a ,b, c的结果分别为 。 2. 判断一个年份(year)是否是润年的条件为 。 3. 执行以下程序段后,变量i 的值为(
22、 ) int i=2; switch ( i ) { case 1: i+=10; case 2:i+=10; case 3:i++; default : i++; } A) 24 B) 14 C) 12 D) 13 二、程序分析题 1. 写出程序运行结果: ____。 #include "stdio.h" main( ) { int x=1, y=0, a=0, b=0 ; switch(x) {case 1 : switch(
23、 y )
{ case 0: a++;break;
case 1:b++;break;
}
case 2 : a++;b++;break;
case 3 : a++;b++; }
printf( “a=%d,b=%d\n”,a,b ) ;
}
2. 下面程序的输出结果是____。
#include
24、char c='A'; do { switch (c++) { case 'A' : k++; break; case 'B' : k--; case 'C' : k+=2; break; case 'D' : k=k%2; break; case 'E' : k=k*10; break; default : k=k/3; }
25、 k++; } while(c<'G'); printf("k=%d\n", k); } 三、程序填空 1. 程序功能:判断输入的整数能否被3或7整除. #include "stdio.h" main( ) { int x, f= 0; scanf( “%d”,&x ); if ( 1 ) ( 2 ) if(f==1) printf(“YES\n”)
26、 else printf(“NO\n”); } 习 题 循环结构 1.语句while(!E);中的表达式!E等价于________. a) E==0 b) E!=1 c) E!=0 d) E==1 2. 程序段int k=10; while (k=1)k=k-1;循环的次数为 。 3.以下程序段________. x= -1; do{ x=x*x; } while(!x); a) 是死循环 b) 循环
27、执行2次
c) 循环执行1次 d) 有语法错误
4.下面程序的运行结果是______.
#include
28、d) 2次 6.执行语句for(i=1;i++<4; ); 后变量i的值是______. a) 3 b) 4 c) 5 d) 不定 7.以下正确的描述是_______. a) continue语句的作用是结束整个循环的执行. b) 只能在循环体内和switch语句体内使用break语句. c) 在循环体内使用break语句或continue语句的作用相同. d) 从多层循环嵌套中退出时,只能使用goto语句 . 二、填空题 1.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请填空。 int n=0, c;
29、 c=getchar( ) ; while(____) { if (_____) n++ ; c= getchar( ) ; } 2.下面程序段的运行结果是_________. i=1;a=0;s=1; do { a=a+s*i; s=-s;i++;} while(i<=10); printf ("a=%d",a); 3. 下面程序段的运行结果是_______. i=1;s=3; do{s+=i++; if(s%
30、7==0) continue; else ++i; } while(s<15); printf("%d",i); 三、程序分析题 1. 写出程序运行结果: void main( ) { int i,j, x=0; for(i=0;i<2;i++) { x++; for(j=0;j<=3;j++) {if(j%2) continue; x++; } x++; } printf(“x=%d\n”,x);
31、 } 编程题: 打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方之和等于该数本身。 1. 将程序补充完整。以下程序从输入数据中统计正整数和负整数的个数.用输入0来结束输入.变量i存放正整数个数,变量j存放负整数的个数. void main( ) { 1 i, j, n; i=j=0; scanf(“%d”,&n); while( 2 ) {if(n>0) ( 3 )
32、if(n<0) ( 4 ) } printf(“i=%4d j=%4d\n”,i,j); } 2、百钱买百鸡.公鸡5元一只,母鸡3元一只,小鸡1元三只;一百元买一百只鸡,且公鸡,母鸡,小鸡都要有.有几种买法? void main( ) { int i,j,k,n=0; for(i= 1 ) for(j= 2 ) { k=100-i-j; if(
33、3 ==100) {n++; printf(i=%d,j=%d,k=%d\n”,i,j,k);} } printf(“\n n=%d”,n); } 2. 编程输出下面的数字金字塔(1到9 )。 1 121 12321 .….. 12345678987654321 习 题 数 组 1.在C语言中,引用数组元素时,其数组下标的数据类型允许是 。
34、 A)整型常量 B)整型常量或整型表达式 C)整型表达式 D)任何类型的表达式 2. int a[SIZE] ; 以下能对一维数组a进行正确初始化的语句是 。 A)int a[10]=(0,0,0,0,0); B)int a[10]={ }; C)int a[ ]={0}; D)int a[10]={10*1}; 3.以下对二维数组c的声明正确的是 _______ 。 A)int c[3][ ]; B)int c(3,4); C)int c(2)(2);
35、 D)int c[3][2]; 二、填空题 1.数组名定名规则和变量名相同,遵循 定名规则。 2.对于一维数组的定义“类型说明符 数组名[常量表达式]”,其中常量表达式可以包括 和 ,不能包含 。 3.在C语言中,引用数组只能通过 数组元素来实现,而不能通过整体引用 来实现。 4.现有char a[20] ; scanf(“%s”,a); 输入数据流为234 asd ,则a= 。 5.若有定义int w[10]=
36、{23,54,10,33,47,98,72,80,61}, *p=w ; ,则不移动指针p,且通过指针p引用值为98的数组元素的表达式是 。
分析下面程序的运行结果。
#include "stdio.h"
int f( int b[] , int m,int n)
{ int i,s=0;
for( i=m;i 37、rintf("%d\n",x);
}
例6 一个数组中有10个整型元素,求数组中所有素数之和。
#include "stdio.h"
#include "math.h"
void main( )
{ int a[10],i,sum=0;
int prime(int x);
printf(“Enter 10 numbers:\n");
for(i=0;i<10;i++)
{ scanf("%d",&a[i]);
if(prime(a[i])) sum+=a[i];
}
printf("sum=%d\n",sum);
} 38、
输出杨辉三角形的前5行。
#define N 5
#include "stdio.h"
void main( )
{ int i,j; int x[N][N];
for(i=0;i 39、tf("\n");
} }
1、用选择法对10个整数进行从小到大排序。
2、用冒泡法对10个字符串进行从小到大(字典顺序)排序。
3、求n*n矩阵中的最大值。
4、用折半法查找整数x是否在数组a中。
习 题 函 数
1. 在C语言程序中关于函数的定义和调用的说法正确的是( )
A) 函数的定义可以嵌套,而函数的调用不可以嵌套。
B) 函数的定义不可以嵌套,而函数的调用可以嵌套。
C) 函数的定义和嵌套都可以嵌套。
D) 函数的定义和调用都不可以嵌套。
2.设有int a=4;b=3;c 40、2; printf(“%d,%d,%d”,(a,b,c),b,c); 的输出
结果为
A) 4,3,2 B) 3, 3, 2 C) 2,3,2 D) 以上都不对
3.简单变量做实参时,实参与其对应的形参之间的数据传递方式是________。
A)双向值传递方式 B)地址传递方式
C)单向值传递方式 D)用户指定传递方式
3. 以下程序的运行结果是_________
f ( int a )
{ int b=0;
static int c=3;
41、 b++; c++; return(a+b+c); }
main ( )
{ int a=2 i;
for (i=0; i<3; i++)
printf (“%d\t”, f(a));
}
习 题 ( 变量的属性 )
一、选择题
1.以下正确的说法是 ;如果在一个函数中的复合语句中定义了一个变量,则该变量
A)只在该复合语句中有效. B)在该函数中有效
C)在本程序范围内有效 D)为非法变量
2.以下不正确的说法为 。
A)在不同函数中可以使用相同名字的变量
42、B)形式参数是局部变量
C)在函数内定义的变量只在本函数范围内有效
D)在函数内的复合语句中定义的变量在本函数范围内有效.
3.函数中未指定存储类别的局部变量,其隐含的存储类别为( ) A)自动(auto). B)静态(static)
C)外部(extern) D)寄存器(register)
4.以下叙述中正确的是 。
A) 全局变量的作用域一定比局部变量的作用域范围大.
B) 静态(static)类别变量的生存期贯穿于整个程序的运行期间
C) 函数的形参都属于全局变量.
D) 未在定义语句中赋初值的auto变量和static变量的初 43、值都是随机值 .
5.以下函数值的类型是 。
fun ( float x )
{ float y;
y= 3*x-4;
return y;
}
A) int B) 不确定 C) void D) float
6. 若有说明语句:static int a[3][4]={0};
则下面叙述正确的是: 。(往届试题)
A)只有a[0][0]元素可得到初值0
B)数组a中每个元素均可得到初值0 .
C)数组a中各元素都可得到初值,但值不一定为0
D)此说明语句不正确
44、7.下面程序的正确运行结果是: 。
main( )
{ int a=2, i;
for(i=0;i<3;i++) printf(“%4d”,f(a) ); }
f( int a )
{ int b=0; static int c=3;
b++; c++;
return (a+b+c) ; }
A) 7 7 7 B) 7 10 13
C) 7 9 11 D) 7 8 9
二、程 45、序填空
1.以下程序对输入的一个整数,调用函数prime判断其是否为素数,若是则输出“YES”,否则输出“NO”。
main( )
{ int x;
scanf (“%d”, ____ );
if (prime (x) ) ;
else ;
}
prime (int a)
{ int e, k, yes;
yes=1; e=a/2; k=2;
while ((k<=e) ________ )
46、 if ( a% _____ ==0) yes=0;
else k++;
________________ ;
三、分析程序的运行结果
1. 以下程序的运行结果是_______
void swap (int*x, int *y)
{ int t;
t=*x; *x =*y; y=t; printf (“in swap :x=%d , y=%d\n”,*x,*y); }
main( )
{ int a=5,b=8; swap(&a,&b);
printf (“in main :a=%d , b=%d\n”, 47、a,b);
}
2. 以下程序的运行结果是______.
fun (int n)
{ int t;
if (n==0 ||n==1) t=3; else t=n*fun (n-1);
return(t);
}
main( )
{ printf (“%d\n”, fun (4)); }
3. 阅读下列函数,指出他们的功能。
float fun( int n,int *s )
{ int f1,f2;
if (n==1||n==2) *s=1;
else { fun( 48、n-1,&f1);
fun(n-2,&f2);
*s=f1+f2;}
}
程序分析题(每题5 分)
4. 以下程序的运行结果是_________
int a=5;
fun(int b)
{ static int a=10;
a+=b++;
printf("%d ",a);}
main( )
{ int c=20;
fun(c);
a+=c++;
printf("%d\n",a);
}
5. 以下程序的运行结果是_________
fun( int x 49、 )
{ if(x/2>0) fun(x/2);
printf("%d ",x);
}
main( )
{ fun( 6 );
}
四、编程
1.输入年月日,计算出该日为该年的第几天。
在主函数中分别调用三个函数。
void main( )
{ int year, month , day, t_day;
printf("Input year month day:\n");
scanf("%d%d%d",&year,&month,&day);
t_day= days(year,month,day) ;
print 50、f("%d-%d-%d is %dth day of the year!\n",year, month,day , t_day);
}
(1)判断闰年。
int leap( int year )
{ int lp; lp=(year%4==0&&year%100!=0||year%400==0)?1:0;
return lp;
}
(2)求某月的天数。
int month_days( int year, int month )
{ int ds , d;
switch( month )
{ case 1:






