C语言上机考试复习题key.docx
- 文档编号:2703196
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:28
- 大小:234.50KB
C语言上机考试复习题key.docx
《C语言上机考试复习题key.docx》由会员分享,可在线阅读,更多相关《C语言上机考试复习题key.docx(28页珍藏版)》请在冰点文库上搜索。
C语言上机考试复习题key
1、请编写函数merge(inta[],intn,intb[],intm,int*c)实现如下功能:
将两个从小到大有序数组a和b复制合并出一个有序整数序列c,其中形参n和m分别是数组a和b的元素个数。
在主函数中调用merge并输出合并后的数组c。
2、有一字符串,包含n个字符,写一函数substrcpy(char*str1,char*str2,intm)实现如下功能:
将此字符串str1中从第m个字符开始的全部字符复制到字符串str2中。
在主函数中调用substrcpy并输出结果。
3、将一个整数字符串转换为一个整数,如“-1234”转换为-1234。
要求用指针实现。
4、用结构体实现:
编写程序将下列数据赋予结构体变量,并将它们输出(直接输出和用结构体数组输出)。
姓名
年龄
月薪
李明
25
2500
王利
22
2300
赵勇
30
3000
5、用结构体实现:
有五个学生,每个学生的数据包括学号、姓名、三门课的成绩。
从键盘输入5个学生的相关数据,要求打印出三门课总平均成绩,以及最高分的学生的数据(包括学号,姓名、三门课的成绩,三门课的平均分)。
要求使用结构体变量。
6、从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test.dat”中保存,再从该文件中读出字符串并显示出来。
输入的字符串以“!
”结束。
(下面有错,第二个文件打开指令改为rb)
7、从文件test.txt中读入一批整数,并将它们按照递增的顺序存放在一个数组中。
8、将一个磁盘文件中的信息复制到另一个磁盘文件中。
9、编程:
定义函数求十个数的最大值,并在主调函数中输出。
(类比第15题)
10、从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个“#”为止。
11、编程:
输入年、月、日,用子函数判断计算该日期是该年的第几天。
12、编程:
任意输入一个数,定义函数,将其按原来排序的规律将它插入已排好序的数组中。
如:
原数组为{2,3,5,7,9},输入4,则新数组为{2,3,4,5,7,9}
13、定义函数,判断某数是否是水仙花数,调用该函数找出100-999之间的水仙花数
14、用行指针法寻找3*4矩阵中的最大值
15、任意输入10个数,定义函数,找出其中的最大值和最小值,并在主调函数中输出这两个值(利用指针实现)
16、输入两个整数,将他们互换,用带参数的宏来实现。
17、输入两个整数,求他们的最大值,定义外部函数来实现。
(类比15题)
18、通过指针变量来输出九九乘法表。
19、通过指针变量实现1+2+3+……+n,在程序中输出改结果。
20、将n个数按输入时顺序的逆序排列,用函数实现。
21、输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
写3个函数:
(1)输入10个数;
(2)进行处理;(3)输出10个数。
22、编程实现输入n(n<1000)个整数到指定数组,求该数组中最大元素的值和此元素的下标,最大元素值以函数值返回,此元素的下标通过指针形参返回调用处。
23、已知节点结构如下:
structstudent
{
Charno[7];
Charname[9];
Structstudent*next;
}
(1)定义函数creat,从无到有地创建一个新链表,保存若干节点信息,节点个数不限
(2)定义函数show,,输出链表中所有节点信息
24、用字符数组存储任意输入的10个字符,在子函数中把该字符数组的小写字母转换成大写字母。
(类比6)
25、输入一串字符,以‘?
’结束,统计各字母出现的次数,并按字母出现的多少输出(先输出字母出现多的,次数相同的按字母表顺序输出,不出现的字母不输出)。
例:
输入:
5b3a+4-hdeh5dh?
输出:
h3
d2
a1
b1
e1
26、编写函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。
(要求利用指针完成,不使用全局变量)
27、写一函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
(要求利用指针完成,不使用strlen函数)
28、编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中,不用strcpy函数。
注意,复制时,’\0’也要复制过去。
‘\0’后面的字符不复制。
(要求用指针实现)
29、输入三个数,用指针变量的方式按由小到大的顺序输
30、链表头插,尾插,反序,插入,删除,浏览,存盘,读取。
#include
typedefintelemtype;
typedefstructnode
{elemtypedata;
structnode*next;
}NODE;
NODE*h_creat()
{NODE*p,*head;
intlen;
printf("请问要创建几个节点?
:
");
scanf("%d",&len);
head=(NODE*)malloc(sizeof(NODE));
head->next=NULL;
while(len)
{
p=(NODE*)malloc(sizeof(NODE));
printf("请输入该节点数据:
");
scanf("%d",&p->data);
p->next=head->next;
head->next=p;
len--;
}
returnhead;
}
voidreverse(NODE*head)
{
NODEstack[1024],*p=head->next;
inti=0;
while(p)
{
stack[i].data=p->data;
i++;
p=p->next;
}
p=head->next;
while(i>0)
{
p->data=stack[--i].data;
p=p->next;
}
}
NODE*t_creat()
{NODE*head,*tail,*p;
intlen;
printf("请问要创建几个节点?
:
");
scanf("%d",&len);
tail=head=(NODE*)malloc(sizeof(NODE));
head->next=NULL;
while(len)
{p=(NODE*)malloc(sizeof(NODE));
printf("请输入该节点数据:
");
scanf("%d",&p->data);
tail->next=p;
tail=p;
p->next=NULL;
len--;
}
returnhead;
}
voidview(NODE*head)
{NODE*p=head->next;
printf("链表数据如下:
\n");
while(p)
{printf("%d",p->data);
p=p->next;
}
}
NODE*search(NODE*head,intkey)
{NODE*p;
p=head->next;
while(p)
{if(p->data==key)
{returnp;}
p=p->next;
}
returnNULL;
}
voiddestroylist(NODE*head)
{NODE*p=head->next,*q;
while(p)
{q=p->next;
free(p);
p=q;
}
free(head);
}
intinsert(NODE*head,NODE*p,intpos)
{NODE*q=head->next;
if(pos==0)
{printf("插入位置不合理!
");
return0;
}
pos--;
while(pos)
{pos--;
q=q->next;
}
p->next=q->next;
q->next=p;
return1;
}
voiddele(NODE*head,NODE*p)
{NODE*q=head->next,*r=head;
while(q!
=p)
{q=q->next;
r=r->next;//r晚走一步,循环结束,获得的是待删除节点的首地址
}
r->next=p->next;
}
voidmain()
{NODE*head1,*head2;
NODE*p;
intdata,pos;
printf("开始创建第一条链表:
\n");
head1=h_creat();
view(head1);
destroylist(head1);
printf("\n开始创建第二条链表:
\n");
head2=t_creat();
view(head2);
printf("\n请输入待查找的键值,查找将在第2条链上进行:
\n");
scanf("%d",&data);
if(search(head2,data)==NULL)
printf("没有找到该结点!
\n");
else
printf("找到该结点!
\n");
reverse(head2);//反序
view(head2);
printf("\n准备插入新结点:
\n");
p=(NODE*)malloc(sizeof(NODE));
printf("请输入待插入结点的键值:
");
scanf("%d",&p->data);
printf("请输入待插入的位置:
");
scanf("%d",&pos);
if(insert(head2,p,pos))
view(head2);
printf("\n准备删除结点:
\n");
printf("请输入待删除结点的键值:
");
scanf("%d",&data);
if((p=search(head2,data))==NULL)
printf("没有找到该结点,不能删除!
\n");
else
{dele(head2,p);
printf("删除后");
view(head2);
}
destroylist(head2);
}
voidsave(NODE*head)
{FILE*fp;
NODE*p=head->next;
fp=fopen("line.dat","w");
if(fp==NULL)
{…}
while(p)
{fwrite(p,sizeof(NODE),1,fp);
p=p->next;
}
fclose(fp);
}
NODE*load()
{NODE*p,*head;
FILE*fp;
fp=fopen("line.dat","r");
head=(NODE*)malloc(sizeof(NODE));
head->next=NULL;
if(fp==NULL)
{…}
while(!
feof(fp))
{p=(NODE*)malloc(sizeof(NODE));
fread(p,sizeof(NODE),1,fp);
if(feof(fp))
{free(p);break;}
p->next=head->next;
head->next=p;
}
fclose(fp);
returnhead;
}
31、堆栈的思想解决计算某数的二进制问题
#defineN1024
typedefstructstack
{intdata[N];
inttop;
}STACK;
STACKs;
voidinit_stack()
{s.top=0;}
voidpush(intn)
{s.data[s.top]=n;
s.top++;
}
voidconvert(intn)
{while(n)
{push(n%2);
n/=2;
printf("%d",n);
}
}
intpop()
{intk;
k=s.data[--s.top];
returnk;
}
voidprn()
{while(s.top)
{printf("%d",pop());
printf("\n");
}
}
voidmain()
{intn;
printf("请输入待转换的整数:
");
scanf("%d",&n);
init_stack();
convert(n);
printf("转换后的数为:
");
prn();
}
综合应用三题
//门诊
#include
#include
typedefstructnode
{intno;
structnode*link;
}NODE;
NODE*front;NODE*rear;
voidinitqueue()
{NODE*p;
p=(NODE*)malloc(sizeof(NODE));
front=rear=p;
}
intemptyqueue()
{if(front==rear)
return1;
return0;
}
voidenqueue(intno)
{NODE*p;
p=(NODE*)malloc(sizeof(NODE));
p->no=no;
p->link=NULL;
front->link=p;
rear=p;
}
intdelqueue()
{intno;
NODE*p=front->link;
if(!
emptyqueue())
{no=p->no;
front->link=p->link;
if(p->link==NULL)
front=rear;
free(p);
returnno;
}
return-1;
}
voidmain()
{intno=1;
intdno;
initqueue();
intsel;
while
(1)
{printf("--------------------\n");
printf("1新病人排队\n");
printf("2报号\n");
printf("3退出\n");
printf("--------------------\n");
printf("请选择:
");
scanf("%d",&sel);
switch(sel)
{
case1:
enqueue(no);no++;break;
case2:
dno=delqueue();
if(dno==-1)
printf("无排队病人!
\n");
else
{
printf("请第%d号病人速到诊室......\n",dno);
printf("请第%d号病人速到诊室......\n",dno);
printf("请第%d号病人速到诊室......\n",dno);
}
break;
}
if(sel==3)break;
}
}
//一元多项式求和
#include
typedefstructnode
{floatcoef;//系数
intexp;//次数
structnode*next;
}NODE;
voidview(NODE*head)
{NODE*p=head->next;
printf("多项式如下(系数为0时不输出):
\n");
while(p)
{if(p->coef==0)//系数为0不输出
p=p->next;
printf("(%.2f)x^%d",p->coef,p->exp);
p=p->next;
if(p)printf("+");
}
printf("\n");
}
NODE*creat()
{NODE*head,*tail,*p;
intlen;
printf("请问要创建几项?
:
");
scanf("%d",&len);
tail=head=(NODE*)malloc(sizeof(NODE));
head->next=NULL;
while(len)
{p=(NODE*)malloc(sizeof(NODE));
printf("请输入该项的系数和次数,以空格隔开:
");
scanf("%f%d",&p->coef,&p->exp);
tail->next=p;
tail=p;
p->next=NULL;
len--;
}
returnhead;
}
voiddestroylist(NODE*head)
{NODE*p=head->next,*q;
while(p)
{q=p->next;free(p);p=q;}
free(head);
}
NODE*add(NODE*h1,NODE*h2)
{NODE*h,*r,*p,*q,*k;
h=r=h1;
p=h1->next;q=h2->next;
while(p&&q)
{if(p->exp>q->exp)
{r->next=q;r=q;q=q->next;}
else
if(p->exp
{r->next=p;r=p;p=p->next;}
else
{p->coef+=q->coef;
r->next=p;
r=p;
k=q;
p=p->next;
q=q->next;
free(k);
}
if(p==NULL)
r->next=q;
else
r->next=p;
}
returnh;
}
voidmain()
{NODE*a,*b,*c;
printf("请输入第一个多项式:
\n");
a=creat();
view(a);
printf("\n请输入第二个多项式:
\n");
b=creat();
view(b);
c=add(a,b);
view(c);
destroylist(c);
}
//约瑟夫问题:
30人留15,逢9倍跳
#include
#include
typedefintelemtype;
typedefstructnode
{elemtypedata;
structnode*next;
}NODE;
intn=30;
NODE*h_creat()
{NODE*p,*head;
head=(NODE*)malloc(sizeof(NODE));
head->next=head;
while(n>=1)
{p=(NODE*)malloc(sizeof(NODE));
p->data=n;
p->next=head->next;
head->next=p;
n--;
}
returnhead;
}
voidview(NODE*head)
{NODE*p=head->next;
while(p!
=head)
{printf("%d",p->data);
p=p->next;
}
printf("\n");
}
voiddestroylist(NODE*head)
{NODE*p=head->next;
NODE*q;
while(p!
=head)
{q=p->next;free(p);p=q;}
free(head);
}
voidjosphy(NODE*head)
{NODE*p=head->next;
NODE*q=head;
intpeople=0;
intpos=1;
while(people!
=15)
{q=p;
p=p->next;
pos++;
if(p==head)pos--;
if(pos%9==0&&p!
=head)
{people++;
q->next=p->next;
printf("一人跳入海中,他是%d号.\n",p->data);
free(p);
p=q->next;
pos++;
view(head);
}
}
}
voidmain()
{NODE*head;
printf("开始创建链表:
\n");
head=h_creat();
view(head);
josphy(head);
view(head);
destroylist(head);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 上机 考试 复习题 key