0205c语言试题.docx
《0205c语言试题.docx》由会员分享,可在线阅读,更多相关《0205c语言试题.docx(44页珍藏版)》请在冰点文库上搜索。
![0205c语言试题.docx](https://file1.bingdoc.com/fileroot1/2023-5/10/7cf85b7d-c20b-4e11-af7a-4be007ceafd7/7cf85b7d-c20b-4e11-af7a-4be007ceafd71.gif)
0205c语言试题
C程序设计笔试试题
一、填空题(本题20分,每小题2分)
1、为了表示一个算法,可以用不同的方法。
常用的算法描述工具有自然语言、伪代码、N-S图以及()图等。
2、C语言中规定,整型常量可以用十进制、()进制和()进制形式来表示。
3、在C语言中,对于负整数,在内存中是以()码形式进行存储。
4、在C语言中,若被定义为int类型的变量,在内存中占用2个字节的空间,也就是说,该类型变量的取值范围是()。
5、若定义:
int*p=&a;则有指针变量p应指向变量a的()地址。
6、若某变量被定义为auto变量的存储单元,则将被分配在内存的()存储区域。
7、局部静态变量的初值是在编译时被赋予的,在程序执行期间不再赋予初值。
对未赋初值的局部静态变量,C编译程序则自动给它赋初值()。
8、在下列给出的字符数组c,它在内存中所占用的字节数是()。
charc[]={“clanguage”};
9、若定义:
float*pf;则有执行语句为:
pf=(float*)malloc(4);
说明此时的指针变量pf是指向()个字节的首地址。
10、如果一个函数在其返回时,带回的是指针型的数据,那么就将此函数称之为()的函数。
二、请写出下列程序的运行结果
1、main()
{intn=100;
if(n>100)
printf(“%d\n”,n>100);
else
printf(“%d\n”,n<=100);
}
2、main()
{inta=2,b=-1,c=2;
if(a
if(b<0)c=0;
elsec+=1;
printf(“%d\n”,c);
}
3、main()
{charc1=’A’,c2=’Y’;
printf(“c1=%d,c2=%d\n”,c1,c2);
}
4、fun(inta,intb)
{intc;
c=a+b;
return(c);
}
main()
{intx=6,y=7,z=8,r;
r=fun((x--,y++,x+y),z--);
printf(“%d\n”,r);
}
5、#include
main()
{char*str[]={“One”,“Two”,“Three”,“Four”};
char**p;
for(p=str;pprintf(“%s”,*p);
}
三
1、以下程序的输出结果是:
fun(int*x)
{printf(“%d\n”,++*x);}
main()
{inta=25;fun(&a);}
A)23B)24C)25D)26
A)
2、以下程序的输出结果是
main()
{inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a+2;
printf(“%d\n”,*(p+2));
}
A)5B)4C)3D)2
3、以下程序的输出结果是
voidfun(int**s,intp[2][3])
{**s=p[1][1];}
main()
{inta[2][3]={1,3,5,7,9,11},*p;
p=(int*)malloc(sizeof(int));
fun(&p,a);printf(“%d\n”,*p);
}
A)1B)9C)7D)11
4、以下程序的输出结果是
#include
f1()
{intx=0;x++;
printf(“%d,”,x);
}
f2()
{staticintx;x++;
printf(“%d,”,x);
}
main()
{intk;
for(k=0;k<3;k++)
f1(),f2();
}
A)1,1,1,1,1,1B)1,1,1,2,1,3
C)1,1,2,2,3,3D)1,1,2,1,3,1
5、若有以下程序片段,则表达式()中的值为6。
structst
{intn;
structst*next;
};
main()
{structsta[3],*p;p=a;
a[0].n=5;a[0].next=&a[1];
a[1].n=7;a[1].next=&a[2];
a[2].n=9;a[2].next=NULL;
}
A)p++->nB)p->n++C)(*p).n++D)++p->n
四、请阅读下列给出的程序,并根据程序
的功能改正程序中的错误
(本题10分,每小题5分)
1、请改正以下程序片段中的错误(本小题5分)
structsk
{inta;
floatb;
}data={100,25.6};
main()
{int*p;
p=&data;
printf(“%d,%f\n”,p->a,p->b);
}
2、下列给定程序中,fun函数的功能是:
将p所指的字符串中的字母转换为按字母序列的后续字母,如将‘A’变成‘B’,‘a’变成‘b’,‘Z’变成‘A’,‘z’变成‘a’……,其它字符不变。
请改正函数fun中的错误,使它能得出正确的结果。
charfun(char*p)
{while(*p!
='@')
{if(((*p>='a')&&(*p<'z'))||((*p>='A')&&(*p<'Z')))
*p+=1;
elseif(*p=='Z')*p='A';
elseif(*p=='z')*p='a';
(*p)++;
}}
main()
{chars[100];gets(s);fun(s);printf("%s\n",s);}
五、求解下列给出的问题
(本题10分,每小题5分)
1、请画出以下代码运行时的链表结构,并写出其运行结果。
(本小题5分)
#include
structNODE
{intnum;
structNODE*next;
};
main()
{structNODE*p,*q,*r;intsum=0;
p=(structNODE*)malloc(sizeof(structNODE));
q=(structNODE*)malloc(sizeof(structNODE));
r=(structNODE*)malloc(sizeof(structNODE));
p->num=1;q->num=2;r->num=3;
p->next=q;q->next=r;r->next=NULL;
sum+=q->next->num;
sum+=p->num;
printf(“sum=%d\n”,sum);
}
(1)链表结构图(4分):
(2)运行结果(1分):
2、请用程序流程图描述求解下列问题的算法。
(本小题5分)
设某学校新生入学时,需报选体育课程选修科目。
其科目包括有:
篮球、排球、体操、乒乓球和网球。
请为某班级(30人)统计报选各体育科目的人数。
设:
用数字0表示篮球
1表示排球
2表示体操
3表示乒乓球
4表示网球
六、请设计并编写求解下列问题的程序
(本题20分)
1、请编写fun函数,在下列给出的一个有序的数列中插入一个数,且当该数插入后,应使该数列仍然有序。
(本小题10分)
60,68,78,88,90,90,95,96,98,100
#defineN10
main()
{inta[N+1]={60,68,78,88,90,90,95,96,98,100};
inti,x;
intfun(int*p,intnum);
scanf("%d",&x);
fun(a,x);
for(i=0;iprintf("%4d",a[i]);
}
intfun(int*p,intnum)
{intk,s=0;
2、请设计并编写建立一个如图6-1所示的具有5个结点的单向动态链表fun函数(本小题10分)
(提示:
利用malloc函数实现动态链表的建立)
图6-1含有5个结点的单向链表
structsk
{intnum;
intscore;
structsk*next;
}*h,*p1,*p2;
structsk*fun()
{
return(h);
}
main()
{p1=fun();
while(p1!
=NULL)
{printf("%d,%d\n",p1->num,p1->score);
p1=p1->next;
}
}
哈尔滨工业大学(威海)2005(秋)学期
一、填空(本题20分,每小题2分)
1、结构化程序是由三种基本结构组成,即顺序结构、选择结构和()结构。
2、在C语言中,整型常量可以用十进制、八进制和十六进制形式来表示。
其中八进制数是以数字0为开头,而十六进制数是以()为开头。
3、设在内存中由两个字节存放的最小整数是1000000000000000,则它所对应的十进制整数应该是()。
4、算术运算符的结合方向是先左后右,赋值运算符的的结合方向是先右后左;而函数参数的结合方向是()。
5、在C语言中,调用函数和被调用函数之间的数据可以通过三种方式进行传递:
①实参与形参之间的数据传递;②通过return语句把函数值返回调用函数;③通过()进行数据的传递。
6、在C语言中,把用来存放内存地址的变量称为()。
7、对二维数组元素的操作可以用下标、数组名、指向一维数组的指针变量、行指针以及()。
8、若比较两个字符串是否相等,应当使用字符串()函数。
9、若将一个变量定义为寄存器变量,则应使用关键字()作声明。
10、若有如下定义:
inta[3][4],(*p)[4];
p=a;
则说明p是一个指针变量,它所指向的是包含有4个整型元素的一维数组,在C语言中把此变量p称为()指针变量。
二、写出下列程序的运行结果(本题20分,每小题5分)
1、main()
{intx,a,b,ok1,ok2;
x=100;a=10;b=20;ok1=5;ok2=0;
if(a
if(b!
=15)
if(!
ok1)
{x=1;printf(“x=%d\n”,x);}
elseif(ok2)x=10;
x=-1;
printf(“x=%d\n”,x);
}
2、main()
{intx=10;
y=x++;
printf(“%d,%d\n”,(x++,y),y++);
}
3、prt(int*x,int*y,int*z)
{printf(“%d,%d,%d\n”,++*x,++*y,*(z++));
}
main()
{inta=10,b=40,c=20;
prt(&a,&b,&c);
prt(&a,&b,&c);
}
4、#include
#include
voidfut(int**s,intp[2][3])
{**s=p[1][1];}
voidmain()
{inta[2][3]={1,3,5,7,9,11},*p;
p=(int*)malloc(sizeof(int));
fut(&p,a);
printf(“%d\n”,*p);
}
三、选择题(本题20分,每小题4分)
1、以下程序的输出结果是:
main()
{inta=-1,b=4,k;
k=(++a<0)&&!
(b--<=0);
printf(“%d,%d,%d\n”,k,a,b);
}
A)104B)103C)003D)004
A)
2、以下程序的输出结果是
main()
{intx=-1;
printf(“%d,%u,%o\n”,x,x,x);
}
A)-1,-1,-1B)-1,32767,-177777
C)-1,32768,-177777D)-1,65535,177777
3、以下程序的输出结果是
main()
{inta[]={1,2,3,4,5,6},*p=a;
*(p+3)+=2;
printf(“%d,%d\n”,*p,*(p+3));
}
A)0,5B)1,5C)0,6D)1,6
4、以下程序的输出结果是()
#include
voidf1()
{intx=0;
x++;
printf(“%d,”,x);
}
voidf2()
{staticintx;
x++;
printf(“%d,”,x);
}
voidmain()
{intk,i;
for(i=0;i<3;i++)
f1(),f2();
}
A)1,1,1,1,1,1,1B)1,1,1,2,1,3
C)1,1,2,2,3,3D)1,1,2,1,3,1
5、以下程序的输出结果是()
#include
main()
{chaf*p=“abcde\0fghijk\0”;
printf(“%d\n”,strlen(p));
}
A)12B)15C)6D)5
四、请阅读下列给出的程序,并根据程序的功能改正程序中的错误(本题10分,每小题5分)
1、下列给定程序中,main函数的功能是计算:
S=1!
+2!
+3!
+……+10!
请改正该函数中的错误。
main()
{ints,t,j,i;
for(i=1;i<10;i++)
{t=1;
for(j=1;j
s+=t;
}
printf(“s=%d\n”,s);
}
2、下列给定程序中,fun函数的功能是:
依次取出字符串中所有的字母,并取代原字符串。
请改正fun中的错误,使它能得到正确的结果。
#include
fun(char*s)
{inti,j;
for(i=0,j=0;s[i]!
=’\0’;i++)
if((s[i]>=’A’&&s[i]<=’Z’)&&(s[i]>=’a’&&s[i]<=’z’))
s[j]=s[i];
s[j]=”\0”;
}
main()
{charstr[80];
gets(str);fun(str);
printf(“%s\n”,str);
}
五、请设计并编写求解下列问题的程序(本题30分)
1、请编写一个fun函数,它的功能是:
求出一个4XM整型二维数组中最小元素的值,并将此值返回调用函数。
(8分)
注意:
部分源程序给出如下:
#defineM4
#include
main()
{inta[4][M],j,i,min;
for(i=0;i<4;i++)
for(j=0;jscanf(“%d”,&a[i][j]);
min=fmin(a);
printf(“min=%d\n”,min);
}
intfmin(int(*p)[M])
{
}
注意:
05041-1,2,3,4和05042-1,2班学生做*2题,其他班做2题。
2、请编写一个查询学生成绩的fun函数,其功能是:
输入某学生学号,则应输出该学号所对应的成绩。
(10分)
#defineN2
#defineM8
main()
{ints[N][M]={{101,102,103,104,105,106,107,108},
{90,78,92,66,73,86,56,82}};
intnum,grade;
scanf(“%d”,&num);
grade=fun(s,&num);
printf(“num=%d,grade=%d\n”,num,grade);
}
fun(intt[N][M],int*p)
{
*2、学生的记录是由学号和成绩组成,现有N名学生的数据已存在由主函数建立的链表中,如下图所示。
请设计一个fun函数,其功能是:
把链表中分数最低的学生数据放在结构体数组t中,并要求由fun函数返回分数最低的学生人数。
注意,分数最低的学生可能不止一个。
请完成fun函数中的C代码。
(10分)
(本题只为05041-1,2,3,4和05042-1,2学生提供)
structstu1
{intnum;
ints;
structstu1*next;
};
structstu2
{intnum;
ints;
}t[5];
intn;
main()
{structstu1*h,*p1,*p2;
inti,k=0;h=NULL;
p1=p2=(structstu1*)malloc(sizeof(structstu1));
scanf("%d,%d",&p1->num,&p1->s);
h=p1;
for(i=1;i<5;i++)
{p1=(structstu1*)malloc(sizeof(structstu1));
p2->next=p1;
p2=p1;
scanf("%d,%d",&p1->num,&p1->s);
}
p2->next=NULL;
fun1(h);
n=fun(h);printf("n=%d\n",n);
for(i=0;iprintf("%d,%d\n",t[i].num,t[i].s);
getch();
}
intfun(structstu1*a)
{
}
3、请编写fun函数,其功能是将s所指字符串中ASCII码值为偶数的字符删除,串中剩余字符形成一个新串放在由t所指的数组中(12分)
例如:
若s所指字符串中的内容为:
ABCDEFG12345,其中的字符B的ASCII码值为偶数、……、字符2的ASCII码值为偶数、……,都应删除的字符,其他依次类推。
最后由t所指的数组中的内容应是:
ACEG135
注意:
部分源程序给出如下:
#include
#include
#include
intfun(char*s,chart[])
{
}
main()
{chars[100],t[100];
scanf(“%s\n”,s);
fun(s,t);
printf(“%s\n”,t);
}
考试时间:
2006年1月4日18:
30-20:
30
哈工大2004年秋季学期
C语言考试题
题号
一
二
三
四
五
六
七
八
九
十
总分
附加题
分数
说明:
考试成绩分为三部分:
实验成绩占10分,卷面笔试成绩占45分,机考成绩占45分,满分为100分。
本试卷为卷面笔试部分,卷面满分为45分。
参考答案
一、填空题(6分,每题2分)
1.C语言中基本数据类型包括整型、实型、字符型、枚举类型。
2.已知能被4整除而不能被100整除的或者能被400整除的年份是闰年,则判断某一年year是否是闰年的表达式为:
year%4==0&&year%100!
=0||year%400==0。
3.设有下列登记表,采用最佳方式对它进行类型定义。
姓名
性别
出生年月
家庭收入状况
家庭收入状况标记
年
月
日
低收入
中等收入
高收入
姓名用name表示,性别用sex表示,出生年月用birthDay表示,年用year表示,月用month表示,日用date表示,家庭收入状况用salary表示,低收入用low表示,中等收入用middle表示,高收入用high表示,家庭收入状况标记用salaryMark表示。
struct
{
charname[10];
charsex;
struct
{
intday;
intmonth;
intday;
}birthDay;
union
{
intlow;
intmiddle;
inthigh;
}salary;
intsalaryMark;
};
二、判断下列问题描述正确与否,正确的打“√”,错误的打“×”。
(3分,每题1分)
1.#definePI=3.14159;不是C语句。
(√)
2.在C语言中,可以用typedef定义一种新的类型。
(× )
3.共用体所占的内存空间大小取决于占空间最多的那个成员变量。
(√)
三、选择题:
(10分,每题1分)
1.以下不正确的C语言标识符是(D)。
A.AB1B.a2_bC._ab3D.4ab
2.若有定义int(*p)[4],则标识符p是一个D。
A、指向整型变量的指针变量
B、指向函数的指针变量
C、指向有四个整型元素的一维数组的指针变量
D、指针数组名,有四个元素,每个元素均为一个指向整型变量的指针
3.若用数组名作为函数调用时实参,则实际上传递给形参的是(A)。
A.数组首地址B.数组的第一个元素值
C.数组中全部元素的值D.数组元素的个数
4.C语言中规定函数的返回值的类型是由(B)。
A.return语句中的表达式类型所决定
B.在定义该函数时所指定的函数类型所决定
C.调用该函数时系统临时决定
D.调用该函数时的主调用函数类型所决定
5.以下错误的描述是(D)。
A.不同的函数中可以使用相同的变量名
B.形式参数是局部变量
C.一个函数内部定义的变量只能在本函数范围内有效
D.在一个函数内部的复合语句中定义的变量可以在本函数范围内有效
6.为了判断两个字符串s1和s2是否相等,应当使用(D)。
A.if(s1==s2)B.if(s1=s2)
C.if(strcpy(s1,s2))D.if(strcm