资源描述
典型试题详解
1.以下叙述正确的是________.
A)构成C程序的基本单位是函数.
B)可以在函数中定义另一个函数.
C)main( )函数必须放在其他函数之前.
D)所有被调用的函数一定要在调用之前进行定义.
2.一个C程序中________。
A)main函数必须出现在所有函数之前
B)main函数可以在任何地方出现
C)main函数必须出现在所有函数之后
D)main函数必须出现在固定位
3. 以下叙述中正确的是________.
A)C语言比其他语言高级.
B)C语言可以不用编译就能被计算机识别执行.
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) 可以没有主函数。
2.以下说法中正确的是 ( )
A) C程序总是从第一个定义的函数开始执行.
B) 在C程序中,要调用的函数必须在main( ) 函数中定义.
C) C程序总是从main( )函数开始执行.
D) C程序中的main( )函数必须放在程序的开始部分。
3.以下叙述不正确的是 .
A) 一个C源程序必须包含一个main函数
B) 一个C源程序可由一个或多个函数组成.
C) C程序的基本组成单位是函数.
D) 在C程序中, 注释说明只能位于一条语句的后面.
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.下列四组选项中,均是不合法的用户标识符的选项是 。
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( )
{ printf("\n");
printf("Good morning,everyone!\n");
printf("Good morning,Mr.Zhong!\n");
}
三、填空题
1. C程序是由 构成的,其中有且只能有一个 函数,该函数名为 。
2. 用高级语言编写的程序称为 程序,它要经过 程序一次翻译产生 程序然后执行,或经过 程序翻译一句执行一句的方式执行。
3. C语言源程序文件名的后辍是 ,经过编译后,生成文件的后辍是 ,经过连接后,生成文件的后辍是 。
四、编程题
1. 编写一个C程序,输入a,b,c三个实数值,计算并输出基平均值ave=(a+b+c)/3.
2. 请参照例题,编写一个C程序,输出以下信息。
*********************************************
Hello , World!
*********************************************
3 C语言以函数为程序的基本单位,有什么优点?
4. 如何给C源程序加注释?
5. C语言中,表达式和表达式语句有什么关系?
6. 在C语言的编辑状态下,如何实现块的定义、复制、移动和删除?
7. 在C语言的编辑状态下如何获取帮助?
8. 在C语言的编辑状态下如何打开功能菜单?
习题 -- 算法
1 名词解释:程序、数据、数据结构、数据类型。
2 什么叫算法?它具有哪些特点?
3 程序设计的一般步骤是什么?
4 结构化程序设计的方法有哪些特点?
1. 算法具有五个特性,以下选项中不属于算法特性的是________。
A)有穷性
B)简洁性
C)可行性
D)确定性
解答题
设计算法并用传统流程图表示出来。
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 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 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); 的输出结果为
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)?(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.putchar函数可以向终端输出一个 。 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; 若想用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 <CR>(注:<CR>表示回车),则输出结果为 。
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) 不确定值
二、填空题
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);”,则正确的输入格式为__________。
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, 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= (ch>='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=<b) x++;
C)if (a-b) x++; D)if ( x ) x++ ;
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 语句可以完全相互替换。
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 的值为( )
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( 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 <stdio.h>
void main( )
{ int k=0;
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;
}
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”);
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) 循环执行2次
c) 循环执行1次 d) 有语法错误
4.下面程序的运行结果是______.
#include <stdio.h>
main( )
{ int y=10;
do{y--;}while(--y);
printf("%d\n",y--);
}
a) -1 b) 1 c) 8 d) 0
5.若i为整型变量,则以下循环执行次数是_____.
for(i=2;i==0 ; )printf("%d",i--);
a) 无限次 b) 0次 c) 1次 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;
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%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);
}
编程题:
打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方之和等于该数本身。
1. 将程序补充完整。以下程序从输入数据中统计正整数和负整数的个数.用输入0来结束输入.变量i存放正整数个数,变量j存放负整数的个数.
void main( )
{ 1 i, j, n;
i=j=0;
scanf(“%d”,&n);
while( 2 )
{if(n>0) ( 3 )
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( 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语言中,引用数组元素时,其数组下标的数据类型允许是 。
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); D)int c[3][2];
二、填空题
1.数组名定名规则和变量名相同,遵循 定名规则。
2.对于一维数组的定义“类型说明符 数组名[常量表达式]”,其中常量表达式可以包括 和 ,不能包含 。
3.在C语言中,引用数组只能通过 数组元素来实现,而不能通过整体引用 来实现。
4.现有char a[20] ; scanf(“%s”,a);
输入数据流为234 asd ,则a= 。
5.若有定义int w[10]={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<n;i=i+2) s=s+b[i];
return s;
}
void main( )
{ int x,a[ ]={1,2,3,4,5,6,7,8,9 };
x=f( a,3 ,7);
printf("%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);
}
输出杨辉三角形的前5行。
#define N 5
#include "stdio.h"
void main( )
{ int i,j; int x[N][N];
for(i=0;i<N;i++)
for(j=0;j<=i;j++)
{ if(j==0||i==j) x[i][j]=1;
else x[i][j]=x[i-1][j]+x[i-1][j-1];
}
for(i=0;i<N;i++)
{ for(j=0;j<=i;j++)
printf("%d ",x[i][j]);
printf("\n");
} }
1、用选择法对10个整数进行从小到大排序。
2、用冒泡法对10个字符串进行从小到大(字典顺序)排序。
3、求n*n矩阵中的最大值。
4、用折半法查找整数x是否在数组a中。
习 题 函 数
1. 在C语言程序中关于函数的定义和调用的说法正确的是( )
A) 函数的定义可以嵌套,而函数的调用不可以嵌套。
B) 函数的定义不可以嵌套,而函数的调用可以嵌套。
C) 函数的定义和嵌套都可以嵌套。
D) 函数的定义和调用都不可以嵌套。
2.设有int a=4;b=3;c=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;
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)在不同函数中可以使用相同名字的变量
B)形式参数是局部变量
C)在函数内定义的变量只在本函数范围内有效
D)在函数内的复合语句中定义的变量在本函数范围内有效.
3.函数中未指定存储类别的局部变量,其隐含的存储类别为( ) A)自动(auto). B)静态(static)
C)外部(extern) D)寄存器(register)
4.以下叙述中正确的是 。
A) 全局变量的作用域一定比局部变量的作用域范围大.
B) 静态(static)类别变量的生存期贯穿于整个程序的运行期间
C) 函数的形参都属于全局变量.
D) 未在定义语句中赋初值的auto变量和static变量的初值都是随机值 .
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)此说明语句不正确
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
二、程序填空
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) ________ )
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”,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(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 )
{ 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) ;
printf("%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:
展开阅读全文