C语言集中上机实验报告.docx
《C语言集中上机实验报告.docx》由会员分享,可在线阅读,更多相关《C语言集中上机实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
![C语言集中上机实验报告.docx](https://file1.bdocx.com/fileroot1/2022-12/30/3e26c86b-8f12-41b7-9c9a-e809bf6ef32f/3e26c86b-8f12-41b7-9c9a-e809bf6ef32f1.gif)
C语言集中上机实验报告
C语言集中上机实验报告
学生:
学号:
班级:
专业:
通信工程
重庆邮电大学移通学院
2012年6月
目录
第一章循环3
1.1实验目的3
1.2实验要求3
1.3实验基本内容3
1.3.1题目一3
第二章数组4
2.1实验目的4
2.2实验要求4
2.3实验基本内容4
第三章函数11
3.1实验目的11
3.2实验要求11
3.3实验基本内容11
第四章指针12
4.1实验目的12
4.2实验要求12
4.3实验基本内容12
集中上机总结15
第一章循环
1.1实验目的
(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法
(2)掌握字符数组和字符串函数的使用;
(3)掌握与数组有关的算法。
1.2实验要求
(1)在报告中记录建立、保存C程序实习过程。
(2)完成典型题目,分析遇到的困难和实验中的收获。
1.3实验基本内容
1.31题目一
编程,猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,有多吃了一个。
第二天早上将剩余的桃子吃了一半,有多吃了一个。
以后每天早上都吃了前一天的一多半多一个。
到第十天早上想再吃的时候,只剩一个桃子了。
求第一天共多少个桃子?
解答:
#include
voidmain()
{
longinti=1,k;//i为桃子数,k为天数
longintj;
for(i=1;i<100000;i++)
{j=i;
if(j%2==0)
{
for(k=1;k<10;k++)
{j=j/2-1;
}
if(j==1)//判断最后一天的桃子数是否为一个。
gotoaa;
}
}
aa:
printf("%d",i);
}
运行结果:
第二章数组
2.1实验目的
(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法
(2)掌握字符数组和字符串函数的使用;
(3)掌握与数组有关的算法。
2.2实验要求
(1)在报告中记录建立、保存C程序实习过程。
(2)完成典型题目,分析遇到的困难和实验中的收获。
2.3实验基本内容
2.31题目一
编程:
如何求n点之间最短的距离?
解答
#include
#include
#include
#defineMVNum100
#defineMaxint32767
enumboolean{FALSE,TRUE};
typedefcharVertexType;
typedefintAdjmatrix;
typedefstruct
{
VertexTypevexs[MVNum];
Adjmatrixarcs[MVNum][MVNum];
}MGraph;
intD1[MVNum],P1[MVNum];
intD[MVNum][MVNum],P[MVNum][MVNum];
voidCreateMGraph(MGraph*G,intn,inte)
{
inti,j,k,w;
for(i=1;i<=n;i++)
G->vexs[i]=(char)i;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
G->arcs[i][j]=Maxint;
printf("输入%d条边的i,j及w:
\n",e);
for(k=1;k<=e;k++)
{
scanf("%d,%d,%d",&i,&j,&w);
G->arcs[i][j]=w;
}
printf("有向图的存储结构建立完毕!
\n");
}
voidDijkstra(MGraph*G,intv1,intn)
{
intD2[MVNum],P2[MVNum];
intv,i,w,min;
enumbooleanS[MVNum];
for(v=1;v<=n;v++)
{
S[v]=FALSE;
D2[v]=G->arcs[v1][v];
if(D2[v]P2[v]=v1;
else
P2[v]=0;
}
D2[v1]=0;S[v1]=TRUE;
for(i=2;i{
min=Maxint;
for(w=1;w<=n;w++)
if(!
S[w]&&D2[w]{
v=w;min=D2[w];
}
S[v]=TRUE;
for(w=1;w<=n;w++)
if(!
S[w]&&(D2[v]+G->arcs[v][w]{
D2[w]=D2[v]+G->arcs[v][w];
P2[w]=v;
}
}
printf("路径长度路径\n");
for(i=1;i<=n;i++){
printf("%5d",D2[i]);
printf("%5d",i);
v=P2[i];
while(v!
=0)
{
printf("<-%d",v);
v=P2[v];
}
printf("\n");
}
}
voidFloyd(MGraph*G,intn)
{
inti,j,k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(G->arcs[i][j]!
=Maxint)
P[i][j]=j;
else
P[i][j]=0;
D[i][j]=G->arcs[i][j];
}
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(D[i][k]+D[k][j]{
D[i][j]=D[i][k]+D[k][j];
P[i][j]=P[i][k];
}
}
}
}
voidmain()
{
MGraph*G;
intn,e,v,w,k;
intxz=1;
G=(MGraph*)malloc(sizeof(MGraph));
printf("输入图中顶点个数和边数n,e:
");
scanf("%d,%d",&n,&e);
CreateMGraph(G,n,e);
while(xz!
=0)
{
printf("******求点间的最短路径******\n");
printf("================================\n");
printf("1.求一个点所有点最短路径\n");
printf("2.求任意的两个点间的最短路径\n");
printf("================================\n");
printf("请选择:
1或2,选择0退出:
");
scanf("%d",&xz);
if(xz==2)
{
Floyd(G,n);
printf("输入源点(或称起点)和终点:
v,w:
");
scanf("%d,%d",&v,&w);
k=P[v][w];
if(k==0)
printf("顶点%d到%d无路径!
\n",v,w);
else
{
printf("从顶点%d到%d的最短路径是%d\n",v,w,v);
while(k!
=w)
{
printf("->%d",k);
k=P[k][w];
}
printf("->%d",w);
printf("路径长度:
%d\n",D[v][w]);
}
}
else
if(xz==1)
{
printf("求单源路径,输入源点v:
");
scanf("%d",&v);
Dijkstra(G,v,n);
}
}
printf("结束求最短路径,再见!
\n");
}
运行结果:
第三章函数
3.1实验目的
(1)掌握定义函数的方法;
(2)掌握函数实参与形参的对应关系以及“值传递”的方式;
(3)掌握函数的嵌套调用和递归调用的方法;
(4)掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。
(5)学习对多文件程序的编译和运行。
3.2实验要求
(1)在报告中记录建立、保存C程序实习过程。
(2)完成典型题目,分析遇到的困难和实验中的收获。
3.3实验基本内容
3.31题目一
编程:
输出Fibonacci数列1,1,2,3,5,8,…...的前20个数,每行输出5个。
要求用递归函数计算Fibonacci数列。
解答:
#include"stdio.h"
longFibo(intn)
{
if(n==1||n==2)
return1;
else
returnFibo(n-1)+Fibo(n-2);
}
/*主函数*/
voidmain()
{
intN=20;
intn;
printf("斐波那契数列前十五项打印如下:
\n");
for(n=1;n<=N;n++)
{
printf("\t%ld\t",Fibo(n));
/*每隔五个换一行*/
if(n%5==0)
printf("\n");
}
}
运行结果:
第四章指针
4.1实验目的
(1)掌握指针的概念,掌握定义和使用指针变量的方法。
(2)掌握使用数组的指针和指向数组的指针变量。
(3)掌握使用字符串的指针和指向字符串的指针变量。
(4)学习对多文件程序的编译和运行。
4.2实验要求
(1)在报告中记录建立、保存C程序实习过程。
(2)完成典型题目,分析遇到的困难和实验中的收获。
4.3实验基本内容
4.31题目一
编程:
定义一个储存10个元素的数组并赋值,将数组前5个元素按照由小到大.后5个元素由大到小的顺序一起输出。
解答
#include"stdio.h"
voidmain()
{
inta[10]={2,5,4,9,1,3,6,7,0,8};
inti,j,k;
intt;
for(i=0;i<5;i++)
{
k=i;
for(j=i;j<5;j++)
if(a[k]>a[j])
k=j;
if(k!
=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
for(i=5;i<10;i++)
{
k=i;
for(j=i;j<10;j++)
if(a[k]k=j;
if(k!
=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf("\n");
}
运行结果
集中上机总结
经过短短的一周对c语言的学习不仅学到了课本上的知识还学了以前没有学过的东西。
在电子信息技术高速发展的当今社会,互联网已经成为了联系世界各国的桥桥梁和纽带,成为了人们快速获取信息、发布信息和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。
因此,网站建设的地位就显而易见了。
它已经成为了政府、企事业单位信息化建设的重要组成部分,备受人们的关注。
计算机将具备更多的智能成分,它将具有多种感知能力、一定思考能力与判断能力及一定的自然语言能力。
除了提供自然的输入手段(如手写输入、语音输
入)外,让人们能产生身临其境的感觉的各种交互设备已经出现,将虚拟的电子技术现实化,在这里得到了集中体现。
今天,人们谈到计算机必然把它同网络技术联系起来,孤立的未加入网络技术的计算机已经越来越少了。
人们通过网络,可以更多的共享计算机硬件资源、软件资源和信息资源。
“网络就是计算机”的概念,已经被人们逐渐接受。
通过本次实习,我认识到自己的计算机只是还很缺乏,有许多知识都还不是很清楚,等遇到要用的时候,还需要去翻书才能了解。
相信在以后的工作和学习中,我会努力学习,克服困难,把自己的计算机技术学好,适应这个社会的发展,成为一个合格的大学生。