| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1093 人关注过本帖
标题:求助c语言基础
只看楼主 加入收藏
as2872590483
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-3-10
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:5 
求助c语言基础
void  fun(int  *w, int  p, int  n)
{
    int i;int j=0;int k=0;int m=0;
    for(i=0;i<=p;i++)
        {
            j=w[0];
        for(k=0;k<n-1;k++)
            {
                w[m]=w[m+1];
                m++;
               

               
            }

        w[m]=j;
        }

}
这里到底哪里错了呢?只要在w[m]=w[m+1];前面加上m=k;就正确,原题目为图片里
图片附件: 游客没有浏览图片的权限,请 登录注册



搜索更多相关主题的帖子: c语言 基础 int for 图片 
2018-03-21 17:39
话宝宝
Rank: 2
等 级:论坛游民
威 望:1
帖 子:8
专家分:20
注 册:2018-3-20
收藏
得分:10 
#include <stdio.h>

int fun(int* w,int p,int n);
int main(void)
{
    int j=0;
    int k=0;
    int w[100];
    int p=0;
    int n=0;
    printf("请输入数据到数组中\n");
    for(j=0;j<100;j++)
    {
        scanf("%d",&w[j]);
        n++;
        if(getchar()=='\n')
        {
            break;
        }
    }
    printf("请输入p的值\n");
    scanf("%d",&p);
    fun(w,p,n);
    for(k=0;k<j+1;k++)
    {
        printf("%5d",w[k]);
    }
    printf("\n");
    return 0;
}
int fun(int* w,int p,int n)
{
    int i=0;
    int temp=0;
    for(i=0;i<n-p;i++)
    {
        temp=w[p+i];
        w[p+i]=w[i];
        w[i]=temp;
    }
    return 0;
}

这是整个程序,子函数在下面,你原来的函数中数组交换不能直接赋值,会被覆盖的,要通过中间变量;

[此贴子已经被作者于2018-3-21 20:04编辑过]

2018-03-21 19:57
话宝宝
Rank: 2
等 级:论坛游民
威 望:1
帖 子:8
专家分:20
注 册:2018-3-20
收藏
得分:0 
#include<stdio.h>
void fun(int*w,int p,int n);
int checknum(int*a);
int main()
{
    int a[20];
    int i;
    int p;
    int n=0;
    printf("请输入一组数据");
    for(i=0;i<20;i++)
    {
    scanf("%d",&a[i]);
    n++;
    if(getchar()=='\n')
        {
            break;
        }
   
    }
    printf("请输入要移动的位数的值p:\n");
    scanf("%d",&p);
    fun(a,p,n);
    for(i=0;i<n;i++)
    {
        printf("%4d",a[i]);
    }
}
void fun(int*w,int p,int n)
{
int i;
int j=0;
int k=0;
int m=0;
for(i=0;i<=p;i++)
{
    k=w[n-1];
    for(j=n-2;j>=0;j--)
    {
        w[j+1]=w[j];
    }
    w[0]=k;
}
}
这是按你的思路写的,
2018-03-21 20:24
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:10 
思路:
每次取出数组的第一个数j,将后面的数向前平移一位,并将j赋值到数组的最后,循环p+1次即可
void  fun(int  *w, int  p, int  n)
{
    int i;int j=0;int k=0;int m=0;
    for(i=0;i<=p;i++)
        {
            j=w[0];
        for(k=0;k<n-1;k++)
            {
                w[m]=w[m+1];   //这里只需要将m变为k,并删掉m++就可以了
                m++;     
            }
        w[m]=j;   //将m变为n-1,最后一个
        }
}
2018-03-21 22:44
as2872590483
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-3-10
收藏
得分:0 
回复 3楼 话宝宝
为什么要将m变为k呢
2018-03-21 23:47
as2872590483
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-3-10
收藏
得分:0 
回复 2楼 话宝宝
m是个中间变量啊,没被覆盖啊
2018-03-21 23:58
快速回复:求助c语言基础
数据加载中...
 
   



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

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