漓江学堂程序设计与问题求解期末考试参考程序.docx

上传人:b****4 文档编号:11720891 上传时间:2023-03-31 格式:DOCX 页数:19 大小:22.05KB
下载 相关 举报
漓江学堂程序设计与问题求解期末考试参考程序.docx_第1页
第1页 / 共19页
漓江学堂程序设计与问题求解期末考试参考程序.docx_第2页
第2页 / 共19页
漓江学堂程序设计与问题求解期末考试参考程序.docx_第3页
第3页 / 共19页
漓江学堂程序设计与问题求解期末考试参考程序.docx_第4页
第4页 / 共19页
漓江学堂程序设计与问题求解期末考试参考程序.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

漓江学堂程序设计与问题求解期末考试参考程序.docx

《漓江学堂程序设计与问题求解期末考试参考程序.docx》由会员分享,可在线阅读,更多相关《漓江学堂程序设计与问题求解期末考试参考程序.docx(19页珍藏版)》请在冰豆网上搜索。

漓江学堂程序设计与问题求解期末考试参考程序.docx

漓江学堂程序设计与问题求解期末考试参考程序

A级难度试题:

(最高难度:

A档--只需完成一题即可,随机挑选,满分100分)

1、编程实现单链表的创建、查询、插入、删除等操作,每次操作之后都要输出单链表,要求在创建单链表的节点时,以输入-1表示结束,所有操作都要求函数实现。

#include

typedefstructnode

{

intdata;

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,下一个结点地址%x\n",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("删除不成功");

else

{

pre->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->data

{

pre=p;

p=p->next;

}

pre->next=q;q->next=p;

}

NODE*Create()

{

intx;

NODE*head=(NODE*)malloc(LEN);

head->next=0;head->data=0;

do{

scanf("%d",&x);

if(x!

=-1)

SortedInsert(x,head);

}whilex!

=-1);

returnhead;

}

voidmain()

{

NODEhead=Create();

Print();//print函数用上面一题的即可,数据结构定义也是

}

3、编程在当前目录下创建一个文件studinfo.txt,随机的从键盘输入10个学生记录(包括学号、姓名、性别、身高、地址等信息存入到该文件,然后将学生按照身高从高到低的顺序进行排序,并将排序之后的结果换行后保存到文件原始信息的后面。

typedefstructstudent{

charstno[20],name[20],sex,address[50];//用F表示女,M表示男

floatheight;

}STU;

STUs[10];//用于保存学生的数据

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;i

{

scanf("%s%s%s%f%c",stu[i].stno,stu[i].name,stu]i].address,&stu[i].height,&stu[i].sex);

fprintf(fp,"%s%s%s%f%c\n",stu[i].stno,stu[i].name,stu]i].address,stu[i].height,stu[i].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;i

{

fprintf(fp,"%s%s%s%f%c\n",stu[i].stno,stu[i].name,stu]i].address,stu[i].height,stu[i].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

#include

voidmain(){ inti;

  srand((unsigned)time(NULL));/*将当前时间设置成随机函数的种子,每次产生的数都不一样*/

 /*输出10个随机数*/

 for(i=0;i<10;i++)   printf(“%d\n”,rand());

}

可能的运行结果:

21987......................】

B级难度试题:

(B档--需完成系统随机挑选出来的2道题,满分90分)

1、将一个正整数分解质因数。

(例如:

输入90,打印出90=2*3*3*5。

)用自定义函数实现。

每个合数都可以写成几个质数相乘的形式。

其中每个质数都是这个合数的因数,叫做这个合数的分解质因数

#include

inta[20];

intfjzys(intk)

{

inti=2,j=0;

for(;i<=k;i++)//当因数i<=k时,实现继续寻找质因数

for(;k%i==0;j++)//当k整除当前因数,实现该循环,每次循环下标j自加1

{

k/=i;//使k=k/i

a[j]=i;//存入因数

}

returnj;

}

voidmain()

{

intm,b,j;

printf("请输入一个整数\nk=");

scanf("%d",&m);

j=fjzys(m);

for(b=0;b<(j-1);b++)

{

printf("%d",a[b]);

printf("*");

}

printf("%d\n",a[j-1]);//输出最后一个质因数

}

2、一个数如果恰好等于它的因子之和,这个数就称为“完数”。

例如6=1+2+3.编程输出10000以内的所有完数。

用自定义函数实现。

#include

voidmain()

{

intm,i,s;

printf("10000以内的完数有:

\n");

for(m=1;m<=10000;m++)

{

s=0;//初始化因子之和s为0

for(i=1;i

if(m%i==0)//如果m能整除i,则i为m的因子

s=s+i;//将因子累加

if(s==m)

printf("%d\t",s);

}

}

3、编程实现:

任意给定一个十进制的整数,将其转换成二进制,按位将其存放到数组中,然后输出,要求数制转换通过自定义函数来实现。

#include

intchange(intx,inta[])

{

intn=-1;

while(x!

=0)

{

n++;

a[n]=x%2;

x=x/2;

}

returnn;

}

voidmain()

{

intx,a[20],i,n;

printf("请输入一个十进制数:

\n");

scanf("%d",&x);

n=change(x,a);

printf("转化为二进制数之后结果为:

\n");

for(i=n;i>=0;i--)printf("%1d",a[i]);

printf("\n");

}

4、从键盘输入某班10个学生的成绩和学号,然后从键盘任意输入一个学生的学号,查找出他的成绩并输出,若未找到,给出相应提示。

要求通过自定义函数实现查找功能。

(要求用结构体类型来表示学生的信息--学号和成绩)

#include

#include

structStudent

{

charnumber[20];

intscore;

};

intlength(char*a)

{

inti=0;

while(a[i]!

='\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;a[i]!

='\0';i++)

{

if(a[i]!

=b[i])

return0;

}

return1;

}

voidmain()

{

structStudentstu[20];

intequal2(char*a,char*b);

inti;

for(i=0;i<10;++i)

{

printf("请输入学号和成绩\n");

scanf("%s%d",&stu[i].number,&stu[i].score);

}

charsnumber[20];

printf("请输入要查找的学号:

");

scanf("%s",snumber);

for(i=0;i<10;++i){

if(equal2(snumber,stu[i].number)==1)

{

printf("学生%s的成绩是:

%d\n",snumber,stu[i].score);

break;

}

}

if(i>=10)

{

printf("没有学号为%s的学生!

\n",snumber);

}

}

5、编程实现:

输入10名职工的姓名及计算机水平考试的成绩,输出及格人数和及格的职工信息。

要求:

职工信息的输入和输出分别通过自定义函数来实现,职工信息要求定义成结构体类型。

#include

#include

typedefstruct

{

charname[20];

floatscore;

}datatype;

voidinput(datatypework[]);

voidprint(datatypework[]);

voidmain()

{

datatypework[10];

input(work);

print(work);

}

voidinput(datatypework[])

{

inti;

printf("请输入10名职工的姓名和成绩:

\n");

for(i=0;i<10;i++)

scanf("%s%f",work[i].name,&work[i].score);

}

voidprint(datatypework[])

{

inti,num=0;

printf("及格的同学有:

\n");

for(i=0;i<10;i++)

{

if(work[i].score>60)

{

printf("%s",work[i].name);

num++;

}

}

printf("\n");

printf("及格人数为%d人",num);

}

6、编程实现:

任意输入一组不多于10个的升序排列的若干个整数,任意输入不多于5个的整数(-1作为输入结束标志),将其插入到该序列中,使其依然有序。

要求:

通过自定义函数实现将一个整数插入到一个有序序列中,使其依然有序。

#include

voidins(inta[],int*n,intx);

voidmain()

{

inta[30],x,m,i;

m=-1;printf("请输入一组不多于10个的升序排列的若干个整数(-1作为输入结束标志)\n");

scanf("%d",&x);

while(x!

=-1)

{

m++;

a[m]=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;i<=m;i++)

printf("%5d",a[i]);

}

voidins(inta[],int*n,intx)

{

inti=*n;

while(a[i]>x&&i>=0)

{

a[i+1]=a[i];

i--;

}

a[i+1]=x;

(*n)++;

}

7、将一个十六进制整数转换为十进制整数。

要求通过自定义函数实现。

#include

#defineMAX1000

voidmain()

{

inthtoi(chars[]);

intc,i,flag,flag1;

chart[MAX];

i=0;

flag=0;

flag1=1;

printf("请输入一个十六进制数:

");

while((c=getchar())!

='\0'&&i

{

if(c>='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F')

{

flag=1;

t[i++]=c;

}

elseif(flag)

{

t[i]='\0';

printf("转化为十进制数为%d",htoi(t));

printf("\n还要继续吗?

(输入N或n终止)");

c=getchar();

if(c=='N'||c=='n')flag1=0;

else

{

flag=0;

i=0;

printf("\n请输入一个十六进制数:

");

}

}

}

}

inthtoi(chars[])

{

inti,n;

n=0;

for(i=0;s[i]!

='\0';i++)

{

if(s[i]>='0'&&s[i]<='9')n=n*16+s[i]-'0';

if(s[i]>='a'&&s[i]<='f')n=n*16+s[i]-'a'+10;

if(s[i]>='A'&&s[i]<='F')n=n*16+s[i]-'A'+10;

}

returnn;

}

8、将一个字符串的辅音字符复制到另一个字符串中。

要求源字符串从键盘输入。

复制功能要通过自定义函数实习。

#include

voidmain()

{

voidcpy(char[],char[]);

charstr[80],c[80];

printf("请输入一段字符串:

");

gets(str);

cpy(str,c);

printf("其中的辅音字符为:

%s\n",c);

}

voidcpy(chars[],charc[])

{

inti,j;

for(i=0,j=0;s[i]!

='\0';i++)

{

if(s[i]!

='a'&&s[i]!

='A'&&s[i]!

='e'&&s[i]!

='E'&&s[i]!

='i'&&s[i]!

='I'&&s[i]!

='o'&&s[i]!

='O'&&s[i]!

='u'&&s[i]!

='U')

{

c[j]=s[i];

j++;

}

}

c[j]='\0';

}

9、键盘随机输入10个整数到数组中,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

要求这3个动作都要用自定义函数实现。

#include

voidmain()

{

voidinput(int*num);

voidexchange(int*num);

voidoutput(int*num);

intnum[10];

input(num);

exchange(num);

output(num);

}

voidinput(int*num)

{

inti;

printf("请输入十个整数:

\n");

for(i=0;i<10;i++)scanf("%d",&num[i]);

}

voidoutput(int*num)

{

int*p;

printf("处理后结果为:

\n");

for(p=num;p

printf("\n");

}

voidexchange(int*num)

{

int*max,*min,temp,*p;

max=min=num;

for(p=num+1;p

{

if(*p>*max)max=p;

elseif(*p<*min)min=p;

}

temp=num[0];

num[0]=*max;

*max=temp;

if(max=num)max=min;

{

temp=num[9];

num[9]=*min;

*min=temp;

}

}

10、有n个人围成一圈,顺序排号。

从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

#include

voidmain()

{

inti,k,m,n,num[500],*p;

printf("请输入总人数:

");

scanf("%d",&n);

p=num;

for(i=0;i

{

*(p+i)=i+1;

}

i=0;k=0;m=0;

while(m

{

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分

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1