版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE213/13华中科技大学计算机类(Ⅱ)2020~2021学年第一学期“C语言程序设计”考试试卷(A卷)考试方式:闭卷考试日期:_2021年1月5日_考试时长:__150__分钟专业班级:______________学号:______________姓名:______________题号一二三四五六七八九十总分分数注意:试卷后面附有运算符的优先级和结合性表。试卷所有问题都假设基于32位的系统。分数评卷人解答内容不得超过装订线单项选择题(在下面每小题的A、B、C、D四个选项中,只有一个选项是正确的,请选择正确的选项并填写到括号内,选择正确得分。本大题共16小题,每小题1分,共16分。)解答内容不得超过装订线解答内容不得超过装订线1、下列各组标识符正确的是: 【解答内容不得超过装订线A、 x_a,1_a B、π,t C、a.c,N D、China,_1A2、设main函数的函数原型为:intmain(intm,char*v[]);如果命令行是:Iaminaquiz,则以下说法错误的是: 【】A、 m=5 B、v[1][1]=‘m’; C、v[3]指向“a” D、函数形参名错误3、如果当t为奇数时表达式的值为“真”,t为偶数时表达式的值为“假”。则以下不能满足上述条件的表达式是【】A、t%2==1 B、!(t%2) C、!(t%2==0) D、t%24、设有声明:inti=2,j=3;那么执行语句:i>=j&&--i||j++;之后,变量i和j的值分别为。 【】A、2,3 B、1,4 C、2,4 D、1,35、以下程序片段中,while循环体执行的次数是。 【】inti=10,j=0;while(i>j){i--;j++;if(i=j)break;};A、0 B、1 C、 5 D、死循环6、以下表达式的值为“假”的是: 【】 A、sizeof(‘A’)==4 B、-2>1u C、!(0xffff)==0; D、('\x20'<<4)>>4==07、以下正确的声明语句是: 【】A、inta[10],p=a; B、inta[10][20],(*p)[10]=a;C、inta[5][6],*p[6]=a; D、inta[1][2],(*p)[2]=a;8、设字符数组chara[]=“123\ta\\bc”,则表达式sizeof(a)的值为: 【】A、1 B、9 C、10 D、49、在C语言中,如果按照数据存储的格式划分,文件可分为:【】A、程序文件和数据文件 B、磁盘文件和设备文件 C、二进制文件和文本文件 D、顺序文件和磁盘文件10、如果要使用函数scanf("%c,%c,%c",&a,&b,&c);语句读入三个字符‘1’、‘2’、‘3’到变量a、b、c中,正确的输入序列是: 【】A、123 B、123 C、1,2,3 D、1、2、311、基于声明:inta[][2]={1,2,3},b[10],c[3][2],d[3][4];,下列说法正确的是: 【】A、数组a只包含3个元素B、数组b可以用来保存数组d中的所有元素C、数组c中的元素可表示为c[0][0],c[0][1],c[0][2],c[1][0],c[1][1],c[1][2]D、数组d中包含三个一维数组12、设有宏定义:#defineputchar(c)fputc(c,stdin),则以下说法错误的是: 【】A、宏展开前,fputc(c,stdin)是字符串 B、宏展开后,stdin的类型为FILE*C、putchar和c是标识符 D、define是关键字13、设有如下类型定义和变量的声明,typedefstruct{floatx,y;}_point;_pointpoint0={1.0,1.0};const_pointpoint1,*p1=&point1;const_pointpoint2,*constp2=&point2;则以下各语句中合法的是: 【】 A、*p1=point0; B、p1=&point0;C、*p2=point0; D、p2=&point0;14、给定下面的结构定义和声明:structstu{ intnum;doublescore;charname[12];}m,n,*p,*q;,则下列语句中不会产生编译错误的是: 【】A、p=m; B、m.score=n.num;C、p.num=10;D、*="Tom";15、按如下方式打开已存在的文件a.dat,不会清除原有内容的语句为 : 【】A、f=fopen(“a.dat”,“w”); B、f=fopen(“a.dat”,“w+”);C、f=fopen(“a.dat”,“w+b”); D、f=fopen(“a.dat”,“a+”);16、十进制数8和-2在8位机中的补码表示分别为: 【】 A、00001000,11111110; B、00001000,10000010;C、10001000,00000010; D、10001000,01111110;分数评卷人填空题(本大题共10小题,每小题1分,共10分。)1、本大题的第1题至第5题请参考下面的说明,写出各表达式的值。各题的表达式相互无关。structSTU{intNum;charName[6];}s[]={{1,”Tom”},{3,”Jerry”}},*p=s;题号表达式值1++p->Num2++(*p->Name)3*p++->Name4*(++p)->Name+15sizeof(structSTU)2、本大题的第6题至第10题请参考下面的说明,写出各表达式的值。各题的表达式相互无关。unsignedchara=4,b=8,c;unsignedshortx=0x800A,y=12;#defineBa+y题号表达式值6a|++b7c=x<<48a^b>>29B/210!x||b!=a分数评卷人判断改错题(首先明确指出下面各题代码或描述是否存在错误;若存在错误,指出错误,然后改正错误或给出修改方法。本大题共8小题,每小题2分,共16分。)1、以下程序实现字符串拷贝,将a中的字符串拷贝给指针p所指向的内存单元,使程序输出结果为:thereisaboatonthelake.#include"stdio.h"#include"string.h"intmain(){char*p,a[60]="thereisaboatonthelake.";printf("%s\n",strcpy(p,a));return0;}2、下面的程序依次输出structLIST类型变量d,e,f的成员。#include<stdio.h>voiddisp(structLISTs){ printf("%d,%d\n",s.a,s.b);}intmain(){ structLIST{ inta,b; }d={3,9},e={2,8}; LISTf={5,6}; disp(d);disp(e); printf("%d,%d\n",f.a,f.b);return0;}3、以下程序片段以只写方式打开文件HUST.dat,并向文件写入字符串“SCSE”。FILE*fp;fp=fopen(“HUST.dat”,“w”);if(fp!=EOF) fputs(“SCSE”,fp);fclose(fp);4、以下程序片段实现利用指针p输入一行字符串到字符数组str中,回车结束输入。charstr[100],*p;for(p=str;(*++p=getchar())!='\n';);*p='\0';5、以下函数是对已按升序排列的整数表执行二分查找。函数的输入包括一个指向表头的指针、表中的元素个数以及待查找的数值。函数的输出是一个指向满足查找要求的元素的指针;当未查找到要求的数值时,输出一个NULL指针。int*bsearch(int*t,intn,intx){ int*lo=t,*hi=t+n; while(lo<hi){ int*mid=(hi+lo)/2; if(x<*mid) hi=mid; elseif(x>*mid) lo=mid+1; else returnmid; } returnNULL;}6、以下程序实现将字符str的第一个字节修改为大写,然后输出字符串str串拷贝,使程序输出结果为:Thereisaboatonthelake.#include"stdio.h"intmain(void){char*str="thereisaboatonthelake.";str[0]+=‘A’-‘a’;printf("%s\n",str);return0;}7、以下函数用于判断year是不是闰年,是闰年返回1,不是返回0。(闰年的判断方法:能被4整除且不能被100整除的年份,或者能被400整除的年份)intisLeapYear(intyear){if((!(year%4)&&year%100)|(!(year%400)))return1;elsereturn0;}8、以下程序实现利用指针p动态创建具有N个结点的单链表,将头指针head指向所创建链表的第一个节点,并遍历该链表输出每个节点中的data值。#include<stdio.h>#include<malloc.h>#defineN3structs_list{ intdata;structs_list*next;}*head=NULL,*p;head=(structs_list*)malloc(sizeof(structs_list));intmain(void){ p=head;p->data=0;for(inti=1;i<N-1;){ p->next=(structs_list*)malloc(sizeof(structs_list)); p=p->next;p->data=++i; }p->next=NULL;p=head;while(p){ printf("%p\t%d\t%p\n",p,p->data); p=p->next;free(head);head=p; } return0;}分数评卷人简答题(本大题共5小题,每小题4分,共20分)1、写一个表达式,比较整型数组a的第一个元素和最后一个元素的大小,当第一个元素大于等于最后一个元素时,表达式的值为-1,否则为1。2、关键字static的作用是什么?3、写一个表达式,交换一个unsignedshortint类型的变量x的高字节和低字节,比如交换前如果x的值为0x2021,那么交换后x的值为0x2120。4、设有如下结构体和变量说明,structcnode{charc;structcnode*next;}*r,*s,*t;其中r,s,t依次指向链表中的三个连续节点。现要在保证链表连续的前提下将s和t的位置互换,请写出实现该功能的代码片段,要求采用改变结点的连接实现结点的交换(不得出现除r,s,t之外的其它变量)。5、分别写出以下语句的含义。intf();int*f();int(*f)();int(*(*f)())[2];分数评卷人五、阅读程序并写出其运行结果,请注意输出结果的格式(本大题共6小题,每小题3分,共18分。)1、请写出下面程序的运行结果。#include<stdio.h>intmain(void){ charch[7]="2345"; inti=0,s=0; while(ch[i++]) s=10*s+ch[i]-'0'; printf("%d",s);return0;} 运行结果:2、请写出下面程序的运行结果。#include<stdio.h>inta=3,b=2;voidf(int*u,inth){staticintc=1;a+=c++; b+=a;*u++; h=h+*--u;}intmain(void){inta,h,u;a=h=u=1;f(&u,h);f(&a,h);printf("%d,%d,%d,%d",a,b,h,u);return0;} 运行结果:3、请写出下面程序的运行结果。#include<stdio.h>intmain(void){charc;while((c=getchar())!='\n'){ if(c>='0'&&c<='9') continue;switch(c-'a'){default:putchar(c+5);case0:case1:putchar(c+3);case2:putchar(c+4);}}return0;}运行程序后输入数据:2a7k↙,其中↙代表一个回车符。 运行结果:4、请写出下面程序的运行结果。#include<stdio.h>voidfun(inta[],inti,intj){ intt; if(i<j){ fun(a,i+1,j-2); t=a[i];a[i]=a[j];a[j]=t; }}intmain(void){ inti,a[6]={1,2,3,4,5}; fun(a,0,5); for(i=0;i<6;i++) printf("%d,",a[i]);return0;} 运行结果:5、请写出下面程序的运行结果。#include<stdio.h>#include<string.h>voidtest(chara[][10],char*b[],char*p){p=&b[1][2];strcpy(a[0],b[0]);*a[1]=*p;*(*(a+1)+1)=*(p+1); a[1][2]='\0';}intmain(){charstr[10][10],*y[10]={"HUST","Hello"},*px;px=y[1];test(str,y,px);printf("%s\n%s",str[0],str[1]);return0;} 运行结果:6、请写出下面程序的运行结果。#include<stdio.h>structw{charlow;charhigh;};unionu{structwbyte;shortword;}uw;intmain(){ intresult; uw.word=0x1234; printf("highbyte:%02x\n",uw.byte.high); uw.byte.low=0x74; printf("word:%04x\n",uw.word); result=uw.word+0x2a34; printf("result:%04x\n",result); return0;} 运行结果:分数评卷人六、完善程序(本小题有3小题,给出的都是部分程序,通过填空来完善程序。本大题共10空,每空2分,共20分。)1、本小题第①、②、③空参阅下面的程序片段。[程序说明]以下程序利用大小为N的指针数组指向用gets函数输入的N行,每行不超过80个字符。函数compress将每一行中连续的多个空格字符压缩为一个空格字符,在main函数种调用compress函数输出压缩空格后的各行,空行不予输出。请将下面程序中①、②、③处应该完善的内容填写在本小题后①、②、③后面的下划线处。#include<stdio.h>#include<stdlib.h>#defineN3voidcompress(char*a);intmain(){inti;char*p[N];for(i=0;i<N;i++){①gets(p[i]);}for(i=0;i<N;i++){compress(*(p+i));②}return0;}voidcompress(char*a){inti;for(i=0;③;i++){printf("%c",*(a+i));if(a[i]==''){while(*(a+i)=='')i++;i--;}}if(*a!='\0')printf("\n");}2、本小题第④、⑤空参阅下面的程序片段。[程序说明]以下函数climb求解“上楼梯问题”,假设楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,求所有不同走法的数量。请将下面程序中④、⑤处应该完善的内容填写在本小题后④、⑤后面的下划线处。intclimb(intn){if(n==0||n==1||n==2)④⑤}3、本小题第⑥、⑦、⑧、⑨、⑩空参阅下面的程序。请将下面程序中⑥、⑦、⑧、⑨、⑩处应该完善的内容填写在本小题后⑥、⑦、⑧、⑨、⑩后面的下划线处。[程序说明]求解N皇后问题。在N×N的棋盘上摆放N个皇后,使任意两个皇后不能在同一行、同一列、同一对角线上。以下程序基于二维数组表示N×N(N取值1-20)棋盘,采用的算法步骤如下:(a)对N行中的每一行(从第0行开始),对某一行的每一列(从第0列开始)进行探测,来决定是否可以放置皇后。(b)对某行m某列n,如果探测皇后不冲突,则可在m行n列放置一个皇后。(c)如果m行已经是最后一行,则说明找到一个解,输出解。此时不能结束程序,应该清除在步骤(b)放置的m行n列的皇后,继续探测m行剩下的列,转步骤(b)。(d)在m行n列放置了皇后的前提下,如m行不是最后一行,则继续探测m+1行的皇后位置。(e)在已经探测完m行所有的列都没有找到可以放置皇后的位置的前提下,(e1)如果m行已经是第0行,程序执行结束。(e2)如果m行不是第0行,此时就应该把m-1皇后的位置往后移一列,转步骤(b)。#include"stdio.h"#definemaxsize20intsearch(int(*p)[maxsize],intsize,introw,intcol){intret=0,i;for(i=0;i<row&&!ret;i++)if(⑥)ret=1; for(i=1;row-i>=0&&col-i>=0&&!ret;i++)if(p[row-i][col-i]==1)ret=1;for(i=1;row-i>=0&&col+i<size&&!ret;i++)if(p[row-i][col+i]==1)ret=1;returnret;}voidoutsolution(int*p,intsize){inti,j;staticintsolution_num=1;printf("解%d:\n\n",solution_num++);for(i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论