救助,,我的c语言计数和删除好像有些问题
本帖最后由 我是个汉子 于 2019-2-24 20:46 编辑/***********************************************
题目:主函数main()中数字字符串s为测试数据,程序主要先对数
字字符串s进行降序排序,将结果存入在数组b中,然后对
数组b中数据进行压缩,不同数字保存在数组b中,数字出
现次数保存在数组times中,计算各个数字加权和(即数字
本身乘以该数字出现次数),结果保存在数组c中。
编写程序:
1. 编写函数voidSortAndChange(char s[],int n, int b[]),
对字符串s中n个字符进行降序排列,并将n个字符转换为
数字,保存在数组b中。
2. 编写函数int Calculcate(int b[],int n,int times[],int c[]),
对数组b中数字进行压缩,不同数字保存在数组b中,不
同数字出现次数存入数组times中,并计算各个数字加权
和,结果存入数组c中,函数返回不同数字的个数。
测试数据: 13334444555582298760
运行结果:b=9 and times=1, the weight sum is 9
b=8 and times=2, the weight sum is 16
...
b=0 and times=1, the weight sum is 0
*************************************/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>
#define N 50
void SortAndChange(char s[],int n,int b[])
{
/**********Program**********/
int i,j;
char t;
for(i=0; i<n-1; i++)
{
for(j=i+1; j<n; j++)
{
if(s<s)
{
t=s;
s=s;
s=t;
}
}
}
for(i=0; i<n; i++)
b=s-'0';
/**********End**********/
}
int Calculcate(int b[],int n,int times[],int c[])
{
/**********Program**********/ //98876555544443332210
int i,j,k=0,num,count;
for(i=0; i<n; i++)
{
count=1;
for(j=i; j<n; j++)
{
if(b==b)
count++;
else
{
times=count;
b=b;
i=j;
c=b*times;
k++;
break;
}
}
}
return k;
/**********End**********/
}
int main()
{
char s="13334444555582298760";
int b={0};
int c={0};
int times={0};
int num;
int i,n;
FILE *fp;
if((fp=fopen("DATA.TXT","w"))==NULL)
{
printf("File open error\n");
exit(0);
}
n=strlen(s);
SortAndChange(s,n,b);
num=Calculcate(b,n,times,c);
for(i=0;i<num;i++)
{
printf("b[%d] = %d and times[%d] =%d, the weight sum is %d\n",i,b,i,times,c);
fprintf(fp,"b[%d]= %d and times[%d] =%d, the weight sum is %d\n",i,b,i,times,c);
}
fclose(fp);
return 0;
}
我的输出:
b = 9 and times =1, the weight sum is 9
b = 8 and times =2, the weight sum is 16
b = 7 and times =1, the weight sum is 7
b = 6 and times =1, the weight sum is 6
b = 5 and times =4, the weight sum is 20
b = 4 and times =4, the weight sum is 16
b = 3 and times =3, the weight sum is 9
b = 2 and times =2, the weight sum is 4
b = 1 and times =1, the weight sum is 1
if(b==b)
count++;
else
{
times=count;
b=b;
i=j;
c=b*times;
k++;
break;
}
这一段至少有两个问题
1.既然j<n当j=n-1时 b溢出,这是不安全的代码
2.考虑下边界情况。你这样写只有b!=b时结算,如果最后b的值刚好与b这个内存位置储存的值相同,那么最后一次结算就直接被你吃掉了
这就是输出中为什么没有0的原因 Croper 发表于 2019-2-25 20:29
这一段至少有两个问题
1.既然j
for(i=0; i<n; i++)
{
count=1;
for(j=i; j<n-1; j++)
{
if(b==b)
count++;
else
{
times=count;
b=b;
i=j;
c=b*times;
break;
}
}
这样修改也不行的 什么叫“这样修改也不行的”?
那是你自己的代码啊- -,我又没给你改
页:
[1]