上机实验题目解题思路.docx

上传人:b****6 文档编号:7390811 上传时间:2023-01-23 格式:DOCX 页数:18 大小:21.91KB
下载 相关 举报
上机实验题目解题思路.docx_第1页
第1页 / 共18页
上机实验题目解题思路.docx_第2页
第2页 / 共18页
上机实验题目解题思路.docx_第3页
第3页 / 共18页
上机实验题目解题思路.docx_第4页
第4页 / 共18页
上机实验题目解题思路.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

上机实验题目解题思路.docx

《上机实验题目解题思路.docx》由会员分享,可在线阅读,更多相关《上机实验题目解题思路.docx(18页珍藏版)》请在冰豆网上搜索。

上机实验题目解题思路.docx

上机实验题目解题思路

上机实验题目解题思路

目录

指针之二3

2455:

步骤:

3

2456:

步骤:

3

2457:

步骤:

4

3577:

步骤:

4

3578:

步骤:

4

3579:

步骤:

5

3581:

步骤:

5

3583:

步骤:

6

3584:

步骤:

6

3584:

步骤:

7

3585:

步骤:

7

3586:

步骤:

8

指针之一8

2453:

步骤:

8

2454:

步骤:

9

3575:

步骤:

方法同24549

3576:

步骤:

9

3580:

步骤:

10

3582:

步骤:

10

函数11

2452:

步骤:

11

2482:

步骤:

11

3574:

步骤:

12

3571:

步骤:

12

函数12

3565:

步骤:

12

3566:

步骤:

13

3567:

步骤:

13

3568:

步骤:

13

3569:

步骤:

14

3570:

步骤:

14

3571:

步骤:

14

3573:

步骤:

14

数组14

3552:

步骤:

14

3553:

步骤:

15

3555:

步骤:

15

3556:

步骤:

15

3561:

步骤:

15

3893:

步骤:

15

3895:

步骤:

16

3900:

步骤:

16

3905:

步骤:

16

指针之二

2455:

步骤:

1)定义两数交换的函数voidswap(int*p1,int*p2),交换两指针所指向的值。

.

2)main函数:

20个元素的浮点数组表示n个数,用选择排序或冒泡排序对n个数进行从小到大的排序,对排序过程中的交换两数用函数调用来实现,如交换a[i]和a[index]为swap(&a[i],&a[index]);;

2456:

步骤:

法一:

1)定义移数函数mov(int*a,intn),把数组最后面一个数移到最前面,其他数往后移一位,具体过程为:

a)先保存最后一个元素

b)从第一个元素开始到倒数第二个元素都往后移一位

c)最后一个元素放到最前面

2)定义main函数,多组输入测试数据,循环调用移数函数mov()。

intmain()

{inta[100],m,n,i;

while(scanf("%d%d",&n,&m)!

=EOF)//多组输入n、m值

{

for(I=0;I

scanf(“%d”,&a[i]);

for(i=0;i

mov(a,n);

for循环输出数组的每一个元素

}

Return0;

}

法二:

1)定义递归移数函数mov(int*a,intn,intm),把数组最后面一个数移到最前面,其他数往后移一位,当m>1时,调用函数mov(a,n,m-1)具体过程为:

d)先保存最后一个元素

e)从第一个元素开始到倒数第二个元素都往后移一位

f)最后一个元素放到最前面

g)如果m>1,move(a,n,m-1);

2)定义main函数

intmain()

{inta[100],m,n,i;

while(scanf("%d%d",&n,&m)!

=EOF)//多组输入n、m值

{

for循环输入数组的每一个元素

mov(a,n,m);

for循环输出数组的每一个元素

}

Return0;

}

2457:

步骤:

1)定义逆序函数voidsort(int*p1,intn),逆序排列p1地址开始的n个数。

循环变量i从0开始到n/2,*(p+i)与*(p+n-1-i)交换。

若是定义函数为voidsort(intx[],intn),则改为*(p+i)为x[i],其实作为形参int*p与intp[]是完全等价的,后面*(p+2)与p[2]是等价的。

2)main函数:

多组输入测试。

intmain()

{intnum[20],n,i;

while(scanf("%d",&n)!

=EOF)//多组输入n值

{

for循环输入数组的每一个元素

sort(num,n);//逆序排列数组num,或sort(&num[0],n)或int*p,p=num,sort(p,n);

for循环输出数组的每一个元素

}

Return0;

}

3577:

步骤:

与2456完全相同。

3578:

步骤:

1)main函数:

定义三个一维字符数组s1[80]/s2[80]/s3[80],定义一个用于交换的临时字符数组t[80]。

如同三个整数的排序,先比较符数组s1、s2,若s1大于s2则交换两字符串;再比较s1、s3,若s1大于s3则交换两字符串;这样s1一定是最小的。

再比较s2、s3,若s2大于s3则交换两字符串。

2)比较字符数组s1、s2为:

strcmp(s1,s2)

3)字符串S1和s2交换为:

{strcpy(t,s1);strcpy(s1,s2);strcpy(s2,t);}若写s1=s2,为错误。

4)由于有三次比较,就会有三次交换,三次交换为重复代码,考虑用交换函数实现。

交换函数定义为:

voidswap(char*str1,char*str2)//表示函数功能要交换str1、str2对应两个字符值

{chart[80];步骤3的三个语句}

3579:

步骤:

1)自定义求字符串长度函数intlength(char*s),功能为返回字符串s的长度。

intlength(char*s)

{inti;

…………….

returni;

}

2)main函数:

多组输入测试。

intmain()

{

charstr[80];

while(gets(str)!

=NULL)

{

printf("%d\n",length(str));

}

return0;

}

3581:

步骤:

1)自定义排序函数voidsort(int*p,intn),功能是对以p的值为起始地址的n个数排序。

voidsort(int*p,intn)//冒泡法排序代码,也可写成选择法排序的

{inti,j,t;

For(I=0;i

For(j=0;j

If(p[j]>p[j+1])//a[j]可改为*(p+j),p[j+1]可改为*(p+j+1)

{t=p[j];p[j]=p[j+1];p[j+1]=t;}

}

2)main函数:

多组输入测试。

intmain()

{Inta[100];

IntI,n;

while(scanf("%d",&n)!

=EOF)

{输入数组每一个元素;

调用排序函数;

输出数组每一个元素;

换行printf("\n");

}

return0;

}

3583:

步骤:

1)自定义排序函数voidsortA(int*p,intn),功能是对以p的值为起始地址的n个数从小到排序;方法参考题目3581

2)自定义排序函数voidsortD(int*p,intn),功能是对以p的值为起始地址的n个数从大到排序,方法参考题目3581。

3)main函数:

多组输入测试。

intmain()

{Inta[10],i;

Charc;

while(scanf("%c",&c)!

=EOF)

{输入10个整数;

Getchar();//得到10个整数输入时的最后一个回车符,让下一次的%c能得到字符’A’或’D’

If(c==‘A’)

调用排序函数sortA(a,10);

Elseif(c==‘D’)

调用排序函数sortD(a,10);

输出数组每一个元素;

换行printf("\n");

}

return0;

}

3584:

步骤:

1)自定义查找函数intsearch(intlist[],intn,intx),功能是在以list值为起始地址的n个数中找x,若找到返回下标,否则返回-1.

2)main函数:

多组输入测试。

intmain()

{inta[10],x,i,result;

while(scanf("%d",&a[0])!

=EOF)

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

scanf("%d",&a[i]);

scanf("%d",&x);

result=search(a,10,x);

if(result==-1)

printf("Notfound\n");

else

printf("%d\n",result);

}

return0;

}

3584:

步骤:

1)自定义查找函数intsearch(intlist[],intn,intx),功能是在以list值为起始地址的n个数中找x,若找到返回下标,否则返回-1.

2)main函数:

多组输入测试。

intmain()

{inta[10],x,i,result;

while(scanf("%d",&a[0])!

=EOF)

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

scanf("%d",&a[i]);

scanf("%d",&x);

result=search(a,10,x);

if(result==-1)

printf("Notfound\n");

else

printf("%d\n",result);

}

return0;

}

3585:

步骤:

1)自定义函数voidmcopy(char*src,char*dst,intm),功能是从src为起始地址的第m个字符开始的全部字符复制到以dst为起始地址的字符数组中。

voidmcopy(char*src,char*dst,intm)

{inti,j=0;

for(i=m;src[i]!

='\0';i++,j++)

………..;

dst[j]='\0';

}

2)main函数:

多组输入测试。

intmain()

{intm;

charsrc[80],dst[80];

while(scanf("%d",&m)!

=EOF)

{

…………………

}

return0;

}

3586:

步骤:

1)自定义函数intstrcomp(char*s1,char*s2),功能是当s1>s2时,返回1,当s1==s2时,返回0,当s1

不能调用函数strcmp(),字符串的比较是从两个字符串的首字符开始,依次比较相对应的字符(比较字符的ASCII码),直到出现不同的字符或遇到’\0’为止。

如果所有字符相同,表示相同;以第一个不相同的字符进行比较,哪个大则其对应的字符串就为较大的字符串。

如“abc”与”abcd”,第一个不同的是’\0’与’d’,而’d’>’\0’,所以“abcd”大于”abc”。

intstrcomp(char*s1,char*s2)

{intresult,……

Returnresult;

}

2)main函数:

多组输入测试。

intmain()

{

chars1[80],s2[80];

while(gets(s1)!

=NULL)

{

gets(s2);

printf("%d\n",strcomp(s1,s2));

}

return0;

}

指针之一

2453:

步骤:

1)定义两数交换的函数voidswap(int*p1,int*p2),交换两指针所指向的值。

.

2)main函数:

多组输入a、b,调用交换函数交换两变量值。

代码框架:

voidswap(int*p1,int*p2)

{

……

}

intmain()

{inta,b;

Int*pointer_1,*pointer_2;

while(scanf("%d%d",&a,&b)!

=EOF)//输入a、b值

{

Pointer_1=….;

Pointer_2=…..;

If(a

Swap(…..);

printf(“%d%d\n”,a,b);

}

return0;

}

2454:

步骤:

h)定义同2453相同的函数voidswap(int*p1,int*p2),交换两指针所指向的值。

i)定义main函数,多组输入三个数,从大到小输出。

intmain()

{inta,b,c;

while(scanf("%d%d",&a,&b)!

=EOF)//输入a、b值

{If(a

Swap(&a,&b);

If(a

Swap(&a,&c);

If(b

Swap(&b,&c);

printf(“%d%d%d\n”,a,b,c);

}

return0;}

3575:

步骤:

方法同2454

3576:

步骤:

1)定义类同2453函数voidswap(float*p1,float*p2),交换两指针所指向的值。

2)定义main函数,多组输入五个数,从小到大输出。

intmain()

{inta[5],i,temp;

while(scanf("%f",&a[0])!

=EOF)//输入a、b值

{

for(i=1;i<5;i++)

scanf(“%f”,&a[i]);

选择排序完成5个数的排序,其中交换通过

Swap(&a[],&a[])完成;

循环输出a的所有元素;

}

return0;

}

3580:

步骤:

1)自定义函数input(inta[],intn),output(inta[],intn);

Voidinput(inta[],intn)//函数无返回值,等效于void(int*a,intn)

{inti;

For(i=0;i

Scanf(“%d”,&a[i]);

}

2)在main函数中,调用它,完成对数组n个元素的输入输出。

Intmain()

{intarray[100],n;

While(scanf(“%d”,&n)!

=EOF)

{

Input(array,n);

Output(array,n);

}

Return0;

}

3582:

步骤:

1)定义一个计算两个数和、差的函数sumDiff(intop1,intop2,int*pSum,int*pDiff),功能是求两个数op1、op2的和、差,其中*psum和*pdiff是计算得出的和与差,代替return返回值,故函数不需要返回任何值了。

VoidsumDiff(intop1,intop2,int*pSum,int*pDiff)

{//op1、op2是要计算的两数

*pSum=op1+op2;//pSum是main()函数中变量的地址,故修改的是main()函数中变量的值

……

}

2)在main函数中,调用它,计算输入的任意两个数的和与差。

Intmain()

{inta,b,s,d;

While(scanf(“%d%d”,&a,&b)!

=EOF)

{

sumDiff(a,b,&s,&d);

printf(“sum=%d,diff=%d\n”,s,d);

}

Return0;

}

函数

2452:

步骤:

3)定义判断素数函数intprime(intx):

当x是素数时,函数返回1,否则返回0.

4)main函数:

多组输入n、m,对n-m间的每一个数i,调用函数prime(x)判断是否是素数,若是就输出。

代码框架:

intprime(intx)//(循环从2到sqrt(x),不能从2到x-1)

{

……

}

intmain()

{intm,n,i;

while(scanf("%d%d",&n,&m)!

=EOF)//输入n、m值

{

for(i=n;i<=m;i++)

{

If()

Printf(“%d”,i);.....//输出素数

}

printf(“\n”);

}

return0;

}

2482:

步骤:

3)定义递归函数intage(intn,intm,intk),功能是求第n个人的岁数,并返回此岁数。

函数:

intage(intn,intm,intk)

{intresult;

if(n==1)

result=k;

else

result=age(n-1,m,k)+m;

returnresult;

}

4)定义main函数,多组输入,输出第n个人的岁数。

3574:

步骤:

1)定义函数intreverse(intn),功能返回n的逆序数。

函数:

intreverse(intn)

{intresult=0;

do{……

………………

}while(….!

=0);

returnresult;

}

2)定义main函数,多组输入n,输出结果。

3571:

步骤:

1)定义递归函数intfib(intn),,功能是求返回第n项Fibonacci数。

函数:

intfib(intn)

{inti,f1,f2,item,result;

if(n==1||n==2)

result=1;

else

result=fib(n-1)+fib(n-2)

returnresult;

}

2)定义main函数,多组输入,输出结果。

intmain()

{int….

while(scanf(……)!

=EOF)

{

for(i=m;i<=n;i++)

printf(“%5d“,fib(i))

printf(“\n”);

}

函数

3565:

步骤:

1)定义符号函数sign(intn)

2)main函数:

输入x,调用函数sign(x)。

代码框架:

intsign(intn)

{intm;

........

returnm;

}

intmain()

{intx,y;

while(scanf("%d",&x)!

=EOF)//输入x值

{

y=sign(x);

.....//输出y的值

}

return0;

}

3566:

步骤:

1)定义函数max(intx,inty),功能是求两个数x、y中最大数的,并返回最大数。

函数:

intmax(intx,inty)

{intz;

if(x>y)z=x;

elsez=y;

returnz;

}

2)main函数:

定义三个变量a、b、c和m、多组测试输入三个整数;两次调用函数,就可得到最大数了。

3567:

步骤:

1)定义判断素数的函数intprime(intx),若是素数返回1,否则返回0。

2)主函数:

从100-200每个数都通过调用函数prime(i)来判断是否素数。

intmain()

{inti;

For(I=100;I<200;i++)

If(prime(i)==1)

Printf(“%5d”,i);

}(以上代码未处理换行)

3568:

步骤:

1)定义求n!

函数intfact(intn),函数返回n!

值。

(既可用整数表阶乘也可用浮点表阶乘)

2)主函数:

从1-10每个数都通过调用函数fact(i)来求i!

,并累加求和。

由于阶乘和较大,故用浮点表示和。

intmain()

{inti;floatsum;

For(I=1;I<=10;i++)

Sum+=fact(i);

Printf(“%f\n”,sum);

}

3569:

步骤:

1)定义函数intfn(inta,intn),返回a…a(n个a)。

2)主函数核心语句:

循环i=1到n,s+=fn(a,i)。

3570:

步骤:

1)定义函数intcountdigit(intnumber,intdigit),返回number中数字digit的个数

关键算法:

取出number的每一位,若等于digit,则计数count加1,最后返回count。

2)主函数核心语句:

输入x,个数n=countdigit(x,2)。

3571:

步骤:

1)定义函数intfactorsum(intnumber),返回number的因子和。

关键算法:

i从1到number-1,若i是number的因子,则累加和sum;最后返回sum。

2)主函数main(),核心语句:

i从m到n,若I==fact(i),则输出i。

3573:

步骤:

1)定义函数intis(intnumber),若数字立方和等于本身,返回1,否则返回0。

关键算法:

累加number的每一位数字,若和等于number,则返回1,否则返0。

2)主函数main(),核心语句:

i从m到n,若I==is(i),则输出i。

数组

3552:

步骤:

1)定义数组a[10][10],s[10]及相关变量

2)多组测试:

输入m,n;二重for循环输入数组a的每一个元素(scanf(“%d”,&a[i][j]),注意%d后不加空格)。

3)对于第一行a[0]的每个元素a[0][j](j=0-n-1)都和第m-1行对应元素交换。

4)对每一行(i=0---m-1),计算元素和并存入数组s[i]中

5)输出数组a的每一行(i=0----m-1)元素及s[i],并换行。

3553:

步骤:

1)定义数组a[10][10]及相关变量

2)多组测试:

输入n;二重for循环输入数组a的每一个元素(scanf(“%d”,&a[i][j]),注意%d后不加空格)。

3)主对角线元素:

a[i][i],副对角线a[i][n-1-i]。

3555:

步骤:

1)定义数组a[6][6]、标记是否上三角变量flag、及相关变量

2)多组测试:

输入n;flag=1;二重for循环输入数组a的每一个元素

3)对于主对角线以下每个元素进行判断,如果不为零的,则flag=0同时跳出循环。

4)

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

当前位置:首页 > 小学教育 > 语文

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

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