漓江学堂程序设计与问题求解期末考试参考程序.docx
- 文档编号:22999049
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:23
- 大小:22.08KB
漓江学堂程序设计与问题求解期末考试参考程序.docx
《漓江学堂程序设计与问题求解期末考试参考程序.docx》由会员分享,可在线阅读,更多相关《漓江学堂程序设计与问题求解期末考试参考程序.docx(23页珍藏版)》请在冰豆网上搜索。
漓江学堂程序设计与问题求解期末考试参考程漓江学堂程序设计与问题求解期末考试参考程序序A级难度试题:
(最高难度:
级难度试题:
(最高难度:
A档档-只需完成一题即可,随机挑只需完成一题即可,随机挑选,满分选,满分100分)分)1、编程实现单链表的创建、查询、插入、删除等操作,每次操作之后都要输出单链表,要求在创建单链表的节点时,以输入-1表示结束,所有操作都要求函数实现。
#includetypedefstructnodeintdata;structnode*next;NODE;/定义结点数据类型constintLEN=sizeof(NODE);/一般建议用const常量,而不要用define定义符号常量voidPrint(NODE*h)/输出链表的内容NODE*q;q=h-next;while(q!
=NULL)/i:
=0;while(idata)printf(本结点地址%x;数据:
%d,下一个结点地址%xn,q,q-data,q-next);q=q-next;voidInsert(intx,NODE*h)/将数据x插入表头为h的链表中NODE*p=(NODE*)malloc(LEN);p-data=x;p-next=h-next;h-next=p;Print(h);NODE*Create(intn)/创建有n个结点的链表,注意最后生成的结点的数据是与输入顺序相反的intx;NODE*q;NODE*p=(NODE*)malloc(LEN);p-next=0;p-data=n;/链表表头存放链表中有多少个结点printf(请输入整数,若输入-1则表示创建结束:
);while
(1)scanf(%d,&x);if(x=-1)break;Insert(x,p);/插入新的结点Print(p);returnp;NODE*Find(intx,NODE*h)/在表头为h的链表中查找x是否存在NODE*p;p=h-next;while(p!
=NULL)if(p-data=x)return1;p=p-next;return0;voidDel(intx,NODE*h)/删除值为x的结点NODE*p,*pre;pre=h;p=h-next;while(p!
=NULL&p-data!
=x)pre=p;p=p-next;if(p=NULL)printf(删除不成功);elsepre-next=p-next;free(p);2、编程创建一个有序单链表,要求从键盘随机输入若干整数,将它们按照从小到大的顺序链接起来,输入以-1表示结束,输入时的数不能是有序的,创建和输出链表的操作都要求函数实现。
voidSortedInsert(intx,NODE*h)/将数据有序插入,形成有序的链表NODE*pre,*p;NODE*q=(NODE*)malloc(LEN);q-data=x;pre=h;p=h-next;while(p!
=NULL&p-datanext;pre-next=q;q-next=p;NODE*Create()intx;NODE*head=(NODE*)malloc(LEN);head-next=0;head-data=0;doscanf(%d,&x);if(x!
=-1)SortedInsert(x,head);whilex!
=-1);returnhead;voidmain()NODEhead=Create();Print();/print函数用上面一题的即可,数据结构定义也是3、编程在当前目录下创建一个文件studinfo.txt,随机的从键盘输入10个学生记录(包括学号、姓名、性别、身高、地址等信息存入到该文件,然后将学生按照身高从高到低的顺序进行排序,并将排序之后的结果换行后保存到文件原始信息的后面。
typedefstructstudentcharstno20,name20,sex,address50;/用F表示女,M表示男floatheight;STU;STUs10;/用于保存学生的数据voidsort(STUs,intn)/对有n个学生的数据进行排序,具有通用性voidInput(STUs,intn)/输入n个学生的信息,同时保存到数组和文件中inti;FILE*fp=fopen(student.txt,w);/以写的方式打开if(fp=NULL)printf(cantopenfile!
);exit
(1);/includestdlib.h就能使用exit函数for(i=0;in;i+)scanf(%s%s%s%f%c,stui.stno,stui.name,stui.address,&stui.height,&stui.sex);fprintf(fp,%s%s%s%f%cn,stui.stno,stui.name,stui.address,stui.height,stui.sex);fclose(fp);voidOutput(STUs,intn)inti;FILE*fp=fopen(student.txt,a);/以追加形式打开文件if(fp=NULL)printf(cantopenfile!
);exit
(1);/includestdlib.h就能使用exit函数for(i=0;in;i+)fprintf(fp,%s%s%s%f%cn,stui.stno,stui.name,stui.address,stui.height,stui.sex);fclose(fp);voidmain()Input(s,10);sort(s,10);Output(s,10);4、编程在当前目录下创建一个文件address.txt文件,随机地从键盘输入10个好友的记录(包括姓名、性别、电话号码、城市等)信息存入到文件中,分别提供3种查询方式:
通过姓名查电话,通过城市查在这个城市的所有好友,通过电话号码查人,这3种查询都要求用函数实现。
(注意输入数据的时候至少保证有2个以上好友在同一个城市的情况发生2次)/本题的关键是要能查出在同一城市的多个好友,所以查询时,一定要挨个数据去比较,而不是查到就结束,数据输入和保存参考上题即可5、假设一个班上有48个同学,让系统随机地产生48个同学的姓名、性别、年龄、身高等信息。
输出48个同学的原始信息,每行8个,分6行输出。
然后将数据重新根据性别和身高排序,女生从低到高排在前面,男生从低到高排在后面,然后再将排序之后的结果输出他们的信息,女生在前,男生在后。
【特别要求:
(1)必须是全部排序完了之后再进行输出,不能是女生排完后输出女生的,男生排完后输出男生的;
(2)排序通过函数调用实现;(3)输出通过函数调用实现;(4)要求随机产生的姓名在3个至8个字符之间长度的随机的26个英文字符构成,年龄在18-20之间,身高在160-190公分之间。
(5)随机函数的备忘使用示例:
#include#include#includevoidmain()inti;srand(unsigned)time(NULL);/*将当前时间设置成随机函数的种子,每次产生的数都不一样*/*输出10个随机数*/for(i=0;i10;i+)printf(“%dn”,rand();可能的运行结果:
6929802621987.】B级难度试题:
(级难度试题:
(B档档-需完成系统随机挑选出来的需完成系统随机挑选出来的2道题,满道题,满分分90分)分)1、将一个正整数分解质因数。
(例如:
输入90,打印出90=2*3*3*5。
)用自定义函数实现。
每个合数都可以写成几个质数相乘的形式。
其中每个质数都是这个合数的因数,叫做这个合数的分解质因数#includeinta20;intfjzys(intk)inti=2,j=0;for(;i=k;i+)/当因数i=k时,实现继续寻找质因数for(;k%i=0;j+)/当k整除当前因数,实现该循环,每次循环下标j自加1k/=i;/使k=k/iaj=i;/存入因数returnj;voidmain()intm,b,j;printf(请输入一个整数nk=);scanf(%d,&m);j=fjzys(m);for(b=0;b(j-1);b+)printf(%d,ab);printf(*);printf(%dn,aj-1);/输出最后一个质因数2、一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=123.编程输出10000以内的所有完数。
用自定义函数实现。
#includevoidmain()intm,i,s;printf(10000以内的完数有:
n);for(m=1;m=10000;m+)s=0;/初始化因子之和s为0for(i=1;im;i+)/寻找在1到m之间,有多少m的因子if(m%i=0)/如果m能整除i,则i为m的因子s=s+i;/将因子累加if(s=m)printf(%dt,s);3、编程实现:
任意给定一个十进制的整数,将其转换成二进制,按位将其存放到数组中,然后输出,要求数制转换通过自定义函数来实现。
#includeintchange(intx,inta)intn=-1;while(x!
=0)n+;an=x%2;x=x/2;returnn;voidmain()intx,a20,i,n;printf(请输入一个十进制数:
n);scanf(%d,&x);n=change(x,a);printf(转化为二进制数之后结果为:
n);for(i=n;i=0;i-)printf(%1d,ai);printf(n);4、从键盘输入某班10个学生的成绩和学号,然后从键盘任意输入一个学生的学号,查找出他的成绩并输出,若未找到,给出相应提示。
要求通过自定义函数实现查找功能。
(要求用结构体类型来表示学生的信息-学号和成绩)#include#includestructStudentcharnumber20;intscore;intlength(char*a)inti=0;while(ai!
=0)i+;returni;intequal2(char*a,char*b)intlength(char*a);intlena,lenb,i;lena=length(a);lenb=length(b);if(lena!
=lenb)return0;for(i=0;ai!
=0;i+)if(ai!
=bi)return0;return1;voidmain()structStudentstu20;intequal2(char*a,char*b);inti;for(i=0;i10;+i)printf(请输入学号和成绩n);scanf(%s%d,&stui.number,&stui.score);charsnumber20;printf(请输入要查找的学号:
);scanf(%s,snumber);for(i=0;i=10)printf(没有学号为%s的学生!
n,snumber);5、编程实现:
输入10名职工的姓名及计算机水平考试的成绩,输出及格人数和及格的职工信息。
要求:
职工信息的输入和输出分别通过自定义函数来实现,职工信息要求定义成结构体类型。
#include#includetypedefstructcharname20;floatscore;datatype;voidinput(datatypework);voidprint(datatypework);voidmain()datatypework10;input(work);print(work);voidinput(datatypework)inti;printf(请输入10名职工的姓名和成绩:
n);for(i=0;i10;i+)scanf(%s%f,worki.name,&worki.score);voidprint(datatypework)inti,num=0;printf(及格的同学有:
n);for(i=0;i60)printf(%s,worki.name);num+;printf(n);printf(及格人数为%d人,num);6、编程实现:
任意输入一组不多于10个的升序排列的若干个整数,任意输入不多于5个的整数(-1作为输入结束标志),将其插入到该序列中,使其依然有序。
要求:
通过自定义函数实现将一个整数插入到一个有序序列中,使其依然有序。
#includevoidins(inta,int*n,intx);voidmain()inta30,x,m,i;m=-1;printf(请输入一组不多于10个的升序排列的若干个整数(-1作为输入结束标志)n);scanf(%d,&x);while(x!
=-1)m+;am=x;scanf(%d,&x);printf(请输入一组不多于5个的升序排列的若干个整数(-1作为输入结束标志)n);scanf(%d,&x);while(x!
=-1)ins(a,&m,x);scanf(%d,&x);printf(插入后结果为:
n);for(i=0;ix&i=0)ai+1=ai;i-;ai+1=x;(*n)+;7、将一个十六进制整数转换为十进制整数。
要求通过自定义函数实现。
#include#defineMAX1000voidmain()inthtoi(chars);intc,i,flag,flag1;chartMAX;i=0;flag=0;flag1=1;printf(请输入一个十六进制数:
);while(c=getchar()!
=0&i=0&c=a&c=A&c=0&si=a&si=A&si=F)n=n*16+si-A+10;returnn;8、将一个字符串的辅音字符复制到另一个字符串中。
要求源字符串从键盘输入。
复制功能要通过自定义函数实习。
#includevoidmain()voidcpy(char,char);charstr80,c80;printf(请输入一段字符串:
);gets(str);cpy(str,c);printf(其中的辅音字符为:
%sn,c);voidcpy(chars,charc)inti,j;for(i=0,j=0;si!
=0;i+)if(si!
=a&si!
=A&si!
=e&si!
=E&si!
=i&si!
=I&si!
=o&si!
=O&si!
=u&si!
=U)cj=si;j+;cj=0;9、键盘随机输入10个整数到数组中,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
要求这3个动作都要用自定义函数实现。
#includevoidmain()voidinput(int*num);voidexchange(int*num);voidoutput(int*num);intnum10;input(num);exchange(num);output(num);voidinput(int*num)inti;printf(请输入十个整数:
n);for(i=0;i10;i+)scanf(%d,&numi);voidoutput(int*num)int*p;printf(处理后结果为:
n);for(p=num;pnum+10;p+)printf(%d,*p);printf(n);voidexchange(int*num)int*max,*min,temp,*p;max=min=num;for(p=num+1;p*max)max=p;elseif(*p*min)min=p;temp=num0;num0=*max;*max=temp;if(max=num)max=min;temp=num9;num9=*min;*min=temp;10、有n个人围成一圈,顺序排号。
从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
#includevoidmain()inti,k,m,n,num500,*p;printf(请输入总人数:
);scanf(%d,&n);p=num;for(i=0;in;i+)*(p+i)=i+1;i=0;k=0;m=0;while(mn-1)if(*(p+i)!
=0)k+;if(k=3)*(p+i)=0;k=0;m+;i+;if(i=n)i=0;while(*p=0)p+;printf(最后留下来的是原来第%d个人.,*p);C级难度试题:
(级难度试题:
(C档档-需完成系统随机挑选出来的需完成系统随机挑选出来的2道题,满道题,满分分80分)分)1、写一个判断素数的函数来供主函数调用,在主函数里确定101-200之间有多少个素数,并输出
(1)有多少个素数;
(2)所有素数。
2、有一对兔子,从出生后第3个月起每个月都生一对兔子,这对小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
3、输入某年某月某日,判断这一天是这一年的第几天?
4、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少?
(要求输出
(1)多少个不重复的3位数;
(2)输出所有的不重复的3位数)5、输入两个正整数m和n,求其最大公约数和最小公倍数。
(要求有求最大公约数和最小公倍数的两个函数来供主函数调用实现)6、输入一行字符,分别统计出其中英文大写字母、小写字母、数字和其它字符的个数。
7、求s=a+aa+aaa+aaaa+aa.a的值,其中a是一个数字。
(例如2+22+222+2222+22222此时,最后的加项是n个a,例子里的a和n分别是2和5.a和n有键盘输入,输出s的值)。
8、猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
9、递归求出fabonacci数列的第10项的值。
10、在主函数里面输入一个字符串,在自定义函数里求出该串的长度(不能用strlen函数)。
【说明:
难度学生在考试的时候提出来,考试时间都相同,初步定为3个小时,闭卷机试!
】
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 漓江 学堂 程序设计 问题 求解 期末考试 参考 程序