《C程序设计语言》习题解 <三>

T1.15,重新编写1.2节中的温度转换程序,使用函数实现温度转换。

#include<stdio.h>
 
int fahrToCel(int fahr)
{
  return 5 * (fahr - 32) / 9;
}
 
int main()
{
  int fahr, cel;
  int lower, upper, step;
  lower = 0;
  upper = 300;
  step = 20;
 
  fahr = lower;
  while (fahr < upper) {
      cel = fahrToCel(fahr);
      printf("%d\t%d\n", fahr, cel);
      fahr += step;
  }
  return 0;
}

T1.16,修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多的打印文本。

#include<stdio.h>
#define MAXLEN 1000
 
int getLine(char *s);
void copy(char *to, char *from);
 
int main()
{
  int len, maxLen;
  char line[MAXLEN], maxLine[MAXLEN];
  maxLen = 0;
  while((len = getLine(line)) != 0) {
      printf("%d %s\n", len, line);
      if(len > maxLen) {
          copy(maxLine, line);
          maxLen = len;
      }
  }
  if(maxLen > 0) printf("%s\n", maxLine);
  return 0;
}
 
int getLine(char *s)
{
  int i = 0;
  while((s[i] = getchar()) != '\n') i++;
  s[i] = '\0';
  return i;
}
 
void copy(char *to, char *from)
{
  int i = 0;
  while((to[i] = from[i]) != '\0') i++;
}

T1.17,编写一个程序,打印长度大于80个字符的所有输入行。

#include<stdio.h>
#define MAXLEN 1000
 
int getLine(char *s);
 
int main()
{
  int len;
  char line[MAXLEN];
  while((len = getLine(line)) != 0)
    if(len > 80) printf("%s\n",line);
  return 0;
}
 
int getLine(char *s)
{
  int i = 0;
  while((s[i] = getchar()) != '\n') i++;
  s[i] = '\0';
  return i;
}

T1.18,编写一个程序,删除每个输入行末尾的空格和制表符,并删除完全是空格的行。

#include<stdio.h>
#include<string.h>
#define MAXLEN 1000
 
int getLine(char *s);
int cut(char *s);
 
int main()
{
  int len;
  char line[MAXLEN];
  while((len = getLine(line)) != 0) {
      if(cut(line) > 0)
        printf("%s\n", line);
  }
  return 0;
}
 
int getLine(char *s)
{
  int i = 0;
  while((s[i] = getchar()) != '\n') i++;
  s[i] = '\0';
  return i;
}
 
int cut(char *s)
{
  int i, len = strlen(s);
  i = len - 1;
  while(i >= 0 && (s[i] == ' ' || s[i] == '\t')) --i;
  s[++i] = '\0';
  return i;
}

T1.19,编写reverse(s)函数,将字符串s中的字符顺序颠倒过来。使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序。

#include<stdio.h>
#define MAXLEN 1000
#define swap(a,b) {int c = a; a = b; b = c;}
 
int getLine(char *s);
void reverse(char *s, int len);
 
int main()
{
  int len;
  char line[MAXLEN];
  while((len = getLine(line)) != 0) {
      reverse(line, len);
      printf("%s\n", line);
  }
  return 0;
}
 
int getLine(char *s)
{
  int i = 0;
  while((s[i] = getchar()) != '\n') i++;
  s[i] = '\0';
  return i;
}
 
void reverse(char *s, int len)
{
  int i = 0, j = len - 1;
  while(i < j) {
      swap(s[i], s[j]);
      ++i;
      --j;
  }
}

该死的至诚学院12点就断网了......

» 本博客采用署名 2.5 中国大陆许可协议进行许可,本文版权归作者所有,欢迎转载,但必须在明显位置给出原文连接。
anyShare分享到:
  1. 偶做的 T.1.18 的解和你的感觉完全不一样呢,你应该对 C 已经相当了解了吧

    唔~~如果这样做呢(实话说,else if 有点奇怪

    //
    // main.c
    // 1.5_spece_instead_of
    //
    // Created by Cirno MainasuK on 2014-10-3.
    // Copyright (c) 2014年 Cirno MainasuK. All rights reserved.
    //

    #include

    main()
    {
    int c, nSpace;

    nSpace = 0;
    while ((c = getchar()) != EOF) {
    if (c == ' ') {
    ++nSpace;
    } else if((nSpace > 0) && (c != ' ')) {
    printf(" ");
    putchar(c);
    nSpace = 0;
    } else {
    putchar(c);

    }

    }
    }

    • 呃,格式丢了不好看啊~

      //
      // main.c
      // 1.5_spece_instead_of
      //
      // Created by Cirno MainasuK on 2014-10-3.
      // Copyright (c) 2014年 Cirno MainasuK. All rights reserved.
      //

      #include

      main()
      {
      int c, nSpace;

      nSpace = 0;
      while ((c = getchar()) != EOF) {
      if (c == ' ') {
      ++nSpace;
      } else if((nSpace > 0) && (c != ' ')) {
      printf(" ");
      putchar(c);
      nSpace = 0;
      } else {
      putchar(c);

      }

      }
      }

      • code 标签也拯救不了它,呃,就这样吧

      • 你的答案视乎不对,题目我记得没有要求删除行首的空格什么的,你的代码对制表符也没有处理。我个人认为,首先应该把思路整理出来,一个是对“行”处理,所以我的代码里面专门写了一个函数来读入整行。第二个是,只处理行末。
        我上面的代码是我2011年写的,好久远了,代码里面有些不规范,比如缩进(我也不提倡你那种缩进)。你的main函数没有修饰符也是不规范的。
        我做事总是有头无尾,所以那个题解写了一点就没有继续写了。

        • 现在能理解为什么用函数了,这本书是我的第一本教材,看的好累,习题也基本跳掉了,感觉 C 语言的科学与艺术更适合新手,嘛,我就是新手啦。

          上面那段代码原本有缩进,贴出来就全丢了,大概是 tab 不支持吧。

          一个学期就这样过去了,感觉自己水平还差好远,

          • 其实两本书都不错,程序设计这种东西就是要多写才行!你可以去OJ上去多练练,基本功都是练出来的!

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>