标题: 求助:c语言编程题
性别:未知-离线 lazyman

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 2
帖子 243
编号 51305
注册 2005-10-17


发表于 2007-1-13 10:10 资料 主页 短消息 看全部作者
第一题可以用 log(); (求对数值) abs();(求绝对值)搞定


第二题可以用qsort(),把源Array重整。而且重整以后还可以使用bsearch()来搜索。
/*man qsort*/

QUOTE:
      #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>
       #include <string.h>
       #include <assert.h>

       static int
       cmpstringp(const void *p1, const void *p2)
       {
           /* The arguments to this function are "pointers to
              pointers to char", but strcmp() arguments are "pointers
              to char", hence the following cast plus dereference */

           return strcmp(* (char **) p1, * (char **) p2);
       }

       int
       main(int argc, char *argv[])
       {
           int j;

           assert(argc > 1);

           qsort(&argv[1], argc - 1, sizeof(char *), cmpstringp);

           for (j = 1; j < argc; j++)
               puts(argv[j]);
           exit(EXIT_SUCCESS);
       }

/*man bsearch*/

QUOTE:
      #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>

       struct mi {
            int nr;
            char *name;
       } months[] = {
            { 1, "jan" }, { 2, "feb" }, { 3, "mar" }, { 4, "apr" },
            { 5, "may" }, { 6, "jun" }, { 7, "jul" }, { 8, "aug" },
            { 9, "sep" }, {10, "oct" }, {11, "nov" }, {12, "dec" }
       };

       #define nr_of_months (sizeof(months)/sizeof(months[0]))

       static int compmi(const void *m1, const void *m2) {
            struct mi *mi1 = (struct mi *) m1;
            struct mi *mi2 = (struct mi *) m2;
            return strcmp(mi1->name, mi2->name);
       }

       int main(int argc, char **argv) {
            int i;

            qsort(months, nr_of_months, sizeof(struct mi), compmi);
            for (i = 1; i < argc; i++) {
                 struct mi key, *res;
                 key.name = argv;
                 res = bsearch(&key, months, nr_of_months,
                            sizeof(struct mi), compmi);
                 if (res == NULL)
                      printf("â%sâ: unknown month\n", argv);
                 else
                      printf("%s: month #%d\n", res->name, res->nr);
            }
            return 0;
       }

刚学新语言的话所有方法都要试都要写,学好了以后就要学会多用Lib(除非你的汇编也很牛)和Copy&Paste

[ 本帖最后由 lazyman 于 2007-1-13 11:00 编辑 ]


顶部
性别:未知-离线 lazyman

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 2
帖子 243
编号 51305
注册 2005-10-17


发表于 2007-1-13 10:10 资料 主页 短消息 看全部作者
第三个最简单~~~照字面的意思来做的话就是

int id[4][4]={ { 1, 0, 0, 0 },{ 0, 1, 0 ,0 },{ 0, 0, 1, 0 },{ 0, 0, 0, 1 }};

能够Pre-define的决不用运算,这是编程的的原则~

QUOTE:
后者 syntax 校对烦死人了,一直被我看成累傻小子的活

公主肯定写得太少了,写多了syntax很少会错的说,而且这么多开发用的工具想错都难。程序员很生气,后果很严重。。。
随便推荐一个我现在正在用的免费开发工具: Windows上的 <Bloodshed Dev-C++> 有syntax Check,而且有自己的服务器可以下在最新的免费library,我个人觉得比Micro$oft的开发包好用,当然最强的还是Linux/Unix的 Kate + gcc/g++ !

[ 本帖最后由 lazyman 于 2007-1-13 11:09 编辑 ]


顶部
性别:未知-离线 lazyman

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 2
帖子 243
编号 51305
注册 2005-10-17


发表于 2007-1-13 20:10 资料 主页 短消息 看全部作者
我主要是喜欢Kate这个写字板。。。作为编程环境来说Unix和Linux的确是最强的。。。写makefile的确是恶梦。。。我讨厌Micro$oft我却要在Windows的环境下编程

PS: Unix这么多Freeware干吗不下一个IDE for Unix呢
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-8-27 02:46
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.011204 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP