C上机题目及答案1.docx

上传人:b****9 文档编号:26081476 上传时间:2023-06-17 格式:DOCX 页数:45 大小:28.95KB
下载 相关 举报
C上机题目及答案1.docx_第1页
第1页 / 共45页
C上机题目及答案1.docx_第2页
第2页 / 共45页
C上机题目及答案1.docx_第3页
第3页 / 共45页
C上机题目及答案1.docx_第4页
第4页 / 共45页
C上机题目及答案1.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

C上机题目及答案1.docx

《C上机题目及答案1.docx》由会员分享,可在线阅读,更多相关《C上机题目及答案1.docx(45页珍藏版)》请在冰豆网上搜索。

C上机题目及答案1.docx

C上机题目及答案1

第一周上机题

1.以下语句描述了包含数学成绩的学生信息结构体及其数组a:

structstudent{charname[20];floatmath;};

studenta[10]={{"张三",90},{"李四",85},{"王五",73}};

intcount=3;//数组中包含的学生数

编写两个函数分别实现在a数组中添加和删除学生信息。

要求:

1)原数组已按数学成绩排序(降序),添加和删除学生信息后数组应仍为降序;

2)以下数据用于添加:

{"赵二",96},{"钱六",65},{"孙七",80}

3)注意:

添加,删除后count数据要相应变化。

#include

#include

structstudent{

charname[20];

floatmath;

};

intcount=3;

voidadd(studenta[10]);

voiddele(studenta[10]);

voidprint(studenta[]);

voidmain(){

studenta[10]={{"张三",90},{"李四",85},{"王五",73}};

intn=0;

do{

cout<<".................学生信息处理系统.................."

<<"\n1-删除"

<<"\n2-增加"

<<"\n3-结束\n"

<<"\n请选择:

";

cin>>n;

if(n==1)dele(a);

elseif(n==2)add(a);

elsecout<<"谢谢使用本系统!

\n";

}while(n!

=3);

}

voidadd(studenta[10]){

studentstu;

inti=0,n=count;

cout<<"请输入需增加的学生信息(姓名,成绩):

";

cin>>stu.name>>stu.math;

while(stu.math

for(;n>i;n--)a[n]=a[n-1];//腾位置

a[i]=stu;//插入

count++;

print(a);

}

voiddele(studenta[10]){

charname[20];

inti=0,n=count;

print(a);

cout<<"请输入需删除学生的姓名:

";

cin>>name;

while(strcmp(name,a[i].name)!

=0&&i

if(i>=n)cout<<"查无此人!

\n";

else{

for(;i

count--;

print(a);

}

}

voidprint(studenta[]){

cout<<"\n最新学生信息:

\n";

for(inti=0;i

cout<

}

2.定义描述三维坐标点(x,y,z)的结构体类型变量,完成坐标点的输入和输出,并求两坐标点之间的距离。

要求:

编写函数求两坐标点之间的距离。

#include

#include

structpoint{

doublex,y,z;

};

doubledistance(pointa,pointb);

voidmain(){

pointa,b;

cout<<"请分别输入两个点的坐标(x,y,z):

\n";

cin>>a.x>>a.y>>a.z;

cin>>b.x>>b.y>>b.z;

cout<<"a点的坐标:

"<

cout<<"b点的坐标:

"<

cout<<"a,b两点的距离是:

"<

}

doubledistance(pointa,pointb){

doubled;

d=sqrt((a.x-b.x)*(a.x-b.x)

+(a.y-b.y)*(a.y-b.y)

+(a.z-b.z)*(a.z-b.z));

returnd;

}

3.某市青年歌手大赛聘请7名评委打分,下列程序协助进行评分统计。

函数delmaxmin的功能是对一个选手的得分做以下计算:

去掉一个最高分,去掉一个最低分,然后对剩余得分求平均分并保存。

函数sort完成对n名选手的得分按平均分从高到低排序。

【测试数据与运行结果】

测试数据:

程序中给定的初始化测试数据

运行结果:

li:

94979896100999797.40

zhang:

96979898100979697.20

zhou:

95100999697969797.00

以下语句描述了包含数学成绩的学生信息结构体及其数组a:

struct{charplayer_name[20];

doublescore[7],aver;

}PERSON[3];

#include

structP{

charname[20];

doublescore[7],aver;

}PERSON[3];

doubledelmaxmin(doublea[7]){

doubleaver=0,sum=0,max,min;

max=min=a[0];

for(inti=0;i<7;i++){

if(a[i]>max)max=a[i];

if(a[i]

aver+=a[i];

}

aver-=max+min;

returnaver/5;

}

voidsort(Pp[3]){

inti,j;

Pa;

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

for(j=i+1;j<3;j++)//原程序:

for(j=0;j<3;j++)

if(p[i].aver

if(p[i].aver

a=p[i],p[i]=p[j],p[j]=a;

}

voidmain(){

inti,j;

cout<<"请输入比赛选手的比赛数据:

"<

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

cin>>PERSON[i].name;

for(j=0;j<7;j++)

cin>>PERSON[i].score[j];

}

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

PERSON[i].aver=delmaxmin(PERSON[i].score);

sort(PERSON);

cout<<"比赛成绩如下"<

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

cout<

for(j=0;j<7;j++)

cout<

cout<

}

}

25个人围成一个圈,从第1个人开始顺序报号(1,2,3……),凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号。

要求:

函数voidseek(int*a,intn,int*pn)按上述要求在a数组,找出最后留在圈子中的人原来的序号并返回。

主函数是:

voidmain(){

intn=3;

intnum;

inta[25],*p=a;

for(inti=0;i<25;i++)p[i]=i+1;

seek(a,n,&num);

cout<<”最后留在圈子中的人原来的序号是:

”<

}

*/

#include

#defineNUM10

#include

voidseek(int*a,intn,int*pn);

voidmain(){

intn=3;

intnum;

inta[NUM],*p=a;

for(inti=0;i

for(i=0;i

seek(a,n,&num);

cout<<"\n最后留在圈子中的人序号是:

"<

}

voidseek(int*a,intn,int*pn){

intnum=NUM;

intk=1;

inti;

cout<<"\n游戏中.......\n";

while(num>1){

for(i=0;i

if(a[i]==0)continue;

if(k++%3==0){

a[i]=0;

num--;

}

else*pn=i;

}

for(i=0;i

if(a[i]!

=0)cout<

cout<

}

}

1.编程要求

1)编写函数intfind(char*a,char*b),函数被调用时,a指向的数组中已存储一个字符串,该字符串是一个包含了多个单词的英语句子。

函数的功能找出字符数组a中字符串中最长的单词并存入b所指向的数组中,函数返回最长单词在字符串的起迭位置下标。

2)编写main函数,接受键盘输入的一个英文句子。

调用find函数找到该句子中最长的单词,将最长单词及其在字符串中的起始位置下标输出到屏幕。

#include

#include

intfind(char*a,char*b);

voidmain(){

chara[80],b[80];

intn;

cout<<"请输入的一个英文句子:

";

cin.getline(a,80);

cout<

"<

}

intfind(char*a,char*b){

char*p1,*p2,*p3;

p1=p2=p3=a;

intmax=0;

while(*p1!

=0){

while(*p1=='')p1++,p2++;

while(*p1!

=''&&*p1!

=0)p1++;

if(p1-p2>max){

max=p1-p2;

p3=p2;

}

p2=p1;

}

strncpy(b,p3,max);

*(b+max)='\0';

return(p3-a);

}

附加题

2.重新排列一维数组元素的顺序,使得左边的所有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按由小到大的次序存放。

【测试数据与运行结果】

数组原始数据为:

17151014161719181312

输出结果:

18161412101315171719

要求:

1)编写函数voidresort(int*x,intn),使得左边的所有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按由小到大的次序存放。

(可根据编程需要增加函数)

2)编写main函数,接受键盘输入数据,调用resort函数完成上述功能,并输出结果。

#include

#include

voidresort(int*x,intn);

voidsort(int*a,intn);

voidmain(){

inta[10]={0};

cout<<"请输入十个数据:

";

for(inti=0;i<10;i++)cin>>a[i];

cout<<"数组原始数据为:

";

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

resort(a,10);

cout<<"\n输出结果:

";

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

cout<

}

voidresort(int*x,intn){

inta[10],*i,*j,*pa=a,*px=x;

while(px

sort(a,10);

i=x,j=x+9;

for(pa=a;pa

if(*pa%2==0)*i++=*pa++;

else*j--=*pa++;

}

}

voidsort(int*a,intn){

int*i,*j,temp;

for(i=a;i

for(j=i+1;j

if(*i<*j)

temp=*i,*i=*j,*j=temp;

}

1.编写一个求积分的函数,该函数的原型如下:

floatIntegral(inta,intb,float(*fun)(float));

该函数返回值为积分结果,形参a,b分别为积分上下限,fun是被积函数。

要求:

1)积分算法:

将积分区域划分为若干个小区间,求出所有小区间中被积函数下的面积之和即为函数在积分区域内的积分值;小区间面积可用梯形近似;

2)用积分函数分别求解y=x2和y=2x+1两个函数在[0,1]区域内的积分值。

*/

#include

floatf1(floatx){

returnx*x;

}

floatf2(floatx){

return(2*x+1);

}

floatIntegral(inta,intb,float(*fun)(float));

voidmain(){

cout<<"第一个积分值:

"<

cout<<"第二个积分值:

"<

}

floatIntegral(inta,intb,float(*fun)(float)){

floath,y;

inti;

y=(fun(a)+fun(b))/2;

h=(b-a)/1000.0;

for(i=1;i<1000;i++)y+=fun(h*i);

return(y*h);

}

2.编程题(20分)

【编程要求】

1)编写函数intfun(long*x),找出所有满足以下特性的六位整数:

它是一个完全平方数(完全平方数是指该数是某个整数的平方);该数同时也是回文数(回文数是指该数等于它的反序数)。

例如,698896是836的平方并且698896是回文数,因此698896是满足所给条件的六位整数。

将所有满足上述条件的六位整数存入x指向的数组中,函数返回x指向的数组中整数的个数。

2)编写main函数,声明result数组,调用fun函数将所有满足条件的六位整数存入result数组中,将result数组中的数据输出到屏幕。

【测试数据与运行结果】

运行结果:

698896

#include

#include

intfun(long*x);

voidmain(){

longresort[10];

intn=fun(resort);

cout<<"六位整数中完全平方数有:

"<

for(inti=0;i

cout<

}

intfun(long*x){

longn,n1,n2,n3=0;

long*px=x;

for(n2=n=100000;n<999999;n++,n2=n,n3=0){

n1=sqrt(n);

if(n1*n1==n){

while(n2>0){

n3=n3*10+n2%10;

n2/=10;

}

}

if(n3==n)*px++=n;

}

returnpx-x;

}

3.改错题

【程序功能】

对于s数组中保存的五个字符串,删除其中不符合下列组成规则的字符串,输出s数组中剩余的字符串。

字符串组成规则:

由字母、数字、下划线组成,首字符非数字。

【测试数据与运行结果】

s数组中五个字符串:

a%1,_a12,aaa,$ss,1sss

输出:

_a12,aaa

【含有错误的源程序】

#include

#include

#defineM20

#defineN10

intisident(chars[][N],intn){

inti,j,k,flag;

for(j=0;j

flag=0;

if(s[j][0]!

='_'||-(s[j][0])==0)

flag=1;

else

for(i=1;s[j][i]!

='\0';i++)

if(s[j][i]!

='_'&&!

isalpha(s[j][i])&&!

isdigit(s[j][i]))

flag=1;

if(flag==1){

for(k=0;k

strcpy(s[k],s[k+1]);

n--;

j--;

}

}

returnn;

}

voidmain(){

chars[M][]={"a%1","_a12","aaa","$ss","1sss"};

inti,n=5;

n=isident(s,n);

cout<<"ThecorrectCidentifiersis:

\n";

for(i=0;i

cout<

}

1)根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。

2)改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。

#include

#include

#include

#defineM20

#defineN10

intisident(chars[][N],intn){

inti,j,k,flag;

for(j=0;j

flag=0;

if(s[j][0]!

='_'&&!

isalpha(s[j][0]))//if(s[j][0]!

='_'||-(s[j][0])==0)

flag=1;

else

for(i=1;s[j][i]!

='\0';i++)

if(s[j][i]!

='_'&&!

isalpha(s[j][i])&&!

isdigit(s[j][i]))//#include

flag=1;

if(flag==1){

for(k=j;k

strcpy(s[k],s[k+1]);

n--;

j--;

}

}

returnn;

}

voidmain(){

chars[M][N]={"a%1","_a12","aaa","$ss","1sss"};//s[M][N]

inti,n=5;

n=isident(s,n);

cout<<"ThecorrectCidentifiersis:

\n";

for(i=0;i

cout<

}

第六周上机题目

一、编程题

1.编写函数intprime_m(intn,intx[],longy[]),在2~n范围内查找同时符合以下条件的整数m:

2m-1是素数、2m-1的反序数是奇数、2m-1的十进制表示中包含数字1。

将2~n范围内符合上述条件的所有整数m依次保存到x指向的数组中,将与m对应的整数2m-1依次保存到y指向的数组中。

函数返回x数组中保存的整数个数。

2.编写main函数,接收键盘输入的n值,调用prime_m函数找到2~n范围内所有符合给定条件的整数m及整数2m-1并将它们分别保存在两个一维数组中.

3.【测试数据与运行结果】

测试数据:

n=20

输出结果:

531

7127

17131071

#include

#include

intprime_m(intn,intx[],longy[]);

voidmain(){

intn1,n,x[10],*px=x;

longy[10],*py=y;

cout<<"测试数据:

n=";

cin>>n;

n1=prime_m(n,x,y);

cout<<"输出结果:

\n";

while(n1-->0)cout<<*px++<<'\t'<<*py++<<'\n';

}

intprime_m(intn,intx[],longy[])

{

intm,p=0,n1,*px=x;

longk=2,*py=y;

for(m=2;m

k*=2;

for(inti=2;i<=sqrt(k-1);i++){//判断k是不是素数

if((k-1)%i==0)break;}

if(i

n1=k-1;//2.判断k的反序数是不是奇数

while(n1>10)n1/=10;

if(n1%2==0)continue;

n1=k-1;//判断k中有无数字1

while((n1%10)!

=1&&n1>10)n1/=10;

if(n1%10!

=1)continue;

*px++=m,*py++=k-1;

}

returnpx-x;

}

二、编程题

接收从键盘输入的若干个字符串,为每一个字符串动态申请一块存储区,将字符串复制到该存储区并将存储区的首地址依次保存到指针数组lineptr中,再以字典序输

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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