c语言试题及答案Word文件下载.docx
《c语言试题及答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《c语言试题及答案Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
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<
stdio.h>
{
FILE*fp,*fq,*fr;
charch;
if((fp=fopen("
a.txt"
"
r+"
))==NULL)
{printf("
cannotopenfilea.txt"
);
exit(0);
网址:
}
if((fq=fopen("
b.txt"
r"
cannotopenfileb.txt"
fr=fopen("
c.txt"
w+"
while(!
feof(fp))
ch=fgetc(fp);
fputc(ch,fr);
if(!
feof(fq))
ch=fgetc(fq);
rewind(fp);
rewind(fr);
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<
stdio.h>
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分)
voidswap(intx,inty)
intt=x;
x=y;
y=t;
inta,b,c;
scanf(“%d,%d,%d”,
&a,
&b,
&c);
if(a>
b)
swap(a,b);
c)
swap(a,c);
if(b>
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>
swap(&a,&b);
swap(&a,&c);
if(b>
swap(&b,&c);
3、假设系统为基本整型量分配2个字节,为字符型量分配1个字节。
下列程序完成的功能是什么?
union
charch[2];
﹜u;
intm;
scanf(“%d”,&m);
u.n=m;
printf(“\n%u,%u”,u.ch[0],u.ch[1]);
//该程序的功能,取用户输入的整数值的高字节和低字节,并按照任意整数的低字节和高字节分别输出。
三、程序设计题(12分)
假设一个文本文件中保存着100个整数,请将这100个整数按从小到大的顺序写到另一个文本文件中去,并且在新文件中每10个整数占一行。
源文件名和目标文件名通过命令行参数获取。
分数分配:
变量定义
2分
命令行参数处理
1分
文件打开
文件读
排序
3分
文件写
文件关闭
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”);
100;
fscanf(fin,
“%d”,
&a[i]);
99;
99-i;
if(a[j]>
a[j+1])
﹛t=a[j];
a[j]=a[j+1];
a[j+1]=t;
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、值为1
B、值为5
C、值为0
D、仅这一个表达式,不能确定值,必须知道a,b,c的值后才能计算。
//等号==的优先级高于||所以先计算(a=b+c)==3但是不论它为真或假,在与5进行或运算时,按照或运算的法则,只要一方为真,表达式的结果为真。
3、若整型变量a的值为50,则c表达式a>>2的值为
A、50
B、25
C、12.5
D、12
//每右移一位除以2,且由于a为整型,结果为整型
4、若c,c1,c2均为字符型变量,下列语句执行后。
c='
;
c1=++c;
c2=c++;
c1,c2的值分别为
A、c1='
b'
c2='
c'
B、c1='
c2='
C、c1='
D、c1='
//前加加,先加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、0
B、9
C、10
D、11
//i值在循环外定义,所以其值循环结束仍有意义,得值10
6、以下c语句执行后,
chars1[100]=″IlikeC1anguage″,s2[100];
strcpy(s2,s1);
strcat(s1,s2);
puts(s2);
A、I
B、IlikeClanguage
C、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
*(*(a+1)+2));
//*(a+i)=a[i]
代表是第一行字符串Shanghai,加2后得值第2个字符a的地址,*取出其地址里的值
*(p1+1));
//p1是一字符指针,加一指向第零行第1个字符e的位置,*取出其地址里的值
*(*(p2+1)+2));
//p2为一指向数组的指针,p2是与数组名等价的指针,它指向2维数组的首行,p2+1指针指向了第一行字串Shanghai,加2后得值第2个字符a的地址,*取出其地址里的值
%s\n"
//打印的从第一个字符开始的第零行余下的字符串eijing
*(p2[2]);
//p2[2]指的是第二行,打印第二行字符串Chengdu
*(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->pNext=p;
else
q=p>pNext;
while(q)
if(value<=q->a)
break;
p=q;
q=p->pNext;
r=(structlinkage*)malloc(sizeof(structlinkage));
r->pNext=q;
p->pNext=r;