#include<stdlib.h>
#define N 5
struct Student
{
long num
char name[10]
int score[3]
float ave
}stu[N]
void input(int)
void save(int,char *)
void read(int,char *)
void stu_sort(int)
void insert(int)
int main()
{
input(N)/*输入数据*/
save(N,"student.txt")/*将数据保存到文件*/
read(N,"student.txt")/*从文件中读取数据*/
stu_sort(N)/*对文件中的数据进行排序*/
insert(N)/*插入一个新的数据*/
printf("After insert:\n")
read(N+1,"student_sort.txt")/*查看插入后的全部数据*/
return 0
}
void input(int n)
{
int i,j,sum
for(i=0i<ni++)
{
printf("enter information of student %d\n",i+1)
printf("Num :")scanf("%ld",&stu[i].num)
printf("Name :")scanf("%s",stu[i].name)
sum=0
for(j=0j<3j++)
{
printf("Score %d:",j+1)scanf("%d",&stu[i].score[j])
sum+=stu[i].score[j]
}
stu[i].ave=sum/3.0
}
}
void save(int n,char *filename)
{
FILE *fp
int i
if((fp=fopen(filename,"w"))==NULL)
{
printf("cannot creat file.\n")
exit(0)
}
for(i=0i<ni++)
if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)
printf("\n write error!\n")
fclose(fp)
}
void read(int n,char *filename)
{
FILE *fp
int i
if((fp=fopen(filename,"r"))==NULL)
{
printf("cannot open file!\n")
exit(0)
}
for(i=0i<ni++)
{
fread(&stu[i],sizeof(struct Student),1,fp)
printf("%ld,%s,%d,%d,%d,%5.1f\n",\
stu[i].num,stu[i].name,stu[i].score[0],\
stu[i].score[1],stu[i].score[2],stu[i].ave)
}
fclose(fp)
}
void stu_sort(int n)
{
printf("\nbefore sort:\n")
read(n,"student.txt")
int i,j,k
struct Student stu_temp
for(i=0i<n-1i++)
{
k=i
for(j=i+1j<nj++)
if(stu[k].ave<stu[j].ave)
k=j
if(k!=i)
{
stu_temp=stu[i]
stu[i]=stu[k]
stu[k]=stu_temp
}
}
save(N,"student_sort.txt")
printf("\nafter sort:\n")
read(N,"student_sort.txt")
}
void insert(int n)
{
struct Student stu_add
printf("input the infomation of new student:\n")
scanf("%ld %s %d %d %d",&stu_add.num,stu_add.name,\
&stu_add.score[0],&stu_add.score[1],&stu_add.score[2])
stu_add.ave=(stu_add.score[0]+stu_add.score[1]+stu_add.score[2])/3.0
printf("Before insert:\n")
read(N,"student_sort.txt")
int i,p
for(i=0stu_add.ave<stu[i].ave&&i<ni++)
p=i
FILE *fp
if((fp=fopen("student_sort.txt","w"))==NULL)
{
printf("cannot open file.\n")
exit(0)
}
for(i=0i<pi++)
if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)
printf("write error!\n")
if(fwrite(&stu_add,sizeof(struct Student),1,fp)!=1)
printf("write error!\n")
for(i=pi<ni++)
if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)
printf("write error!\n")
fclose(fp)
}
R中还有一个有趣的sqldf包,它可以让你用SQL来操作dataframe,这种功能能让会R的人能练习SQL,会SQL的人能练习R,不得不感叹R语言的强大技能和神奇魅力。当然也可以将R与外部数据库连接,直接在R中操作数据库,并生成最终结果,这也是一种可行的方法。在R中连接数据库需要安装其它的扩展包,根据连接方式不同我们有两种选择:一种是ODBC方式,需要安装RODBC包并安装ODBC驱动。另一种是DBI方式,可以根据已经安装的数据库类型来安装相应的驱动。因为后者保留了各数据库原本的特性,所以个人比较偏好用DBI连接方式。有下面这几种主要的包提供了DBI连接:RMySQL,RSQLite,ROracle,RPostgreSQL。由名字看得出它们分别对应了几种主流的数据库。
注:以上文字来自R-blogger—–《在R语言中使用SQL》
值得一提的是在运用sqldf包时可能要对R软件升级到3.1.0版以上,否则安装不会成功,这里简单介绍一种在Windows环境下对R软件自动升级的方法。
Windows上升级R语言:
install.packages("installr")
library(installr) #加载包
updateR()
之后选择“确定”就可以自动更新了
虽然在R语言中有很多优秀的函数如aggregate()和daply()可以对数据框统计,但sql功能强大,不仅能实现数据的清洗、统计、运算,还可以实现数据存储、控制、定义和调用。越来越多的公司在招聘的时候都要求数据分析师除了要掌握统计建模和数据挖掘的理论方法和编程能力外,还要求其具备使用sql的能力,楼主也在积极学习sql当中。
下面是我利用sqldf()完成的一些程序,虽然简单,但这是学习的第一步
>name<-c(rep('张三',1,3),rep('李四',3))
>subject<-c('数学','语文','英语','数学','语文','英语')
>score<-c(89,80,70,90,70,80)
>stuid<-c(1,1,1,2,2,2)
>stuscore<-data.frame(name,subject,score,stuid)
>library(sqldf)
1.计算每个人的总成绩并排名(要求显示字段:姓名,总成绩)
>sqldf('select name,sum(score) as allscore from stuscore group by name order by allscore')
name allscore
1 张三 239
2 李四 240
2.计算每个人的总成绩并排名(要求显示字段: 学号,姓名,总成绩)
>sqldf('select name,stuid,sum(score) as allscore from stuscore group by name order by allscore')
name stuid allscore
1 张三 1 239
2 李四 2 240
3.计算每个人单科的最高成绩(要求显示字段: 学号,姓名,课程,最高成绩)
>sqldf('select stuid,name,subject, max(score) as maxscore from stuscore group by stuid')
stuid name subject maxscore
1 1 张三数学 89
2 2 李四数学 90
4.计算每个人的平均成绩(要求显示字段: 学号,姓名,平均成绩)
>sqldf('select stuid,name,subject, avg(score) as avgscore from stuscore group by stuid')
stuid name subject avgscore
1 1 张三英语 79.66667
2 2 李四英语 80.00000
5.列出各门课程成绩最好的学生(要求显示字段: 学号,姓名,科目,成绩)
>sqldf('select stuid,name,subject,max(score) as maxscore from stuscore group by subject order by stuid')
stuid name subject maxscore
1 1 张三语文 80
2 2 李四数学 90
3 2 李四英语 80
8.列出各门课程的平均成绩(要求显示字段:课程,平均成绩)
>sqldf('select subject,avg(score) as avgscore from stuscore group by subject')
subject avgscore
1数学 89.5
2英语 75.0
3语文 75.0
可以,1、手机应用数据是可以删除的,但是在删除之前,最好在删除之前对重要数据进行备份或迁移,以免删除后无法找回。备份后,进入手机“设置”,选择“应用”,然后点击“已安装”进入。在已安装的页面上,可以看到所有下载的软件和占用的空间。2、可见聊天软件占用了大量的手机空间,因为每天都会产生大量的聊天记录。
3、可以点击微信图标进入申请信息页面。我们可以看到这个应用程序的详细空间数据和缓存数据。您可以单击“清除数据”和“清除缓存”来释放更多内存空间。
4、当然我们也可以选择直接删除一个应用,被删除的应用产生的数据会被完全删除。就像删除应用数据一样,删除应用前请备份软件中的重要数据,以免数据丢失