| HSR |
| Room "Program language C++" |
#include <stdio.h>
void main(void){
printf("Hello,world!");
}
と書いてください。これを「print.cpp」という名前でセーブしたら、御自分のコンパイラでコンパイル(プログラム言語で書かれたファイルから実行可能ファイルを作成する)してください。コンパイルの方法は……大方「bcc32 print.cpp」(BorlandC++Compiler)や「gcc print.cpp」(UNIX)などでしょう。拡張子cppは「C plus plus」の意で、C++のファイルであることを示しています。ここではC++を説明しますのでどうでも良いことなんですが、仮にC言語のコンパイラ(つまり、拡張されたC++の機能は使えない)で作業を強いられたときには「*.c」と、拡張子をcにします。void main(void){
int i;
i=10;
}
と書くことで、整数変数iに値10を代入することになります。細かく説明しますと、まずvoid main(void){}は前述の通り。#include <stdio.h>
void main(void){
int i;
i=10;
printf("%d",i);/* iの中身(10)を表示 */
}
というように変えてみます。#include <stdio.h>
void main(void){// 仮にこれでコンパイルできるものと仮定する
i=10;
j=5;// iのつもりで書いてしまっている
printf("%d",i);
}
の結果は「10」となります。これは不本意なので、宣言というものが多くの言語に導入されました。変数宣言のない、FORTLANという言語でプログラムを組まれた金星探査機が変数記述の誤りによって制御不能に陥り大損をしたという逸話があります。それ程に変数宣言は重要なのです。#include <stdio.h>
void main(void){
int i;// 整数変数iを用意した
i=10;
j=5;// iのつもりで書いてしまっている
printf("%d",i);
}
これをコンパイルすると「Undefined symbol 'j' in function main()」や「未定義のシンボル j(関数 main() )」などというように弾かれます。そこで「あ、間違えた」と分かるのです。#include <stdio.h>
void main(void){
float test;// 小数変数testを用意した
test=10.1;
printf("%f",test);
}
というようにして用います。私の環境で結果は、#include <stdio.h>
void main(void){
float test;// 小数変数testを用意した
test=10.1;
printf("%d",test);// ここの%dに注意
}
と書いた場合には正しい表示が保証されません。intやfloatを変数の「型」と言いますが、この変数の型がprintf();での指定に一致していないといけないのです。#include <stdio.h>
void main(void){
int i;// 整数変数iを用意した
i=10;
printf("%f",i);// ここの%fに注意
}
と書いてもいけません。
長くなりましたが、今回は以上で締めたいと思います。お疲れ様でした。#include <stdio.h>
void main(void){
int i;// 整数変数iを用意した
i=10;
printf("%d",i);
}
となりますが、実は、#include <stdio.h>
void main(void){int i;i=10;printf("%d",i);}
でも全く同じことです。#include <stdio.h>
void main( void )
{
int i;
i = 10;
printf("%d" , i );
}
も同じことです。#include <stdio.h> void main(void){
int i;
i=10;
printf("%d",i);
}
というように#include <stdio.h>の後に続けて書き込むことは出来ません。改行を挟んで書かないといけないのです。#include <stdio.h>
void main(void){
int a=4,b=6,c=10,d=2,e; // 実は変数宣言時に代入が可能
e=a+b*c/d;
printf("%d",e); // eの値を表示
}
の結果はどうなるかという問題です。50でしょうか、34でしょうか。c(++)においては普通の算数と同じで34です。加算を先に行いたい場合は、e=(a+b)*c/d;としてください。この結果は50になります。括弧を重ねて使うような場合、算数だと中括弧、大括弧などを用いますが、c(++)では通常の括弧しか使わず、f=(a+(b-c)/d)*e;というようになります。括弧はいくつ重ねようともこのスタイルです。余談ですが、この「重ねる」ということを一般的にネストするといいます。括弧に限らない話で登場する用語なので知っておくと便利ですよ。#include <stdio.h>
void main(void){
int a,n;
n=1; // nを初期化
a=++n; // 前置演算で代入
printf("<%d>",a);
n=1; // 再度 n を初期化
a=n++; // 後置演算で代入
printf("<%d>",a);
}
この結果は、#include <stdio.h>
int f(int x){
return x-1;
}
void main(void){
int a;
a=f(10);
printf("%d",a);
}
これは説明が必要ですね。#include <stdio.h>
int f(int x,int y,int z){
int a=1;
printf("This is function f\n"); // \n は改行を示す
return x*y+z-a; // ここで関数が終わるので下の行は無視される
printf("After return");
}
float g(float x,float y,float z){
int a=3;
printf("This is function g\n");
return x+y/z-a;
}
void main(void){
printf("%d,%f",f(10,9,1),g(1.2,3.5,2.1));
}
さあ、いよいよ複雑になってきました。関数 f() に続いて関数 g() を定義しています。g() は引数、返り値共に float になっていますね。ここで気をつけるべきことは、f()、g() ともに変数 a,x,y,z を持っているということです。変数の名前が有効なのはそれが宣言された関数内のみですので、両者の a,x,y,z は全くの別物なのです。#include <stdio.h>
int f(void){
return 8;
}
void main(void){
printf("%d",f());
}
実に芸のない例ですが、f() は引数を持たない関数です。当然の如く結果は、#include <stdio.h>
void f(int x){
printf("%d",x);
return; // 返り値はないので return のあとには何も書かない
}
void main(void){
f(2);
}
またまた無芸な例で済みません。結果が