c语言实验报告参考源代码.docx

上传人:b****1 文档编号:588391 上传时间:2023-04-29 格式:DOCX 页数:36 大小:97.52KB
下载 相关 举报
c语言实验报告参考源代码.docx_第1页
第1页 / 共36页
c语言实验报告参考源代码.docx_第2页
第2页 / 共36页
c语言实验报告参考源代码.docx_第3页
第3页 / 共36页
c语言实验报告参考源代码.docx_第4页
第4页 / 共36页
c语言实验报告参考源代码.docx_第5页
第5页 / 共36页
c语言实验报告参考源代码.docx_第6页
第6页 / 共36页
c语言实验报告参考源代码.docx_第7页
第7页 / 共36页
c语言实验报告参考源代码.docx_第8页
第8页 / 共36页
c语言实验报告参考源代码.docx_第9页
第9页 / 共36页
c语言实验报告参考源代码.docx_第10页
第10页 / 共36页
c语言实验报告参考源代码.docx_第11页
第11页 / 共36页
c语言实验报告参考源代码.docx_第12页
第12页 / 共36页
c语言实验报告参考源代码.docx_第13页
第13页 / 共36页
c语言实验报告参考源代码.docx_第14页
第14页 / 共36页
c语言实验报告参考源代码.docx_第15页
第15页 / 共36页
c语言实验报告参考源代码.docx_第16页
第16页 / 共36页
c语言实验报告参考源代码.docx_第17页
第17页 / 共36页
c语言实验报告参考源代码.docx_第18页
第18页 / 共36页
c语言实验报告参考源代码.docx_第19页
第19页 / 共36页
c语言实验报告参考源代码.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c语言实验报告参考源代码.docx

《c语言实验报告参考源代码.docx》由会员分享,可在线阅读,更多相关《c语言实验报告参考源代码.docx(36页珍藏版)》请在冰点文库上搜索。

c语言实验报告参考源代码.docx

c语言实验报告参考源代码

实验5三种基本结构的综合应用

4.一个素数(设为p)依次从最高位去掉一位,二位,三位,……,若得到的各数仍都是素数(注:

除1和它本身外,不能被其它整数整除的正整数称为素数,1不是素数,2是素数),且数p的各位数字均不为零,则称该数p为逆向超级素数。

例如,617,17,7都是素数,因此617是逆向超级素数,尽管503,03,3都是素数,但它不是逆向超级素数,因为它包含有零。

试求[100,999]之内的所有逆向超级素数的个数。

#include"stdio.h"

main()

{inti,j,k,m,p,q,n=0;

for(i=100;i<=999;i++)

{for(j=2;j

if(i%j==0)break;

if(j>=i)/*三位数是素数时*/

{k=i%100;/*去掉百位数字*/

if(k>=10)/*十位数字不是0时*/

{for(m=2;m

if(k%m==0)break;

if(m>=k)/*两位数是素数时*/

{p=i%10;/*p为个位数字*/

for(q=2;q

if(p%q==0)break;

if(q>=p)n++;}}}}

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

Key:

57

5.求[2,400]中相差为10的相邻素数对的对数。

#include"stdio.h"

main()

{inti,j,k,m,p,q,n=0;

for(i=2;i<=400;i++)

{for(j=2;j

if(i%j==0)break;

if(j>=i)/*i是素数时*/

{for(k=i+1;k

{for(m=2;m

if(k%m==0)break;/*k不是素数时终止if语句的内层循环*/

if(m>=k)break;}/*k是素数时终止if语句的外层循环*/

if(k>=i+10)/*[i+1,i+9]不是素数时*/

{for(q=2;q

if(k%q==0)break;

if(q>=k)/*i+10是素数时*/

n++;}}}

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

Key:

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;q<=m;q++)

if(p%q==0)break;

if(q>m)printf("%5ld",n);}}

Key:

2357131719

7.求1000以内的亲密数对

main()

{inta,b,n,m,q,p;

for(a=1;a<1000;a++)

{n=0;

for(q=1;q<=a/2;q++)

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

如果m的值大于中间位置元素的值,则下一次的查找范围落在中间位置之后的元素中;反之,下一次的查找范围落在中间位置之前的元素中。

直到low>high,查找结束。

请改正程序中的错误,使它能得出正确的结果。

#include

#defineN10

main()

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

printf("Enterm:

");scanf("%d",&m);

while(low<=high)

{mid=(low+high)/2;

if(m

high=mid-1;

/************found************/

elseIf(m>a[mid])

low=mid+1;

/************found************/

else{k=mid;continue;}}

if(k>=0)printf("m=%d,index=%d\n",m,k);

elseprintf("Notbefound!

\n");}

Key:

第一个错误:

elseIf(m>a[mid])应改为:

elseif(m>a[mid])因C语言关键字必须小写。

第二个错误:

else{k=mid;continue;}应改为:

else{k=mid;break;}因找到就可终止循环。

4.有一个3*4矩阵,找出每行中最大的元素并与第1列元素交换。

具体要求如下:

(1)使用二维数组存放该3*4矩阵。

(2)定义并初始化该二维数组。

(3)输出原矩阵和处理后的矩阵进行比较。

【程序源代码】

#include"stdio.h"

main()

{inti,j,k,temp;

intdata[3][4]={{12,15,7,11},{14,6,10,21},{25,7,16,45}};

printf("theoriginalmatrix:

\n");

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

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

printf("%d\t",data[i][j]);

printf("\n");/*打印原矩阵*/

}

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

{

k=0;

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

if(data[i][j]>data[i][k])

k=j;

temp=data[i][0];

data[i][0]=data[i][k];

data[i][k]=temp;

}/*求每行最大数并与第1列上的元素交换*/

printf("\nthehandledmatrix:

\n");

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

{

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

printf("%d\t",data[i][j]);

printf("\n");

}/*打印处理后矩阵,此时第1列上的元素为每行的最大数*/

}

5.猴子选大王问题:

n个人围坐一圈,并顺序编号1~n,从1号开始数,每数到m个就让其出局,重复...。

求最后出局者的编号。

当n=50,m=3时,答案为11

具体要求如下:

(1)使用一维数组存放每个人的编号,每数到m个数就让其出局,出局者编号为0。

(2)使用for循环嵌套实现。

【程序源代码】

#include"stdio.h"

main()

{inta[51],i,j,m=0,n;

for(i=1;i<=50;i++)a[i]=i;/*为了符合习惯,数组下标从1开始,下标就是编号*/

for(j=1;j<=50/3;j++)/*外层循环最多循环50/3次*/

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

{if(a[i]!

=0)m++;/*对未出局者计数*/

if(m==3)a[i]=0,n=i,m=0;/*对出局者编号为0,并保存原编号,计数从0开始*/

}

printf("last:

%d\n",n);}/*最后出局者的编号*/

实验7函数及其应用

3.排错题:

下列给定程序中函数fun的功能是:

用递归算法求形参a的平方根。

请改正

程序中的错误,使它能计算出正确的结果。

注意:

源程序不得增行或删行,也不得更改程序

的结构!

例如,a为2时,平方根值为:

1.414214。

#include

#include

/**********found**********/

voidfun(doublea,doublex0)

{doublex1,y;

x1=(x0+a/x0)/2.0;

/**********found**********/

if(fabs(x1-x0)<=0.00001)

y=fun(a,x1);

elsey=x1;

returny;

}

main()

{doublex;

printf("Enterx:

");scanf("%lf",&x);

printf("Thesquarerootof%lfis%lf\n",x,fun(x,1.0));

}

Key:

第一个错误:

voidfun(doublea,doublex0)应改为:

doublefun(doublea,doublex0)因根据题意,需通过调用fun()函数返回a的平方根,故必须将void改为double,否则不能用带值的return语句。

自增。

第二个错误:

if(fabs(x1-x0)<=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。

【程序源代码】

#include"stdio.h"

main()

{intnumber;

printf("请输入一个正整数:

\n");

scanf("%d",&number);

if(prime(number))

printf("\n%d是素数.",number);

else

printf("\n%d不是素数.",number);

}

intprime(number)

intnumber;

{intflag=1,n;

for(n=2;n

if(number%n==0)

flag=0;

return(flag);}

5.编写程序,通过两个自定义函数分别求两个正数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。

两个正数由键盘输入。

具体要求如下:

(1)用辗转相除法实现。

(2)输出要有文字说明,输出形式为:

最大公约数=具体值,最小公倍数=具体值

(3)分别用以下数据运行该程序:

8和26,64和258

(4)辗转相除法:

对于两个数m和n,将大数放在m中,小数放在n中,用n去除m,

若余数为0,则n为最大公约数,否则将n作为m,余数作为n,再用n去除m,

直到余数为0,则n为最大公约数。

【程序源代码】

#include"stdio.h"

hcf(u,v)

intu,v;

{inta,b,t,r;

a=u;

b=v;

while((r=b%a)!

=0)

{b=a;a=r;}

return(a);}

lcd(u,v,h)

intu,v,h;

{return(u*v/h);}

main()

{intu,v,h,l;

scanf("%d,%d",&u,&v);

h=hcf(u,v);

printf("H.C.F=%d\n",h);

l=lcd(u,v,h);

printf("L.C.D=%d\n",l);}

6.请编写函数fun,函数的功能是:

求出二维数组周边元素之和,作为函数值返回。

二维

数组中的值在主函数中赋予。

例如,若二维数组中的值为

13579

29994

69998

13570

则函数值为61。

【程序源代码】

#include

#defineM4

#defineN5

intfun(inta[M][N])

{inti,j,s=0;

for(i=0;i

for(j=0;j

if(i==0||j==0||i==M-1||j==N-1)

s+=a[i][j];;

returns;}

voidmain()

{intaa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}};inti,j,y;

printf("Theoriginaldatais:

\n");

for(i=0;i

{for(j=0;j

y=fun(aa);printf("\nThesun:

%d\n",y);printf("\n");}

 

实验8作用域和存储类型应用

3.排错题:

下列程序的输出结果应为61515。

通过调试程序,改正程序中不恰当的地方以便能够得到要求的结果。

#include"stdio.h"

intt=1;

intfun(intp)

{

/**********found**********/

intt=5;

t+=p;

printf("%d",t);

/**********found**********/

return;

}

main()

{

inta=3;

printf("%d\n",fun(a+fun(t)));

}

Key:

第一个错误:

intt=5;应改为:

staticintt=5;因根据题意,fun()函数中的t应是静态变量。

第二个错误:

return;应改为:

returnt;因fun()函数调用是作为printf()函数的输出项。

4.程序设计。

函数的递归调用Hanoi(汉诺)塔问题的程序参考源代码如下。

分析程序中函数的定义和调用以及程序运行的输出结果,并要求进一步改进:

通过全局变量的使用使程序的运行能输出移动指定数目盘子时的总步骤数。

【程序参考源代码】

#include"stdio.h"

voidmove(chargetone,charputone)

{

printf("%c——>%c\n",getone,putone);

}

voidhanoi(intn,charone,chartwo,charthree)

{

if(n==1)move(one,three);

else

{hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);

}

}

main()

{

intn;

printf("Inputthenumberofdisks:

");

scanf("%d",&n);

printf("Thesteptomoving%3ddisks:

\n",n);

hanoi(n,'A','B','C');

}

【程序改进源代码】

#include"stdio.h"

intn=0;

voidmove(chargetone,charputone)

{n++;

printf("step%d:

%c——>%c\n",n,getone,putone);

}

voidhanoi(intn,charone,chartwo,charthree)

{

if(n==1)move(one,three);

else

{hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);

}

}

main()

{

intn;

printf("Inputthenumberofdisks:

");

scanf("%d",&n);

printf("Thesteptomoving%3ddisks:

\n",n);

hanoi(n,'A','B','C');

}

实验9指针及其应用

1.以下函数调用Reverse()函数按逆序重新放置数组A中的元素,请补全程序。

#include"stdio.h"

#defineN10

voidReverse(int*p,inta,intb)

{intc;

while(________)

{c=*(p+a);

*(p+a)=________;

*(p+b)=c;

________;}}

intmain()

{intA[N],i;

for(i=0;i

scanf("%d",________);

Reverse(A,0,N-1);

for(i=0;i

printf("%-4d",________);

printf("\n");

return0;}

Key:

第一空应填:

a

第二空应填:

*(p+b)或p[b]/*用指针方法或用下标方法*/

第三空应填:

a++,b++或++a/a+=1/a=a+1,++b/b+=1/b=b+1

第四空应填:

&A[i]或A+i/*用数组元素的地址或数组的首地址加偏移量的方法*/

第五空应填:

*(A+i)或A[i]/*用指针方法或用下标方法*/

2.记录以下程序的运行结果,并进行分析。

#include"stdio.h"

intmain()

{inta=10,b=0,*pa,*pb;

pa=&a,pb=&b;

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

printf("%d,%d\n",*pa,*pb);

a=20,b=30;

*pa=a++,*pb=b++;

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

printf("%d,%d\n",*pa,*pb);

(*pa)++;(*pb)++;

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

printf("%d,%d\n",*pa,*pb);

return0;

}

分析程序运行:

________

Key:

运行结果:

10,0,10,0

21,31,21,31

22,32,22,32

分析:

因为pa=&a;pb+&b;所以*pa和a是同一个变量,占据内存同一存储单元。

注意该程序与下面程序的区别:

#include"stdio.h"

intmain()

{inta=10,b=0,c=a,d=b;

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

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

a=20,b=30;

c=a++,d=b++;

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

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

c++;d++;

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

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

return0;

}

Key:

运行结果:

10,0,10,0

21,31,20,30

21,31,21,31

分析:

因为c=a++;相当于c=a;a++;而a和c是两个不同的变量,所以c++不影响a的值。

3.设计一个程序,统计字符串中大写字母的个数。

具体要求如下:

(1)字符串的长度从键盘输入,并以此分配存储空间。

(2)使用指针变量遍历字符串。

【程序源代码1:

用数组存放字符串】

#defineN80

#include

intcapital(char*p)

{intcount=0;

while(*p)

{if(*p>='A'&&*p<='Z')

count++;

p++;}

returncount;}

main()

{charc[N],n;

printf("Inputastring:

");

gets(c);

printf("Outputthestring:

");

puts(c);

n=capital(c);

printf("Thereare%duppercasealphasin%s\n",n,c);}

【程序源代码2:

用指针指向字符串(此法可能更合出题者的意图)】

#include

#include

intcapital(char*p)

{intcount=0;

while(*p)

{if(*p>='A'&&*p<='Z')

count++;

p++;}

returncount;}

main()

{char*c,n;

printf("Inputthelengthofastring:

");

scanf("%d",&n);

getchar();

c=malloc(n+1);

printf("Inputastring:

");

gets(c);

printf("Outputthestring:

");

puts(c);

n=capital(c);

printf("Thereare%duppercasealphasin%s\n",n,c);

free(c);}

指针用法的总结:

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。

要搞清一个指针需要搞清指针的四方面的内容:

指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。

 

实验10结构体与共用体

2.程序设计

(1)有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学

生数据,要求输出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课

的成绩、平均分数)。

要求:

用一个input函数输入5个学生数据;用一个output函数输出5个学生数据;用

一个average函数求总平均分;用max函数找出最高分学生数据;总平均分和最高分的学生

的数据都在主函数中输出。

【程序框架】

#include"stdio.h"

structstudent

{intnum;

charname[20];

floatscore[3];

floatavg;

};

/**********函数声明**********/

voidinput(s

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2