
求大神看一下哪里出错了,用c语言写的余弦相似性和皮尔逊相关系数,编译没有问题,但出不来结果 20
ints1[943][1683];#include<iostream.h>#include"stdafx.h"#include"stdio.h"#include"stdl...
int s1[943][1683];
#include<iostream.h>
#include "stdafx.h"
#include"stdio.h"
#include"stdlib.h"
#include"math.h"
#define usernum 943
#define itemnum 1683
int main()
{
printf("+++++++++++++++++++++++++++++++++++++++");
int i,u,m,r,w;
FILE *fp;
/*打开文件*/
fp=fopen("c:\\100k.txt","r"); /*假设u1.base在d盘根目录下*/
if(!fp) return 0;
else printf("succeed\n");
for(i=0;i<100000;i++) /*假定有j行*/
{ fscanf(fp,"%d %d %d %d ",&u,&m,&r,&w); /*读一个数据*/
s1[u][m]=r;
/* printf("user:%dmovie:%d:ratings:%d\n",u,m,r);*/
}
/* 关闭文件 */
fclose(fp);
/***********************************************************/
/*double COSINE(){*/
double AB[usernum-1]={0.0};/*用户一与其他942个用户之间的向量乘积*/
double consine[usernum],re;
double A=0;/*用户一向量摸的初始化*/
double B=0;/* 用户n向量摸的初始化*/
int aver[usernum];
int sum,o;
int l=0,j;
for(o=0;o<943;o++)/*计算每个用户的评价平均分并存储在aver[]数组中*/
{ sum=0;
for(i=0;i<1683;i++)
{
sum+=s1[o][i];
if(s1[o][i]!=0)
l++;
aver[o]=sum/l;
}printf("llllllllllllllllllll");
}
for(i=0;i<943;i++)
{
for(j=0;j<1683;j++)
{
if(s1[i][j]==0)
{
s1[i][j]=aver[i];
}
}
}
for(i=0;i<1683;i++)
{
A += s1[0][i] *s1[0][i];
}
for (i=0; i <1684; i++)
{
for(j=1;j<944;j++)
{
B += s1[j][i] *s1[j][i];
AB[j]+= s1[1][i]* s1[j][i];
consine[j]=AB[j]/(A*B);
}
}
/*返回最近的5个用户*/
double sum1=0.0;
for(i=0;i<=942;i++)
{
sum1+=consine[i];
re=sum/942;
}
double p=0.0,f=re;
int n;
for(j=0;j<=5;j++)
{
for(i=0;i<=942;i++)
{
if(consine[i]<f&&consine[i]>p)
{
f=consine[i];
n=i;
}
}
printf("%d %d\n",n,consine[n]);
p=f;
f=sum;
}
/*******************************************************************/
double t1[1683],t2[1683],sum4,sum2,sum3;
double re2[943];int s;
for(i=1;i<943;i++)
{
sum4=sum2=sum3=0;
s=0;
for(j=1;j<1683;j++)
{
t1[s]=s1[0][j]-aver[0];
t2[s]=s1[i][j]-aver[i];
s++;
}
for(i=0;i<s;i++) {
printf("%f",t2[i]);}
/* for(j=0;j<=s;j++)
{
sum4+=t1[j]*t2[j];
sum2+=t1[j]*t1[j];
sum3+=t2[j]*t2[j];
re2[i]=sum4/(sqrt(sum2)*sqrt(sum3));
}
}
for(i=0;i<s;i++)
printf("%f\n",re2[i]);*/
}
return 0;
} 展开
#include<iostream.h>
#include "stdafx.h"
#include"stdio.h"
#include"stdlib.h"
#include"math.h"
#define usernum 943
#define itemnum 1683
int main()
{
printf("+++++++++++++++++++++++++++++++++++++++");
int i,u,m,r,w;
FILE *fp;
/*打开文件*/
fp=fopen("c:\\100k.txt","r"); /*假设u1.base在d盘根目录下*/
if(!fp) return 0;
else printf("succeed\n");
for(i=0;i<100000;i++) /*假定有j行*/
{ fscanf(fp,"%d %d %d %d ",&u,&m,&r,&w); /*读一个数据*/
s1[u][m]=r;
/* printf("user:%dmovie:%d:ratings:%d\n",u,m,r);*/
}
/* 关闭文件 */
fclose(fp);
/***********************************************************/
/*double COSINE(){*/
double AB[usernum-1]={0.0};/*用户一与其他942个用户之间的向量乘积*/
double consine[usernum],re;
double A=0;/*用户一向量摸的初始化*/
double B=0;/* 用户n向量摸的初始化*/
int aver[usernum];
int sum,o;
int l=0,j;
for(o=0;o<943;o++)/*计算每个用户的评价平均分并存储在aver[]数组中*/
{ sum=0;
for(i=0;i<1683;i++)
{
sum+=s1[o][i];
if(s1[o][i]!=0)
l++;
aver[o]=sum/l;
}printf("llllllllllllllllllll");
}
for(i=0;i<943;i++)
{
for(j=0;j<1683;j++)
{
if(s1[i][j]==0)
{
s1[i][j]=aver[i];
}
}
}
for(i=0;i<1683;i++)
{
A += s1[0][i] *s1[0][i];
}
for (i=0; i <1684; i++)
{
for(j=1;j<944;j++)
{
B += s1[j][i] *s1[j][i];
AB[j]+= s1[1][i]* s1[j][i];
consine[j]=AB[j]/(A*B);
}
}
/*返回最近的5个用户*/
double sum1=0.0;
for(i=0;i<=942;i++)
{
sum1+=consine[i];
re=sum/942;
}
double p=0.0,f=re;
int n;
for(j=0;j<=5;j++)
{
for(i=0;i<=942;i++)
{
if(consine[i]<f&&consine[i]>p)
{
f=consine[i];
n=i;
}
}
printf("%d %d\n",n,consine[n]);
p=f;
f=sum;
}
/*******************************************************************/
double t1[1683],t2[1683],sum4,sum2,sum3;
double re2[943];int s;
for(i=1;i<943;i++)
{
sum4=sum2=sum3=0;
s=0;
for(j=1;j<1683;j++)
{
t1[s]=s1[0][j]-aver[0];
t2[s]=s1[i][j]-aver[i];
s++;
}
for(i=0;i<s;i++) {
printf("%f",t2[i]);}
/* for(j=0;j<=s;j++)
{
sum4+=t1[j]*t2[j];
sum2+=t1[j]*t1[j];
sum3+=t2[j]*t2[j];
re2[i]=sum4/(sqrt(sum2)*sqrt(sum3));
}
}
for(i=0;i<s;i++)
printf("%f\n",re2[i]);*/
}
return 0;
} 展开
3个回答
展开全部
有的版本的VS没有stdafx.h这个头文件,相应的头文件是afx.h
你把
#include "stdafx.h"
改成
#include "afx.h"
应该就行了。
你把
#include "stdafx.h"
改成
#include "afx.h"
应该就行了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询