博文

计算日期(2008-12-07 13:19:00)

摘要:// 给定一个天数,查询该天之后的日期
//例如
//当前日期是 2008 11 10 则5050天后是 2022 9 8 #include <iostream> using namespace std; class DAY
{
private:
 int y;
 int m;
 int d;
 int days[12]; public:
 DAY()
 {
  cout<<"请输入当前日期"<<endl;
  cout <<"year"<<endl;
  cin >> y;
  cout << "mouth"<<endl;
  cin >>m;
  cout << "day"<<endl;
  cin >> d;   int i;   for( i = 1 ; i <= 12 ; i++)
  {
   switch(i)
   {    case 2:
    days[i-1] = isLeapYear() ? 29:28; //设置2月天数
    break;    case 4:
   case 6:
   case 9:
   case 11:
    days[i-1] = 30;
    break; &n......

阅读全文(2087) | 评论:2

代码高亮的小程序(2008-07-06 11:22:00)

摘要:
之前在论坛上见有人做了一个代码高亮的程序,于是我也有些心动。
这是样本代码:
#include <stdio.h>
#include <conio.h>
int main()
{
int a=0,n=0,c=0;
char ch;
printf("请输入字符串\n");

while ((ch=getchar())!='\n')
{
  //printf("请输入字符\n");
  if (ch=='i')
   a=1;
  if (ch!='e'&&ch!='i'&&a==1||ch=='*')
   c++;
  if (ch=='e'&&a==1)  //当a为1时表示在e之前有i
  {
   if (c==1)      //当c等于1时表示i与e之间只有一个其他字符  
   {
    n++;
    a=0;
   }
   c=0;     //如果此处不重新赋值为0,则下次c会在1的基础上继续递增
  }
}
    printf("刚才的字符中有%d次",n);
getch();
return 0;
} 转换后:
[color=red]#include <stdio.h>[/color]
[color=red]#include <conio.h>[/color]
[color=blue]int[/co......

阅读全文(1880) | 评论:0

用状态机实现对代码中注释的清除(2008-07-03 14:11:00)

摘要:之前写了一个同样功能的一段程序http://blog.programfan.com/article.asp?id=34327
这次模仿别人的思路,我自己又重新写了一个用状态机实现的。相比之前我写的那个,这次的代码明显短了很多。
/*
用状态机实现对代码中注释的清除.
Visual C++ 2005 编译

08.6.26
zhaoyg
*/ #include <stdio.h>
#include <string.h> #define SCREEN void initialize_fsm(char fsm[7][256]); int main()
{
 int ch , temp = 0 ;
 int state = 0;
 char fsm[7][256];  FILE *pfin ;
 pfin = fopen("sweep-comments.txt","r");  #ifdef SCREEN
  #define OUT stdout
 #else
  FILE *pfout;
  pfout = fopen("result.txt","w");
  #define OUT pfout
 #endif  initialize_fsm(fsm);  #pragma region FSM ///尝试#pragma region功能. Visual C++ 2005  while ((ch = fgetc(pfin)) !=EOF)
 {
  state = fsm[state][ch];   if ( state != 2  && ch !='*' && temp == '/')
   fputc(temp,OUT);   temp = ch;  &......

阅读全文(3267) | 评论:0

清除代码中的注释(2008-04-19 23:29:00)

摘要:昨天在一个人的blog中看到他做了一个清除代码中的注释的小程序,于是我自己也来了兴趣。
以下是我自己做的,完全是我独立思考的。
不过相比之下我的代码比人家的多了很多,唉,心痛呀!!!
stack_push、stack_pop 、cope_string与cope_comment这四个函数的代码都copy于我做的那个代码缩排程序里的代码,只有局部做了些删除。
----------------------------------------------------------------------------
/*
清除代码中的注释
zhaoyg   08.4.19
*/ #include <stdio.h>
#include <stdlib.h>

typedef struct stack
{
 char item;
 stack *next;
}stack;

void stack_push( stack **,char );
stack *stack_pop (stack **);
stack *cope_string(FILE *fout,stack *current_node_string);
stack *cope_comment(FILE *fout,stack *current_node_comment);

int main()
{
 char current_char;  FILE *pfin,*pfout;
 stack *current_node=NULL ,*head=NULL;  pfin = fopen("test.txt","r");
 pfout = fopen("out.txt","w");
 
////////////////////////////////////////////////////////
 while (fscanf(pfin,"%c",&current_char)!=EOF)
 {......

阅读全文(3100) | 评论:0

将数倒置(如123倒置后321)的方法(2008-03-13 21:36:00)

摘要:自己弄着玩呢。
不为实用,只为能用 我的分析如下:
  1的倒置数为10,那么10与1的差恰好是9,而任意一个两位数,如13与它的倒置数31的差恰好是9的整倍数。
  于是,如输入2385,用千位减个位所得到的值乘以9后保存到一个临时变量temp中,与此同时将个位与千位组成一个新数,即25,之后再将25加到temp中,最后将temp中的十位加到2385的2上,个位加到5上。于此类似,2385的十位与百位也是同样的操作。
  注明:如果所输入的数的对称两位,如上例中的4位数其个位与千位对称,十位与百位对称,相同则可不做操作而直接进行下一对称的两位;若最高位大于个位则执行减法。

以上就是我的想法,尽管,很显然这个方法根本没什么效率,也不严禁,但我仍想发上来让大家帮忙看看有没有什么缺陷。......

阅读全文(2485) | 评论:0

关于制作简易代码缩排程序的失败总结(2008-03-06 18:31:00)

摘要: 对于编写这个缩排程序的初衷是想借此程序来锻炼自己的能力,于是在上学期末我便做了一些大体上的分析。因为期末考试原因具体的一些分析是在放假时进行的。(07年1月29开始编写,08年2月初结束编写) 虽然在我一开始做大体的分析时就已觉得这个东西不简单,但当我开始正式的开始编写时发现难度对我来说很大,远超出我的意料。虽然现在已编写出了一个雏形,但最后还是因为一些原因而不得不放弃编写。 现在的这个雏形已经能将代码:       # include         <   stdio.h    >                          int      main(){    int a=0;    if(a==0){                  printf("%d\n adfa sdfe e\\",a); for (int i=0;                       i<=10;i++){i++;if ()dkf;df;} }    printf("this is test file\n ");  //sdfadsfas asdf jdh<<=78;       ......

阅读全文(2366) | 评论:1

第一次看到时就让我脊背冒冷汗的问题(2008-03-01 09:48:00)

摘要:这是<C和指针>书中一个题,第一次看见时我直接傻眼了,后来又看了<c专家编程>中有关声明一张的内容后才慢慢的知道如何去解释他们了.
P.S: <c专家编程>和<C和指针>确实是好书! 感兴趣的朋友也可以看看 下面显示一列声明
a. int abc();
b. int abc[3];
c. int **abc();
d. int (*abc)();
e. int (*abc)[6];
f. int *abc();
g. int **(*abc[6])();
h. int **abc[6];
i. int *(*abc)[6];
j. int *(*abc())();
k. int (**(*abc))();
l. int (*(*abc)())[6];
m. int *(*(*(*abc)())[6])(); 从下面的列表中挑出与上面各个声明匹配的最佳描述
I int型指针(指向int的指针)
II int型指针的指针
III int型数组
IV 指向"int型数组"的指针
V int型指针数组
VI 指向int型指针数组的指针
VII int型指针的指针数组
VIII 返回值为int的函数
IX 返回值为int型指针的函数
X 返回值为int型指针的指针的函数
XI 返回值为int的函数指针
XII 返回值为int型指针的函数指针
XIII 返回值为int型指针的指针的函数指针
XIV 返回值为int型的函数指针的数组
XV 指向"返回值为int型指针的函数"的指针的数组
XVI 指向"返回值为int型指针的指针的函数"的指针数组
XVII 返回值为"返回值为int型的函数指针"的函数
XVIII 返回值为"返回值为int型的函数的指针的指针"的函数
XIX 返回值为"返回值为int型指针的函数指针"的函数
XX 返回值为"返回值为int型的函数指针"的函数指针
XXI 返回值为"返回值为int型的函数指针的指针"的函数指针
XXII 返回值为"返回值为int型指针的函数指针"的函数指针
XXI......

阅读全文(2584) | 评论:1

图书管理小系统之总结(2008-03-01 09:40:00)

摘要: 图书管理程序是我做的第一个应用型的小程序,虽然网上类似的程序多如牛毛,但除了局部借鉴之外其余均是独立完成的。 图书管理程序有浏览、添加、查找、删除、编辑这5个功能,同时还能够保存所输入的数据。在编写代码之初我曾是从底向上一个功能一个功能进行程序框架构思的,但不久我就发现只能是局部满足整体而不能是整体满足全局,如果以各个功能为出发点,那么在最后进行所有功能整合时就会很麻烦,理解了这些后我便改变的出发点,也就是改为从上至下。现在想来这个问题也说明了自私到最后会很麻烦的。 虽然功能很简单,但在编写的过程中我仍遇到了不少的问题,上面说的那个框架的构思也算是一个,有局部技术上的问题也有整体规划上的问题。对于技术上所遇到的问题,有一些是因为对语言中的某一块理解的不够所导致的,而有一些则是理解错误所造成的,当然也有一些是实在不会的,至于是在不会的只能求教论坛了,例如这次我就遇到了一个需要用到二级指针的问题;至于整体规划上的问题主要体现在函数与变量的命名上,起初当这个程序的代码行数还不是很多时我对函数与变量的命名都是随便的,但当行数上百之后对于某些变量或函数我就忘记了它是用来干什么的了,面对那些名字有时我头都晕了,有那么一两次甚至要将所有代码从头看一遍才能得到答案。几次之后我便停止了编写而去彻底的重新规范所变量与函数的名字,的确,磨刀不误砍柴工,无规矩不成方圆。同时我对一个软件工程师作出的决定的重要性也有了些大概的了解,他们的视野不局限于技术,而是全局,因为他们的一个方向上的决定将会直接影响到最后的结果。 在这次的编写中我收获不少,同时也要感谢给予我帮助的网友,对于这些收获我都选择性的记在了一个专门的本子上。虽然这个程序并没有什么了不起,真的没什么了不起,就像学物理的应当知道质能方程一样,但我想即便是为这“第一次”的程序也是有必要写一个总结来做纪念,那怕是简短的总结。 ......

阅读全文(2171) | 评论:0