読者です 読者をやめる 読者になる 読者になる

Perlがくしゅう帳(Rubyも)

プログラミングの勉強会の参加記録や学んだことなど。 twitter ID : @tomcha_で活動しています。 最近は主にPerl関連の勉強会やコミュニティに参加しています。移転前のブログはこちら->http://ruby.doorblog.jp/

プログラミング言語C K&R著の演習問題を解答していく その1

昔、N88-Basicを写経して遊んだ後、チャレンジしたけれど関数とか用語で挫折したC言語に大人になってからのリベンジ。
C言語のバイブルと言われる、K&Rの「プログラミング言語C」を第一章から読み進めて演習問題を記録していく。

プログラミング言語C 第2版 ANSI規格準拠

プログラミング言語C 第2版 ANSI規格準拠

第1章

  • 1-1
#include <stdio.h>    
int main(){  
  printf("Hello,world!\n"):  
}

;を;に変えてコンパイル

1-1.c:4:27: error: expected ';' after expression
  printf("Hello,world!\n"):
                          ^
                          ;
  • 1-2
int main(){
  printf("hello,world\x");
}
1-2.c:4:22: error: \x used with no following hex digits
  printf("hello,world\x");
                     ^~
1 error generated.
  • 1-3
int main(){
  float fahr, selsius;
  int lower, upper, step;

  lower = 0;
  upper = 300;
  step = 20;

  fahr = lower;
  printf("fahr-selsius conversion table\n");
  while(fahr <= upper){
    printf("%3.0f %6.1f\n", fahr, ((5.0/9.0) * (fahr - 32.0)));
    fahr += step;
  }
}
  • 1-4
int main(){
  float selsius;
  int lower, upper, step;

  lower = 0;
  upper = 300;
  step = 20;

  selsius = lower;
  while(selsius <= upper){
    printf("%3.0f %6.1f\n", selsius, ((9.0/5.0) * selsius + 32.0));
    selsius += step;
  }
}
  • 1-5
int main(){
  float fahr;
  for(fahr = 300; fahr >= 0; fahr = fahr - 20){
    printf("%3.0f %6.1f\n", fahr, ((5.0 / 9.0) * (fahr - 32.0)));
  }
}
  • 1-6
int main(){
  int c;
  printf("%d",(c = getchar()) != EOF);
}
  • 1-7
int main(){
  printf("%d", EOF);
}
  • 1-8
int main(){
  int ns, nt, nnl;
  int c;
  ns = nt = nnl = 0;
  while((c = getchar()) != EOF){
    //getchar()はエンターが入力される度実行される。
    if(c == ' '){
      ++ns;
    }else if(c == '\t'){
      ++nt;
    }else if(c == '\n'){
      ++nnl;
    }else{
    }
  }
  printf("space => %d, tab => %d, newline => %d\n",ns, nt, nnl);
}
  • 1-9
int main(){
  int c;
  while((c = getchar()) != EOF){
    if(c == ' '){
      while(c == ' '){
        c = getchar();
      }
      putchar(' ');
    }
    putchar(c);
  }
}