| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2889 人关注过本帖
标题:关于指针数组的c语言程序题,请大家帮帮忙看看哪里不对,谢谢!
只看楼主 加入收藏
FATALIZM
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-6-28
收藏
得分:0 
以下是引用FATALIZM在2016-7-7 14:26:51的发言:

结果一直是这样的,我也不知道为什么

不过我重新建了一个源程序然后把这个复制粘贴过去就可以运行了,真的好神奇,原来怎么运行都不对的
2016-07-07 14:31
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:10 
回复 16楼 FATALIZM
试试这个,在你程序的基础上,稍微改了点,给你参考下
程序代码:
#include <stdio.h>
//清空缓存函数,代替你的fflush(stdin);这个可移植性更好点
void safe_flush(FILE *fp)
{
    int ch;
    while( (ch = fgetc(fp)) != EOF && ch != '\n' );          
}
void insert(int *p,int d)
{
    int i=0,j;
    //先判断输入的数是不是原有序序列最大的,是就直接放到最后,不是再逐个比较找位置插入
    if(d>p[5])
        p[6]=d;
    else
    {
        while(p[i]<d)
        {
            i++;
        }
        for(j=6;j>i;j--)
        {
            p[j]=p[j-1];
        }
        p[i] = d;
    }    
    printf("\n新序列为:");
    for(i=0;i<7;i++)    
        printf("%d\t",p[i]);
}
int main()
{
    int p[10]={1,3,4,8,15,17};
    int d,i;
    printf("原序列为:");
    for (i=0;i<6;i++)
        printf("%d\t",p[i]);    
    printf("\n请输入要插入的整数:");
    scanf("%d",&d);
    safe_flush(stdin);    
    insert(p,d);    
    printf("\n");    
    return 0;
}


[此贴子已经被作者于2016-7-7 14:46编辑过]

2016-07-07 14:40
FATALIZM
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-6-28
收藏
得分:0 
回复 22楼 wanglianyi1
恩恩,好的,谢谢你,也麻烦大家了
2016-07-07 15:07
FATALIZM
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-6-28
收藏
得分:0 
又出问题了
图片附件: 游客没有浏览图片的权限,请 登录注册



#include<stdio.h>
remove(double *p,double d)
{int i,j=0,n;
for (i=0;p[i]!='\0';i++)
{
     if (d==p[i])
       { for(n=i;p[n]!='\0';n++)
           {
      
             p[n]=p[n+1];
              
           }
        j=1;
        break;
       }

}
if(j=0)
printf("你输入的数字不在数组内");

}
main()
{int i;
double  a[6]={1,2,3,4,5,6},*p,d;
p=a;
for(i=0;i<6;i++)
{
printf("%lf\t",a[i]);
}
printf("\n请输入一个数字") ;
scanf("%lf",&d);
remove(p,d);
for(i=0;i<6;i++)
{
printf("%lf",p[i]);
}
}
运行程序总说运行错误,运行不下去了,请问这是咋回事啊?

[此贴子已经被作者于2016-7-7 15:15编辑过]

2016-07-07 15:13
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
再给你一段用动态数组,自己输入数组,然后插入一个元素,再排序的程序,你可以看看,也可以满足你的要求,就是把原给定的有序序列,修改为可以手动输入序列(有序或无序均可)
程序代码:
#include <stdio.h>
#include <malloc.h>
//清空缓存函数
void safe_flush(FILE *fp)
{
    int ch;
    while( (ch = fgetc(fp)) != EOF && ch != '\n' );          
}
//排序函数 
void sort(int a[],int n)
{
    
    int i,j,temp=0;
    int num=n;    
    for(i=0;i<n;i++)
    {
        n--;    //每次循环都是把最大的值交换到最右面 
        for(j=0;j<n;j++)
        {
            if(a[j]>a[j+1])
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }        
        }
    }
    printf("\n\n新序列为:");
    for(i=0;i<num;i++)    
        printf("%d\t",a[i]);
}

void insert(int *p,int d,int n)
{
    int i;
    //插入数据放至数组最后 
    p[n-1]=d;
    //输出新数组 
    printf("\n新数组为:\n\n");
    for(i=0;i<n;i++)
        printf("%d\t",p[i]);
    sort(p,n);    
}
//主函数 
int main()
{
    int i=0,n=0,d=0;
    
    printf("先输入动态数组的长度: ");
    scanf("%d", &n);    
    int* arr = (int *)calloc(n+1,sizeof(int));    
    printf("\n输入%d个整数给数组赋值:\n\n",n);
    //给数组赋值
    for(i = 0; i < n; i++)
        scanf("%d",&arr[i]);
    //给数组最后加上结束符
    arr[n+1]='\0';    
    //清除输入超过n长度的数字,避免后续误读入存进elem中 
    safe_flush(stdin);
    //输出该数组的元素值 
    printf("\n初始数组为:\n\n");
    for(i=0;i<n;i++)
        printf("%d\t",arr[i]);
       //输入需要插入的元素
    printf("\n\n请输入要插入的元素值: ");
    scanf("%d",&d); 
       safe_flush(stdin);
       insert(arr,d,n+1);
    //释放堆内存 
    free(arr);
    //将arr指向NULL,避免通过arr不当使用已经释放的内存 
    arr=NULL;
    return 0;
}
2016-07-07 15:26
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 24楼 FATALIZM
稍等,我看下,是元素移除好像,我有个之前写的,可以先给你看下,我再看下你的程序
程序代码:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//先判断有几个元素等于elem,即需调用几次removeElement
int same_elem(int A[],int n,int elem)
{
    int i=0;
    //统计几次相等
    int num=0; 
    for(i=0;i<n;i++)
    {
        if(elem==A[i])
            num++;            
    }    
    return num;
} 
//移除函数 
int removeElement(int A[], int n, int elem,int m)
{
    int i=0,j=0;
    for(i=0;i<n;i++)
    {
        if(elem==A[i])
        {
            for(j=i;j<n;j++)
                A[j]=A[j+1];                        
            A[n]='\0';
            break;
        }    
    }    
    n=0;
    i=0;
    printf("\n第%d次删除后数组为:\n\n",m+1);
    while(A[i]!=0)
    {        
        
        printf("arr[%d]=%d\t",i,A[i]);
        n++;
        i++;        
    }    
    printf("\n");
    return n;
}
//清空缓存函数
void safe_flush(FILE *fp)
{
    int ch;
    while( (ch = fgetc(fp)) != EOF && ch != '\n' );          
}
//主函数 
int main()
{
    int i=0, n=0,num=0,m=0;
    //elem要删除的元素,index剩下的数组长度
    int elem=0,index=0;  
    printf("先输入动态数组的长度: ");
    scanf("%d", &n);    
    int* arr = (int *)calloc(n,sizeof(int));    
    printf("\n输入%d个整数给数组赋值\n\n",n);
    //给数组赋值
    for(i = 0; i < n; i++)
        scanf("%d",&arr[i]);
    //给数组最后加上结束符
    arr[n]='\0';    
    //清除输入超过n长度的数字,避免后续误读入存进elem中 
    safe_flush(stdin);
//    getchar();    
    //输出该数组的元素值 
    printf("\n初始数组为:\n\n");
    for(i = 0; i < n; i++)
        printf("arr[%d]=%d\t",i,arr[i]);
       //输入需要删除的元素
    printf("\n\n请输入要删除的元素值: ");
    scanf("%d",&elem); 
       //调用函数判断数组中有几个需要删除的元素 
    num=same_elem(arr,n,elem);
    //调用移除函数计算剩下的数组长度 
     if(num!=0)
    {
        index=n;
        for(i=0;i<num;i++)
        {
            index=removeElement(arr,index,elem,m);
            m++;
        }     
        printf("\n删除元素后的数组长度为: %d\n\n",index);
    }          
    else 
    {
        printf("\n该元素不在数组内.\n\n");
            exit(0);
    }
    //释放堆内存 
    free(arr);
    //将arr指向NULL,避免通过arr不当使用已经释放的内存 
    arr=NULL;
    return 0;
}


[此贴子已经被作者于2016-7-7 15:29编辑过]

2016-07-07 15:28
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 24楼 FATALIZM
你的数组元素都是整型的,为啥你定义变量都用双精度的double?用int就可以了啊,还有后面的lf都改成d
你的数组元素原来是6个,如果你输入的要删除的数组不在数组内,那么输出还是6个。但如果你输入的元素在原数组内存在,你用后面元素覆盖前一个元素,删除后,你的数组元素为5个了,但你main函数里输入i<6,输入一个未知值,所以会出错哦。你main函数最后的输出和你子函数一样,控制循环部分用'\0'

[此贴子已经被作者于2016-7-7 16:05编辑过]

2016-07-07 15:38
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:2 
回复 24楼 FATALIZM
#include<stdio.h>

void remove(double *p,double d)
{
    int i,j=0,n;
    for (i=0; p[i]!='\0'; i++)
    {
        if (d==p[i])
        {
            for(n=i; p[n]!='\0'; n++)
            {
                p[n]=p[n+1];
            }
            j=1;
            break;
        }
    }
    if (j==0)
        printf("你输入的数字不在数组内\n");
}

main()
{
    int i;
    double  a[7]= {1,2,3,4,5,6,'\0'},*p,d;
    p=a;
    for(i=0; p[i]!='\0'; i++)
    {
        printf("%lf\t",a[i]);
    }
    printf("\n请输入一个数字") ;
    scanf("%lf",&d);
    remove(p,d);
    for(i=0; p[i]!='\0'; i++)
    {
        printf("%lf\t",p[i]);
    }
}
2016-07-07 15:39
FATALIZM
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-6-28
收藏
得分:0 
有一道题,就是判断str2字符串在str1中出现的位置,输出第一次出现的位置。比如str1=woshiyigeren ,str2=yi那么应该输出的数字是6,因为str2里第六个是y,第七个是i,所以第一次出现位置是6
请大家帮忙看看我的程序对不对,无法正常运行

#include<stdio.h>
loc(char *str1,char *str2)
{int i,j,p,k,a;
for(i=0;str1[i]!='\0';i++)
{
     for(j=0;str2[j]!='\0';j++)
     if (str1[i]==str2[j])
     {
        i++;
        k=i;
        p=j+1;
     }
     else
     j=0;
}
a=k-p;
printf("%d",a);
}
main()
{
char str2[]="woshiyigedahaoren";
char str1[]="yi";
loc(str1,str2);

   
   
   
}
2016-07-07 23:39
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 29楼 FATALIZM
程序代码:
#include<stdio.h>
#include<string.h>

int loc(char *str1,char *str2)
{
    char *p = str1;
    int len = strlen(str2);
    while (*p != '\0')
    {
        if (strncmp(p, str2, len) == 0)
        {
            return p-str1+1;
        }
        p++;
    }
    return 0;
}

main()
{
    char str1[]="woshiyigedahaoren";
    char str2[]="yi";
    int k = loc(str1, str2);
    if (k > 0)
        printf("%d\n", k);
    else
        printf("没找到\n");
}
2016-07-08 10:05
快速回复:关于指针数组的c语言程序题,请大家帮帮忙看看哪里不对,谢谢!
数据加载中...
 
   



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

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