四川大学历年考研C语言试题及答案.docx

上传人:b****8 文档编号:9500548 上传时间:2023-05-19 格式:DOCX 页数:38 大小:48.88KB
下载 相关 举报
四川大学历年考研C语言试题及答案.docx_第1页
第1页 / 共38页
四川大学历年考研C语言试题及答案.docx_第2页
第2页 / 共38页
四川大学历年考研C语言试题及答案.docx_第3页
第3页 / 共38页
四川大学历年考研C语言试题及答案.docx_第4页
第4页 / 共38页
四川大学历年考研C语言试题及答案.docx_第5页
第5页 / 共38页
四川大学历年考研C语言试题及答案.docx_第6页
第6页 / 共38页
四川大学历年考研C语言试题及答案.docx_第7页
第7页 / 共38页
四川大学历年考研C语言试题及答案.docx_第8页
第8页 / 共38页
四川大学历年考研C语言试题及答案.docx_第9页
第9页 / 共38页
四川大学历年考研C语言试题及答案.docx_第10页
第10页 / 共38页
四川大学历年考研C语言试题及答案.docx_第11页
第11页 / 共38页
四川大学历年考研C语言试题及答案.docx_第12页
第12页 / 共38页
四川大学历年考研C语言试题及答案.docx_第13页
第13页 / 共38页
四川大学历年考研C语言试题及答案.docx_第14页
第14页 / 共38页
四川大学历年考研C语言试题及答案.docx_第15页
第15页 / 共38页
四川大学历年考研C语言试题及答案.docx_第16页
第16页 / 共38页
四川大学历年考研C语言试题及答案.docx_第17页
第17页 / 共38页
四川大学历年考研C语言试题及答案.docx_第18页
第18页 / 共38页
四川大学历年考研C语言试题及答案.docx_第19页
第19页 / 共38页
四川大学历年考研C语言试题及答案.docx_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

四川大学历年考研C语言试题及答案.docx

《四川大学历年考研C语言试题及答案.docx》由会员分享,可在线阅读,更多相关《四川大学历年考研C语言试题及答案.docx(38页珍藏版)》请在冰点文库上搜索。

四川大学历年考研C语言试题及答案.docx

四川大学历年考研C语言试题及答案

0引言

1历年川大考研真题讲评

1.1四川大学2000年攻读硕士学位研究生入学考试试题及答案

C语言部分

一、选择题(每小题2分,共10分)

(下在各小题,分别有一个或多个正确答案,请将所有正确答案的编号,填写在该小题题干后的括号内。

错选或漏选均不得分)。

1、若定义:

inta[2][3]{0,2,4,6,8,10};以下描述正确的有(A,C,D,E)

A、*(a+1)为元素6的地址

这里a+1=a[1]的地址;*(a+1)的值是6,故A正确。

B、*(a[1]+1)的值为2

为8,故B不正确

C、**(a+1)+2的值为8

这里a+1是一个指针,指向的是a[1].*(a+1)为a[1],a[1]指向的是a[1][0].**(a+1)为6,加2得8,故C正确;

D、a[0]与a相同

因二者都是指针,指针的地址都是指向数组中的第一个元素的地址,故D正确。

E、a[1][2]的值为10

它是指第二行的第三个元素,为10,正确

2、对函数的正确使用方法描述(A,C,D)。

A、用数组做函数参数时,必须在主调函数和被调函数中分别定义数组

B、实参数组元素和形参数组元素类型可以不一致

C、形参数组长度可以不指定D、形参数组长度可以大于实参数组长度

E、数组名做参数属于值传递

3、对静态变量的正确描述(A,B,D,E)

A、静态局部变量在静态存储区内分配单元()

B、静态外部变量可以赋初值,也可以不赋初值

C、静态外部变量的作用与外部变量相同

D、静态局部变量在函数调用结束时,仍保存其值,不会随着消失。

E、静态局部变量只赋一次初值

4、下列描述正确的是(A,C)。

A、由main函数及其参数argc和*argv[]可以实现命令行方式

B、使用fclose关闭文件时,先释放文件指针,再写缓冲区数据到文件中

//先写缓冲区数据到文件中,再释放文件指针

C、字符数组并不要求它的最后一个字符是‘\0’

//是的,以字符指针指向的字符串才要求,因为只有这样,才能知道字符串的长度,而在字符数组中,不用\0,一样可以知道到哪里是字符数组的结尾。

D、‘A’和“A”都是字符串常量

E、若char*S=“\ta\017bc”;则指针变量S指向的字符串所占的字节数是7

5、在缓冲文件系统中用于读写的函数有(A,B,D)

A、putchar()B、fread()C、rewind()D、purw()E、fseek()

二、程序阅读,并给出运行结果(共10分,每题5分)。

(1)main()

{unsigneda,b,x

intn;

a=0x763输出结果:

n=6;

b=a<<(12-n);

x=(a>>n-2)^b;//+,-,的优先级比<<,>>高。

printf(“\nb=%x,\nx=%x”,b,x);

在用2个字节表示整数的系统中

结果为

d8c0

d8b6

在用4个字节表示整数的系统中

结果为

1d8c0

1d8b6

故以上两种结果都正确。

(2)#include〈stdin.h〉

structm{intx;

int*y;

}*p;

inta[4]={12,33,-40,100};

structmb[4]={10,&a[2],9,&a[3],8,&a[0],7,&a[1]}'

main()

p=b;输出结果:

printf(“%d\n”,++p->x);//->的优先级高于++,因此等于是++(p->x),为11

printf(“%d\n”,(++p)->x);//p后移一个元素,其x值为9;

printf(“%d\n”,++(*p->y));

//->的优先级高于*,此时p已指向b[1],故*(p->y)为a[3]为100.自加后为101;

故输出结果为:

11

9

101

三、程序设计(共10分)

设在文件a.txt和文件b.txt中分别存有两个字符串,设计一个程序将这两个字符串按依序交叉的方式合并为一个字符串(例如“aaaaa”与“bbb”的合并结果为“abababaa”,而“bbb”与“aaaaa”的合作结果为“bababaa”,)并将结果存入文件a.txt中。

【答案】

写程序时,可以分别读取a.txt文件和b.txt文件,注意

(1),无论a文件先读完还是b文件先读完,程序都能作出适应性的判断。

注意

(2)把a和b合并的结果,写到一个临时文件c中,最后把c的文件覆盖到a文件中,达到题意的要求。

#include

main()

{

FILE*fp,*fq,*fr;

charch;

if((fp=fopen("a.txt","r+"))==NULL)

{printf("cannotopenfilea.txt");

exit(0);

}

if((fq=fopen("b.txt","r"))==NULL)

{printf("cannotopenfileb.txt");

exit(0);

}

fr=fopen("c.txt","w+");

while(!

feof(fp))

{

ch=fgetc(fp);

fputc(ch,fr);

if(!

feof(fq))

{

ch=fgetc(fq);

fputc(ch,fr);

}

}

while(!

feof(fq))

{

ch=fgetc(fq);

fputc(ch,fr);

}

rewind(fp);rewind(fr);

while(!

feof(fr))

{

ch=fgetc(fr);

fputc(ch,fp);

}

fclose(fp);fclose(fq);fclose(fr);

}

1.2四川大学2001年攻读硕士学位研究生入学考试试题及答案

1.2.1第2001年――C语言程序设计题目

一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码写在答题纸上。

请注意注明题号。

每小题1分,共计6分)

1、‘\t’表示什么?

①字符串常数②标识符③变量④字符常量

答案:

2、对宏定义不正确的描述是哪一个?

①在进行宏定义时,可以引用已经定义的宏名,可以层层置换

//可以引用已经定义了的宏名,可以层层置换

②宏名的有效范围包括本文件的任何位置

//宏名的有效范围定义命令之后到本源文件结束,可以用#define终止宏定义的作用域

③宠定义不是语句,不必在行末加分号

//是预处理定义语句

④对程序中双引号括起来的字符串,即使与宏名相同,也不进行置换

3、若定义staticchars[20]=”computer”;则执行语句x=strlen(s);之后,x的值为多少?

①20②9③8④19

//strlen函数计算char*型字符串的长度的时候,并不包含末尾的\0;

4、以下哪一个表达式取值是正确的?

①6>5结果为6②6&&5结果为7

③6||5结果为7④6<5结果为0

5、如定义

enumweekday{one,two,thr,fou,fiv};

enumweekdayworking;

以下哪个是不正确的枚举变量的使用?

①working=thr;②working=2;

③working=(enumweekday)2;

④working=(enumweekday)(5-3);

//不能对其赋值

6、下列说法中正确的是哪一个?

①sizeof(char)是结果为整型的表达式

②sizeof(char)是一个不合法的表示形式

③sizeof(char)是一种函数调用

④sizeof(char)是结果为实型的表达式

二、阅读程序,并回答问题(共12分)

1、下列程序的输出是什么?

(3分)

#include

voidmain()

char*aplha[6]=﹛“ABC”,“DEF”,“GHI”,“JKL”,“MNO”,“PQR”﹜;

char**p;

inti;

p=aplha;

for(i=0;i<4;i++)

printf(“%s”,p[i]);

printf(“\n”);

//输出结果

ABCDEFGHIJKL

刚好是字符串数组里面的前四个元素的内容连接起来

2、下列程序为什么无法将用户输入的三个整数按从小到大排序输出?

应该如何修改?

(6分)

#include

voidswap(intx,inty)

intt=x;

x=y;

y=t;

voidmain()

inta,b,c;

scanf(“%d,%d,%d”,&a,&b,&c);

if(a>b)swap(a,b);

if(a>c)swap(a,c);

if(b>c)swap(b,c);

printf(“%d,%d,%d”,a,b,c);

//函数swap采用值传递,虽然将形参x和y交换了,但是并不影响到实参。

将值传递改成指针传递就可以了。

C函数参数采用值传递方式,虽然swap函数将形式参数x和y的值进行了调换,但是影响不到相应的实在参数。

所以在主函数中,通过调用sawp函数调换a和b(或a或c,或b和c)的值是根本达不到目的的。

修改:

(1)(2分)

voidswap(int*x,int*y)

intt=*x;

*x=*y;

*y=t;

(2)(2分)主函数

if(a>b)swap(&a,&b);

if(a>c)swap(&a,&c);

if(b>c)swap(&b,&c);

3、假设系统为基本整型量分配2个字节,为字符型量分配1个字节。

下列程序完成的功能是什么?

(3分)

#include

union

intn;

charch[2];

﹜u;

voidmain()

intm;

scanf(“%d”,&m);

u.n=m;

printf(“\n%u,%u”,u.ch[0],u.ch[1]);

//该程序的功能,取用户输入的整数值的高字节和低字节,并按照任意整数的低字节和高字节分别输出。

三、程序设计题(12分)

假设一个文本文件中保存着100个整数,请将这100个整数按从小到大的顺序写到另一个文本文件中去,并且在新文件中每10个整数占一行。

源文件名和目标文件名通过命令行参数获取。

分数分配:

变量定义2分

命令行参数处理1分

文件打开1分

文件读2分

排序3分

文件写2分

文件关闭1分

#include

voidmain(intargc,char*argv[])

FILE*fin,*fout;

Inta[100],i,j,t;

if(argc!

=3)

printf(“Youforgottoenterafilename\n”);

return;

fin=fopen(argv[1],“r”);

fout=fopen(argv[2],“w”);

for(i=0;i<100;i++)

fscanf(fin,“%d”,&a[i]);

for(i=0;i<99;i++)

for(i=0;i<99-i;i++)

if(a[j]>a[j+1])

﹛t=a[j];a[j]=a[j+1];a[j+1]=t;﹜

for(i=0;i<100;i++)

if(i%10=0)

fprintf(fout,“%s”,“\n”);

fprintf(fout,“%d”,a[i]);

fclose(fin);

fclose(fout);

 

1.3四川大学2002年攻读硕士学位研究生入学考试试题及答案

1.3.1第2002年――C语言题目

C语言程序设计(共30分)

一、单项选择题(在每小题的四个备选答案中,选出一个正确答案。

每小题1分,共6分)

1、如果I为整型变量,f为float型变量,c表达式'a'+I*f的类型为。

A、字符型B、整型C、单精度型D、双精度型

//即使是两个float型的数据相加,都化成double型float型的数据在运算时一律转化成双精度型,提高其运算精度

2、关于c表达式5||(a=b+c)==3的值,正确的说法为。

A、值为1B、值为5C、值为0

D、仅这一个表达式,不能确定值,必须知道a,b,c的值后才能计算。

//等号==的优先级高于||所以先计算(a=b+c)==3但是不论它为真或假,在与5进行或运算时,按照或运算的法则,只要一方为真,表达式的结果为真。

3、若整型变量a的值为50,则c表达式a>>2的值为。

A、50B、25C、12.5D、12

//每右移一位除以2,且由于a为整型,结果为整型

4、若c,c1,c2均为字符型变量,下列语句执行后。

c='a';

c1=++c;

c2=c++;

c1,c2的值分别为。

A、c1='b',c2='c'B、c1='a',c2='c'C、c1='b',c2='b'D、c1='a',c2='b'

//前加加,先加1后使用值,后加加是先使用其值在加加,所以c加加后的值赋予c1,c1得值b,c2先使用值,再加加,c2得值b

5、以下c语句执行后,

inti,s=0;

for(i=0;i<10;i++)s+=i;

printf('%d\n',i);

输出的内容为。

A、0B、9C、10D、11

//i值在循环外定义,所以其值循环结束仍有意义,得值10

6、以下c语句执行后,

chars1[100]=″IlikeC1anguage″,s2[100];

strcpy(s2,s1);

strcat(s1,s2);

puts(s2);

输出的内容为。

A、IB、IlikeClanguageC、IlikeClanguageIlikeClanguage

D、IlikeClanguageIlikeClanguageIlikeClanguage

//连接后的串存在s1里,对s2没有影响

二、阅读程序,写出该程序的执行结果。

(4分)

#include〈stdio.h〉

voidmain()

{chara[3][10]={"Beijing","Shanghai","Chengdu"};

charp1,(*p2)[10];

p1=a[0];

p2=a;

printf("%c\n",*(a[1]+1));

//a[1]代表是第一行字符串Shanghai,加1后得值第一个字符h的地址,*取出其地址里的值h

printf("%c\n",*(*(a+1)+2));

//*(a+i)=a[i]代表是第一行字符串Shanghai,加2后得值第2个字符a的地址,*取出其地址里的值

printf("%c\n",*(p1+1));

//p1是一字符指针,加一指向第零行第1个字符e的位置,*取出其地址里的值

printf("%c\n",*(*(p2+1)+2));

//p2为一指向数组的指针,p2是与数组名等价的指针,它指向2维数组的首行,p2+1指针指向了第一行字串Shanghai,加2后得值第2个字符a的地址,*取出其地址里的值

printf("%s\n",*(p1+1));

//打印的从第一个字符开始的第零行余下的字符串eijing

printf("%s\n",*(p2[2]);

//p2[2]指的是第二行,打印第二行字符串Chengdu

printf("%s\n",*(p2+1));

//p2+1指向的是第一行字符串shanghai

三、按要求编写函数。

(8分)

在一程序中定义了如下结构类型用于处理单向链表:

structlinkage{

intvalue;

structlinkage*pNext;

};

现已经编写出按节点的成员a值从小到大建立初始链表的函数

create(),如下所示:

structlinkage*create(void)

structlinkage*pHead;

inta[4]={2,1,3,5};

pHead=NULL;

for(i=0;i<4;i++)

pHead=addItem(pHead,a[i]);

returnpHead;

在该函数的for循环前,pHead为NULL;在执行整个for循环后,创建的链表如下所示:

即在被调函数addItem()中,需要动态分配内存,生成新节点,将传入的第二参数的值赋给该节点的成员value:

并通过第一个参数链表首节点确定适当位置放置该新节点。

请完成函数:

structlinkage*addItem(structlinkage*pHead,intvalue);

返回值指向单向链表头节点。

你可能用到下面的动态内存分配函数。

void*malloc(unsignedintsize);其作用是在内存的动态存储区中分配一个长度为size的连续空间。

返回值为指向分配域起始地址的指针。

1、在空链表中加第一个节点2分;

2、加到当前链表头节点前2分;

3、加到当前链表头节之后适当位置,可分为两步。

2分;

4、其它部分2分,包括整体结构,变量定义,返回值。

structlinkage*addItem(structlinkgae*pHead,intvalue)

{structlinkage*p,*q,*r,*s;

p=pHead;

if(!

p)

{r=(structlinkage*)malloc(sizeof(structlinkage));

r->a=value;

r->pNext=NULL;

pHead=r;

elseif(value<=p->a)

{r=(structlinkage*)malloc(sizeof(structlinkage));

r->a=value;

r->pNext=p;

pHead=r;

else

{q=p>pNext;

while(q)

if(value<=q->a)

break;

else

{p=q;

q=p->pNext;

r=(structlinkage*)malloc(sizeof(structlinkage));

r->a=value;

r->pNext=q;

p->pNext=r;

returnpHead;

四、程序设计。

(12分)

单位HTML文件由标签,标题和正文主体等部分组成。

如下所示:

〈HTML〉

〈HEAD〉

〈TITLE〉HTML标题部分

〈/HEAD〉

这里是HTML文件的主体部分。


换新行。

〈/HTML〉

符号"<与">"及其之间的内容是标签,如〈HTML〉,等。

其它部分是标题和主体。

请按以下说明和要求完成程序,将简单的HTML文件转换为TXT文件:

1.序将简单HTML文件的有标签和换行符(\n)(去掉。

标题部分结束(遇到标签)后加上一个换行符(\n)。

每一个
标签换成一个换行符(\n)。

其余部分原样保留。

如上面的简单HTML文件处理为(↙表示换行):

HTML标题部分↙

这里是HTML文件的主体部分。

换新行。

2.简单HTML文件的标签内没有嵌套情况,即在"<和">"这间不会再出现"<或">"。

3.标签内的内容大小写无关。


,
,
等价。

4.示签的"<和">"与标签内容间无空格。

即不会出现

等情况。

5.标题和正文中不会出现"<和">"字符,它们通过转义字符实现,这时尤需考虑。

6.程序需要处理命令行参数。

第一个参数指要处理的HTML文件名,第二个参数指定处理后要存放的文件名。

这两个文件都是文本文件。

7.程序必须进行必要的出错处理,如无法打开文件等。

8.程序不需要包含头文件。

1、main()函数形参处理:

2分。

2、变量定义1分。

3、打开关闭文件2分;

4、读源文件1分;

5、能从标签中找出内容〈BR〉〈/TITLE〉换为'\n'部分2分;

6、区分开标签和其它部分,并按要求写入目标文件2分;

7、整体结构正确2分;

voidmain(intargc,char*argv[])

{charC,tag[7];

intstatus,len;

FILE*fin,*fout;

if(argc!

=3)

{printf("参数个数不对!

")

exit

(1)

if((fin=fopen(argv[1],"r")))==NULL)

printf(“打不开源文件”);

exit

(1);

}

if((fout=fopen(argv[2],"w")))==NULL)

printf("无法写入文件!

");

fclose(fin);

exit

(1);

}

status=0;

while((c=fgetc(fin)))!

=EOF)

switch(C)

case'<':

status=1;

len=0;

break;

case‘>’:

status=0;

if(len<=6)

tag[len]=0;

if(!

strcmp(tag,”/title”)||!

strcmp(tag,”br”))

fputc(‘\n’,fout);

break;

case'\n':

break;

default:

if(!

status)

fputc(c,fout);

else

{len++;

if(len<=6);

tag[len-1]=c;

fclose(fin);

fclose(fout);

 

1.4四川大学2003年攻读硕士学位研究生入学考试试题及答案

1.4.1第2003年――C语言题目

C语言程序设计(40分)

一、分析下面的程序,写出程序执行结果。

(每小题4分,共2分)

1、

#include〈stdio.h〉

voidswap(int**p1,int**p2)

{int*t;

t=*p1;

p1=p2;

*p2=t;

voidmain()

{inta=1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2