C语言程序设计实验报告Word格式文档下载.docx
- 文档编号:14522970
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:17
- 大小:42.61KB
C语言程序设计实验报告Word格式文档下载.docx
《C语言程序设计实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验报告Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
voidmain(void)
{
inta[10]={27,13,5,32,23,3,17,43,55,39};
voidsort(int[],int);
inti;
sort(a[0],10);
for(i=0;
i<
10;
i++)
printf(m,a[i]);
printf(\
);
}
voidsort(intb[],intn)
inti,j,t;
for(i=0;
n-1;
for(j=0;
j<
n-i-1;
j++)
if(b[j]<
b[j+1])
t=b[j],b[j]=b[j+1],b[j+1]=t;
'
function'
:
'
int*'
differsinlevelsof
输入以上源程序,进行编译,没有错误但有两个警告:
1.
indirectionfrom'
int'
和'
sort'
differenttypesforformalandactualparameter1,进行修改得如下程序:
sort(a,10);
/*此处的形参应用数组名,作为一个指针常量,代表数组首元素的地址*/
2.进行连接,没有错误。
3.运行该程序,得如下运行结果:
(是按降序排列的,证明有逻辑错误)
4.经过调试,对程序进行修改,得如下结果:
*/
时才替换b[j]>
b[j+1]按升序排列应为if(b[j]>
b[j+1])/*
程序运行结果:
2.源程序完善、修改、替换题
(1)下面程序用于求解瑟夫问题。
M个人围成一圈,从第一个人开始依次从1至N循环报数,每当报数为N时报数人出圈,直到圈中只剩下一个人为止。
请在下划线处填写合适的代码来完善该程序。
#defineM10
#defineN3
inta[M],b[M];
/*数组a存放圈中人的编号,数组b存放出圈人的编号*/
inti,j,k;
M;
i++)/*对圈中人按顺序编号1—M*/
a[i]=i+1;
for(i=M,j=0;
i>
1;
i--){
/*i表示圈中人个数,初始为M个,剩1个人时结束循环;
j表示当前报数人的位置*/
for(k=1;
k<
=N;
k++)/*1至N报数*/
if(++j>
i-1)j=0;
/*最后一个人报数后第一个人接着报,形成一个圈*/
b[M-i]=j?
;
/*将报数为N的人的编号存入数组b*/
if(j)
for(k=--j;
i;
k++)/*压缩数组a,使报数为N的人出圈*/
i<
M–1;
i++)/*按次序输出出圈人的编号*/
printf(“m”,b[i]);
printf(“m\n”,a[0]);
/*输出圈中最后一个人的编号*/
(2)上面程序用数组元素的值表示圈中人的编号,每当有人出圈时都要压缩数组,这种算法不够精炼。
如果采用做标记的办法,即每当有人出圈时对相应数组元素做标记,省掉压缩数组的时间,这样处理效率更高一些。
请采用做标记的办法修改
(1)中程序,使修改后的程序与
(1)中程序具有相同的功能。
(1)填写代码后,源程序如下:
M*/
—1对圈中人按顺序编号/*for(i=0;
a[j-1]a[j+1];
/*将报数为:
N的人的编号存入数组b[M-i]=j?
b*/
/*压缩数组afor(k=--j;
k++)
,使报数为N的人出圈*/
a[k]=a[k+1];
/*for(i=0;
i++)按次序输出出圈人的编号*/
b[i]);
printf(“m”/*输出圈中最后一个人的编号*/
m\nprintf(“”,a[0]);
程序运行结果:
编写程序如下:
{inta[M],b[M];
inti,j,k;
for(i=0;
i<
M;
i++)/*对圈中人按顺序编号1—M*/
a[i]=i+1;
for(i=M,j=0;
i>
1;
i--)
{
for(k=1;
k<
=N;
k++)/*1至N报数*/
if(++j>
M)j=1;
/*最后一个人报数后,第一个人接着报*/
if(a[j-1]==0)k--;
/*碰到已标记的元素,报数减1*/
}
b[M-i]=a[j-1];
/*将报数为N的人的编号存入数组b*/
a[j-1]=0;
/*并将其标记为0*/
M-1;
i++)
printf(m,b[i]);
i++)/*输出数组a中不为0的元素*/
if(a[i]!
=0)
printf(m\n,a[i]);
3.跟踪调试题
voidstrncat(char[],char[],int);
chara[50]=Theadoptedsymbolis,b[27]=abcdefghijklmnopqrstuvwxyz;
strncat(a,b,4);
printf(%s\n,a);
voidstrncat(chars[],chart[],intn)
inti=0,j;
while(s[i++]);
for(j=0;
n&
&
t[j];
)
s[i++]=t[j++];
s[i]='
\0'
;
函数strncat(s,t,n)本来应该将字符数组t的前n个字符连接到字符数组s中字符串的尾部。
但函数strncat在定义时代码有误,不能实现上述功能。
按下面的要求进行操作,回答问题并排除错误。
(1)单步执行。
进入函数strncat后观察表达式s、t和i。
当光条落在for语句所在行时,i的值为23;
当光条落在strncat函数块结束标记(右花括号})所在行时,s为0x0012ff4cTheadoptedsymbolis,t为砰?
㈱晦?
慜换敤杦楨歪浬潮煰獲畴睶祸屺。
(2)分析函数出错的原因,排除错误,使函数正确实现功能,最后写出程序的输出结果。
通过分析,执行完while语句后,i对应的是串尾'
后面一个单元的位置,所以先要自减i,使它对应'
所在单元。
修改后程序如下:
chara[50]=Theadoptedsymbolis
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 实验 报告