一,文件相关操作
1,判断一个程序是否含有合法数量的main函数。
代码:
#include <stdio.h>
#include <stdlib.h>
/****************************************************
功能描述:求出由文件读出的字符中有多少'main()‘
输入参数:*s1-指向由文件中读取的字符串
*s2-指向储存’main()‘的字符串
返回值:s1中'main()’的数量
其他说明:无
****************************************************/
int is_sub_sring(char *s1,char *s2)
{
int main_num=0,judge;//judge起判断做用
char *s3,*s4;
while(*s1!='\0')
{
if(*s1==*s2)
{
judge=1;
s3=s1;
s4=s2;
while(*s4!='\0')
{
if(*s3!=*s4)//如果相等之后又有不相等的出现,则使judge变为0,并退出
{
judge=0;
break;
}
s3++;
s4++;
if(judge==0)
break;
}
if(judge==1)
{
main_num++;
//break;
}
}
s1++;
}
return main_num;//返回个数
}
/****************************************************
功能描述:读文件,并讲两个字符串传给is_sub_sring函数
并最后判断结果
输入参数:无
返回值:无
其他说明:无
****************************************************/
int main()
{
char str[80];//储存由函数读入的字符
char inmain[7]="main()";//储存main()
int num_main=0;//判断个数
FILE *fpbe;
if((fpbe=fopen("bereadfile.c","r"))==NULL)
{
printf("操作目标文件不存在!\n");
exit(1);
}
while(!feof(fpbe))
{
fgets(str,80,fpbe);
num_main+=is_sub_sring(str,inmain);
if(num_main>1)//如果已经超1,可直接退出
break;
}
fclose(fpbe);
if(num_main==1)
printf("right!");
else if(num_main==0)
printf("no main!");
else
printf("can not more main!");
return 0;
}
2,将一个程序中 { 和 } 号单独一行
代码:
#include <stdio.h>
#include <stdlib.h>
/****************************************************
功能描述:读一个程序,将其中的'{'和'}'分别位于单独
一行
函数变量:num_line-标记行数,以便输出
prec-当前字符的前一个字符
ch-当前字符
str-存放由文件读入的字符串
返回值:无
其他说明:无
****************************************************/
int main()
{
int num_line=1;
char prec,ch;
char str[80];
FILE *fpbe,*fpget;
if((fpbe=fopen("bereadfile.c","r"))==NULL)
{
printf("操作目标文件不存在!\n");
exit(1);
}
if((fpget=fopen("getfile.c","w+"))==NULL)
{
printf("无法建立新文件!\n");
exit(1);
}
while(!feof(fpbe))
{
ch=fgetc(fpbe);
if((ch=='{'||ch=='}')&&prec!='\n')//如果当前字符是’{‘或’}‘,且前一个不是换行则输入一个换行
fputc('\n',fpget);
else if((prec=='{'||prec=='}')&&(ch!='\n'))//如果当前字符不是换行,且前一个是’{‘或’}‘,则输入一个换行
fputc('\n',fpget);
fputc(ch,fpget);
prec=ch;
}
rewind(fpget);//将文件指针指向文件首以便输出
fgets(str,80,fpget);
while(!feof(fpget))
{
printf("%d %s",num_line,str);
fgets(str,80,fpget);
num_line++;
}
fclose(fpbe);
fclose(fpget);
return 0;
}
3,将一个程序第m到第n行加上//注释
代码:
#include <stdio.h>
#include <stdlib.h>
/****************************************************
功能描述:读一个程序,将输入的m行到n行加上//注释
函数变量:str-存放由文件读入的字符串
m-输入的值
n-输入的值
vary-从1开始,若在m到m+n之间,则进行加注释
num_line-输出时的行数
返回值:无
其他说明:无
****************************************************/
int main()
{
int m,n,vary=1,num_line=1;
char str[80];
FILE *fpbe,*fpget;
if((fpbe=fopen("bereadfile.c","r"))==NULL)
{
printf("操作目标文件不存在!\n");
exit(1);
}
if((fpget=fopen("getfile.c","w+"))==NULL)
{
printf("无法建立新文件!\n");
exit(1);
}
printf("请输入两个行数:");
scanf("%d %d",&m,&n);
fgets(str,80,fpbe);
while(!feof(fpbe))
{
if(vary>=m&&vary<m+n-1)//如果vary在m到m+n之间,则加注释
{
fputc('/',fpget);
fputc('/',fpget);
}
fputs(str,fpget);
fgets(str,80,fpbe);
vary++;
}
rewind(fpget);//将文件指针指向文件首以便输出
fgets(str,80,fpget);
while(!feof(fpget))
{
printf("%d %s",num_line,str);
num_line++;
fgets(str,80,fpget);
}
fclose(fpbe);
fclose(fpget);
return 0;
}
二,简单银行系统的实现。
代码:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define Maxnum 10000
typedef struct
{
int account; //账号
char name[20]; //用户名
int password; //密码
double balance; //账户余额
int status; //状态,挂失为0,正常为1,注销为2
} bank_data;
bank_data use_data[Maxnum];
int N; //实际的用户数目
int manager(); //操作员进入系统
void readfile(); //将文件中数据存在结构体数组中
void work();//业务选择
int window(); //业务显示
void writefile(); //将数组中的数据存入文件中
void open(); //开户
void cancel(); //销户
void save(); //存款
void out(); //取款
void show(); //查询
void transfer(); //转账
void loss(); //挂失
void cLoss(); //解除挂失
int inputPassword(); //输入密码
void changePassword(); //更改密码
int search(int); //根据账号找到用户数据对应的下标
/***************************************************
功能描述:主体控制
输入参数/变量解释:无
返回值:无
其他说明:无
****************************************************/
int main()
{
printf("¥$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$¥\n\n");
printf("¥ 欢迎使用本银行系统 ¥\n\n");
printf("¥$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$¥\n");
if (manager())
{
readfile();
work();
writefile();
}
return 0;
}
/****************************************************
功能描述:银行经理登录
输入参数/变量解释:realName-由文件中读出的业务员用户名
realPassword-文件中保存的密码,这一版本中,
用字符保存密码
inputName-业务员登录时输入的用户名
inputPassword2-业务员登录时输入的密码
ch-用于接受密码
try_time-进入系统时尝试的次数
result-要返回的结果:0-不正确 1-正确
i-循环控制变量
返回值:密码正确,返回1;三次输入错误密码,返回0
其他说明:输入密码时利用getch函数(所在头文件:conio.h)
和putchar函数实现*代替密码的输出
****************************************************/
int manager()
{
char realName[20]; //由文件中读出的业务员用户名
char realPassword[20]; //文件中保存的密码
char inputName[20]; //业务员登录时输入的用户名
char inputPassword2[20]; //业务员登录时输入的密码
char ch;
int try_time=3; //进入系统时尝试的次数
int result = 0; //要返回的结果:0-不正确 1-正确
int i;
FILE *fp; //用于文件操作
//密码保存在文件中,先取出
if ((fp=fopen("password.txt", "r"))==NULL)
{
printf("系统错误,请联系开发人员!");
exit(1);
}
fscanf(fp, "%s %s", realName, realPassword); //从文件中读业务员用户名和密码密码
while(try_time!=0)
{
i=0;
printf("请您输入经理用户名:");
scanf("%s", inputName);
printf("请输入密码:");
while((ch=getch())!='\r') //getch在接受输入后,不在屏幕上显示
{
inputPassword2[i]=ch;
putchar('*');//接受任何字符,屏幕上只显示*
i++;
}
inputPassword2[i]='\0';
printf("\n");
if(strcmp(realName,inputName)==0&&strcmp(realPassword,inputPassword2)==0)
{
result=1;
break;
}
else
{
try_time--;
if(try_time==0) //尝试次数超过3次退出
printf("你无权进入该系统!");
else
printf("你还有%d次机会!",try_time);
}
}
fclose(fp);
return result;
}
/****************************************************
功能描述:从文件中读取用户数据
输入参数/变量解释:i-循环控制变量
返回值:无
其他说明:N为全局变量,表示银行用户的总人数
****************************************************/
void readfile()
{
int i=0;
FILE *fp;
if((fp=fopen("account.txt","r"))==NULL) //文件打开失败。
{
printf("系统错误,请联系开发人员!");
exit(1);
}
while(fscanf(fp,"%d %s %d %lf %d",&use_data[i].account, use_data[i].name, &use_data[i].password, &use_data[i].balance,&use_data[i].status ) != EOF)
i++;
N=i; //N表示银行用户的总人数
fclose(fp);
}
/****************************************************
功能描述:显示功能窗口
输入参数/变量解释:choise-数值表示不同的功能
返回值:choise
其他说明:无
****************************************************/
int window()
{
int choise;
while(1)
{
printf("|---------------------------------------------------|\n");//操作界面
printf("| 1 开户 | 2 销户 | 3 存款 | 4 取款 | 5 查询|\n\n");
printf("| 6 转账 | 7 挂失 | 8 解挂 | 9 改密 | 0 退出|\n");
printf("|---------------------------------------------------|\n");
printf("请输入操作指令:");
scanf("%d",&choise);
if(choise>9||choise<0)
printf("指令错误,请重新输入!\n");
else
break;
}
return choise;
}
/****************************************************
功能描述:选择办理业务
输入参数/变量解释:choise-数值表示不同的功能
返回值:无
其他说明:无
****************************************************/
void work()
{
int choise;//选择功能
while (choise!=0)
{
choise = window();
switch(choise)
{
case 1:
open(); //开户
break;
case 2:
cancel(); //注销
break;
case 3:
save(); //存款
break;
case 4:
out(); //取款
break;
case 5:
show(); //查询
break;
case 6:
transfer(); //转账
break;
case 7:
loss(); //挂失
break;
case 8:
cLoss(); //解除挂失
break;
case 9:
changePassword(); //更改密码
break;
case 0:
printf("欢迎您再来. \n");
break;
}
}
}
/****************************************************
功能描述:将用户数据保存到文件中
输入参数/变量解释:i-循环控制变量
返回值:无
其他说明:无
****************************************************/
void writefile()
{
int i=0;
FILE *fp;
if((fp=fopen("account.txt","w"))==NULL)
{
printf("系统错误,请联系开发人员!\n");
exit(1);
}
while(i<N)
{
fprintf(fp,"%d %s %d %lf %d\n",use_data[i].account,use_data[i].name,use_data[i].password,use_data[i].balance,use_data[i].status );
i++;
}
fclose(fp);
}
/****************************************************
功能描述:开户
输入参数/变量解释:input-第一次输入的密码
reinput-第二次输入的密码
返回值:无
其他说明:内部调用输入密码函数
****************************************************/
void open()
{
int input,reinput;
if(N==Maxnum)//判断用户是否已到最大值
{
printf("用户已满,开户失败!\n");
return;
}
printf("开户中!\n");
use_data[N].account=10001+N;
printf("这是您的账号: %d,请牢记!\n",use_data[N].account);
printf("请输入户主姓名:");
scanf("%s", use_data[N].name);
while(1)
{
printf("请输入密码:");
input=inputPassword();
printf("请再次输入密码:");
reinput=inputPassword();
if(input==reinput)//比较两次输入的密码是否相等
{
use_data[N].password=input;
use_data[N].status=1;
printf("请输入存款金额:");
scanf("%lf",&use_data[N].balance);
N++; //用户数加1,以便读入文件
printf("开户成功!\n");
break;
}
else
{
printf("两次密码不一致,请重新输入\n");
}
}
}
/****************************************************
功能描述:销户
输入参数/变量解释:becancel-表示被销户操作的账号
beaccount-表示被销户操作的账号在
结构体中的下标
input-表示输入的密码
返回值:无
其他说明:无
****************************************************/
void cancel()
{
int becancel,beaccount,input;//be***表示被**操作的账号,beaccount表示被**操作的账号在结构体中的下标,input表示输入的密码,以下操作函数类似。
printf("请输入销户账号:");
scanf("%d",&becancel);
if(search(becancel)==-1)//查询用户,以确保用户存在
printf("未找到该用户,销户失败!\n");
else
{
beaccount=becancel-10001;
printf("该用户为%d号,%s,请您输入密码完成销户:",use_data[beaccount].account,use_data[beaccount].name);
input=inputPassword();
if(input==use_data[beaccount].password)
{
if(use_data[beaccount].status==2)//判断状态
printf("该用户已被注销,无法再次注销!\n");
else
{
printf("你的账户中还有%lf元\n",use_data[beaccount].balance);
printf("确认销户?(按1确认,按0取消)");
if(getchar()==1)
{
use_data[beaccount].balance='\0';
use_data[beaccount].status=2;//状态改为销户
printf("销户成功!\n");
}
else
printf("已取消销户!\n");
}
}
else
printf("密码错误,销户失败!\n");
}
}
/****************************************************
功能描述:存款
输入参数/变量解释:besave-表示被存款操作的账号
beaccount-表示被存款操作的账号在
结构体中的下标
inputm-表示存入的钱数
返回值:无
其他说明:无
****************************************************/
void save()
{
int besave,beaccount,i=0;
char str[80];
double inputm;
printf("请输入存款账号:");
scanf("%d",&besave);
if(search(besave)==-1)
printf("未找到该用户,存款失败!\n");
else
{
beaccount=besave-10001;
printf("该用户为%d号,%s\n",use_data[beaccount].account,use_data[beaccount].name);
if(use_data[beaccount].status==2||use_data[beaccount].status==0)
printf("该用户已被注销或已挂失,无法存款!\n");
else
{
printf("请输入存款金额:");
if(scanf("%lf",&inputm)==1)
{
if(inputm<1000.00)
{
use_data[beaccount].balance+=inputm;
printf("存款后,您的账户有%.2lf元\n",use_data[beaccount].balance);
}
else
printf("数值过大不予存款!\n");
fflush(stdin);
}
else
{
printf("存款须为数字!\n");
fflush(stdin);
}
}
}
}
/****************************************************
功能描述:取款
输入参数/变量解释:beout-表示被取款操作的账号
beaccount-表示被取款操作的账号在
结构体中的下标
input-表示输入的密码
inputm-表示取出的钱数
返回值:无
其他说明:无
****************************************************/
void out()
{
int beout,beaccount,input;
double inputm;
printf("请输入取款账号:");
scanf("%d",&beout);
if(search(beout)==-1)
printf("未找到该用户,存款失败!\n");
else
{
beaccount=beout-10001;
printf("该用户为%d号,%s,请您输入密码完成存款:",use_data[beaccount].account,use_data[beaccount].name);
input=inputPassword();
if(input==use_data[beaccount].password)
{
if(use_data[beaccount].status==2||use_data[beaccount].status==0)
printf("该用户已被注销或已挂失,无法取款!\n");
else
{
printf("请输入取款金额:");
scanf("%lf",&inputm);
if(inputm>use_data[beaccount].balance)//判断提款是否大于余额
printf("余额不足,取款失败!\n");
else
{
use_data[beaccount].balance-=inputm;
printf("取款后,您的账户有%.2lf元\n",use_data[beaccount].balance);
}
}
}
else
printf("密码错误,存款失败!\n");
}
}
/****************************************************
功能描述:查询
输入参数/变量解释:beshow-表示被查询操作的账号
beaccount-表示被查询操作的账号在
结构体中的下标
input-表示输入的密码
返回值:无
其他说明:无
****************************************************/
void show()
{
int beshow,beaccount,input;
printf("请输入查询账号:");
scanf("%d",&beshow);
if(search(beshow)==-1)
printf("未找到该用户,查询失败!\n");
else
{
beaccount=beshow-10001;
printf("该用户为%d号,%s,请您输入密码完成查询:",use_data[beaccount].account,use_data[beaccount].name);
input=inputPassword();
if(input==use_data[beaccount].password)
{
if(use_data[beaccount].status==2)//判断状态
printf("该用户已被注销!\n");
else if(use_data[beaccount].status==0)
printf("该用户已被挂失!\n");
else
printf("该用户状态正常,余额为%.2lf\n",use_data[beaccount].balance);//显示余额
}
else
printf("密码错误,存款失败!\n");
}
}
/****************************************************
功能描述:查询
输入参数/变量解释:betran-表示转出操作的账号
beaccount-表示转出操作的账号在
结构体中的下标
gettran-表示转入操作的账号
getaccount-表示转入操作的账号在
结构体中的下标
input-表示输入的密码
inputm-表示转账的钱数
返回值:无
其他说明:注意判断是否透支
****************************************************/
void transfer()
{
int betran,gettran,beaccount,getaccount,input;//be**为转出,get**为转入
double inputm;
printf("请输入转出账号:");
scanf("%d",&betran);
if(search(betran)==-1)//第一个if,未找到用户
printf("未找到该用户,转账失败!\n");
else
{
beaccount=betran-10001;
printf("该用户为%d号,%s,请您输入您的密码完成转账:",use_data[beaccount].account,use_data[beaccount].name);
input=inputPassword();
if(input==use_data[beaccount].password)//第二个if,密码正确
{
if(use_data[beaccount].status==2||use_data[beaccount].status==0)//第三个if,状态正常
printf("该用户已被注销或已挂失,无法转账!\n");
else
{
printf("请输入取款金额:");
scanf("%lf",&inputm);
if(inputm>use_data[beaccount].balance)//判断是否透支
printf("余额不足,取款失败!\n");
else
{
printf("请输入转入账号:");
scanf("%d",&gettran);
if(search(gettran)==-1)
printf("未找到该用户,转账失败!\n");
else
{
getaccount=gettran-10001;
if(use_data[getaccount].status==2||use_data[getaccount].status==0)
printf("该用户已被注销或已挂失,无法转账!\n");
else
{
use_data[beaccount].balance-=inputm;
use_data[getaccount].balance+=inputm;
printf("取款后,您还有%.2lf元,转入账号还有%.2lf元! \n",use_data[beaccount].balance,use_data[getaccount].balance);//显示各自余额
}
}
}
}
}
else
printf("密码错误,转账失败!\n");
}
}
/****************************************************
功能描述:挂失
输入参数/变量解释:beloss-表示被挂失操作的账号
beaccount-表示被挂失操作的账号在
结构体中的下标
input-表示输入的密码
返回值:无
其他说明:无
****************************************************/
void loss()
{
int beloss,beaccount,input;
printf("请输入挂失账号:");
scanf("%d",&beloss);
if(search(beloss)==-1)
printf("未找到该用户,挂失失败!\n");
else
{
beaccount=beloss-10001;
printf("该用户为%d号,%s,请您输入密码完成挂失:",use_data[beaccount].account,use_data[beaccount].name);
input=inputPassword();
if(input==use_data[beaccount].password)
{
if(use_data[beaccount].status==1)
{
use_data[beaccount].status=0;
printf("挂失成功!\n");
}
else if(use_data[beaccount].status==0)
printf("该账户已处于挂失状态,不能再次挂失!\n");
else
printf("该账户处于销户状态,挂失失败!\n");
}
}
}
/****************************************************
功能描述:解挂
输入参数/变量解释:becloss-表示被解挂操作的账号
beaccount-表示被解挂操作的账号在
结构体中的下标
input-表示输入的密码
返回值:无
其他说明:无
****************************************************/
void cLoss()
{
int becloss,beaccount,input;
printf("请输入解挂账号:");
scanf("%d",&becloss);
if(search(becloss)==-1)
printf("未找到该用户,解挂失败!\n");
else
{
beaccount=becloss-10001;
printf("该用户为%d号,%s,请您输入密码完成解挂:",use_data[beaccount].account,use_data[beaccount].name);
input=inputPassword();
if(input==use_data[beaccount].password)
{
if(use_data[beaccount].status==0)
{
use_data[beaccount].status=1;
printf("解挂成功!\n");
}
else if(use_data[beaccount].status==1)
printf("该账户处于正常状态,不能解挂!\n");
else
printf("该账户处于销户状态,解挂失败!\n");
}
}
}
/****************************************************
功能描述:进行密码输入
输入参数/变量解释:ch-输入的密码为字符型,以便隐藏
judgePass-判断变量,可判断密码是否6位全为0
i-循环控制
返回值:无
其他说明:解释同manager函数
****************************************************/
int inputPassword()
{
char ch;//输入的密码为字符型,以便隐藏
int judgePass=0;//判断变量,可判断密码是否6位全为0
int i;
while(1)
{
for(i=0; i<6; i++)
{
ch=getch(); //输入不显示
putchar('*'); //输出“*”
judgePass=judgePass*10+(ch-'0');//已为用户提供只带数字的小键盘,故忽略输入字母的情况
if(judgePass==0)
break; //退出for循环后,再次接受
}
printf("\n");
if(judgePass==0) //若6位全为零,则重新输入
{
printf("密码要求不全为0!\n");
printf("请重新输入密码: ");
}
else
break;
}
return judgePass;
}
/****************************************************
功能描述:改密
输入参数/变量解释:bechange-表示被挂失操作的账号
beaccoun-表示被挂失操作的账号在
结构体中的下标
input-表示输入的密码
newpass1-修改后第一次的密码
newpass2-修改后第二次的密码
返回值:无
其他说明:调用inputPassword函数
****************************************************/
void changePassword()
{
int bechange,beaccount,input;
int newpass1,newpass2;
printf("请输入要更改密码的账号:");
scanf("%d",&bechange);
if(search(bechange)==-1)
printf("未找到该用户,改密失败!\n");
else
{
beaccount=bechange-10001;
printf("该用户为%d号,%s,请您输入密码完成改密:",use_data[beaccount].account,use_data[beaccount].name);
input=inputPassword();
if(input==use_data[beaccount].password)
{
printf("请输入新密码:");
newpass1=inputPassword(); //输入密码1
printf("请确认密码:");
newpass2=inputPassword(); //输入密码2
if(newpass1==newpass2)
{
use_data[beaccount].password=newpass1;
printf("修改成功!\n");
}
else
{
printf("两次输入不同,修改失败!\n");
}
}
else
printf("密码错误,改密失败!\n");
}
}
/****************************************************
功能描述:查询用户
输入参数/变量解释:bework-表示被查询用户操作的账号
index-若找到表示用户的下标,若没找到为-1
low-二分查找中的小值
high-二分查找中的大值
mid-二分查找中的中间值
返回值:若找到,返回值在0~N-1间,否则,返回-1
其他说明:二分查找
****************************************************/
int search(int bework)
{
int index=-1;
int low=0, high=N-1, mid;
while(low<=high)
{
mid=(low+high)/2;
if(use_data[mid].account==bework)
{
index=mid;
break; //若找到则退出
}
else if (use_data[mid].account>bework)
high=mid-1;
else
low=mid+1;
}
return index; //若找到,返回值在0~N-1间,否则,返回-1
}
注:代码中文件解释,password文件中为:manager 123456,account文件中为:
10001 caoxinyu 123456 1498.000000 1
10002 machunpeng 123456 1010.000000 1
10003 jiarushan 123456 100.000000 1
三:利用递推,数组,递归构造斐波那契数列时间的差异
代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/****************************************************
功能描述:递推法求斐波那契数列以及运算时间
输入参数:start-测试时间的初值
finish-测试时间的完成值
fib1-数列的第一项
fib2-数列的第二项
fib-递推的中间变量
i-循环控制变量
n-欲求的数列的项数
返回值:无
其他说明:无
****************************************************/
void ditui(int n)
{
clock_t start,finish;
long long fib1=1,fib2=1,fib;
int i;
if(n<=0)
printf("wrong!");
else if(n==1)
printf("1");
else
{
printf("%10lld%10lld",fib1,fib2);//先将前两个输出
start=clock();
for(i=2; i<n; i++)
{
fib=fib1+fib2;//递推公式
printf("%10lld",fib);
//if(i==4)
//printf("\n");
//if((i-4)%5==0&&i>4)
//printf("\n");
fib1=fib2;//递推过程
fib2=fib;
}
finish=clock();
printf("The ditui time is %f ms\n",difftime(finish,start));
}
}
/****************************************************
功能描述:递归算法
输入参数:n-欲求的数列的项数
返回值:递归结果
其他说明:无
****************************************************/
int Fib(int n)
{
if(n==1||n==2)//前一二项为1 1
return 1;
else
return (Fib(n-1)+Fib(n-2));
}
/****************************************************
功能描述:递归法求斐波那契数列以及运算时间
输入参数:start-测试时间的初值
finish-测试时间的完成值
fib-得到的斐波那契数列
i-循环控制变量
n-欲求的数列的项数
返回值:无
其他说明:无
****************************************************/
void digui(int n)
{
clock_t start,finish;
int i;
long long fib;
if(n<=0)
printf("wrong!");
else
{
start=clock();
for(i=1; i<=n; i++)
{
fib=Fib(i);
printf("%10lld",fib);
//if(i%5==0)//5个换一行
//printf("\n");
}
finish=clock();
printf("The diugui time is %f ms\n",difftime(finish,start));
}
}
/****************************************************
功能描述:数组法求斐波那契数列以及运算时间
输入参数:start-测试时间的初值
finish-测试时间的完成值
fib-存放得到的数列的数组
i-循环控制变量
n-欲求的数列的项数
返回值:无
其他说明:无
****************************************************/
void shuzu(int n)
{
clock_t start,finish;
long long fib[10000];
int i;
fib[0]=1;//赋初值1 1
fib[1]=1;
start=clock();
for(i=2; i<n; i++)
{
fib[i]=fib[i-1]+fib[i-2];
}
finish=clock();
for(i=0; i<n; i++)
{
printf("%10lld",fib[i]);
// if((i+1)%5==0)//5个一换行
//printf("\n");
}
printf("The shuzu time is %f ms\n",difftime(finish,start));
}
int main()
{
int n;
scanf("%d",&n);
if(n>50)
printf("数据过大");
else
{
shuzu(n);
ditui(n);
digui(n);
}
return 0;
}