C)将串str2复制到串str1中后再将串str3连接到串str1之后 D)将串str2连接到串str1之后,再在str1中定位str311.设有结构体类型stuNode的定义如下,则sizeof(stuNode)的大小是( B )个字节:
typedef struct student{ int num; A)16 char name[8]; B)20 float score; C)24 struct student *next; D)17 }stuNode;
12.关于C语言,以下叙述中正确的是(D )。
A)构成C程序的基本单位是文件 B)可以在一个函数中定义另一个函数 C)main()函数必须放在其它函数之前
D)除main()以外的函数也可以调用自身
13.程序设计的三个层次由低到高的顺序是(A )
A)机器语言程序设计—汇编语言程序设计—高级语言程序设计
B)汇编语言程序设计—机器语言程序设计—高级语言程序设计 C)高级语言程序设计—汇编语言程序设计—机器语言程序设计 D)机器语言程序设计—高级语言程序设计—汇编语言程序设计 14.下面的程序段执行后,x、sum的值是( D ) int x=1,sum=0; while(x++){ if(sum>=10)break ; if(x%2)continue ; sum=sum+x ;
}
A)6,10 B)6,12 C)7,10 D)7,12 15.关于以下函数的功能,正确的描述是( C )
void fun(int a[][C],int R) { int i,j; A)输出矩阵全部元素 for(i=0;ii)continue ; cout<}}
16.在函数调用时,以下叙述中正确的是( A )
A) 实参与其对应形参各占的存储单元 B) 实参与其对应形参共占同一个存储单元 C) 只有实参与其对应形参同名时才共占同一存储单元 D) 形参是一种虚拟的参数,不占存储单元
17.若用数组名作为函数调用的实参,则实际传递给形参的是( A ) A)数组首地址 B)数组首元素 C)数组全部元素 D)数组元素个数 18.C语言中,函数形式参数的默认存储类别是( B ) A)extern B)auto C)register D)static 19.下面的程序运行后的输出结果是( A ) int x=100; main( ) void myfun(int *p) {
{ int i,x=*p; myfun(&x); for(i=1;i<=10;i++)x++ ; cout<20.设有结构体数组及指针的定义如下,其下列引用非法的是( D ) struct student{
int num ; float score ;
}stu[3]={{101,95},{102,},{103,75}} ,*p=stu; A)(p++)->num; B)(p+1)->score; C)(*p).num
D)p=&stu.score
二、程序填空题
1.函数DecTo2816(int d,int r)的功能是将十进制整数d转换为r进制数的形式,实现方法是辗转除取余,将每次取得的余数转换为字符存入字符数组trans[]后反向输出。
void DecTo2816(int d , int r)
{ int res , i=0 ; char trans[33]={'\\0'}; while(d) { res=d%r; //取余数 if(res<=9)trans[i++]= ‘0’+res 【1】; //余数<=9,如何存入字符?
else ‘0’+res%10 【2】; //若r=16,10~15的余数如何转换? d=d/r;
}
while(i>=0) put char(trans[i--]) 【3】; //反向输出trans[]中的字符 } 2.本程序功能是将两个递增整数表LA=(3,5,8,11)和LB=(2,6,8,9,11,15,20)归并到新的整数表LC=(2,3,5,6,8,8,9,11,11,15,20)。整数表均采用单向链表存储。
#include typedef struct elem //链表结点类型intNode的定义 { int v; //数据域,存储整数 struct elem *next; //指针域 }intNode;intNode *CreateList(intNode *Head , int n) //函数:创建能存储n个整数的链表 { intNode *pnew,*pend ; int i; //pnew用于创建新结点,pend为辅助指针 for(i=1;i<=n;i++)
{ pnew=new intNode; cin>>pnew->v;
if(Head==NULL) Head==pnew 【4】;//若当前头指针为空,
应赋什么值 else pend->next=pnew; //新结点接入当前尾部结点之后 pend=pnew ; pend->next=NULL; //pend更新,当前尾结点指针域赋空 }
}
return(Head); //返回链表头指针
//以下MergeList( )函数,归并LA、LB到LC
intNode *MergeList(intNode *LA,intNode *LB,intNode *LC) { intNode *pa=LA,*pb=LB,*pnew,*pend; while( pa&&pb 【5】) //当pa与pb不为空时 { pnew=(intNode*)malloc(sizeof(intNode)); //为LC创建新结点 if(pa->v<=pb->v) //若结点pa的v值小于或等于pb结点的v值 { pnew->v=pa->v; //LC的新结点的v赋值为pa结点的v值 pa=pa->next; //当前结点处理完毕,pa指针下移 } else { pnew->v=pb->v 【6】 ; pb=pb->next 【7】 ; } if(LC==NULL)LC=pnew; //当前LC链表还为空 else pend->next=pnew; pend=pnew ; pend->next=NULL;
}
while(pa!=NULL) //如果LA比LB长,将剩余部分接入LC { pnew=new intNode; pnew->v=pa->v ; pa=pa->next; pend->next=pnew ; pend=pnew ; pend->next=NULL; }
while(pb!=NULL) //如果LB比LA长,将剩余部分接入LC { pnew=new intNode; Pnew->v=pb->v 【8】; pb=pb->next 【9】; pend->next=pnew ; pend=pnew ; pend->next=NULL; }
Return LC 【10】; //此函数应返回什么值 }
void main(void) {
//以LA=(3,5,8,11)和LB=(2,6,8,9,11,15,20)为实例数据 intNode *LA=NULL,*LB=NULL,*LC=NULL; LA= CreateList(la 4) 【11】; //创建链表LA LB=CreateList(LB 7) 【12】; //创建链表LB LC=MergeL
ist(LA,LB,LC); //归并LA和LB到LC }
3.以下函数功能是使用对分法在递增排序的整型数组a[ ]中查找指定元素
SearchNum,算法思想是:取数组的中点下标c,若a[c]==SearchNum则找到,若SearchNum> a[c],则查找范围缩小为右半,否则缩小为左半,依此循环直到查找范围不能再缩小为止。
void BisectSearch(int a[ ] , int n) //n为数组长度,即元素个数
{ int s=0 , e=n-1 , c; //s和e分别为查找范围的起点和终点下标,c为中点 int flag=0 , SearchNum; //flag作为是否找到的标志,SearchNum待查找 cin>>SearchNum;
if(a[0]==SearchNum) //判断数组首元素
{ cout<<\"Fount it: a[0]=\"<{ cout<<\"Found it: a[\"<while( el=(s+1) 【13】) //e==s+1时,查找范围不能再缩小{ c=(s+e)/2; //取数组的中点下标 if(a[c]==SearchNum){ flag=1 【14】; break 【15】; }
else if(a[c]else e=c 【17】; //更新s还是e } if(flag==1)cout<<\"Fount it! a[\"<4.下列函数LocateSubString(char *s , char *t)的功能是在字符串s中定位字符串t并返回首次出现的位置(又称模式匹配,s称目标串,t称模式串)。char *LocateSubString(char *s,char *t)
{ int s_len=strlen(s) , t_len=strlen(t); //求串s和t的长度 char *ps=s,*pt=t , *pa; //ps和pt分别指向s和t的首字符,pa为辅助指针
int flag=0; //标志变量,找到t为1,否则为0
while(ps<= s+s 【18】) //ps指针最多只能移动到什么地方? { pa=ps ; pt=t; //为本轮匹配运算做准备工作
while(*pt!='\\0') //pt指针往下移动直到串尾 { if(*pa==*pt) //如果对应字符相等,如何处理? { flag=1; pa++ 【19】; pt++ 【20】; } else //对应字符不相等,也就是不匹配 { flag=0 ; break; } //不匹配,提前结束内层循环 }//while内层循环
if(flag==1)break; //上面的内层循环结束,flag=1说明找到了子串t else ps++; //本轮结束后,没找到子串t,ps下移一个字符 }//while外层循环 if(flag==1) return ps; //当前ps即子串t首次出现的位置 else return \"\\0\"; //返回空串 }
三、编制程序题
1.编写一个函数sort(int a[],int n),实现任意长度一维整型数组的元素排序,在main( )中完成一维数组的定义和初始化,调用sort( )函数后输出排序的结果。 2.编程实现:求11~9999之间的m,使满足m、m2、m3均为回文数。例如121、1221、43634等即为回文数。要求将求得的m存储到一个动态数组之中并输出。
四、参考例程
1.简单的学生成绩管理演示程序
//文件包含及命名空间的使用语句,此处省略
//结点类型定义
typedef struct student { int ID; char name[16]; float score; struct student *next; }StuNode;
//存储文件的函数
void SaveFile(StuNode *Head) { int k=0; if(Head==NULL)
{
cout<<\"链表为空,无法存储文件!\"<return; }fstream outfile;
outfile.open(\"..\\\\Stu.dat\StuNode *pt=Head; while(pt)
{ k++; outfile.write((char*)pt,sizeof(StuNode)); pt=pt->next; } outfile.close(); cout<<\"创建结点数=\"<//读取文件的函数 StuNode *ReadFile() { int k=0;StuNode *Head=NULL,*pnew=NULL,*paid=NULL; ifstream infile;
infile.open(\"..\\\\Stu.dat\if(infile.fail())
{ cout<<\"文件不存在,打开失败!\"<system(\"pause\"); return Head;while(!infile.eof()) {
pnew=new StuNode; pnew->next=NULL;
infile.read((char*)pnew,sizeof(StuNode)); if(infile.tellg()<0) { delete pnew; break; } k++;
if(Head==NULL) { Head=pnew; }
paid=pnew;
paid->next=NULL;
else { paid->next=pnew; paid=pnew; paid->next=NULL; }
}//while,读文件结束
infile.close(); cout<<\"读取结点数=\"<//创建学生信息链表的函数StuNode *CreateList(StuNode *Head) { StuNode *pnew,*paid,*ps,*pe; cout<<\"开始创建学生链表,输入学号为0或负则停止:\"<{pnew=new StuNode; pnew->next=NULL; cout<<\"学号:\"; cin>>pnew->ID; if(pnew->ID<=0) { }
delete pnew; break;
cout<<\"姓名:\";
fflush(stdin);
cin.getline(pnew->name,15); cout<<\"成绩:\"; cin>>pnew->score; if(Head==NULL) { Head=pnew; pnew->next=NULL; paid=pnew; } else {
if(pnew->ID<=Head->ID) { pnew->next=Head; Head=pnew; }
else if(pnew->ID>=paid->ID) { paid->next=pnew; pnew->next=NULL; paid=pnew; }
else
{ ps=Head; pe=ps->next; while(pnew->ID>=pe->ID) { ps=ps->next; pe=pe->next; } ps->next=pnew; pnew->next=pe; }
} } return Head; }
//输出链表的函数void PrintList(StuNode *Head)(省略) //主函数 void main( )
{ StuNode *Head=NULL;
}
Head=CreateList(Head); SaveFile(Head); Head=ReadFile(); PrintList(Head); system(\"pause\");
一、 选择题参
1~5: BCDDC
6~10: 16~20:
AABBC AABAD
11~15: BDADC 二、 程序填空题参
【1】’0’+res 【5】pa&&pb
【3】putchar(trans[i--]) 【7】pb=pb->next 【9】pb=pb->next 【13】e!=(s+1) 【15】break 【17】e=c
【19】pa++
【2】’A’+res%10 【4】Head==pnew 【6】pnew->v=pb->v 【8】pnew->v=pb->v 【10】return LC
【12】LB=CreateList(LB,7) 【14】flag=1 【16】s=c
【18】s+s_len-t_len 【20】pt++
【11】CreateList(LA, 4)