m=a[i];
returnm+1;
}
voidmain()
{charch,s[20],str1[8],str2[8];
inti,j,ti,tj,a[8]={0},b[8]={0},o,p,q;
FILE*fp1,*fp2;
if((fp1=fopen("input2.txt","r"))==NULL)
{
printf("Cannotopenthisfile\n");
return;
}
fp2=fopen("output2.txt","w");
//扫描出数对的对数
p=0;
fgets(s,20,fp1);
while(s[0]!
='0')
{p++;
fgets(s,20,fp1);
}
//寻找基数
rewind(fp1);
for(q=1;q<=p;q++)
{//将数存入a[]
i=0;
ch=fgetc(fp1);
while(ch!
='')
{if(ch>='0'&&ch<='9')
a[i]=ch-48;
elseif(ch>='A'&&ch<='Z')
a[i]=ch-55;
str1[i]=ch;
i++;
ch=fgetc(fp1);
}
str1[i]='\0';
//将数存入b[]
j=0;
ch=fgetc(fp1);
while(ch!
='\n')
{if(ch>='0'&&ch<='9')
b[j]=ch-48;
elseif(ch>='A'&&ch<='Z')
b[j]=ch-55;
elseprintf("error\n");
str2[j]=ch;
j++;
ch=fgetc(fp1);
}
str2[j]='\0';
//寻找基数
for(ti=max(a,i);ti<=36;ti++)
{o=0;
for(tj=max(b,j);tj<=36;tj++)
if(otc(a,i,ti)==otc(b,j,tj))
{fprintf(fp2,"%s(base%d)=%s(base%d)\n",str1,ti,str2,tj);
printf("%s(base%d)=%s(base%d)\n",str1,ti,str2,tj);
o=1;
break;
}
if(o)
break;
}
if(!
o)
{fprintf(fp2,"%sisnotequalto%sinany2...36\n",str1,str2);
printf("%sisnotequalto%sinany2...36\n",str1,str2);
}
}
fclose(fp1);
fclose(fp2);
}
在调试中我们输入两组数:
138
237
0
最后一行用0表示输入结束。
运行的结果为:
13(base5)=8(base9)
23isnotequalto7inanybase2..36
和实际相符合。
实验三词汇统计
统计输入文件中出现的不同的单词个数以及每个单词出现的频率,并且将这些单词按照词典顺序排列好输出到文件中。
输入:
以文件形式记录程序中所需要的数据。
样例输入文件(word.in)
Thisisabook..Itsisnameis“Cprogramming”.
输出:
结果应该存放在一个文件中,该文件中的第一行为不同的单词个数,从第二行开始则为每一个单词和其相应出现的频率单词与频率数之间用空格符分割,单词需要按字典顺序排列。
样例输出文件(word.out)
8
a1
book1
c1
is1
its1
name1
programming1
this1
此程序对所输入的数据主要采用数组进行存储,但同时为了程序运行的简单方便,我们的程序也用到了指针,因此,我们的程序主要采取顺序存储结构。
至于算法,首先我们声明一个STAR类,用来存储输入的单词,并用来记录每个单词出现的次数。
然后针对所输入的语句,去掉标点符号并把剩下的单词存入文件中,再将各个单词存入已建立的数组中。
把各个字符改成小写字母,并统计各单词出现的次数,再通过对各单词出现次数的比较,采用冒泡排序法将语句中出现的各单词按从小到大的顺序排列。
最后,输出所输入语句的单词总数,并输出该语句中出现的单词以及各单词出现的次数。
一些具体的细节我们将随着下面的程序进一步说明.
include
#include
#include
#include
#include
usingnamespacestd;
////////////////////////////////////////////////////////////////////
////类声明
classSTR{
public:
strings;
intcount;
STR();
voidshow();
};
STR:
:
STR()
{
count=0;
}
voidSTR:
:
show()
{
cout<
cout<}
///////////////////////////////////////////////////////////////////
////函数原型
voidpush(STR*,int,int);
voidToLower(std:
:
string&);
intmain(){
stringtemp;
inttotal=0,num,n=0;
//去掉标点符号并把剩下的单词存入temp.txt中
ifstreamin("word.in.txt",ios:
:
in);
ofstreamoutfile("temp.txt",ios:
:
out);
charc;
while(!
in.eof())
{
in.get(c);
if(c==''){outfile<<"";continue;}
if(c=='?
'){outfile<<"";continue;}
if(!
isalpha(c)){outfile<<"";continue;}
outfile<}
in.close();
outfile.close();
ifstreamfin("temp.txt",ios:
:
in);
while(fin>>temp)
total++;
num=total;
STR*sptr;
sptr=newSTR[total];
ifstreaminput("temp.txt",ios:
:
in);
//读入单词
for(inti=0;iif(input>>sptr[i].s)sptr[i].count++;
//将字符都改成小写字母
for(i=0;iToLower(sptr[i].s);
//统计词出现的个数
for(intk=0;kfor(i=0;ifor(intj=i+1;jif(sptr[i].s==sptr[j].s){sptr[i].count+=sptr[j].count;num--;push(sptr,total,j);}
//冒泡排序
STRtem;
for(i=0;ifor(intj=i+1;jif(sptr[i].s>sptr[j].s){tem.count=sptr[i].count;
sptr[i].count=sptr[j].count;
sptr[j].count=tem.count;
tem.s=sptr[i].s;
sptr[i].s=sptr[j].s;
sptr[j].s=tem.s;
}
//输出
ofstreamout("word.out.txt",ios:
:
out);
out<for(i=0;iout<delete[]sptr;
out.close();
cout<<"StatisticCompleted..."<return0;
}
voidpush(STR*ptr,inttotal,intloc)
{
STRtemp=ptr[loc];
for(inti=loc;i{ptr[i].s=ptr[i+1].s;
ptr[i].count=ptr[i+1].count;
}
ptr[total-1].count=temp.count;
ptr[total-1].s=temp.s;
}
voidToLower(std:
:
string&s)
{
size_tsize=s.size();
for(size_tk=0;k{
s[k]=tolower(s[k]);
}
}
四、程序运行结果
8
a1
book1
c1
is2
its1
name1
programming1
this1
实验四设计能够计算日期相减的计算器
要求:
1.使用对话框的形式实现一个可视化的计算器;
2.实现+、-、*、/、C、CE、等数学计算功能;
3.在文本框中输入格式为yyyy/mm//dd的数据,然后按‘-’运算按钮,在输入一个yyyy/mm//dd的数据,紧接着按‘=’按钮即可得到两个日期之间相差的天数。
例如
2006/03/20-2006/03/19=1
2006/03/20-2006/03/21=-1
程序设计框架与步骤
1、创建应用程序框架;
2、创建对话资源,在工程工作区定义编辑对话框资源;
3、添加消息处理函数
下面是设置各控件的属性的程序
voidCCalculatorDlg:
:
On1Button()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(start==false)
m_edit="1";
elseif(start==true)
m_edit+="1";
start=true;
UpdateData(false);
}
voidCCalculatorDlg:
:
On2Button()