| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 502 人关注过本帖
标题:怎样将数组的四个基本操作集中到一个程序中?高手们帮帮忙!
只看楼主 加入收藏
shaohani
Rank: 1
等 级:新手上路
帖 子:9
专家分:5
注 册:2010-12-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
怎样将数组的四个基本操作集中到一个程序中?高手们帮帮忙!
大家好!我刚刚学C语言,老师给我们留了一道关于数组的四个基本操作的程序题,要求是可以多次操作。
我编了一个程序,但是出了一些问题,希望能帮我调试一下,看看应该怎样改。非常感谢!
下面是我编的程序:
#include <stdio.h>
void main()                           /*主函数*/
{
        int a[100000],n,choice1,i;
        int paixu();            /*对排序(paixu)函数进行声明*/
        int charu();            /*对插入(charu)函数进行声明*/
        int shanchu();            /*对删除(shanchu)函数进行声明*/
        int chazhao();           /*对查找(chazhao)函数进行声明*/                     
        char choice2;
loop: printf("请定义执行数组的长度:");
                scanf("%d",&n);
    printf("请输入数组:\n");
    for(i=0;i<n;i++)
    scanf("%d",a);
        printf("%5s*****数组基本操作菜单*****\n");      /*操作菜单*/
        printf("%10s 1-数组的排序\n");
        printf("%10s 2-数组的插入\n");
        printf("%10s 3-数组的删除\n");
        printf("%10s 4-数组的查找\n");
        printf("请输入选项(1/2/3/4):");
        scanf("%d",&choice1);
                switch(choice1)
        {
        case 1:
                paixu(a,n);break;     /*调用排序(paixu)函数*/
        case 2:
                charu(a,n);break;     /*调用插入(charu)函数*/
        case 3:
                shanchu(a,n);break;    /*调用删除(shanchu)函数*/
        case 4:
                chazhao(a,n);          /*调用查找(chazhao)函数*/
        }
        printf("是否继续操作(Y/N)?");               
        scanf("%c",&choice2);
        if(choice2=='Y') goto loop;                     /*程序的循环操作*/
    if(choice2=='N') printf("感谢您的使用!\n");
}
int paixu(int a[],int n)              /*定义排序(paixu)函数*/
{int i,j,t;
for(j=0;j<n-1;j++)
for(i=0;i<n-j;i++)
  if(a>a[i-1])
  {t=a;a=a[i-1];a[i-1]=t;}
  printf("正确的顺序为:");
  for(i=0;i<n;i++)
          printf("%d",a);
}
int charu(int a[],int n)             /*定义插入(charu)函数*/
{int i,k,x;
   printf("请输入需要插入的整数:");
   scanf("%d",&x);
   k=n;
   for(i=0;i<n;i++)
           if(x<a){k=i;break;}
           for(i=n;i>k;i--)
                   a[i-1]=a;
           a[k]=x;
          for(i=0;i<n+1;i++)
          printf("%d",a);
   }
int shanchu(int a[],int n)           /*定义删除(shanchu)函数*/
{int i,j,x,k;
        
printf("请输入需要删除的整数:");
scanf("%d",&x);
i=0;
j=n-1;
while(i<=j)
{   
        k=(i+j)/2;
        if(a[k]==x) break;
        if(a[k]>x) j=k-1;
    if(a[k]<x) i=k+1;
}
if(i>j) printf("您需要删除的数不在数组中!\n");
else
{
        for( ;k<n-1;k++) a[k]=a[k+1];
        for(i=0;i<n-1;i++)
          printf("%d",a);
}

}
int chazhao(int a[],int n)           /*定义查找(chazhao)函数*/
{int i,j,x,k;

printf("请输入需要查找的整数:");
scanf("%d",&x);
i=0;
j=n-1;
while(i<=j)
{
        k=(i+j)/2;
        if(a[k]==x) break;
        if(a[k]>x) j=k-1;
    if(a[k]<x) i=k+1;
}
if(i>j) printf("您需要删除的数不在数组中!\n");
}[/quote]
搜索更多相关主题的帖子: 声明 void include C语言 
2010-12-02 16:37
outsider_scu
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:430
专家分:1333
注 册:2010-10-21
收藏
得分:20 
你基础没搞好,回去好好看书吧。关于数组的访问不能越界。
输入和输出要仔细区分,这里,我只给你改一段排序函数。
其他的都是类似的问题,实在没有改下去的意义了。
程序代码:
#include <stdio.h>
void main()                           /*主函数*/
{
        int a[100000],n,choice1,i;
        int paixu();            /*对排序(paixu)函数进行声明*/
        int charu();            /*对插入(charu)函数进行声明*/
        int shanchu();            /*对删除(shanchu)函数进行声明*/
        int chazhao();           /*对查找(chazhao)函数进行声明*/                    
        char choice2;
loop:   printf("请定义执行数组的长度:");
                scanf("%d",&n);
        printf("请输入数组:\n");
        for(i=0;i<n;i++)
        scanf("%d",a+i);  //每一次地址要向后移一个
        printf("*****数组基本操作菜单*****\n");    //百分号不是随变用的。  /*操作菜单*/
        printf(" 1-数组的排序\n");
        printf(" 2-数组的插入\n");
        printf(" 3-数组的删除\n");
        printf(" 4-数组的查找\n");
        printf("请输入选项(1/2/3/4):");
        scanf("%d",&choice1);
                switch(choice1)
        {
        case 1:
                paixu(a,n);break;     /*调用排序(paixu)函数*/
        case 2:
                     break;     /*调用插入(charu)函数*/
        case 3:
                     break;    /*调用删除(shanchu)函数*/
        case 4:    break;
                         /*调用查找(chazhao)函数*/
        }
        printf("是否继续操作(Y/N)?");               
        scanf("%c",&choice2);
        if(choice2=='Y') goto loop;                     /*程序的循环操作*/
    if(choice2=='N') printf("感谢您的使用!\n");
}
int paixu(int a[],int n)              /*定义排序(paixu)函数*/
{int i,j,t;
for(j=0;j<n-1;j++)
for(i=0;i<n-j-1;i++)
  if(a[i]>a[i+1])       //不能越界,你的排序一踏糊涂。
  {t=a[i+1];a[i+1]=a[i];a[i]=t;}
  printf("正确的顺序为:");
  for(i=0;i<n;i++)
       printf("%d\t",a[i]);  //这样更美观,输出的时候要输入数,不是地址。
   printf("\n");
}


[ 本帖最后由 outsider_scu 于 2010-12-2 18:11 编辑 ]

编程的道路上何其孤独!
2010-12-02 18:09
shaohani
Rank: 1
等 级:新手上路
帖 子:9
专家分:5
注 册:2010-12-1
收藏
得分:0 
回复 2楼 outsider_scu
非常感谢您的批评,谢谢您!
2010-12-02 18:35
快速回复:怎样将数组的四个基本操作集中到一个程序中?高手们帮帮忙!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028737 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved