数组程序设计实验报告Word下载.docx
《数组程序设计实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《数组程序设计实验报告Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
}
elseif(i==strlen(str)-1)
{k++;
ch[k+1]='
if(k+1>
max)
{max=k+1;
strcpy(str1,ch);
}
else
elseif(flag==1)
{ch[k+1]='
flag=0;
if(k+1>
printf("
输入的字符串中,最长的单词有%d个字母,该单词是%s\n"
max,str1);
main()
{chara[100];
请输入一行字符:
\n"
);
gets(a);
word(a);
实验运行结果
实验中出现的问题:
如果从键盘键入的英文中有两个或两个以上长度最长且相同的单词,则程序只能输出第一个单词,此问题并未解决。
(2)从键盘键入一段英文,找出长度最短的单词
实验代码
conio.h>
voidXX(charstring[])
{
inti,j,word=0,wordstart=0;
intzishu,xiaozishu=10;
for(i=0;
string[i]!
{
if(string[i]=='
'
)
{
word=0;
}
elseif(word==0)
{
word=1;
zishu=0;
for(j=i;
string[j]!
string[j]!
j++)
{
zishu++;
}
if(zishu<
xiaozishu)
{
xiaozishu=zishu;
wordstart=i;
}
}
}
for(i=wordstart;
&
string[i]!
i++)
putchar(string[i]);
}
voidmain()
charstr[80];
gets(str);
XX(str);
getch();
printf("
实验中出现的问题
如果从键盘输入的英文中,最短单词并不唯一,本程序只能输出第一个,此问题还未解决。
(3)从键盘输入一段英文,找出出现次数最多的字符。
#include"
stdio.h"
stdlib.h"
string.h"
#defineMAX_LEN100
struct_NODE
{
charch;
intnum;
struct_NODE*next;
};
struct_NODE*_STRCMP(struct_NODE*CNODE,charch)
intflag=0;
if(CNODE==NULL)
CNODE=(struct_NODE*)malloc(sizeof(struct_NODE));
CNODE->
ch=ch;
num=1;
next=NULL;
else
struct_NODE*temp1,*temp2,*temp;
temp1=CNODE;
while(temp1!
=NULL)
if(temp1->
ch==ch)
temp1->
num++;
flag=1;
break;
temp1=temp1->
next;
if(!
flag)
temp=CNODE;
temp2=(struct_NODE*)malloc(sizeof(struct_NODE));
temp2->
next=temp;
CNODE=temp2;
returnCNODE;
voidprint(struct_NODE*CNODE)
struct_NODE*temp;
intnum=0;
while(CNODE!
=NULL)
if(CNODE->
num>
num)
num=CNODE->
num;
CNODE=CNODE->
字符串中出现最多的字母及其个数:
%c%d\n"
temp->
ch,temp->
num);
return;
intmain()
struct_NODE*znode;
charstr[MAX_LEN];
intlen;
inti;
znode=NULL;
scanf("
%s"
str);
len=strlen(str);
i<
len;
znode=_STRCMP(znode,str[i]);
print(znode);
return0;
在一些实验中,本程序并不能给出正确的结果,此问题还未找出原因,没有解决。
2输出魔方阵,所谓魔方阵就是指这样的方阵,它的每一行、每一列和对角线之和均相等。
要求输出由1-n*n之间的自然数构成的魔方阵。
inta[16][16];
inti,j,k,n,p=1;
while(p)
EntertheRows(From1to15andtheNumbermustbeanodd):
%d"
&
n);
if((n!
=0)&
(n<
=15)&
(n%2))p=0;
for(i=1;
i<
=n;
i++)
for(j=1;
j<
j++)
a[i][j]=0;
j=n/2+1;
a[1][j]=1;
for(k=2;
k<
=n*n;
k++)
i--;
j++;
if((i<
1)&
(j>
n))
i+=2;
j--;
if(i<
1)i=n;
if(j>
n)j=1;
if(a[i][j]==0)
a[i][j]=k;
for(j=1;
%5d"
a[i][j]);
本程序只能输出n=1,3,5,7,9,11,13,15的魔方阵,对于此范围之外的数字没有作用。
371个人围成一圈,从第一个人开始从1报号,每次报号顺序递增,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个学生为止。
问此人原来的位置是多少号?
实验代码
#include<
shortp[71];
shorti,j,n=2,countdown=71;
for(i=0;
71;
i++)p[i]=i+1;
p[2]=0;
while(countdown!
=0)
3;
if(n==71-1)n=-1;
while(p[n+1]==0)
n++;
if(n==70)
n=0;
p[n]=0;
countdown--;
if(p[i]!
=0)n=i;
printf("
最后一个学生原来的位置是%d号\n"
n+1);
4求方程组3x+5y-z=29.8
2x-8y+5z=-19.8
4x+3y+2z=31.7
的解,要求误差小于10-9。
stdlib.h>
malloc.h>
math.h>
intGS(int,double**,double*,double);
double**TwoArrayAlloc(int,int);
voidTwoArrayFree(double**);
voidmain()
inti,j,n;
doubleep,**a,*b;
ep=1e-4;
你要解几元线性方程组:
scanf("
a=TwoArrayAlloc(n,n);
b=(double*)calloc(n,sizeof(double));
if(b==NULL)
内存分配失败\n"
exit
(1);
n;
请输入第%d行相应的系数:
i+1);
for(j=0;
j<
j++)
a[%d][%d]:
"
i,j);
%lf"
a[i]+j);
fflush(stdin);
请输入第%d行相应的常数:
b[%d]:
i);
b+i);
方程组:
if(a[i][j]>
0)
if(j>
0)printf("
+"
if(a[i][j]!
=1)
%lfX%d"
a[i][j],j+1);
else
X%d"
j+1);
if(a[i][j]<
-"
=-1)
fabs(a[i][j]),j+1);
=%lf\n"
b[i]);
if(!
GS(n,a,b,ep))
不可以用高斯消去法求解\n"
exit(0);
该方程组的解为:
x%d=%.10f\n"
i+1,b[i]);
TwoArrayFree(a);
free(b);
intGS(intn,double**a,double*b,doubleep)
inti,j,k,l;
doublet;
for(k=1;
k<
=n;
k++)
for(l=k;
l<
l++)
if(fabs(a[l-1][k-1])>
ep)
break;
elseif(l==n)
return(0);
if(l!
=k)
for(j=k;
t=a[k-1][j-1];
a[k-1][j-1]=a[l-1][j-1];
a[l-1][j-1]=t;
t=b[k-1];
b[k-1]=b[l-1];
b[l-1]=t;
t=1/a[k-1][k-1];
for(j=k+1;
a[k-1][j-1]=t*a[k-1][j-1];
b[k-1]*=t;
for(i=k+1;
a[i-1][j-1]-=a[i-1][k-1]*a[k-1][j-1];
b[i-1]-=a[i-1][k-1]*b[k-1];
for(i=n-1;
i>
=1;
i--)
for(j=i+1;
b[i-1]-=a[i-1][j-1]*b[j-1];
return
(1);
double**TwoArrayAlloc(intr,intc)
double*x,**y;
intn;
x=(double*)calloc(r*c,sizeof(double));
y=(double**)calloc(r,sizeof(double*));
x||!
y)
for(n=0;
n<
=r-1;
++n)
y[n]=&
x[c*n];
return(y);
voidTwoArrayFree(double**x)
free(x[0]);
free(x);