精华2
威望105
K币-4 元
注册时间2001-11-14
在线时间0 小时
最后登录2004-12-16
一般战友
- 精华
- 2
- 威望
- 105
- K币
- -4 元
- 注册时间
- 2001-11-14
|
这几天被非典关在屋里,正好有时间把试题整理一下送给又需要的人,现整理了一年的其他的整理中。。。。。。。。。
对外经济贸易大学
2001年攻读硕士学位研究生入学考试
C程序设计试题
一, 选择题
1, 下列常数中,不能作为C语言的常量是[ ]
A)0xA5 B)2.5e-2 C)3e3 D)0582
2,下列各项中,均为C语言关键字的是[ ]
A)auto,enum,include B)switch,typedef,continue
C)signed,union,scanf D)if,struct,type
3,C语言中整数-1在内存中的存储形势是[ ]
A)1111 1111 1111 1111 B)1000 0000 0000 0001
C)0000 0000 0000 0001 D)1111 1111 1111 1110
4,已知:int a=5,b=2,c;执行语句printf(“%d”,c=(a+b,a-b,a%b))后输出的结果是[ ]
A)7 B)3 C)2 D)1
5,已知:int a=5; 执行下列语句后输出结果是[ ]
if (a=0) printf(“%d”,a)
else printf(“%d”,2*a);
A)0 B)5 C)10 D)语法错误
6,已知:int a=5;执行语句while(a-->0);a的值是[ ]
A)5 B)0 C)-1 D)-2
7,已知:int*a();a是[ ]
A)指向int型的指针变量 B)int型的指针数组
C)返回值是指向int型的指针变量的一个函数
D)一个指向函数的指针变量,该函数的返回值是int型
8,C语言中存储类型是[ ]的变量,只有在使用时才占用内存单元
A)register,extern B)register,auto C)static,extern D)static,auto
9,根据一下定义,执行语句printf(“%d\n”,2*(N+Y(5+1)),显示结果是[ ]
#define N 3
#define Y(n) ((N-1)*n)
A)36 B)30 C)28 D)出错
10,下列说明中,错误的是[ ]
A) char s[3]=”gun”; B) char s[]=”gun”;
C) char *s=”gun”; D) char s[]={‘g’,’u’,’n’,’\0’};
11,C语言中一维数组的说明方式是:类型说明符 数组名[ ]
A)[常量表达式] B)[整形表达式]
C)[常量表达式]或[整形表达式] D)[整形变量]
12,下列程序段的功能是[ ]
int a[]={4,0,2,4,1},k,j,t;
for(k=1;k<5;k++){
t=a[k]; j=k-1;
while (j>=0 && t>a[j]){a[j+1]=a[j];j--;}
a[j+1]=t;}
A) 对数组a进行插入排序(升序) B)对数组a进行插入排序(降序)
C)对数组a进行选择排序(升序) D)对数组a进行选择排序(降序)
13,已知:char s[10],*p=s;下列语句中,错误的语句是[ ]
A) p=s+5; B) s=p; C)s[2]=p[4]; D)*p=s[0];
14,已知:int s[]={1,2,3,4},y,*p=s;执行语句y=*p++;后,变量y的值是[ ]
A)1 B)2 C)3 D)4
15,已知:int a,x[3][4];不能将x[1][1]的值赋给变量a的语句是[ ]
A)a=*(*(x+1)+1);B)a=x[1][1];C)a=*(*(x+1));D)a=*(x[1]+1);
16,设有如下说明,叙述错误的是[ ]
struct stu{
int a;
char b[10];
}stutype;
A)struct是结构类型的关键字 B)struct stu是用户定义的结构类型
C)stutype是用户定义的结构类型名 D)a和b是结构成员名
17,C语言中,下列运算符中优先级最低的是[ ]
A)( ) B)[ ] C)-> D)++
18,设有如下说明和语句,表达式的值是1002的是[ ]
struct stu{
int a,b;};
struct stu s[3]={{1001,20},{1002,19},{1003,18}};
struct stu *p=s;
A) (p++)->a B)(*p++)->a C)(*p++) D)(*++p)->a
19,已知函数:fread(buffer,size,count,fp); 其中buffer代表的是[ ]
A)整形变量,代表要读入的数据量 B)文件指针,指向要读入的文件
C)指针,指向要存放读入数据的地址D)存储区,存放要读入的数据
20,使用fgetc函数,则文件打开方式是[ ]
A)只写 B)追加 C)读或读\写 D) 答案B和C对
二,阅读程序段,填写运行结果
1, int x;
(x&1)+(x|1)-(x%2)+(~(~0U<<2))=[ ]
2,下面程序段的运行结果是[ ]
int a=0,b=0;
while (a<=9) a++;
while (b++<=9);
printf(“%d %d”,a,b);
3,下面程序由2个文件组成,运行结果是
/*文件*/
#include <stdio.h>
int x=10,y=10;
void add(void0
{y=10+x;x*=2;}
main()
{extern void sub();
x+=5;
add();sub();
printf(“x=%d y=%d\n”,x,y);
}
/ *文件2*/
void sub(void)
{extern int x;
x-=5;}
4,下面程序运行的结果是[ ]
main()
{int a[4][5],x,y;
for(x=1;x<4;x++){
for(y=x;y<5;y++)
{a[x][y]=(x/y)*(y/x);
printf(“%2d”,a[x][y]);}
printf(“\n”);}}
5,下面程序的运行结果是[ ]
#include<stdio.h>
main()
{union
{int a[2];
long k;
char c[4];
}t;
t.a[0]=0x3132;
t.a[1]=0x3334;
printf(“%lx\n”,t.k);
printf(“%c\n”,t.c[0]);
}
二, 程序选择填空
以下程序是对字符串按字典顺序进行排序,程序采用二分法排序,其中的strcmp是比较两个字符串的大小的函数。
#include<stdio.h>
#include<string.h>
main()
{char *pn[]={“red”,”blue”,”green”,”black”,”white”,”yellow”};
int a,j,gap,n=6;
char *temp;
for(gap=n/2;gap>0;[1])
for(a=gap;a<n;[2])
for(j=a-gap;j>=0;[3])
{if(strucmp)pn[j],pn[j+gap]}<=0)
[4];
temp=pn[j];pn[j]=pn[j+gap];pn[j+gap]=temp;
}
for(a=0;a<n;a++)printf(“%s\n”,[5]);}
1,A)gap++ B)gap-- C)gap/=2 D)gap-=2
2,A)a++ B)a-- C)a/=2 D)a-=2
3,A)j++ B)j-- C)j/=2 D)j-=gap
4,A)break B)exit C)return D)continue
5,A)pn[a] B)*pn[a] C)*pn D)pn+a
从键盘接受一个字符串,在命令行中指定的文件中查找,如果找到该字符串,在显示提示信息,否则将该字符串存入该文件尾,当输入的字符串为空时(长度为0),结束程序。
#include<stdio.h>
main(int argc,char *argv[])
{FILE *fp;
int flag;
char str[30],dline[80];
if((fp=fopen(argv[1],[6]))==NULL)
{printf(“Open file %s error\n”,argv[1],exit(1);)}
do {printf(“Input the word:”);
gets(str);
if(strlen(str)==0) break;
[7];
flag=1;
while(flag&&(fgets(dline,80,fp) [8]))
if(lindex(dline,str)>=0) [9];
if(flag) fputs(str,fp);
}while([10]);
fclose(fp);}
lindex(char *str1,char *str2)
/*lindex函数的功能是字符串查找,详细说明见四、1题,此处略*/
6,A)”r+” B)”w+” C)”a+” D)”w”
7, A)rewind(fp) B)fseek(fp,0,1) C)ftell(fp) D)空语句
8,A)!=NULL B)==NULL C)!=EOF D)==EOF
9,A)break B)flag=0 C)continue D)flag=1
10,A)ferror(fp)!=0 B)ferror(fp)=0 C)flag=0 D)flag=1
四,程序填空
1, 函数lindex(char *s,char *t)的功能是:从字符串s后往前检查是否包含字符串t,若包含,返回t在s中的位置,否则返回-1。例如:
lindex(“sdvsdg”,”sd”)=3
lindex(char *s,char *t)
{int a,j,k,m,n;
m=strlen(s);n=strlen(t);
for(a=[1];a>=0;a--)
{for(j=a,k=0;[2];j++,k++);
if(t[k]==’\0’)return(a);}
[3];}
2,下面程序的功能是:从键盘输入多行字符串,调用函数建立反序链表,然后输出整个链表。
#include<stdio.h>
struct node
{char data[80];
struct node *link;
}*head;
ins (struct node[4])
{if (head==NULL)
{q->link=NULL; head=q;}
else
{[5];}
}
main()
{char *ch;
struct node *p;
head=NULL;
while(strlen(gets(ch))>0)
{p=([6])malloc(sizeof(struct node));
strcpy(p->data,ch);
ins([7]);}
p=head;
while([8])
{printf(“%s\n”,p->data);
p=p->link;}
}
3,设pa和pb分别为两个升序排列的单链标的头指针,函数merge把这两个链表合并成按一个升序排列的单链表pc.
合并的算法是:从两表的第一个节点开始顺链逐个将对应数据元素进行比较,并复制小者并插入到pc表尾,如果对应数据元素相等,只取pa的元素。当两表中之一已到表尾,则复制另一个链表的剩余部分,插到pc表尾。为了减少程序中的判断,pc表增设一个表头结点,合并表运算结束后再把它删除。函数返回值是pc表的头指针。设pa和pb分别指向两个表当前搜索结点,p指向pc表的当前表尾结点。
#define DJ struct node
DJ { int data;
DJ *link;};
DJ *merge(DJ *pa,DJ *pb)
{DJ *p,*q,*pc;
pc= (DJ*)malloc(sizeof(DJ);
while ([9]){
q=(DJ*)malloc(sizeof(DJ);
if(pb->data<pa->data;
[10];}
else
{q->data=pa->data;
pa=pa->link;
if(pb->data==pa->data)[11];
}
p->link=q;
p=[12];
}
while(pa!=NULL)
{q=(DJ*)malloc(sizeof(DJ);
q->data=pa->data;
pa=pa->link;
p->link=q;
p=q;
}
p->link=NULL;
p=pc;
pc=[13]
free(p);
return(pc);
}
五,编写程序
1, 用递归的方法编写一个寒暑,将16进制的字符串转换成10进制整数,函数返回值为该整数,如16进制的字符串中包含非16进制的字符,返回值为零。要求:写出完整的c语言程序。
2, 已知现有由小到大排列的8个偶数,并且这8个偶数之和能被4整除。把它们安置在立方体的8个顶点上,使得每个面上4个数之和皆相等。
要求:先说明程序的思路,在画出流程图或N-S图,然后写出c语言程序。
※ 修改:movingsea于2003-04-29 18:00:41修改本文 |
|