c语言程序设计自第五个实验开始源代码1资料Word格式.docx
《c语言程序设计自第五个实验开始源代码1资料Word格式.docx》由会员分享,可在线阅读,更多相关《c语言程序设计自第五个实验开始源代码1资料Word格式.docx(30页珍藏版)》请在冰豆网上搜索。
![c语言程序设计自第五个实验开始源代码1资料Word格式.docx](https://file1.bdocx.com/fileroot1/2022-11/16/86dfa939-529f-47da-b57f-e5fe2c344bb5/86dfa939-529f-47da-b57f-e5fe2c344bb51.gif)
if(k%m==0)break;
if(m>
=k)/*两位数是素数时*/
{p=i%10;
/*p为个位数字*/
for(q=2;
q<
p;
q++)
if(p%q==0)break;
if(q>
=p)n++;
}}}}
printf("
%d\n"
n);
}
Key:
57
5.求[2,400]中相差为10的相邻素数对的对数。
for(i=2;
=400;
=i)/*i是素数时*/
{for(k=i+1;
k<
i+10;
k++)
/*k不是素数时终止if语句的内层循环*/
=k)break;
}/*k是素数时终止if语句的外层循环*/
=i+10)/*[i+1,i+9]不是素数时*/
{for(q=2;
if(k%q==0)break;
=k)/*i+10是素数时*/
n++;
}}}
5
6.求[1,21]范围内的梅森尼数
#include"
math.h"
main()
{longn,k=2,m,p,q;
for(n=2;
n<
=21;
n++)
{k=k*2;
p=k-1;
m=sqrt(p);
for(q=2;
=m;
if(p%q==0)break;
if(q>
m)printf("
%5ld"
}}
2357131719
7.求1000以内的亲密数对
main()
{inta,b,n,m,q,p;
for(a=1;
a<
1000;
a++)
{n=0;
for(q=1;
=a/2;
if(a%q==0)n+=q;
for(b=a;
b<
=1000;
b++)
{m=0;
for(p=1;
p<
=b/2;
p++)
if(b%p==0)m+=p;
if(a==m&
&
b==n)printf("
%5d%5d"
a,b);
}}}/*Key:
662828220284496496*/
实验6数组及其应用
3.由N个有序整数组成的数列已放在一维数组中,下列给定程序中函数fun的功能是:
利用折半查找法查找整数m在数组中的位置。
若找到,返回其下标值;
否则,返回-1。
折半查找的基本算法是:
每次查找前先确定数组中待查的范围low和high(low<
high),然后用m与中间位置(mid)上元素的值进行比较。
如果m的值大于中间位置元素的值,则下一次的查找范围落在中间位置之后的元素中;
反之,下一次的查找范围落在中间位置之前的元素中。
直到low>
high,查找结束。
请改正程序中的错误,使它能得出正确的结果。
#include<
stdio.h>
#defineN10
{inti,a[N]={-3,4,7,9,13,45,67,89,100,180},k=-1,m;
intlow=0,high=N-1,mid;
printf("
a数组中的数据如下:
"
);
for(i=0;
N;
i++)printf("
%d"
a[i]);
Enterm:
"
scanf("
%d"
&
m);
while(low<
=high)
{mid=(low+high)/2;
if(m<
a[mid])
high=mid-1;
/************found************/
elseIf(m>
a[mid])
low=mid+1;
else{k=mid;
continue;
}}
=0)printf("
m=%d,index=%d\n"
m,k);
elseprintf("
Notbefound!
\n"
第一个错误:
elseIf(m>
a[mid])应改为:
elseif(m>
a[mid])因C语言关键字必须小写。
第二个错误:
else{k=mid;
}应改为:
break;
}因找到就可终止循环。
4.有一个3*4矩阵,找出每行中最大的元素并与第1列元素交换。
具体要求如下:
(1)使用二维数组存放该3*4矩阵。
(2)定义并初始化该二维数组。
(3)输出原矩阵和处理后的矩阵进行比较。
【程序源代码】
{inti,j,k,temp;
intdata[3][4]={{12,15,7,11},{14,6,10,21},{25,7,16,45}};
theoriginalmatrix:
=2;
{for(j=0;
=3;
%d\t"
data[i][j]);
/*打印原矩阵*/
}
{
k=0;
for(j=1;
if(data[i][j]>
data[i][k])
k=j;
temp=data[i][0];
data[i][0]=data[i][k];
data[i][k]=temp;
}/*求每行最大数并与第1列上的元素交换*/
\nthehandledmatrix:
{
for(j=0;
}/*打印处理后矩阵,此时第1列上的元素为每行的最大数*/
5.猴子选大王问题:
n个人围坐一圈,并顺序编号1~n,从1号开始数,每数到m个就让其出局,重复...。
求最后出局者的编号。
当n=50,m=3时,答案为11
(1)使用一维数组存放每个人的编号,每数到m个数就让其出局,出局者编号为0。
(2)使用for循环嵌套实现。
{inta[51],i,j,m=0,n;
for(i=1;
=50;
i++)a[i]=i;
/*为了符合习惯,数组下标从1开始,下标就是编号*/
=50/3;
j++)/*外层循环最多循环50/3次*/
{if(a[i]!
=0)m++;
/*对未出局者计数*/
if(m==3)a[i]=0,n=i,m=0;
/*对出局者编号为0,并保存原编号,计数从0开始*/
last:
%d\n"
}/*最后出局者的编号*/
实验7函数及其应用
3.排错题:
下列给定程序中函数fun的功能是:
用递归算法求形参a的平方根。
请改正
程序中的错误,使它能计算出正确的结果。
注意:
源程序不得增行或删行,也不得更改程序
的结构!
例如,a为2时,平方根值为:
1.414214。
math.h>
/**********found**********/
voidfun(doublea,doublex0)
{doublex1,y;
x1=(x0+a/x0)/2.0;
if(fabs(x1-x0)<
=0.00001)
y=fun(a,x1);
elsey=x1;
returny;
main()
{doublex;
Enterx:
%lf"
x);
Thesquarerootof%lfis%lf\n"
x,fun(x,1.0));
voidfun(doublea,doublex0)应改为:
doublefun(doublea,doublex0)因根据题意,需通过调用fun()函数返回a的平方根,故必须将void改为double,否则不能用带值的return语句。
自增。
=0.00001)应改为:
if(fabs(x1-x0)>
=0.00001)因只有fabs(x1-x0)>
=0.00001才须递归。
4.设计一个程序,判断一个整数n是否是素数。
(1)编制一个函数intprime(number),判断整数number是否是素数。
(2)编制主函数,由键盘输入整数number,调用
(1)中的函数,若返回值为真则是素
数,否则不是素数。
(3)分别用以下数据运行该程序:
103,117。
{intnumber;
请输入一个正整数:
scanf("
%d"
number);
if(prime(number))
\n%d是素数."
number);
else
\n%d不是素数."
intprime(number)
intnumber;
{intflag=1,n;
for(n=2;
number/2&
flag==1;
if(number%n==0)
flag=0;
return(flag);
5.编写程序,通过两个自定义函数分别求两个正数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。
两个正数由键盘输入。
(1)用辗转相除法实现。
(2)输出要有文字说明,输出形式为:
最大公约数=具体值,最小公倍数=具体值
8和26,64和258
(4)辗转相除法:
对于两个数m和n,将大数放在m中,小数放在n中,用n去除m,
若余数为0,则n为最大公约数,否则将n作为m,余数作为n,再用n去除m,
直到余数为0,则n为最大公约数。
#includ