您好,欢迎来到刀刀网。
搜索
您的当前位置:首页c语言考试题

c语言考试题

来源:刀刀网
《C语言程序设计》考试题型示例 & 复习例程

一、单项选择题

1.以下四组变量标识符均为合法的是( B )。 A)cosx_Value、CASE、sin(x) B)Sum_Value、x01_value、xxx C)a_b_c_01、FILE、x_01_y D)Num#、abc_01、X_value_A 2.设有二维数组定义:float a[3][3] ; 假设&a[0][0]= =2001H,则&a[2][2]= =( C )。

A)2010H B)2036H C)2021H D)2024H

3.设有整型变量x和y,且x=y=10;则计算表达式x=(x++ , y++) , x+y;后x的值为( D) A)11 B)20 C)22 D)10 4.如果要使用一维数组,其正确的定义是(D ) A)int array[ ]; B)const n=10, array[n];

C)int n, array[n]; cin>>n; D)int n=5, *array=new int [n]; 5.下述函数myfun的功能是( C ) int myfun(char s[ ],char t[ ]) (A)将字符串t复制到字符串s { char *ps=s,*pt=t; (B)将串s连接到串t的尾部 while(*ps)ps++; (C)将串t连接到串s的尾部 whie(*pt)*ps++=*pt++; (D)将字符串s复制到字符串t *ps=’\\0’; }

6.下面的程序运行后的输出结果是( A ) void swap(int **x,int **y) main( ) { int *t; { int a=111,b=333; t=*x;*x=*y;*y=t; swap(&pa,&pb); } cout<if(strcmp( str1,str2 ))puts(“Yes”) ; else puts(“No”); 的输出结果是( B) A)No B)Yes C)语法错误 D)无输出结果 9.下面的程序段的输出结果是( B )

}

int a[3][3]={11,22,33,44,55,66,77,88,99};

int *p=a[0]+1;

cout<<*p<<’\’<<*(*(a+1)+1))<C)将串str2复制到串str1中后再将串str3连接到串str1之后 D)将串str2连接到串str1之后,再在str1中定位str3

11.设有结构体类型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)

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务