首页 百科知识 综合运用()_C语言入门

综合运用()_C语言入门

时间:2021-09-15 百科知识 联系我们

综合运用()_C语言入门

关于C语言的语法知识我们算是说得差不多了,本来打算开始说win32编程的,不过今天和朋友谈起是不是要开始讲win32编程,他的意见是继续说C语言,讲一些实际的程序,一些综合应用。

      相信如果有接触过C++的人都一定知道,如今的STL已经例如C++的一部分,当然对我们来说,现在还是不熟悉这是个什么东西,既然这是C++的部分,而我们又不打算说他,这是为什么呢?好吧,弯子不绕,我们直奔主题吧。

       相信现在每个人都有一部手机,而且相信手机里面的通信录里面储存了不少的联系人,都储存有名字和电话号码,还可以无限的添加联系人可以直到内存满为止,那这是怎么个原理呢?好吧,我们今天就来探索这个通讯录原理。

       说到通讯录,我想大家马上想到我们前些天说的struct。

----------------------------------------

truct TelPhone{

      char   name[20];

      char   TelNumber[20];

};

----------------------------------------

     嗯,这里似乎有些奇怪,我们为什么把电话号码声明为char类型呢,我们电话号码最少是11位,如果我们设定为int 或者long的话,都无法满足,所以我们只能用字符数组来表示。

-------------------------------------

#include <stdlib.h>
#include <stdio.h>

struct TelPhone{
      char name[20];
      char TelNumber[20];
};

int main()
{
       TelPhone Book;
       puts("请输入联系人姓名:");
       gets(Book.name);
       puts("请输入联系人电话号码:");
       gets(Book.TelNumber);
       printf("%s:%s\n",Book.name,Book.TelNumber);
       system("PAUSE");
       return 0;
}
(www.guayunfan.com)

----------------------------------

       运行试一下,好像能够满足我们的要求,不过好像只能储存一个联系人啊,怎么办呢?没关系,我们可以定义一个数组嘛:

----------------------------------

TelPhone Book[500];

-----------------------------------

       我们让他储存500个联系不就好了吗?嗯,这个办法似乎好像不错,不过,说句真心话,我手机里面联系人至今也就200条,所以,我想说,这500条是不是有点浪费内存了呢?当然话不能这么说,像很多人的手机里面联系人可能比500条还要多,那么对他来说这岂不是一个很大的缺陷吗?原本他们都很喜欢这款手机,但奈何联系人这方面让他们不得不放弃这款手机,这款手机岂不是一个失败的产品吗?

       是啊,那怎么解决这个问题呢?动态分配吗?我们在使用的时候还要预先按照自己的需求分配一些内存吗?嗯,这好像不错,我们先来看看。

-----------------------------

#include <stdlib.h>
#include <stdio.h>

struct TelPhone{
        char name[20];
        char TelNumber[20];
};

int main()
{
         TelPhone *Book;
         int n;
         puts("请问先生打算储存多少条联系人信息?");
         scanf("%d",&n);
         Book = (TelPhone*)malloc(n*sizeof(TelPhone));
         for(int i=0;i<n;i++)
         {
                 puts("请输入联系人姓名:");
                 scanf("%s",Book[i].name);
                 puts("请输入联系人电话号码:");
                 scanf("%s",Book[i].TelNumber);
          }
          for(int i=0;i<n;i++)
                    printf("%s:%s\n",Book[i].name,Book[i].TelNumber);
         system("PAUSE");
         return 0;
}

---------------------------------

     现在我们来看下运行情况:

 嗯,这哪里有些不对劲呢?太不对劲了,如果我们要添加联系人信息这么复杂的话,这手机不买也罢。我们现在想要的是随意的添加,随意的删除联系人,这个问题留给大家去考虑吧,明天我们再来揭晓这个实现,如果大家想要学习泛型,学习抽象对象,这是一个很好的锻炼机会,也算是为C++打一个基础。