C言語やってみる

| コメント(16) | トラックバック(0)
C言語をやってみる。
はるか昔に購入した以下の本の中で書いてみたくなったことや
気になったところを書いていく予定。

猫でもわかるC言語プログラミング (猫でもわかるプログラミングシリーズ)
粂井 康孝
ソフトバンククリエイティブ
売り上げランキング: 96052
おすすめ度の平均: 4.0
3 悪いわけではありませんが
5 猫の好きな私に向いた入門書
5 困ったもんだ
3 手前のレビュアー達の書く通り
4 猫でもわかるかな?
基本的なところから。

エスケープシーケンス

エスケープシーケンス 意味
\n 改行(New line)
\t タブ(horizontal Tab)
\b バックスペース(Backspace)
\r キャリッジリターン(carrige Return)
\f ページフィールド(Form feed)
\' シングルクォーテーション(single quotation mark)
\" ダブルクォーテーション(double quotation mark)
\0 ヌル文字(null)
\\ 円記号(¥)
\? クエスチョンマーク(?)
\a ベル音(Alert)
\xhh 16進拡張(heXadecimal)
\ooo 8進拡張(octal)


エスケープシーケンスを使った例(\t)


/* escape.c */

#include 

int main() {
  printf("商品名\t定価\t個数\t小計\n");
  printf("-----------------------------------------\n");
  printf("テレビ\t20,000\t1\t20,000\n");
  printf("ラジオ\t5,000\t2\t10,000\n");
  printf("本\t1,000\t12\t12,000\n");
  printf("-----------------------------------------\n");
  printf("合計\t\t\t42,000\n");
  return 0;
}


実行結果


商品名  定価    個数    小計
-----------------------------------------
テレビ  20,000  1       20,000
ラジオ  5,000   2       10,000
本      1,000   12      12,000
-----------------------------------------
合計                    42,000


エスケープシーケンスを使った例(\b)


/* backspace.c */

#include 

int main() {
  printf( "abcdefg" );
  printf( "\b" );
  printf( "hijklmn" );
  printf( "\bopqrstuvwxyz\n" );
  return 0;
}


実行結果


abcdefhijklmopqrstuvwxyz


予約語

  • auto
  • break
  • case
  • char
  • const
  • continue
  • default
  • do
  • double
  • else
  • enum
  • extern
  • float
  • for
  • goto
  • if
  • int
  • long
  • register
  • return
  • short
  • signed
  • sizeof
  • static
  • struct
  • switch
  • typedef
  • union
  • unsigned
  • void
  • volatile
  • while

変数定義と表示

#include 

int main() {
  double a = 0.5, b = 10.5;
  int c = 215, d;
  char e = 'A';

  printf( "%f + %f = %f\n", a, b, a + b );
  d = c + 11;
  printf( "cの値は%dでこれに11を加えると%dとなります。\n", c, d );
  printf( "eには\"%c\"がだいにゅうされています。\n", e );
  return 0;

}


実行結果


0.500000 + 10.500000 = 11.000000
cの値は215でこれに11を加えると226となります。
eには"A"がだいにゅうされています。


書式指定フィールド

%fや%dは書式指定フィールドと呼ばれ以下のような指定ができる。

%[flags][width].[precision]{typeのプレフィックス}type

%とtype以外は省略が可能。

詳しい指定方法はこちら


式の評価順序

j = 2 + 3;
この場合は「2 + 3」が先に評価される。
では「2 + 3」ではどちらが先に評価されるのかはC言語では定義されていないらしい。
コンパイラによって異なるらしい。

データ型と計算


// op02.c

#include 

int main() {
  int a = 10, b = 3;
  double c;
  c = a / b;
  printf( "%d ÷ %d = %f\n", a, b, c );
  return 0;
}
10 ÷ 3 = 3.000000


C言語では同じ型どうしの演算を行うと結果はもとの型と同じになる。


// op03.c

#include 

int main() {
  int a;
  double b;
  a = 10;
  b = 2.35;

  printf( "%d + %f = %f\n", a, b, a + b );
  return 0;
}
10 + 2.350000 = 12.35000


C言語では異なる型どうしの計算を行うと大きい型に合わせられるこれを格上げ(promote)という。

代入を行うと、値は代入先の型に合わせられる。
その時切捨てが起こるのか切り上げが起こるのかはコンパイラの仕様次第・・・。

sizeof演算子
sizeof 式
sizeof(型の名前) 式や型のサイズ(バイト)を調べることができる。
sizeof演算子の返す型は、コンパイラによってまちまちなのでsizeof演算子の返す型はsize_t型と決められた。
※sizeof 式 とした場合は式は評価されない。 sizeof ++a; としてもaの値は評価されないので増えない。
/* sizeof01.c */

#include 

int main() {
  char c = 'A';
  short s = 50;
  int i = -100;
  unsigned int ui = 128;
  float f = 0.5f;
  double d = 2568.2;
  long double ld = 1.258E-25;
  size_t sz;

  sz = sizeof c;
  printf("size of char = %d バイト\n", sz);
  sz = sizeof s;
  printf("size of short = %d バイト\n", sz);
  sz = sizeof i;
  printf("size of int = %d バイト\n", sz);
  sz = sizeof ui;
  printf("size of unsigned int = %d バイト\n", sz);
  sz = sizeof f;
  printf("size of float = %d バイト\n", sz);
  sz = sizeof d;
  printf("size of double = %d バイト\n", sz);
  sz = sizeof ld;
  printf("size of long double = %d バイト\n", sz);
  sz = sizeof(size_t);
  printf("size of size_t = %d バイト\n", sz);

  return 0;
}
size of char = 1 バイト
size of short = 2 バイト
size of int = 4 バイト
size of unsigned int = 4 バイト
size of float = 4 バイト
size of double = 8 バイト
size of long double = 12 バイト
size of size_t = 4 バイト


scanf関数
標準入力から整形済みデータを読み込みます。

数値型 変数;scanf( "変換指定子", &変数 );
/* scan01.c */

#include 

int main() {
  int seisu;
  printf( "整数値を入力してください------" );
  scanf( "%d", &seisu );
  printf( "あなたの入力した数値は%dですね\n", seisu );
  return 0;
}
整数値を入力してください------123
あなたの入力した数値は123ですね
変換指定子 入力
%c 文字入力
%d 10進整数
%f float型浮動小数点数
%lf double型浮動小数点数
%s 文字列
%p ポインタ
%o 8進入力
%x 16進入力
%u 符号なし10進整数


入力した値を使って条件分岐の例
/* nyujoryo.c */

#include 

int main() {
  int age;

  printf( "年齢を入力してください---" );
  scanf( "%d", &age );

  if( age < 6 ) {
    printf( "無料です。\n" );
  }

  if( age >= 6 ) {
    printf( "有料です。\n" );
  }

  return 0;
}
$ ./a.out 
年齢を入力してください---5
無料です。
$ ./a.out 
年齢を入力してください---6
有料です。

トラックバック(0)

トラックバックURL: http://www.mogumagu.com/mt/mt-tb.cgi/5

コメント(16)

You made some decent points there. I looked on the internet for the issue and found most individuals will go along with with your website.

Aw, this was a really nice post. In idea I would like to put in writing like this additionally ? taking time and actual effort to make a very good article… but what can I say… I procrastinate alot and by no means seem to get something done.

Generally I don't learn post on blogs, however I would like to say that this write-up very forced me to check out and do so! Your writing style has been surprised me. Thanks, very nice article.

What’s Happening i am new to this, I stumbled upon this I have discovered It positively helpful and it has aided me out loads. I am hoping to contribute & aid other customers like its aided me. Good job.

I am very happy to read this. This is the type of manual that needs to be given and not the accidental misinformation that is at the other blogs. Appreciate your sharing this best doc.

Thanks for the good writeup. It in reality was a enjoyment account it. Look complicated to far introduced agreeable from you! By the way, how could we keep in touch?

Hiya there admin, I just desired to firmly place a brief mention to actually proclaim that I enjoyed your particular story. Thanks!

Thanks for the auspicious writeup. It if truth be told used to be a enjoyment account it. Look advanced to far brought agreeable from you! By the way, how can we communicate?

Hey, you used to write magnificent, but the last several posts have been kinda boring… I miss your super writings. Past several posts are just a bit out of track! come on!

I am continuously invstigating online for articles that can benefit me. Thank you!

I would like to thank you for the efforts you have put in writing this site. I'm hoping the same high-grade blog post from you in the upcoming as well. Actually your creative writing skills has inspired me to get my own site now. Really the blogging is spreading its wings fast. Your write up is a great example of it.

Thank you a lot for sharing this with all people you actually realize what you are speaking about! Bookmarked. Kindly additionally visit my web site =). We may have a link change arrangement between us!

I would like to thnkx for the efforts you've put in writing this blog. I am hoping the same high-grade website post from you in the upcoming also. In fact your creative writing skills has inspired me to get my own website now. Really the blogging is spreading its wings rapidly. Your write up is a great example of it.

She alone makes our time periods, years and fortune, and she alone, by her movement about the Sunshine, confirms the sofas and mansions of the planetary powers.

I was just seeking this information for a while. After 6 hours of continuous Googleing, at last I got it in your website. I wonder what's the lack of Google strategy that do not rank this type of informative web sites in top of the list. Normally the top websites are full of garbage.

hey there and thanks to your information ? I’ve definitely picked up something new from right here. I did however expertise some technical points the usage of this site, since I skilled to reload the website a lot of instances prior to I may get it to load properly. I had been wondering if your web hosting is OK? No longer that I am complaining, however sluggish loading cases times will sometimes affect your placement in google and could damage your high quality score if advertising and ***********|advertising|advertising|advertising and *********** with Adwords. Well I am including this RSS to my e-mail and can look out for much more of your respective intriguing content. Make sure you update this again soon..

2012年1月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

ウェブページ

このブログ記事について

このページは、モグマグが2010年3月19日 23:59に書いたブログ記事です。

ひとつ前のブログ記事は「Common Lisp をWindowsにインストールしてみた」です。

次のブログ記事は「Firefox3.6にしたら・・・。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 5.01