资源描述
二级C语言程序设计模拟试题(1)
一、单项选择题。(每小题1分,共20分)
1、设有整型变量a,单精度型变量f,双精度型变量x,则表达式a+’b’+x*f值的类型为( C)。
A) int B) float C) double D) 不能确定
2、下列语句的输出为( A )
int x=-1;
printf(“%d,%u,%o”,x,x,x);
A) -1 , 65535 , 177777 B) -1 , -1 , -1
C) -1 , 32767 , -177777 D) -1 , 32768 , 177777
3、若N为整型变量,则for(N=10;N=0;N--); 循环里的循环体被( D )。
A) 无限循环 B) 执行10次 C) 执行一次 D) 一次也不执行
4、若有以下的定义、说明和语句,则值为101的表达式是( C )。
struct cw
{ int a;
int *b;
}*p;
int x0[]={11,12},x1[]={31,32};
static struct cw x[2]={100,x0,300,x1};
p=x;
A) *p->b B) p->a C) ++(p->a) D) (p++)->a
5、已知函数的调用形式:fread(buffer,size,count,fp); 其中buffer代表的是( C )。
A) 一个整型变量,代表要读入的数据项总数
B) 一个文件指针,指向要读的文件
C) 一个指针,指向要读入数据的存放地址
D) 一个存储区,存放要读的数据项
6、有如下程序
void main()
{ int x=23;
do
{ printf(“%d”,x--);
}while(!x);
}
该程序的执行结果是( B )。
A) 321 B) 23 C) 不输出任何内容 D) 陷入死循环
7、下面程序运行情况是( D )。
#include <stdio.h>
void main()
{ int x=3,y=0,z=0;
if(x=y+z)
printf(“****”);
else
printf(“####”);
}
A) 有语法错误,不能通过编译 B) 输出****
C) 可以通过编译,但不能通过连接,因而不能运行 D) 输出####
8、要将一个整数12000分别一ASCII码文件和二进制文件形式存放,各自所占的存储空间数分别是( A )字节。
A) 5和2 B) 2和5 C) 2和2 D) 5和5
9、在下列程序中,调用f(8)的值是( D )。
int f(int n)
{ if(n==1)
return(1);
else if (n==2)
return(2);
else
return(f(n-1)+f(n-2));
}
A) 13 B) 21 C) 55 D) 34
10、sizeof(‘a’+10)的值为( A )类型。
A) int B) float C) double D) char
11、对于基本类型相同的两个指针变量之间,不可进行的运算是( C )。
A) == B) = C) + D) -
12、若有flaot x=2.5,y=4.7; int a=7; 则表达式x+a%3*(int)(x+y)%2/4的值为( D )。
A) 4.0 B) 3.0 C) 2.75 D) 2.5
13、在C程序中,同一程序中的各函数之间( A )。
A) 既允许直接递归调用,也允许间接递归调用
B) 既不允许直接递归调用,也不允许间接递归调用
C) 允许直接递归调用,但不允许间接递归调用
D) 不允许直接递归调用,但允许间接递归调用
14、int a=3,b=4,c=5; 执行完表达式a++>--b&&b++>c--&&++c后,a,b,c的值分别为( B )。
A) 3 4 5 B) 4 3 5 C) 4 4 4 D) 4 4 5
15、C语言中,函数调用时若实参是数组名,则被碉函数对应形参( D )。
A) 可以是相应类型的简单变量
B) 必须是相应类型的指针变量
C) 必须是相应类型的数组名
D) 可以是相应类型的指针变量
16、若有定义int i=2,a[10],*p=&a[i]; ,则与*p++等价的是( A )。
A) a[i++] B) a[i]++ C) a[i] D) a[++i]
17、有定义:float y,*p=&y; 假定变量y在内存中所占地址为100~103。那么p的值为( A )。
A) 100 B) 101 C) 102 D) 103
18、以下程序输出的结果是( C )。
int x=3,y=4;
void main()
{ int x,y=5;
x=y++;
printf(“%d”,x);
}
A) 3 B) 4 C) 5 D) 6
19、有定义:int a[10][10],*p=a[0],j,k; 其中j和k表示数组元素下标并在数组允许范围内,那么能够正确引用元素a[j][k]值的是( A )。
A) *(a[j]+k) B) *((p+j)+k) C) *(p[j]+k) D) (a+j)+k
20、程序设计的一般步骤分为:分析问题、构造模型、设计与描述算法、编写程序、调试程序和( C )。
A) 数据设计 B) 算法分析 C) 编制程序说明文档 D) 编译
二、不定项选择题。(每小题1分,共10分,错选、漏选均不得分)
1、C语言的函数定义中,如果函数的返回值为0~255之间的整数,则函数的返回类型可以定义为( A,C,E )。
A) int B) float C) char D) double E) long
2、下列说法正确的是( C, D, E )。
A) 若某自定义函数中无return语句,则该函数一定没有返回值。
B) C语言的编译系统对宏命令的处理是在对源程序中其他成份正式编译之前进行的。
C) 在C语言的源程序中,注释使用越多,编译之后的可执行程序的执行效率越低。
D) 如果strcmp(s1,s2)的返回值为负数,则表明字符串s1一定小于字符串s2。
E) 一个C程序可由多个源文件组成。
3、有定义:struct A{int x;int y;}a,*p=&a;,则能表示成员变量x的有( A,B,C )。
A) a.x B) (*p).x C) p->x D) p.x E) a->x
4、对于下列定义,正确的叙述是( A,B,C,E )。
union ss
{ int i;
char c;
float f;
}a,b;
A) 变量a所占内存的长度等于成员f的长度
B) 变量a的地址值和它的各成员地址值都是相同的
C) 地址表达式&a、&a.i、&a.c、&a.f的值相同
D) 变量a所占内存的长度等于各成员所占空间之和
E) sizeof(union ss)的值为4
5、C语言中的语句中除了控制语句外,还应包括( A,B,C,D,E )。
A) 函数调用语句 B) 表达式语句 C) 空语句
D) 复合语句 E) 输入输出语句
6、对int (*p)[5];的正确描述是( B,D )。
A) p是数组名 B) p是指针变量名 C) p数组中有5个元素
D) p指向一个包含5个元素的整型数组 E) p是一个整型数组
7、若有定义:char s[20]=”programming”,*ps=s; 则能够代表字符o的表达式是( B,C,D,E )。
A) ps+2 B) s[2] C) ps[2] D) ps+=2,*ps E) *(ps+2)
8、以下正确的说法是( A,B,E )。
A) C语言有四种存储类:auto、register、static和extern
B) C语言提供的for、while和do-while等三种循环语句可以做等价交换
C) C语言提供的结构类型不允许其成员具有不同的数据类型
D) C语言允许用typedef来定义一种新的数据类型
E) C语言允许经常在程序中使用的常量用宏定义来定义
9、以下是属于算法的特点的选项( A,B,C,D,E )。
A) 有穷性 B) 确定性 C) 有效性
D) 有零个和多个输入 E) 有一个或多个输出
10、如有说明 struct { int day; int month; int year; } d,*pd=&d; 则下列哪些引用是正确的( A,B,C )。
A) pd->year B) (*pd).year C) d.year D) *pd.year E) *(pd->year)
三、判断分析题(如正确选√;如错误选Х。每小题1分,共10分)
1、如果一个函数只能被本文件中的其它函数所调用,则该函数为外部函数。( Х )
2、递归函数在实现过程中,要使用“堆栈”这种数据结构来保存递归调用过程中的值。( √ )
3、在同一源文件中,全局变量与局部变量同名,在局部变量作用范围内,全局变量的值等于局部变量的值。( Х)
4、数据结构包括逻辑结构和物理结构两个方面。( √ )
5、语句for(; ;){循环体} 和while(1){循环体} 是等价的。( √ )
6、在一个函数中,可以根据需要使用多个return语句。( √ )
7、函数fseek(fp,10L,1)的作用是将fp指向的文件内部指针从当前位置后移10个字节的位置。( √ )
8、位运算(~0)的结果是1;逻辑运算(!3)的结果为0。( Х)
9、实参数组和形参数组类型必须一致,大小可以不一致。( √)
10、宏定义必须在行末加分号。( Х )
四、填空题。(每空2分,共20分)
1、无论一个C程序有多少个函数构成,程序总是从 ① 开始执行的。
2、算术表达式 在C语言中的正确表达式为 ② 。
3、下列程序功能是对某班的某科学生成绩x进行分段统计。要求将[0,60]、[60,70]、[70,80]、[80,90]、[90,100]这五个分数段的人数分别统计在a[5]~a[9]中。学生成绩采用百分制。当非法输入时,结束统计。
#include <stdio.h>
{ float x;
int i,k;
static int a[10];
scanf(“%f”,&x);
k= ③ ;
while(k>0&&k<10)
{ if(k<6)
k=5;
a[k]=a[k]+1;
scanf(“%f”,&x);
k=(int)x/10;
}
for(i=5;i<10;i++)
printf(“%d”,a[i]);
}
4、以下函数creatlist用来建立一个带头节点的单项链表,新产生的节点总是插在链表的末尾。单项链表的头指针作为函数返回值。函数中以换行符作为链表建立的结束标志。请填空。
#include <stdio.h>
struct node
{ char data;
struct node *next;
};
struct node *creatlist()
{ struct node *h,*p,*q;
char ch;
h=(struct node *)malloc(sizeof(struct node));
p=q=h;
ch=getchar();
while ( ④ )
{ p=(struct node *)malloc(sizeof(struct node));
p->data=ch;
q->next=p;
q=p;
ch=getchar();
}
p->next=’\0’;
return h;
}
5、函数yh的功能是构成一个杨辉三角形,请填空完成该函数。
#include <stdio.h>
#define N 11
void yh(a[][N])
{ int i,k;
for(j=1;j<N;j++)
{ a[j][1]=1;
a[j][j]=1;
}
for( ⑤ ;j<N;j++)
for(k=2;k<=j-1;k++)
a[j][k]= ⑥ +a[j-1][k];
}
6、以下程序是输出Fibonacci数列前20个数,这个数列有如下特点:第1,2两个数为1,1,从第三个数开始,该数是其前面两个数之和。
#include <stdio.h>
void main()
{ int f[20]={1,1},i;
for(i=2;i<20;i++)
f[i]= ⑦ ;
for(i=0;i<20;i++)
{ if(i%5==0)
printf(“\n”);
printf(“%5d”,f[i]);
}
}
7、以下函数返回字符串s的长度。
strlen(char *s)
{ char *p=s;
while(*p!=’\0’)
p++;
return( ⑧ );
}
8、下面程序的功能是统计从命令行上传递进来的第一个参数中出现字母个数。请填空完善程序。(注:参数个数从0开始记数)
#include <stdio.h>
#include <ctype.h>
void main(int argc, ⑨ argv[])
{ char *str;
int count=0;
if(argc<2)
return;
str= ⑩ ;
while(*str)
if(isalpha(*str++))
count++;
printf(“%d\n”,count);
}
填空题答案:
① main函数
② cos(fabs(x+y))/sin(fabs(x)+fabs(y))
③ (int)x/10
④ ch!='\n'
⑤ j=2
⑥ a[j-1][k-1]
⑦ f[i]=f[i-1]+f[i-2]
⑧ p-s
⑨ char*
⑩ argv[1]
五、阅读程序,写出运行结果。(每小题4分,共20分)
1、写出下面程序执行的结果:
#include <stdio.h>
void main()
{ union
{ int i[2];
long k;
char c[4];
}r,*s=&r;
s->i[0]=0x39;
s->i[1]=0x38;
printf(“%c\n”,s->c[0]);
}
运行结果:
9
2、写出下面程序执行的结果:
#include <stdio.h>
void ff(char *p1,char *p2)
{ while(*p2++=*p1++);
}
void main()
{ char *p1=”abcde”,*p2=”1234567”;
ff(p1,p2);
printf(“%s\n%s\n”,p1,p2);
}
运行结果:
abcde
1234567
3、写出下面程序执行的结果:
#include <stdio.h>
void main()
{ int fun(int a);
int a=2,j;
for(j=0;j<3;j++)
printf(“%d”,fun(a));
}
int fun(int a)
{ int b=0;
static int c=3;
b++, c++;
return(a+b+c);
}
运行结果:
789
4、运行下列程序时,输入数据为“2473<CR>”,则程序的输出结果为:
#include <stdio.h>
void main()
{ int s;
while((s=getchar())!=’\n’)
{ switch(s-‘2’)
{ case 0:
case 1: putchar(s+4);
case 2: putchar(s+4); break;
case 3: putchar(s+3); break;
default: putchar(s+2); break;
}
}
}
运行结果:
668977
5、写出下面程序执行的结果:
#include <stdio.h>
extern int j=1;
void main()
{ void add();
int sum(int x);
int k,s;
add();
j++;
printf(“j=%d\n”,j);
for(k=1;k<=10;k++)
s=sum(k);
printf(“s=%d\n”,s);
}
void add()
{ int j=0;
j++;
}
int sum(int j)
{ int x=0;
x+=j;
return(x);
}
运行结果:
j=2
s=10
六、编程序。(每小题10分,共20分)
1、函数adddigit的原型为int adddigit(int num);,其功能是求num各位数字之和。要求编制该函数并用相应的主函数进行测试。
程序:
#include <stdio.h>
int adddigit(int num)
{
int sum=0,i;
i=num%10;
while(i!=0)
{
sum+=i;
num/=10;
i=num%10;
}
return sum;
}
void main()
{
printf("%d",adddigit(12345));
}
2、有一字符串,包含n个字符。写一函数,将此字符串从第m个字符开始的全部字符复制成为另一个字符串并输出这个字符串。例如,要求把字符串abcdefg中第3个字符开始的全部字符复制成为另一字符串cdefg。
程序:
#include <stdio.h>
#include <string.h>
void substring(char* des,char* src,int m)
{
int n;
n=strlen(src);
if(m<=n&&m>0)
{
src+=m-1;
}
strcpy(des,src);
}
void main()
{
char *str1="abcdefg";
char str2[20];
substring(str2,str1,3);
printf("%s",str2);
}
二级C语言程序设计模拟试题(2)
一、单项选择题。(每小题1分,共20分)
1. 1、一个C语言程序是由(B)组成。 [C程序的结构]
A) 一个函数 B) 一个或若干个函数
C) 一个过程 D) 一个过程或若干个过程
2、C语言用(D)表示逻辑真值。 [数据类型-.逻辑类型]
A) true B) T C) 整型值0 D) 非0整型值
3、如果程序中有#include "文件名" 则意味着(A)。[预编译]
A) 将"文件名"所指的那个文件的全部内容,在此命令行出现的这一点上,插 入源程序
B) 指定标准输入输出
C) 宏定义一个函数
D) 条件编译说明
4、为一个结构体变量分配存储空间时,其所占容量为(B)。 [数据类型-构造类型]
A) 结构体中第一个成员所占容量 B) 结构体中所有成员所占容量
C) 结构体中所有成员中所占容量最大者 D) 结构体中最后一个成员所占容量
5、如果int *px,*py;则可用{temp=*px;*px=*py;*py=temp}实现*px和*py 的交换。 其中temp应该说明为(A)。[数据类型-指针类型]
A) int temp B) int &temp C) int **temp D) int *temp
6、于合法的c语言长整型常量是(A)。[数据类型-常量]
A) 12L B) 6887273 C) 5E12 D) (long)6887273
7、下列程序输出正确的是(A)。[运算符及表达式-逻辑运算顺序、自加运算]
main()
{ int a=-1,b=1,c;
c=(a++<=0)&&!((b--<=0));
1 2
printf(“%d,%d,%d”,a,b,c);
}
A) 0,0,1 B) -1,1,1 C) 0,0,0 D) 0,1,0
8、已知E的ASCII码是69,则执行printf(“%c”,’D’-‘8’+’5’);的结果是(A)。[ASCII码的性质]
A) 66 B) A C) B D) E
9、段名访问的方式是(A)[构造类型-结构]
A) 结构名.位段名 B) 位段名 C) 结构名 D) *&位段名
10、义有字符数组a,则正确的输入语句是(C)。[常用库函数]
A) gets('a'); B) scanf(" %c",a); C) scanf(" %s",a); D) gets(" a");
11、如果程序中有static char c;则编译时会对其自动设置初始值为(C)[存储类型]
A) '\n' B) "\n" C) 0 D) '\0'
12、如果程序中有语句FILE fp;fp=fopen("abc.txt","w");则程序准备做(C)。[文件]
A) 对文件读写操作 B) 对文件读操作 C) 对文件写操作 D) 对文件不操作
13、如果有#define f(x,y) x+y及int a=2,b=3;则执行printf("%d",f(a,b)*f(a,b)) 后的值为(C)。[预编译]
A) 36 B) 25 C) 11 D) 13
14、在下面的说明中,(D)是指向函数的指针。[指针-指针数组、数组指针、函数指针、返回值是指针的函数]
A) int *p[]; B) int (*p)[]; C) *p(); D) (*p)();
15、如果在C程序中有main(int argc,char *argv[]),那么( D )是指命令行中的参数个数。[命令行参数的概念与简单应用]
A) argv B) argv[] C) argc,argv[] D) argc
16、下列程序运行的结果是(B)。[位运算]
#include <stdio.h>
main()
{ unsigned a,b,x;
a=0x255;
b=a<<4
x=(~b)&0xff
}
A) 0x55 B) 0xaf C) 0x50 D) 0xda
17、下面程序中选择正确答案(C)[库函数、逻辑类型、程序结构]
main()
{ int k=0;
while (printf(“*”))
{ k++;
if (k<3)
break;
}
}
A) 其中循环控制表达式与’0’等价 B) 其中循环控制表达式与0等价
C) 其中循环控制表达式与1等价 D) 其中循环控制表达式不合法
18、用文件包含形式的预处理时,当#include后面的文件名用尖括号括起,寻找被包含文件的方式为(B)[预编译]
A) 先在源程序所在目录搜索,再按系统设定的标准方式搜索
B) 直接按系统设定的标准方式搜索
C) 仅仅搜索当前目录
D) 仅仅搜索源程序所在目录
19、设有如下函数定义
int f(char *s)
{ char *p=s;
while (*p) p++;
return (p-s);
}
如果用printf (“%d”,f(“abcdef”)); 调用该函数,则输出结果为(B)。[函数-定义、调用]
A) 0 B) 6 C) 7 D) 奇怪字符
20、程序段 (C) [循环结构程序设计]
int x=-1;
do
{ x=x*x;
} (!x);
A) 是死循环 B) 循环执行2次 C) 循环执行1次 D) 不合法
二、不定项选择题。(每小题1分,共10分,错选、漏选均不得分)
1、存储类型为static 的静态变量的正确描述有(ABE)。[存储类型-静态类型]
A) 静态变量有外部静态变量和内部静态变量之分。
B) 静态变量的数据类型如果是整型,则其缺省初值由编译系统赋为0。
C) 内部静态变量不能赋初值。
D) 所谓全局变量就是指静态变量。
E) 外部静态变量只在本文件中可见。
2、下列哪些运算符的优先级相同且运算次序从左到右(AC)。[运算符的优先级和结合规则]
A) () [] -> B) ++ -- C) < >= D) && || E) & |
3、在C语言中,下面哪些描述是正确的(BDE)。[C语言的基本语法概念和性质]
A) 在switch(c)语句中,c 可以是任意表达式。
B) else if 语句可以转化为switch语句。
C) 大小写没有区别。
D) goto语句必须与“转向标号”配合使用。
E) C语言提供函数的递归调用机制。
4、如有说明struct{int day;int month;int year;} d,*pd;则下列哪些引用是正确的(ABC)。[构造类型-结构类型、指针]
A) pd->year B) (*pd) .year C) d.year D) *pd.year E) *(pd->year)
5、在C语言中,系统指定的标准设备文件有(BCD)。[文件]
A) fopen B) stdin C) stdout D) stderr E) fclose
6、C语言中要求所用到的变量作强制性定义,其目的是(ACE)[变量性质]
A) 变量被指定类型后便于分配内存单元 B) 确定变量的数量
C) 保证程序中正确地使用变量 D) 保证变量不同名
E) 根据变量的类型便于确定运算的合法性
7、结构化程序是由(ADE)组成的。[结构化程序设计]
A) 顺序结构 B) 模块结构 C) 树型结构
D) 选择结构 E) 循环结构
8、下列程序中,若输入的命令行为:file1 china computer ,则输出的结果为(B)。[命令行参数的概念与简单应用]
#include <stdio.h>
main(int argc, char * argv)
{ while (--argc>0)
printf(“%s”,*++argv);
}
A) file1 B) china C) china computer D) language
9、下面(ACDE)是位段特性的正确描述。[构造类型-结构类型]
A) 位段空间的分配,不受机器的限制一律从左到右
B) 可以定义位段数组 C) 位段的长度不能大于存储单元的长度
D) 位段可以用整数格式输出 E) 位段的长度可以为0
10、函数返回值的正确描述是(ACE)。[函数-返回值]
A) 函数的返回值是通过函数中的return语句获得
B) 有多少个return语句就有多少个返回值
C) 在定义函数时,对函数值的说明类型与return语句表达式的类型应一致
D) 如果函数值的类型与return中表达式的类型不一致时,以表达式为准
E) 当函数中没有return语句时,返回的是一个不确定的值
三、判断分析题(如正确选√;如错误选Х。每小题1分,共10分)
1、使用typedef可以自定义一种新的数据类型。 (√) [概念-关键字]
2、结构(struct)和联合(uion)类型实质上是相同的。 ( X )[概念-结构和联合]
3、可以用顺序、分支、循环三种结构构造任何算法。 (X)[概念-程序的基本结构]
4、如有int a=2,b=4,c=8;则表达式((a>b) && c>a) || (c>b)的值为真。(√)[表达式-运算顺序]
5、求n!既可以用递归的方式,也可以用递推的方式。 (√)[常用算法-地推]
6、在C语言中,程序main(){int ptr ;*ptr=100;printf("%d",*ptr);}是正确的。(X)[指针运用]
7、C语言的编译系统对宏命令的处理是在源程序编译阶段进行的。(X)[预编译]
8、C语言中的输入输出操作是通过专门的输入输出语句实现的。(X)[库函数-C语言通过库函数实现系统功能]
9、C语言可以处理的文件类型是文本文件和二进制文件。(√ )[文件-基本运用]
10、若定义 int **p;则程序中调用*p时,它代表p的地址。(X)[指针-二重指针]
四、填空题。(每空2分,共20分)
1、构成递归的两个组成部分是递归方式和 ① 递归结束 条件。[基本算法-递归]
2、ANSI C提供了一个测试文件是否在结尾的状态函数feof ( pf ),当文件结束时feof函数的值为 ② 非零整数 。[文件]
3、下面是输出链表head的函数print。[链表-遍历]
#include <stdio.h>
struct stud
{ long num;
float score;
struct stud *next;
};
void print(struct stud *head)
{ struct stud *p;
p=head;
if(head!=NULL)
do
{ printf("%ld%5.1f\n",p->num,p->score);
___________③ p=p->next ________;
}while(p!=NULL);
}
4、下面函数能找出字串s所包含的子串sub第1次出现的位置,请完善此程序填空。[字符串-遍历、比较]
search(s,sub)
_④ char *s,*sub;__ ___
{ int i,j,k;
for(i=0;s[i]!=’\0’;i++)
{ for(j=i,k=0;_⑤ s[j]!='\0'&&sub[k]!='\0'_&&s[j]= =sub[k];j++,k++);
if(sub[k]= =’\0’)
return(i);
}
return(-1);
}
5、算满足不等式1+1/2+1/3+1/4+…..+1/n>limit所需调和级数的项数.其中limit是提出的要满足的要求,而所求的是项数n,请完善此程序填空。[基本算法-递推算法]
#include <stdio.h>
main()
{ int termcount=0;
float sum,limit;
sum=0.0;
printf(“limit=?”);
scanf(“%f”,&limit
展开阅读全文