12级C语言试题A

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三、编程题(20分)
1.编写一程序,求100之内的素数。

定义一个函数完成素数的判断,main函数完成调用并输出全部素数。

2.编程找出1000以内的所有完数。

定义一个函数来实现一个数的因子(不包括本身)和的计算。

main函数完成判断完数并输出所有完数的功能。

一个数如果恰好等于它的因子之和,这个数就称为“完数”。

例如6=1+2+3.
一、选择题(30×1=30分)
1.以下关于main函数的叙述中,错误的是(c )。

A. main函数是自定义函数
B. main函数可以有形式参数,也可以没有形式参数
C. main函数定义必须出现在一个源文件的开头
D. 在一个程序只能有一个main函数
2.下列程序的输出结果是(c )。

main( )
{ int a=7,b=5;
printf("%d\n",b=b/a);
}
A 5
B 1
C 0
D 不确定值
3. 以下符号中不能用做标识符的是( d )。

A. _256
B. For
C. a_798
D. struct
4. 已知有声明“int x=2;”,以下表达式中值不等于8的是( b )。

A. x+=2,x*2
B. x*7.2/x+1
C. (x+7)/2*((x+1)%2+1)
D. x+=x*=x
5.设有如下程序段,下面描述中正确的是(c)。

int k=10; while(k=0) k=k-1;
A 循环执行一次
B 循环是无限循环
C循环体语句一次也不执行 D 循环体语句执行一次
6. 若有声明“int a,b,c=100; ”语句,下列正确的函数调用是( a )。

A. printf(“ABC””XYZ”)
B. scanf(“%d%d”,a,b)
C. double sqrt(c)
D. sqrt(double c)
7. 以下关于变量的叙述中错误的是(b )。

A. 所有变量在使用前都必须声明
B. 变量声明可放在函数体中任何位置
C. 全局变量和局部变量可以同名
D. 声明变量时必须给出变量的数据类型但可以省略存储类型
8.以下函数调用语句中含有(a)个实参。

func((e1,e2),e3,(e4,e5));
A 3
B 2
C 5
D 语法错误
9.下列函数定义的返回值数据类型为(c )。

int fun ( float x, double y )
{
return x+y;
}
A. double
B. float
C. int
D.void
10.已知职工记录描述如下,在TC3.0中,系统为变量w分配(a )字节的空间。

struct worker
{ int no; //2
char name[20]; //20
char sex;//1
union
{ int day; char month[10]; int year;}birth;//10
} w;
A 33
B 30
C 37
D 25
11.设有以下定义,值为5的枚举常量是(c )。

enum week{sun,mon,tue=3,wed,thu,fri,sat} w;
A tue
B sat
C thu
D fri
12.下面选项中正确的赋值语句是(设char a[5],*p=a;)(a)。

A p="abcd";
B a="abcd";
C *p="abcd";
D *a="abcd";
13.若有数据类型定义和声明为:
struct{
int x,y;
}a={5,10},b={10,15},c,*pa=&a,*pb=&b;
以下表达式中值不等于5的值( d )。

A. c.x=a.x%b.x //=5%10
B. pa->y/pb->y-pa->x+pb->x
C. (a.x<b.x)?a.x:b.x
D. c.x=a.x,c.y=a.y
14.若函数定义为:
void f1 ( int x, int y, int *p)
{
*p=x>y?x:y;
}
且main函数中有声明:int a=1,b=2,c; 则以下语句中正确的是( c )。

A. f1 (a,b,c);
B. f1 (a,b,3);
C. f1 (a,b,&c);
D. f1 (1,2)
15.以下关于函数定义的叙述中错误的是(b)。

A. 函数体中可以声明与函数名同名的局部变量
B. 在函数体中可以定义另一个函数
C. 在函数体中可以调用函数本身
D. 在函数体中可以没有return语句
16. 若要求数据文件myf1.dat被程序打开后,文件中原有的数据均被删除,程序写入此文件的数据可以在不关闭文件的情况下被再次读出,则调用fopen函数时的形式为()。

A. fp=fopen(“d:\\myf1.dat”,”w”);
B. fp=fopen(“d:\\ myf1.dat”,”r+”);
C. fp=fopen(“d:\\ myf1.dat”,”r”);
D. fp=fopen(“d:\\ myf1.dat ”,”w+”); 17.设a为int型变量,执行下列赋值语句后,a的取值分别是()。

a=125.534; a=20.0/3; a=(int)125.521%4;
A. 125,6,31
B. 125,6,1
C. 125,6.666666,31
D. 125.534,6.666666,2
18.以下函数的功能是( b )。

int f ( char *x)
{
char *y=x;
while ( *y++);
return y-x+1;
}
A. 字符串复制
B. 计算x指向的字符串的长度
C. 比较两个字符串的长度
D. 将x指向的字符串连接到y指向的字符串之后
19.以下程序的输出结果为()。

main( )
{ char c;
int i;
for(i=65;i<68;i++)
{ c=i+32;
switch(c)
{ case 'a':case 'b':case 'c':printf("%c,",c);break; default:printf("end");}
}
}
A a,b,c,end
B a,a,a,end
C a,a,a,
D a,b,c,
20.关于全局变量,以下叙述中正确的是()。

A. 全局变量声明语句可以放在程序文件中的函数之外的任何位置
B. 全局变量不能与某个函数的形式参数变量同名
C. 可以在所有函数中对一个全局变量做赋值或引用操作
D. 全局变量的初值是不确定的
21.以下程序的输出结果为(d)。

main( )
{ char s1[40]="country",s2[20]="side";
int i=0,j=0;
while(s1[i]!='\0') i++;
while(s2[j]!='\0') s1[i++]=s2[j++];//弄清楚咯~~~~~~~~
s1[i]=0;
printf("%s\n",s1);
}
A side
B country
C sidetry
D countryside 22.下列说法不正确的是()。

A 主函数main中定义的变量在整个文件或程序中有效
B 不同函数中,可以使用相同名字的变量
C 形式参数是局部变量
D 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效
23. 以下二维数组声明中,正确的是( b )。

A. char b[2][3]={“a”,”b”,”c”};
B. char b[][3]={0};
C. char b[2][]={0};
D. char b[][]={0}
24.若有声明“int a[4][3]={1,2,3,4,5,6},*p=a[1],(*q)[3]=a;”,则以下不能够输出6的语句是( c )。

A.printf(“%d”,a[1][2]);
B. printf((“%d”,*(p+2));
C.printf(“%d”,**(q+1));
D. printf(“%d”,q[1][2]); ;
25.具有相同类型的指针类型变量p与一维数组a,不能进行的操作是()。

A p=a;
B *p=a[0];
C p=&a[0];
D p=&a;
26. 以下关于预处理命令的叙述错误的是()。

A 预处理命令由预处理程序解释
B 程序中的预处理命令是以#开始的
C 若在程序的一行中出现多条预处理命令,这些命令都是有效的
D 预处理命令既可以出现在函数定义的外部,也可以出现在函数内部
27. 如果需要将字符串“Apple”保存在字符数组s1中,以下操作中错误的是()。

A. char s1[10]=”Apple”;
B. char s1[10]; s=” Apple”;
C. char s1[10];strcpy(s,” Apple”);
D. char s1[10]={0};strcat(s,” Apple”);
28. 已有声明“int x,a=3,b=2;”,则执行赋值语句“x=a>b++?a++;b++”后,变量x、a、b
的值分别为()。

A 3 4 3
B 3 3 4
C 3 3 3
D 4 3 4
29. 如果一个函数只限于被同一程序文件中的其他函数调用,不允许被其他程序文件中的函数调用,则在定义该函数时应在其函数首部加上()关键字。

A. static
B. extern
C. auto
D. register
30.以下4个程序段中有3个程序的执行效果总是相同的,另一个执行效果不同的是()。

A if( a>b ) c=a,a=b,b=c;
B if( a>b ) { c=a,a=b,b=c;}
C if( a>b ) c=a;a=b;b=c;
D if( a>b ) { c=a;a=b;b=c;}
二、填空题(25×2=50分)
1. stdio是指向((1) mian )的指针。

2. 当某程序准备从一个磁盘文件中读入数据,需要有类似“FILE *fp”这样的声明,该声明中的FILE是指((2)long )。

3. 表示“当x取值在[1,ln10)范围内时,y取值1,否则 y取值-1”所使用的C表达式为“y=( x>1&&x<log(10) (3)) ? 1 : -1 ”。

4. 除goto语句外,在循环结构中执行((4)continue )语句可提前结束本次循环直接进入下一次循环。

5. 若有程序段“int a[10],*p=a,*q; q=&a[5];”,则表达式q-p的值是((5))。

6. 若有声明“int r=2;”,则执行语句“printf(“%d”,sizeof(2*3.14*r));”时输出为((6))。

7. 已有定义“#define M(a,b,c) a*b-c”,执行语句“printf(“%d”,M(2+3,2+3,4))”时的输出为((7))。

8. 以下程序运行时输出到屏幕的结果为((8))
#include<stdio.h>
void s(float x, float y)
{ float z ;
if( x>y) z=x,x=y,y=z;
}
void main()
{ float x=10.5,y=7.25,z=13.75;
if( x>y ) s ( x, y);
if( x>z ) s( x, z);
if( y>z ) s( y, z);
printf( “%f\t%f\t%f\n”,x, y, z);
}
9. 以下程序在TC3.0环境下运行时输出到屏幕的结果是((9))。

#include<stdio.h>
int fun( int first, int second )
{
return first++*second++;
}
int main(void)
{
int p=3,r;
printf(“%d\t”,fun(p++,p++));
printf(“%d\n”,p);
}
10. 以下程序运行时输出到屏幕的结果中第一行是((10)),第二行是((11)), 第三行是((12))
#include<stdio.h>
void fun( int m, int n)
{ if( m>=n)
printf(“%d”, m);
else
fun(m+1, n);
printf(“%d\n”,m);
}
void main()
{ fun(3,5);}
11. 以下程序运行时输出到屏幕的结果中第一行是((13)),第二行是((14))。

#include<stdio.h>
void change (int x, int m)
{
static char ch[]={…0‟,‟1‟,‟2‟,‟3‟,‟4‟,‟5‟,‟6‟,‟7‟,‟8‟,‟9‟};
int i=0,r;
char b[80];
while (x){
r=x%m;
x/=m;
b[i++]=ch[r];
}
for (--i;i>=0;i--)
printf(“%c”,b[i]);
}
int main(void)
{
int a,b;
change(10,2);
printf(“\n”);
change(10,4);
return 0;
}
12. 已知方程x2-x-2=0在区间【1,4】内有一个实根。

以下程序中函数rootY采用二分法求方程f(x)=0在区间【a,b】内的一个实根,当|f(x)|<0.000001时,x即为所求的近似实根。

#include<stdio.h>
#include<math.h>
double f ( double x)
{
return x*x-x-2;
}
double root(double a,double b)
{
double m=(a+b)/2;
while(fabs(f(m))>1e-6){
if( (15)>0)
a=m;
else
b=m;
(16);
}
return (17);
}
int main(void)
{
printf(“\n One root is %lf\n”,root(1,4));
}
13.以下程序实现对main函数内声明的局部数组a中的后10个元素做升序排序。

排序算法为选择法。

#include<stdio.h>
void sort(int *x,int n);
int main(void)
{
int a[12]={4,2,8,5,6,7,1,9,10,3},k;
sort( (18) ,10);
for(k=0;k<12;k++)
printf(“%d”,a[k]);
return 0;
}
void sort (int *x ,int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
(19);
for(j=i+1;j<n;j++)
if( (20) )
k=j;
if(k!=i){
(21)
}
}
}
14. 已知h1和h2为两个单向链表的头指针,h1指向的链表不为空链表。

Add函数的功能是将h2指向的链表(简称h2链表)中全部结点插入到h1指向的链表(简称h1链表)中第n个结点(n>0)之后。

如果h2链表为空链表,则函数直接返回h1链表首结点的地址。

如果h1结点中不存在第n个结点,则将h2链表中全部结点添加到h1链表的末尾,函数返回h1链表首结点的地址。

单向链表结点定义为:
struct node
{ int data;
struct node *next;
};
#include<stdio.h>
NODE *add(struct node *h1,struct node *h2,int n)
{ struct node *p1=h1,*q=h2,*q=h2,*p2;
int i=0;
if (h2==NULL (22) ) return h1;
p2=h1;
while(p2)
{ if( p1&&i<n)
{ p2=p1;
p1=p1->next
(23) i++;
}
if (i<n)
p2->next=q;
else
{(24) p2->next=q;
while (q->next) q=q->next;
q->next=p1 (25) ;
}
return h1;
}。

相关文档
最新文档