数组程序设计实验报告.docx
- 文档编号:4786370
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:17
- 大小:60.11KB
数组程序设计实验报告.docx
《数组程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《数组程序设计实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
数组程序设计实验报告
实验报告
田晶晶
201011041056
一、实验名称:
数组程序设计实验
二、实验目的
1掌握一位数组、二维数组的定义、引用方法;
2掌握字符数组的定义与引用,常用字符串处理函数;
3掌握与数组有关的一些常用算法。
三、实验内容
1从键盘输入一段英文,找出长度最长和最短的单词,以及出现次数最多的字符。
(1)从键盘输入一段英文,找出长度最长的单词。
实验代码:
#include
#include
charword(charstr[])
{inti,k,flag=0,max=0;
charstr1[10],ch[10];
for(i=0;str[i]!
='\0';i++)
if((65<=str[i]&&str[i]<=90)||(97<=str[i]&&str[i]<=122))
{if(flag==0)
{
k=0;
ch[k]=str[i];
flag=1;}
elseif(i==strlen(str)-1)
{k++;
ch[k]=str[i];
ch[k+1]='\0';
if(k+1>max)
{max=k+1;
strcpy(str1,ch);
}
}
else
{k++;
ch[k]=str[i];
}
}
elseif(flag==1)
{ch[k+1]='\0';
flag=0;
if(k+1>max)
{max=k+1;
strcpy(str1,ch);
}
}
printf("输入的字符串中,最长的单词有%d个字母,该单词是%s\n",max,str1);
}
main()
{chara[100];
printf("请输入一行字符:
\n");
gets(a);
word(a);
}
实验运行结果
实验中出现的问题:
如果从键盘键入的英文中有两个或两个以上长度最长且相同的单词,则程序只能输出第一个单词,此问题并未解决。
(2)从键盘键入一段英文,找出长度最短的单词
实验代码
#include
#include
voidXX(charstring[])
{
inti,j,word=0,wordstart=0;
intzishu,xiaozishu=10;
for(i=0;string[i]!
='\0';i++)
{
if(string[i]=='')
{
word=0;
}
elseif(word==0)
{
word=1;
zishu=0;
for(j=i;string[j]!
=''&&string[j]!
='\0';j++)
{
zishu++;
}
if(zishu { xiaozishu=zishu; wordstart=i; } } } for(i=wordstart;string[i]! =''&&string[i]! ='\0';i++) { putchar(string[i]); } } voidmain() { charstr[80]; gets(str); XX(str); getch(); printf("\n"); } 实验运行结果 实验中出现的问题 如果从键盘输入的英文中,最短单词并不唯一,本程序只能输出第一个,此问题还未解决。 (3)从键盘输入一段英文,找出出现次数最多的字符。 实验代码 #include"stdio.h" #include"stdlib.h" #include"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; CNODE->num=1; CNODE->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->ch=ch; temp2->num=1; 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; temp=CNODE; } CNODE=CNODE->next; } printf("字符串中出现最多的字母及其个数: %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); for(i=0;i { znode=_STRCMP(znode,str[i]); } print(znode); return0; } 实验运行结果 实验中出现的问题 在一些实验中,本程序并不能给出正确的结果,此问题还未找出原因,没有解决。 2输出魔方阵,所谓魔方阵就是指这样的方阵,它的每一行、每一列和对角线之和均相等。 要求输出由1-n*n之间的自然数构成的魔方阵。 实验代码 #include voidmain() { inta[16][16]; inti,j,k,n,p=1; while(p) { printf("EntertheRows(From1to15andtheNumbermustbeanodd): \n"); scanf("%d",&n); if((n! =0)&&(n<=15)&&(n%2))p=0; } for(i=1;i<=n;i++) for(j=1;j<=n;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--; } else { if(i<1)i=n; if(j>n)j=1; } if(a[i][j]==0) a[i][j]=k; else { i+=2; j--; a[i][j]=k; } } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%5d",a[i][j]); printf("\n"); } } 实验运行结果 实验中出现的问题 本程序只能输出n=1,3,5,7,9,11,13,15的魔方阵,对于此范围之外的数字没有作用。 371个人围成一圈,从第一个人开始从1报号,每次报号顺序递增,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个学生为止。 问此人原来的位置是多少号? 实验代码 #include voidmain() { shortp[71]; shorti,j,n=2,countdown=71; for(i=0;i<71;i++)p[i]=i+1; p[2]=0; while(countdown! =0) { for(i=0;i<3;i++) { if(n==71-1)n=-1; while(p[n+1]==0) { n++; } if(n==70) n=0; else n++; } p[n]=0; countdown--; } for(i=0;i<71;i++) 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。 实验代码: #include #include #include #include intGS(int,double**,double*,double); double**TwoArrayAlloc(int,int); voidTwoArrayFree(double**); voidmain() { inti,j,n; doubleep,**a,*b; ep=1e-4; printf("你要解几元线性方程组: \n"); scanf("%d",&n); a=TwoArrayAlloc(n,n); b=(double*)calloc(n,sizeof(double)); if(b==NULL) { printf("内存分配失败\n"); exit (1); } for(i=0;i { printf("请输入第%d行相应的系数: \n",i+1); for(j=0;j { printf("a[%d][%d]: ",i,j); scanf("%lf",a[i]+j); fflush(stdin); } printf("请输入第%d行相应的常数: \n",i+1); printf("b[%d]: ",i); scanf("%lf",b+i); fflush(stdin); } printf("方程组: \n"); for(i=0;i { for(j=0;j { if(a[i][j]>0) { if(j>0)printf("+"); if(a[i][j]! =1) printf("%lfX%d",a[i][j],j+1); else printf("X%d",j+1); } if(a[i][j]<0) { if(j>0)printf("-"); if(a[i][j]! =-1) printf("%lfX%d",fabs(a[i][j]),j+1); else printf("X%d",j+1); } } printf("=%lf\n",b[i]); } if(! GS(n,a,b,ep)) { printf("不可以用高斯消去法求解\n"); exit(0); } printf("该方程组的解为: \n"); for(i=0;i printf("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<=n;l++) if(fabs(a[l-1][k-1])>ep) break; elseif(l==n) return(0); if(l! =k) { for(j=k;j<=n;j++) { 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;j<=n;j++) a[k-1][j-1]=t*a[k-1][j-1]; b[k-1]*=t; for(i=k+1;i<=n;i++) { for(j=k+1;j<=n;j++) 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;j<=n;j++) 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*)); if(! x||! y) { printf("内存分配失败\n"); exit (1); } for(n=0;n<=r-1;++n) y[n]=&x[c*n]; return(y); } voidTwoArrayFree(double**x) { free(x[0]); free(x); } 实验运行结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 程序设计 实验 报告