衡阳师范学院C语言期末及答案_第1页
衡阳师范学院C语言期末及答案_第2页
衡阳师范学院C语言期末及答案_第3页
衡阳师范学院C语言期末及答案_第4页
衡阳师范学院C语言期末及答案_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2/2衡阳师范学院C语言期末一、单项选择题(共20题,每小题2分,共40分)1、以下叙述中错误的是 A、用户所定义的标识符允许使用关键字 B、用户所定义的标识符应尽量做到"见名知意" C、用户所定义的标识符必须以字母或下划线开头 D、用户定义的标识符中,大、小写字母代表不同标识2、函数的值通过return语句返回,下面关于return语句的形式描述错误的是________。 A、return表达式; B、return(表达式); C、一个return语句可以返回多个函数值 D、一个return语句只能返回一个函数值3、设x、y、t均为int型变量,则执行语句x=y=3;t=++x||++y;后,y的值为______。 A、不定值 B、4 C、3 D、14、下列程序的输出结果是______。

#include<stdio.h>

main()

{

inta=0,b=1,c=2;

if(++a>0||++b>0)++c;

printf("%d,%d,%d",a,b,c);

} A、0,1,2 B、1,2,3 C、1,1,3 D、1,2,25、有以下程序:

#include<stdio.h>

main()

{

inti,j,m=1;

for(i=1;i<3;i++)

{

for(j=3;j>0;j--)

{

if(i*j>3)break;

m*=i*j;

}

}

printf("m=%d\n",m);

}

程序运行后的输出结果是______。 A、m=4 B、m=2 C、m=6 D、m=56、执行以下语句段后,xy的值是________。int*pt,xy;xy=200;pt=&xy;xy=*pt+30; A、200 B、170 C、260 D、2307、是不正确的c语言赋值语句。 A、x=1,y=2 B、x++ C、x=y=5 D、y=int(x);8、有以下程序

#include<string.h>

voidf(charp[][10],intn)/*字符串从小到大排序*/

{

chart[10];

inti,j;

for(i=0;i<n-1;i++)

for(j=i+1;j<n;j++)

if(strcmp(p[i],p[j])>0)

{

strcpy(t,p[i]);

strcpy(p[i],p[j]);

strcpy(p[j],t);

}

}

main()

{

charp[5][10]={"abc","aabdfg","abbd","dcdbe","cd"};

f(p,5);

printf("%d\n",strlen(p[0]));

}

程序运行后的输出结果是______。 A、2 B、4 C、6 D、39、在c语言中,char型数据在内存中以形式存储。 A、原码 B、补码 C、ASCII码 D、反码10、判断两个字符串是否相等,正确的表达方式是________。 A、while(s1==s2) B、while(s1=s2) C、while(strcmp(s1,s2)==0) D、while(strcmp(s1,s2)=0)11、若二维数组a有m列,则计算任一元素a[i][j]在数组中位臵的公式为(假设a[0][0]位于数组的第一个位臵上)________。 A、i*m+j B、j*m+i C、i*m+j-1 D、i*m+j+112、在c语言中,() A、函数的定义可以嵌套,但函数的调用不可以嵌套 B、函数的定义和调用均不可以嵌套 C、函数的定义不可以嵌套,但函数的调用可以嵌套 D、函数的定义和调用均可以嵌套13、下列关于指针说法的选项中,正确的是________。 A、指针是用来存储变量值的类型 B、指针一旦定义就不能再指向别的变量 C、指针当中存储的是变量的内存地址 D、指针一旦定义必须要指向某一个变量14、下列语句执行后的结果是________。y=5;p=&y;x=*p++; A、x=5,y=5 B、x=5,y=6 C、x=6,y=5 D、x=6,y=615、以下程序的输出结果是________。intf(inta)

{

returna%2;

}

main()

{

ints[8]={1,3,5,2,4,6},i,d=0;

for(i=0;f(s[8]);i++)d+=s[i];

printf("%d\n",d);

} A、9 B、11 C、19 D、2116、下面的代码inti=10;之后的for循环语句,语法正确,不会编译出错的是________。 A、for(i=0,i<10,i++) B、for{

i=0;i<10;i++} C、for(;i>5;i--) D、for(i=0;i<10;i++;)17、c语言中的基本数据类型包括 A、整型、实型、字符型 B、整型、字符型、数组 C、整型、实型、逻辑型 D、整型、实型、结构体18、下面程序

voidprtv(int*x)

{

printf("%d\n",++*x);

}

main()

{

inta=25;

prtv(&a);

}

的输出是______。 A、23 B、24 C、25 D、2619、下列叙述中错误的是________。 A、一个C语言程序只能实现一种算法 B、C程序可以由多个程序文件组成 C、C程序可以由一个或多个函数组成 D、一个函数可单独作为一个C程序文件存在20、有以下程序

#include<stdio.h>

typedefstruct{

intb,p;

}a;

voidf(ac)/*注意:c是结构变量名*/intj;

{

c.b+=1;

c.p+=2;

}

main()

{

inti;

aa=1,2;

f(a);

printf("%d,%d\n",a.b,a.p);

}

程序运行后的输出结果是______。 A、1,2 B、2,4 C、1,4 D、2,3二、判断题(共10题,每小题2分,共20分)()1、c语言中,当int型与double型数据进行算术运算时,数据类型由double型向int型转换。()2、表达式1/4+2.75的值是3.()3、if语句后面的表达式只能是关系表达式()4、while循环中不能再定义另一个循环。()5、字符串在内存中的起始地址称为字符串的指针,可以定义一个字符指针变量指向一个字符串()6、使用strcpy(字符数组,字符串)函数时,字符串后面的'\0'并没有一起拷贝到字符数组中。()7、在定义数组时,有时可以将该数组的维数省略。()()8、c语言中允许嵌套定义函数。()9、在定义指针变量时如果不为其赋初值,则它的值是不确定的。()10、函数fscanf()和fprintf()这两个函数是对标准输入、输出设备进行读写,而不是对磁盘文件进行读写。三、填空题(共5题,每小题4分,共20分)1、表达式a=3*5,a*4的值是________。2、单精度型数据有效位为______位。3、下列程序段的运行结果是_____。

main()

{

intn,s=0;

for(n=1;n<=5;n++)

{

if(n%2==0)continue;

s=s+n;

}

printf("%d\n",s);

}4、已有定义:double*p;

,请写出完整的语句,利用malloc函数使p指向一个双精度型的动态存储单元________。5、使文件指针重新定位到文件读写的首地址的函数是________。四、程序分析题(共4题,每小题5分,共20分)1、下面程序的运行结果是________。

#include<stdio.h>

main()

{

inti;

for(i=1;i<=5;i++)

switch(i%2)

{

case0:

i++;

printf("#");

break;

case1:

i+=2;

printf("*");

default:

printf("\n");

}

}2、下列程序段的运行结果是________。

main()

{

intn,s=0;

for(n=1;n<=5;n++)

{

if(n%2==0)continue;

s=s+n;

}

printf("%d\n",s);

}3、有以下程序,请填空____,程序的执行结果是____

main()

{

intx=5,y;

y=++x*++x;

printf("y=%d\\n",y);

}

floatfun(float)

main

{

nfloatx,y;

intflag;

printf("enterx:");

scanf("%f",&x);

flag=fun(x);

if(________)printf("x=%fisoutofrange.\n",x);

elseprintf("x=%f,y=%f\n",x,fun(x));

}

________fun(floatx)

{

nfloats;

if(abs(x)>1)return(2);

else

{

s=sqrt(1-x*x);

________;

}

}4、下列程序段的运行结果是_____。

inta=2,*p;

p=&a;

printf("%d",*p);五、编程题(共3题,共50分)1、求1+2!+3!+...+20!的和(本题12分)2、编写程序:字符串反转,如将字符串"abc-123-xyz"反转为"zyx-321-cba"。(本题18分)3、有一包含职工编号、年龄和性别的单向链表,分别使用函数完成以下功能

建立链表。

分别统计男女职工的人数。

在链表尾部插入新职工。

删除指定编号的职工。

删除60岁以上的男职工和55岁以上的女职工被删除的结点保存到另一个链表

中。在主函数中设计简单的菜单去调用上述函数。(本题20分)

参考答案一、单项选择题1、A2、C【解析】return语句中的表达式的值就是所求的函数值,此表达式值的类型必须与函数首部所说明的类型一致。如果类型不一致,则以函数值的类型为准,由系统自动进行转换。一个return语句只能返回一个值。3、C【解析】C语言中在做逻辑或运算时,自左向右判断各个参加或运算的表达式,一旦运算到某式的值为非零时,表明整个表达式一定为真,余下的语句则不再进行运算。本题中,++x的值为真,则++y并没有进行运算,所以y值不变。4、C【解析】本题考查if语句。先判断if语句的条件是否成立,因为++a=1>0,所以条件成立,又因为是进行逻辑或运算,在已知其中一个运算对象为真的情况下,不必判断另外一个运算对象的真假,即不进行++b操作,就可以直接得出整个表达式的值为逻辑1,执行下面的++c。5、C【解析】第一次外循环i的值为1,第一次内循环j的值为3,不满足条件执行m*=i*j,即m的值为3;第二次i的值为2,不满足条件执行m*=i*j,即m的值为6;第三次j的值为1,不满足条件执行m*=i*j,即m的值仍为6。第二次外循环i的值为2,j的值为3,满足条件,执行break语句,跳出循环。6、D【解析】本题考查指针的运用。通过pt=&xy,将pt指向xy所占有的内存地址,而*pt是指针pt所指向内存单元中的内容,即200,所以最后xy的值为230。7、D8、C9、C10、C11、D12、C13、C【解析】指针中存储的不是变量本身的值,而是变量的内存地址14、A15、A16、C17、A18、D19、A20、A【解析】结构体变量可以作为函数的参数和返回值。作为函数的实参时,可以实现函数的传值调用。当使用结构体变量作为函数的形参时,实参也应该是结构体变量名以实现传值调用,实参将拷贝的副本传递给形参,在被调用函数中改变形参值对于调用函数中的实参没有影响。因此本题选择A。二、判断题1、错误2、错误3、错误4、错误5、正确6、错误7、正确8、错误9、正确10、错误三、填空题1、['60']2、73、94、['p=(double*)malloc(sizeof(double))']5、rewind四、程序分析题1、*#2、93、['49','flag==2','float','return(s)']4、2五、编程题1、程序分析:此程序只是把累加变成了累乘。

程序源代码:

main()

{

floatn,s=0,t=1;

for(n=1;n<=20;n++)

{

t*=n;

s+=t;

}

printf("1+2!+3!...+20!=%e\n",s);

}2、#include<stdio.h>

voidreverse(char*s)

{

//获取字符串长度

intlen=0;

char*p=s;

while(*p!=0)

{

len++;

p++;

}

//交换...

inti=0;

charc;

while(i<=len/2-1)

{

c=*(s+i);

*(s+i)=*(s+len-1-i);

*(s+len-1-i)=c;

i++;

}

}

intmain()

{

chars[]="abc-123-xyz";

printf("'%s'=>\n",s);

reverse(s);//反转字符串

printf("'%s'\n",s);

return0;

}【解析】质数(primenumber)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。3、#include<stdlib.h>

#include<stdio.h>

structnode{

longNo;

intage;

charsex;

structnode*next;

};

node*establish()

{

structnode*h,*p,*q;

longnum;

h=(structnode*)malloc(sizeof(structnode));

p=q=h;

printf("请输入职工编号(输入0退出输入)!\n");

scanf("%ld",&num);

while(num!=0)

{

p=(structnode*)malloc(sizeof(structnode));

p->No=num;

printf("请输入职工年龄和性别\n");

scanf("%d,%c",&p->age,&p->sex);

q->next=p;

q=p;

printf("请输入职工编号(输入0退出输入)!\n");

scanf("%ld",&num);

}

p->next=NULL;

returnh;

}

voidcount(node*phead)

{

intm=0,f=0;

structnode*p;

p=phead->next;

while(p!=NULL)

{

if(p->sex=='M'||p->sex=='m')

m++;

elsef++;

p=p->next;

}

printf("男职工的人数为:%d\n女职工的人数为:%d\n",m,f);

}

voidaddnew(node*phead)

{

structnode*p,*q;

printf("请输入新职工编号年龄和性别!\n");

p=(structnode*)malloc(sizeof(structnode));

scanf("%ld,%d,%c",&p->No,&p->age,&p->sex);

q=phead->next;

while(q->next!=NULL)

q=q->next;

q->next=p;

p->next=NULL;

}

voiddel(structnode*phead,longnum)

{

structnode*p,*q;

if(phead->next==NULL)

{

printf("Listisnull.\n");

return;

}

p=phead->next;

q=phead;

while(p!=NULL&&p->No!=num)

{

q=p;

p=p->next;

}

if(p==NULL)return;

if(q!=NULL)

{

p=q->next;

q->next=p->next;

free(p);

}

}

node*delToOther(node*phead)

{

structnode*h,*p,*q,*r;

h=(structnode*)malloc(sizeof(structnode));

q=phead;

p=phead->next;

r=h;

while(p!=NULL)

{

if(((p->sex=='M'||p->sex=='m')&&p->age>=60)||((p->sex=='F'||p->sex=='f')&&p->age>=55))

{

q->next=p->next;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论