C语言//输入10个数,编写一个函数,按降序对其排序,统计10个数字相加之和

qq_41093250 2017-12-05 06:17:25
//输入10个数,编写一个函数,按降序对其排序,统计10个数字相加之和
#include<stdio.h>

void fun(char *p,int m)
{

int i,j,k,sum;
while(*p)
{
sum=sum+*p;
p++;
}
printf("%d\n",sum);
}
int main()
{
char a[10]={1,2,3,4,5,6,7,8,9,10};
int i,j,k;

for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
if(a[j]<a[j+1])
{
int t;
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
fun(a,10);
for(k=0;k<10;k++)
printf("%d\n",a[k]);
return 0;
}
为什么10个数相加会出现错误,就按我这个方法该怎么修改
...全文
1097 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
CT8100 2017-12-06
  • 打赏
  • 举报
回复
引用 7 楼 qq_41093250 的回复:
[quote=引用 4 楼 iloveyou418 的回复:] while(*p)……这里错了…
为什么while(*p)错了[/quote] 开始p指向的是数组元素0,到了p+10就越界了,而且sum也没有赋初始值 fun函数修改以下,如果真想用指针来实现,请添加末尾标签,或用链表指针。
void fun(char *p,int m)
{

int i,j,k,sum=0;
//while(*p==NULL)
for(int m=0 ;m<10;m++ )
{
sum=sum+int(*p);
p++;
}
printf("%d\n",sum);
}
倚栏|听风 2017-12-06
  • 打赏
  • 举报
回复
引用 7 楼 qq_41093250 的回复:
[quote=引用 4 楼 iloveyou418 的回复:] while(*p)……这里错了…
为什么while(*p)错了[/quote] while(*p)的逻辑是什么啊? 当*p != 0 ,执行? 10个数相加的逻辑不是应该加10次之后退出循环吗,为什么要判断*p....看不懂
qq_41093250 2017-12-06
  • 打赏
  • 举报
回复
引用 4 楼 iloveyou418 的回复:
while(*p)……这里错了…
为什么while(*p)错了
自信男孩 2017-12-06
  • 打赏
  • 举报
回复
#include <stdio.h>
void fun(char *p,int m)
{
    int sum;
    while(*p)
    {
        sum = sum+*p;
        p++;
    }
    printf("%d\n",sum);
}
int main()
{
    char a[11]={1,2,3,4,5,6,7,8,9,10, 0};
    int i,j,k;

    for(i=0;i<9;i++)
    {
        for(j=0; j<9-i;j++)
            if(a[j]<a[j+1])
            {
                int t;
                t = a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
    }
    fun(a,10);
    for(k=0;k<10;k++)
        printf("%d\n", a[k]);
    return 0;
}
用p不是不可以,只是不能退出while循环; 以上是我的改法,在数组里最后加一个元素0,这样其他地方都不做修改,可以正常输出;
qq_41093250 2017-12-05
  • 打赏
  • 举报
回复
引用 2 楼 LWT_wait 的回复:
不对不对。。我有点晕
没事,我等你
paschen 2017-12-05
  • 打赏
  • 举报
回复
你fun函数中的sum变量要在循环前先初始化为0
CT8100 2017-12-05
  • 打赏
  • 举报
回复
while(*p)……这里错了…
张天星 2017-12-05
  • 打赏
  • 举报
回复
#include<stdio.h>

void fun(char *p, int m)
{

	int i=0,sum=0;//j,k等是多余的。还有,这里没有结束的条件。
	while (i<m)//这里没有结束的条件,是死循环,而且是越界死循环。你m是数组个数,传进来却没用上。
	{
		sum = sum + *p;
		p++;
		i++;//p++可以,其实用下标也可以,没差别。
	}
	printf("%d\n", sum);
}
int main()
{
	char a[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int i, j, k;
	for (i = 0; i<9; i++)
	{
		for (j = 0; j<9 - i; j++)
			if (a[j]<a[j + 1])
			{
				int t;
				t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
	}
	fun(a, 10);
	for (k = 0; k<10; k++)
		printf("%d\n", a[k]);
	return 0;
}
LWT_wait 2017-12-05
  • 打赏
  • 举报
回复
不对不对。。我有点晕
LWT_wait 2017-12-05
  • 打赏
  • 举报
回复
第一个for是<=9或<10吧

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧