/****コピーコンストラクタを生成、オブジェクトを関数に渡す*****/
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
class stringtype{
char *p;
public:
stringtype(char *s);
stringtype(const stringtype &ob);
~stringtype(){
delete []p;}
char *get(){
return p;
}
};
stringtype::stringtype(char *s)
{
int l;
l=strlen(s)+1;//strlen()method
p=new char[l];
if(!p){
cout<<"unable get a memory field"<<endl;
exit(1);
}
strcpy(p,s);//strcpy()method
}
stringtype::stringtype(const stringtype &ob)
{
int l;
l=strlen(ob.p)+1;
p=new char[l];
if(!p){
cout<<"unable get a memory field"<<endl;
exit(1);
}
strcpy(p,ob.p);//文字列をコピーオブジェクトにコピー
}
void show(stringtype x)
{
char *s;
s=x.get();
cout<<s<<endl;
}
int main()
{
stringtype e("see you"),d("good luck");
show(e),show(d);
return 0;
}
//出力結果
see you
good luck
コピーコンストラクタ
/*****プログラム概要******/
/**動的に配列を割り当て、配列オブジェクトを生成しかつ他の配列オブジェクトを初期化するとき、コピーコンストラクタでメモリ割り当てをする***/
#include<iostream>
#include<cstdlib>
using namespace std;
class array{
int *p;
int size;
public:
//通常のコンストラクタ
array(int s){
p=new int[s];
if(!p)
exit(1);
size=s;
cout<<"通常のコンストラクタを使う"<<endl;
}
~array(){
delete []p;}
//copy constructor
array(const array &a);
void set(int i,int j){
if(i>=0 && i<size)
p[i]=j;
}
int get(int i){
return p[i];
}
};
/*このコンストラクタでコピー用にメモリを確保してそのメモリアドレスをpに当てる。pが元のオブジェクトと同等のメモリを参照することはない**/
array::array(const array &a){
int i;
size=a.size;
p=new int[a.size];
if(!p)
exit(1);
for(i=0;i<a.size;i++)
p[i]=a.p[i];
cout<<"コピーコンストラクタを使う"<<endl;
}
int main()
{
array num(10); //通常のコンストラクタを呼び出す
int i;
for(i=0;i<10;i++)
num.set(i,i);
for(i=9;i>=0;i--)
cout<<num.get(i);
puts("");
array x=num; //他の配列を生成して、numで初期化
for(i=0;i<10;i++)
cout<<x.get(i);
puts("");
return 0;
}
コマンドプロンプトへの出力結果
通常のコンストラクタを使う
9876543210
コピーコンストラクタを使う
0123456789
/**動的に配列を割り当て、配列オブジェクトを生成しかつ他の配列オブジェクトを初期化するとき、コピーコンストラクタでメモリ割り当てをする***/
#include<iostream>
#include<cstdlib>
using namespace std;
class array{
int *p;
int size;
public:
//通常のコンストラクタ
array(int s){
p=new int[s];
if(!p)
exit(1);
size=s;
cout<<"通常のコンストラクタを使う"<<endl;
}
~array(){
delete []p;}
//copy constructor
array(const array &a);
void set(int i,int j){
if(i>=0 && i<size)
p[i]=j;
}
int get(int i){
return p[i];
}
};
/*このコンストラクタでコピー用にメモリを確保してそのメモリアドレスをpに当てる。pが元のオブジェクトと同等のメモリを参照することはない**/
array::array(const array &a){
int i;
size=a.size;
p=new int[a.size];
if(!p)
exit(1);
for(i=0;i<a.size;i++)
p[i]=a.p[i];
cout<<"コピーコンストラクタを使う"<<endl;
}
int main()
{
array num(10); //通常のコンストラクタを呼び出す
int i;
for(i=0;i<10;i++)
num.set(i,i);
for(i=9;i>=0;i--)
cout<<num.get(i);
puts("");
array x=num; //他の配列を生成して、numで初期化
for(i=0;i<10;i++)
cout<<x.get(i);
puts("");
return 0;
}
コマンドプロンプトへの出力結果
通常のコンストラクタを使う
9876543210
コピーコンストラクタを使う
0123456789
文字の配列
Cの文字列は、難しいと思う。
文字列型がないので、文字型charを使って、配列にしてやらなければならないようだ。言わば、文字型配列だ。
加えて、2次元配列などはなく、厳密には配列の配列であり、char str[3][ ]は char *str[ ]は同義だ。
したがって、以下は同じ動きをする。
#include<stdio.h>
int main(void)
{
char str[3][ ]={{"asahikawa"},{"sapporo"},{"hakodate"}};
int i;
char *strp[ ]={{"asahikawa"},{"sapporo"},{"hakodate"}};
for(i=0;i<3;i++)
printf("%s\n",str[i]);
puts("");
for(i=0;i<3;i++)
printf("%s\n",strp[i]);
return 0;
}
文字列型がないので、文字型charを使って、配列にしてやらなければならないようだ。言わば、文字型配列だ。
加えて、2次元配列などはなく、厳密には配列の配列であり、char str[3][ ]は char *str[ ]は同義だ。
したがって、以下は同じ動きをする。
#include<stdio.h>
int main(void)
{
char str[3][ ]={{"asahikawa"},{"sapporo"},{"hakodate"}};
int i;
char *strp[ ]={{"asahikawa"},{"sapporo"},{"hakodate"}};
for(i=0;i<3;i++)
printf("%s\n",str[i]);
puts("");
for(i=0;i<3;i++)
printf("%s\n",strp[i]);
return 0;
}
ポインタを纏めてみた
1.ポインタとは
int *pointa→int型を指すポインタ(注意。間接参照演算子は変数pointaを指しているわけではない)
char *pointa→char型を指すポインタ(注意。間接参照演算子は変数pointaを指しているわけではない)
struct any *pointa→struct型を指すポインタ(注意。間接参照演算子は変数pointaを指しているわけではない)
char *pointa→char型を指すポインタ(注意。間接参照演算子は変数pointaを指しているわけではない)
struct any *pointa→struct型を指すポインタ(注意。間接参照演算子は変数pointaを指しているわけではない)
一般に型Tの変数を指すポインタ型の変数pは T *pointaと定義する
- ポインタには型がある。そして、ポインタ型の変数もポインタ型の値もある。
- ポインタ型の値はメモリのアドレスである。
- ポインタ変数が基本型の変数のアドレス(定数)を保持しているとき、ポインタ変数は対象の基本型を指しているという。
- 基本型のアドレスの値を基本型の値という。
まとめ:
・変数に&(アドレス演算子)を適用すると、その変数のアドレスを取得することができる。このアドレスのことをその変数へのポインタという。
・ポインタ変数が別の基本型変数(一般的に)へのポインタを保持しているとき、ポインタ変数が基本型変数を指しているという。
・ポインタに間接参照演算子(*)を適用すると、そのポインタの指している先の値を表示することができる。また、ポインタに他の値を代入すると、指している変数の値を替えることができる。
気を付けるべき点:
ポインタとは、型はどうであれ、すべての基本型変数、派生型のポインタ変数、関数、構造体などその対象が持っているメモリー上の位置すなわち
アドレスの値(定数)のことを意味する。したがって、ポインタ型変数例えば、int *numとint numはそれぞれ別のポインタの値を持つことになる。
変数のポインタの値を調べるときは、printf("%p",&*num); printf("%p",&num);としてやればよい。ポインタ値は定数であって、ポインタ型変数以外に
その値を変えたり、代入したりすることなぞしてはいけない。ポインタ値を自在に扱って役割を果たすのは、ポインタ型変数のみである。
ポインタ演算:(pointa+sizeof(ポインタが示す型) * 増やす増分・減らす減分)
ポインタ型変数にn加算すると、ポインタはそのポインタが指す型のサイズ×nだけ前に進む。p++;
ポインタ型変数にn減算すると、ポインタはそのポインタが指す型のサイズ×nだけ後ろに進む。p--;
2.配列とポインタの密接な関係
配列名はその配列の先頭要素へのポインタ値と解釈される。
int array[10]は&array[0]と同じ型、同じ値となる。
つまり、array==&array[0]であり、恒等式は常に真である。
また、以上は同値 array[i]==*(array+i);
[ 宣言時と数式との違い ]
配列を宣言する時には、[ ]で要素数を指定し、
配列の要素を使う時は、[ ]で番号を指定するのですが、
実は、この2つも全く別の記号です。
宣言時の[ ]は要素数を指定するという意味を持ちますが、
数式の中で使用する[ ] は、アドレスに足し算する演算子です。
C言語では、似た使い方には同じ記号を使いたがる傾向があり、
その為、異なる意味に同じ記号を割り当てている部分が多いようです。
配列を宣言する時には、[ ]で要素数を指定し、
配列の要素を使う時は、[ ]で番号を指定するのですが、
実は、この2つも全く別の記号です。
宣言時の[ ]は要素数を指定するという意味を持ちますが、
数式の中で使用する[ ] は、アドレスに足し算する演算子です。
C言語では、似た使い方には同じ記号を使いたがる傾向があり、
その為、異なる意味に同じ記号を割り当てている部分が多いようです。
例:int array[5]={0,1,2,3,4};
int i;
int *pointa;
//arrayの各要素の値を表示 //arrayの各要素の値をポインタ型変数を使って表示する2例: pointa=&array[0];
for(i=0;i<5;i++) for(pointa=&array[0]; pointa!=&array[5]; pointa++) for(i=0;i<5;i++)
printf("%d",array[i]); printf("%d",*p); printf("%d\n",*(p+i));
pointa=&array[0]; ⇔pointa=array;
故に以下のコードが成り立つ
pointa=array;
for(i=0;i<5;i++)
printf("%d\n",*(pointa+i)); ⇔ printf("%d\n",pointa[i]); ⇔ printf("%d\n",array[i]);
つまり、
*(pointa+i)==pointa[i]==array[i]
式の中では、配列はその先頭要素へのポインタに読み替えられる。
3つ程の例外はあるが、後ろに添え字演算子[ ]が付くかは問題ではない。
pointa[i]は、*(pointa+i)の簡便記法である。
重要な補足:
配列の宣言時の添え字演算子と式の中のそれは違う。
上記の例はあくまでも、式の中での動きである。
また、宣言時の * と式の中での * も同様である。
関数に配列を渡すときは、配列名だけを引数として渡す。
配列を関数に渡すと、渡した先の関数の定義時に配列は、array[ ]から&array[0]にポインタに変換される。
したがって、呼び出し先の関数でポインタ型の変数を最初に定義してやると、いい。また、複数の戻り値を呼び出し元に返すことが出来るのが、
強い利点である。
//通常の配列名を渡すパターン //ポインタとして渡すパターン
#include <stdio.h> #include<stdio.h>
#define GAKUSEISUU 5 #define GAKUSEISUU 5
double average(int array[ ]); double average(int *pointa);
int main_jdjas(void) int main(void)
{ {
int array[GAKUSEISUU]; int array[GAKUSEISUU];
int goukei=0; double heikin;
int i; int i;
double heikin;
puts("5人の点数を入力");
puts("5人分の点数を入力");
for(i=0;i<GAKUSEISUU;i++) for(i=0;i<GAKUSEISUU;i++)
{ {
scanf("%d",&array[i]); scanf("%d",&array[i]);
} }
heikin=average(array); heikin=average(array);
printf("平均=%.1lf 点",heikin); printf(" 平均=%.1lf点",heikin);
printf("平均=%.1lf 点",heikin); printf(" 平均=%.1lf点",heikin);
}
double average_kkesg(int array[ ]) return 0;
{ }
//int array[5];
int goukei=0; double average(int *pointa)
double heikin; {
int i; int goukei=0;
double heikin;
int i;
int i;
for(i=0;i<GAKUSEISUU;i++)
{ for(i=0;i<GAKUSEISUU;i++)
goukei+=array[i]; {
} goukei+=*(pointa+i);
//heikin=(double)goukei/GAKUSEISUU; }
return heikin; return heikin;
} }
2a.文字列リテラルとポインタ
文字列定数"string"は以下の文字型配列arrayと同値である。
char array[]={'g'.'o','o','d','\0'};
したがって、以下のように文字列型へのポインタCpointaを文字列定数で初期化できる。
char *Cpointa="good";
3.関数とポインタ
関数の引数に配列全体を渡すことはできない。ただし、配列の先頭要素のアドレスをポインタとして渡すことはできる。
関数に配列を渡すときは、配列名だけを引数として渡す。
配列を関数の引数として渡したければ、先頭要素へのポインタを渡す。
関数の引数にポインタがある場合、それはポインタとして扱われる。
以下のプロトタイプ宣言は同じ意味である。
int hoge(char array[ ]);==int hoge(char *array);
3a.関数ポインタ
4.構造体とポインタ
pointaが構造体へのポインタのとき、メンバを参照するには、
(*pointa).name;と表記し、ポインタpointaが指している構造体のメンバnameを参照している。
pointa->name; →上記の省略型( -> はアロー演算子)
注意→演算子の優先度から、( )を省略できない。*pointa.nameと書いたら、*(pointa.name)の意味になってしまう。
構造体の実引数も関数に渡すときは、値渡しで関数に渡される。
注意事項として、構造体のメンバが多いときは、逐次その値がコピーして渡されるため、処理に時間がかかる。
注意事項として、構造体のメンバが多いときは、逐次その値がコピーして渡されるため、処理に時間がかかる。
故にポインタを使うことが望まれる。
//構造体を関数の引数として使う例 //右の例をポインタで処理
#include<stdio.h>
//構造体struct Carの宣言
typedef struct Car
{
int plate_num;
double gas;
}Car;
//show 関数の宣言 //構造体へのポインタを引数にもつ関数宣言
void show(Car c); //構造体を引数にもつ関数 void show(Car *pointa);
int main(void)
{
Car car1={0,0.00};
puts("ナンバープレートの番号は?");
scanf("%d",&car1.plate_num);
puts("残存ガソリン量は?");
scanf("%lf",&car1.gas);
//構造体car1へのアドレスを渡す処理
show(car1); //show関数を呼び出し、構造体 car1の値を渡している←ここがミソ show(&car1);
return 0;
}
//show関数の定義
void show(Car c)
{
printf("ナンバープレートの番号は%d:\t残存ガソリン量は%.1lf\n",c.plate_num,c.gas);
}
//構造体を関数の引数として使う例 //右の例をポインタで処理
#include<stdio.h>
//構造体struct Carの宣言
typedef struct Car
{
int plate_num;
double gas;
}Car;
//show 関数の宣言 //構造体へのポインタを引数にもつ関数宣言
void show(Car c); //構造体を引数にもつ関数 void show(Car *pointa);
int main(void)
{
Car car1={0,0.00};
puts("ナンバープレートの番号は?");
scanf("%d",&car1.plate_num);
puts("残存ガソリン量は?");
scanf("%lf",&car1.gas);
//構造体car1へのアドレスを渡す処理
show(car1); //show関数を呼び出し、構造体 car1の値を渡している←ここがミソ show(&car1);
return 0;
}
//show関数の定義
void show(Car c)
{
printf("ナンバープレートの番号は%d:\t残存ガソリン量は%.1lf\n",c.plate_num,c.gas);
}
Cのメモリー割り当て
/**************プログラミング概要*******************/
/**********Cはメモリーをどう使うか**************/
/*アドレスの表示*/
function1のアドレスは'00401150' ⇒関数function1( )のアドレス
function2のアドレスは'0040117A' ⇒関数function2( )のアドレス
文字数リテラルのアドレスは'0040A20E' ⇒文字数リテラル
function1_static_variableのアドレスは'0040C5BC' ⇒関数function1内のstatic変数
function2_static_variableのアドレスは'0040C5C0' ⇒関数function2内のstatic変数
file_static_variable(グローバル変数)のアドレスは'0040C5C8' ⇒ファイル内のstatic変数
global_variable(グローバル変数)のアドレスは'0040C5C4' ⇒グローバル変数
/**********Cはメモリーをどう使うか**************/
/*アドレスの表示*/
function1のアドレスは'00401150' ⇒関数function1( )のアドレス
function2のアドレスは'0040117A' ⇒関数function2( )のアドレス
文字数リテラルのアドレスは'0040A20E' ⇒文字数リテラル
function1_static_variableのアドレスは'0040C5BC' ⇒関数function1内のstatic変数
function2_static_variableのアドレスは'0040C5C0' ⇒関数function2内のstatic変数
file_static_variable(グローバル変数)のアドレスは'0040C5C8' ⇒ファイル内のstatic変数
global_variable(グローバル変数)のアドレスは'0040C5C4' ⇒グローバル変数
mallocのアドレスは'012F2A60' ⇒malloc( )により確保された領域
function1_variableのアドレスは'0012FF44' ⇒function1( )での自動変数
function2_variableのアドレスは'0012FF44' ⇒function2( )での自動変数
#include<stdio.h>
#include<stdlib.h>
int global_variable;
static file_static_variable;
void function1( )
{
int function1_variable;
static int function1_static_variable;
printf("function1_variableのアドレスは%p\n",&function1_variable);
printf("function1_static_variableのアドレスは%p\n",&function1_static_variable);
}
void function2( )
{
int function2_variable;
static int function2_static_variable;
printf("function2_variableのアドレスは%p\n",&function2_variable);
printf("function2_static_variableのアドレスは%p\n",&function2_static_variable);
}
int main_foejls(void)
{
int *p;
//関数へのポインタ表示
printf("function1のアドレスは%p\n",function1);
printf("function2のアドレスは%p\n",function2);
printf("文字数リテラルのアドレスは%p\n","abc");
printf("global_variable(グローバル変数)のアドレスは%p\n",&global_variable);
//ファイル内static変数のアドレス表示
printf("file_static_variable(グローバル変数)のアドレスは%p\n",&file_static_variable);
//ローカル変数の表示
function1( );
function2( );
//mallocにより確保した領域のアドレス
p=malloc(sizeof(int));
printf("mallocのアドレスは%p\n",p);
return 0;
}
function2_variableのアドレスは'0012FF44' ⇒function2( )での自動変数
#include<stdio.h>
#include<stdlib.h>
int global_variable;
static file_static_variable;
void function1( )
{
int function1_variable;
static int function1_static_variable;
printf("function1_variableのアドレスは%p\n",&function1_variable);
printf("function1_static_variableのアドレスは%p\n",&function1_static_variable);
}
void function2( )
{
int function2_variable;
static int function2_static_variable;
printf("function2_variableのアドレスは%p\n",&function2_variable);
printf("function2_static_variableのアドレスは%p\n",&function2_static_variable);
}
int main_foejls(void)
{
int *p;
//関数へのポインタ表示
printf("function1のアドレスは%p\n",function1);
printf("function2のアドレスは%p\n",function2);
printf("文字数リテラルのアドレスは%p\n","abc");
printf("global_variable(グローバル変数)のアドレスは%p\n",&global_variable);
//ファイル内static変数のアドレス表示
printf("file_static_variable(グローバル変数)のアドレスは%p\n",&file_static_variable);
//ローカル変数の表示
function1( );
function2( );
//mallocにより確保した領域のアドレス
p=malloc(sizeof(int));
printf("mallocのアドレスは%p\n",p);
return 0;
}
演算子と型変換
今日はこれをやった。型変換するためのキャストと変数をうまく使い回すための練習。コンパイルが通らないため、いらいらすることが多くなる。
/**************プログラミング概要*******************/
/************int型の変数をdouble型の変数に代入*********************/
#include<stdio.h>
int main_dieiki(void)
{
int int_kata_suuji;
double double_kata_suuji;
int_kata_suuji=160;
printf("身長は%dセンチです\n",int_kata_suuji);
printf("double型の変数に代入します\n");
double_kata_suuji=int_kata_suuji; //int型の変数をdouble型の変数に代入した
printf("身長は%fセンチです\n",double_kata_suuji);
return 0;
}
#include<stdio.h>
int main_daljla(void)
{
int takasa,teihen;
double menseki;
printf("三角形の高さを入力しなさい\n");
scanf("%d",&takasa);
printf("三角形の底辺を入力しなさい\n");
scanf("%d",&teihen);
menseki=(double)(takasa*teihen)/2; //cast演算子を用いて、int型演算を実数型演算に変換
printf("三角形の面積は%fです\n",menseki);
return 0;
}
#include<stdio.h>
int main_dkkjk(void)
{
int kazu=0;
printf("整数を入力してください\n");
scanf("%d",&kazu);
kazu=kazu*-1;
printf("正負を反転すると%dです\n",kazu);
return 0;
}
#include<stdio.h>
int main(void)
{
int kazu_1,kazu_2,kazu_3,kazu_4,kazu_5;
double karinoiremono;
karinoiremono=0-4;
printf("0-4=%d\n",karinoiremono);
karinoiremono=3.14*2;
printf("3.14*2=%.3lf\n",karinoiremono);
karinoiremono=5/3.0;
printf("5/3=%.3lf\n",karinoiremono);
karinoiremono=30%7;
printf("30%7=%lf\n",karinoiremono);
karinoiremono=(7+32)/5;
printf("(7+32)/5=%.1lf\n",karinoiremono);
return 0;
}
#include<stdio.h>
int main_finito(void)
{
int hennonagasa,menseki;
printf("正方形の辺の長さを整数で入力してください\n");
scanf("%d",&hennonagasa);
menseki=hennonagasa*hennonagasa;
printf("正方形の面積は%d\n",menseki);
return 0;
}
#include<stdio.h>
int main(void)
{
int kamoku_1,kamoku_2,kamoku_3,kamoku_4,kamoku_5;//代入されるから、初期化いらない
int goukei=0; //参照する必要があるため、初期化がする必要
double heikin;//goukeiはint型のほうがいい。代入されるから、初期化いらない
printf("科目1の点数を入力してください\n");
scanf("%d",&kamoku_1);
printf("科目2の点数を入力してください\n");
scanf("%d",&kamoku_2);
printf("科目3の点数を入力してください\n");
scanf("%d",&kamoku_3);
printf("科目4の点数を入力してください\n");
scanf("%d",&kamoku_4);
printf("科目5の点数を入力してください\n");
scanf("%d",&kamoku_5);
goukei= kamoku_1+kamoku_2+kamoku_3+kamoku_4+kamoku_5;
printf("5科目の合計点は%d点です\n",goukei);
heikin=(double)goukei/5;
printf("5科目の平均点は%lf.2点です\n",heikin);
return 0;
}
/**************プログラミング概要*******************/
/************double型変数にint型変数を代入(無理がある)*********************/
#include<stdio.h>
int main_ndjk(void)
{
int int_kata_suuji;
double double_kata_suuji;
double_kata_suuji=160.5;
printf("身長は%fセンチです",double_kata_suuji);
printf("int型の変数に代入する\n");
int_kata_suuji=double_kata_suuji; //double型変数にint型変数を代入した
printf("身長は%dセンチです\n",int_kata_suuji);//バイト数が不足し、データが漏れる
return 0;
}
#include<stdio.h>
int main_lkjlkfj(void)
{
int d=2;
double pi=3.14;
printf("直径が%dセンチの円の\n",d);
printf("円周は%fセンチです\n",d*pi); //d*piの解は大きい型のdouble型に変換される
return 0;
}
/**************プログラミング概要*******************/
/*************int型同士の演算には注意が必要********************/
#include<stdio.h>
int main_wed(void)
{
int kazu1,kazu2;
double kotae;
kazu1=5;
kazu2=4;
kotae=kazu1/kazu2; //kazu1/kazu2の演算はint型同士の演算
//kotae=(double)kazu1/kazu2を使えば問題解決
printf("5/4は%.3fです\n",kotae); // kotaeにはInt型の演算結果が代入されている
return 0;
}
/**************プログラミング概要*******************/
/************int型の変数をdouble型の変数に代入*********************/
#include<stdio.h>
int main_dieiki(void)
{
int int_kata_suuji;
double double_kata_suuji;
int_kata_suuji=160;
printf("身長は%dセンチです\n",int_kata_suuji);
printf("double型の変数に代入します\n");
double_kata_suuji=int_kata_suuji; //int型の変数をdouble型の変数に代入した
printf("身長は%fセンチです\n",double_kata_suuji);
return 0;
}
#include<stdio.h>
int main_daljla(void)
{
int takasa,teihen;
double menseki;
printf("三角形の高さを入力しなさい\n");
scanf("%d",&takasa);
printf("三角形の底辺を入力しなさい\n");
scanf("%d",&teihen);
menseki=(double)(takasa*teihen)/2; //cast演算子を用いて、int型演算を実数型演算に変換
printf("三角形の面積は%fです\n",menseki);
return 0;
}
#include<stdio.h>
int main_dkkjk(void)
{
int kazu=0;
printf("整数を入力してください\n");
scanf("%d",&kazu);
kazu=kazu*-1;
printf("正負を反転すると%dです\n",kazu);
return 0;
}
#include<stdio.h>
int main(void)
{
int kazu_1,kazu_2,kazu_3,kazu_4,kazu_5;
double karinoiremono;
karinoiremono=0-4;
printf("0-4=%d\n",karinoiremono);
karinoiremono=3.14*2;
printf("3.14*2=%.3lf\n",karinoiremono);
karinoiremono=5/3.0;
printf("5/3=%.3lf\n",karinoiremono);
karinoiremono=30%7;
printf("30%7=%lf\n",karinoiremono);
karinoiremono=(7+32)/5;
printf("(7+32)/5=%.1lf\n",karinoiremono);
return 0;
}
#include<stdio.h>
int main_finito(void)
{
int hennonagasa,menseki;
printf("正方形の辺の長さを整数で入力してください\n");
scanf("%d",&hennonagasa);
menseki=hennonagasa*hennonagasa;
printf("正方形の面積は%d\n",menseki);
return 0;
}
#include<stdio.h>
int main(void)
{
int kamoku_1,kamoku_2,kamoku_3,kamoku_4,kamoku_5;//代入されるから、初期化いらない
int goukei=0; //参照する必要があるため、初期化がする必要
double heikin;//goukeiはint型のほうがいい。代入されるから、初期化いらない
printf("科目1の点数を入力してください\n");
scanf("%d",&kamoku_1);
printf("科目2の点数を入力してください\n");
scanf("%d",&kamoku_2);
printf("科目3の点数を入力してください\n");
scanf("%d",&kamoku_3);
printf("科目4の点数を入力してください\n");
scanf("%d",&kamoku_4);
printf("科目5の点数を入力してください\n");
scanf("%d",&kamoku_5);
goukei= kamoku_1+kamoku_2+kamoku_3+kamoku_4+kamoku_5;
printf("5科目の合計点は%d点です\n",goukei);
heikin=(double)goukei/5;
printf("5科目の平均点は%lf.2点です\n",heikin);
return 0;
}
/**************プログラミング概要*******************/
/************double型変数にint型変数を代入(無理がある)*********************/
#include<stdio.h>
int main_ndjk(void)
{
int int_kata_suuji;
double double_kata_suuji;
double_kata_suuji=160.5;
printf("身長は%fセンチです",double_kata_suuji);
printf("int型の変数に代入する\n");
int_kata_suuji=double_kata_suuji; //double型変数にint型変数を代入した
printf("身長は%dセンチです\n",int_kata_suuji);//バイト数が不足し、データが漏れる
return 0;
}
#include<stdio.h>
int main_lkjlkfj(void)
{
int d=2;
double pi=3.14;
printf("直径が%dセンチの円の\n",d);
printf("円周は%fセンチです\n",d*pi); //d*piの解は大きい型のdouble型に変換される
return 0;
}
/**************プログラミング概要*******************/
/*************int型同士の演算には注意が必要********************/
#include<stdio.h>
int main_wed(void)
{
int kazu1,kazu2;
double kotae;
kazu1=5;
kazu2=4;
kotae=kazu1/kazu2; //kazu1/kazu2の演算はint型同士の演算
//kotae=(double)kazu1/kazu2を使えば問題解決
printf("5/4は%.3fです\n",kotae); // kotaeにはInt型の演算結果が代入されている
return 0;
}
式と演算(operator,operand)
変数を用意して、四則演算子を使って、加減乗除させる。
それほど、難しくはなさそう。
/**************プログラミング概要*******************/
/*************定数で式と演算********************/
#include<stdio.h>
int main_pooeiik(void)
{
printf("1+2は%dです。\n",1+2);
printf("3×4は%dです。\n",3*4);
return 0;
}
/**************プログラミング概要*******************/
/****************式と演算*****************/
#include<stdio.h>
int main_addlk(void)
{
int suuchi1=2;
int suuchi2=3;
int goukei;
goukei=suuchi1+suuchi2;
printf("変数suuchi1の値は%dです。\n",suuchi1);
printf("変数suuchi2の値は%dです。\n",suuchi2);
printf("suuchi1+suuchi2の合計は%dです。\n",goukei);
suuchi1=suuchi1+1; //ここが重要
printf("変数suuchi1の値に1を足すと%dです。\n",suuchi1);
return 0;
}
/**************プログラミング概要*******************/
/***************2変数で式の演算をする******************/
#include<stdio.h>
int main_nfjjsd(void)
{
int seisuu1,seisuu2;
printf("整数1を入力してください。\n");
scanf("%d",&seisuu1);
printf("整数2を入力してください。\n");
scanf("%d",&seisuu2);
// ,seisuu1+seisuu2がミソ
printf("2つの整数の足し算の結果は%dです。\n",seisuu1+seisuu2);
return 0;
}
/**************プログラミング概要*******************/
/*****************定義して演算****************/
#include<stdio.h>
int main_klkfklj(void)
{
char kubun;
int tanka,suuryou; //2変数を宣言して、最後のprintf文で演算した
//goukei=tanka+suuryou;のやり方もある。
printf("区分を入力してください。\n");
scanf("%c",&kubun);
printf("単価を入力してください。\n");
scanf("%d",&tanka);
printf("数量を入力してください。\n");
scanf("%d",&suuryou);
printf("区分%cで合計は\\%dです。\n",kubun,tanka*suuryou);
return 0;
}
/**************プログラミング概要*******************/
/*********************************/
#include<stdio.h>
int main_ghhhh(void)
{
int kazu1=10;
int kazu2=5;
printf("kazu1とkazu2に色々な演算を行う。\n");
printf("kazu1+kazu2は%dです\n",kazu1+kazu2);
printf("kazu1-kazu2は%dです\n",kazu1-kazu2);
printf("kazu1*kazu2は%dです\n",kazu1*kazu2);
printf("kazu1/kazu2は%dです\n",kazu1/kazu2);
printf("kazu1%%kazu2は%dです\n",kazu1%kazu2);
return 0;
}
/**************プログラミング概要*******************/
/*************5つの変数で演算********************/
int main_irej(void)
{
int suuchi1,suuchi2;
int total1,total2;
int goukei;
printf("数値1を入力してください\n");
scanf("%d",&suuchi1);
printf("数値2を入力してください\n");
scanf("%d",&suuchi2);
goukei=suuchi1+suuchi2; //goukeiに加算の演算結果を格納
printf("数値1と数値2の合計は%dです\n",goukei);
total1=goukei*suuchi2; //goukeiに加算の演算結果を格納
printf("合計にを数値1で乗算した値は%dです\n",total1);
total2=goukei%suuchi2; //goukeiに加算の演算結果を格納
printf("合計を数値2で剰余した値は%dです\n",total2);
return 0;
}
それほど、難しくはなさそう。
/**************プログラミング概要*******************/
/*************定数で式と演算********************/
#include<stdio.h>
int main_pooeiik(void)
{
printf("1+2は%dです。\n",1+2);
printf("3×4は%dです。\n",3*4);
return 0;
}
/**************プログラミング概要*******************/
/****************式と演算*****************/
#include<stdio.h>
int main_addlk(void)
{
int suuchi1=2;
int suuchi2=3;
int goukei;
goukei=suuchi1+suuchi2;
printf("変数suuchi1の値は%dです。\n",suuchi1);
printf("変数suuchi2の値は%dです。\n",suuchi2);
printf("suuchi1+suuchi2の合計は%dです。\n",goukei);
suuchi1=suuchi1+1; //ここが重要
printf("変数suuchi1の値に1を足すと%dです。\n",suuchi1);
return 0;
}
/**************プログラミング概要*******************/
/***************2変数で式の演算をする******************/
#include<stdio.h>
int main_nfjjsd(void)
{
int seisuu1,seisuu2;
printf("整数1を入力してください。\n");
scanf("%d",&seisuu1);
printf("整数2を入力してください。\n");
scanf("%d",&seisuu2);
// ,seisuu1+seisuu2がミソ
printf("2つの整数の足し算の結果は%dです。\n",seisuu1+seisuu2);
return 0;
}
/**************プログラミング概要*******************/
/*****************定義して演算****************/
#include<stdio.h>
int main_klkfklj(void)
{
char kubun;
int tanka,suuryou; //2変数を宣言して、最後のprintf文で演算した
//goukei=tanka+suuryou;のやり方もある。
printf("区分を入力してください。\n");
scanf("%c",&kubun);
printf("単価を入力してください。\n");
scanf("%d",&tanka);
printf("数量を入力してください。\n");
scanf("%d",&suuryou);
printf("区分%cで合計は\\%dです。\n",kubun,tanka*suuryou);
return 0;
}
/**************プログラミング概要*******************/
/*********************************/
#include<stdio.h>
int main_ghhhh(void)
{
int kazu1=10;
int kazu2=5;
printf("kazu1とkazu2に色々な演算を行う。\n");
printf("kazu1+kazu2は%dです\n",kazu1+kazu2);
printf("kazu1-kazu2は%dです\n",kazu1-kazu2);
printf("kazu1*kazu2は%dです\n",kazu1*kazu2);
printf("kazu1/kazu2は%dです\n",kazu1/kazu2);
printf("kazu1%%kazu2は%dです\n",kazu1%kazu2);
return 0;
}
/**************プログラミング概要*******************/
/*************5つの変数で演算********************/
int main_irej(void)
{
int suuchi1,suuchi2;
int total1,total2;
int goukei;
printf("数値1を入力してください\n");
scanf("%d",&suuchi1);
printf("数値2を入力してください\n");
scanf("%d",&suuchi2);
goukei=suuchi1+suuchi2; //goukeiに加算の演算結果を格納
printf("数値1と数値2の合計は%dです\n",goukei);
total1=goukei*suuchi2; //goukeiに加算の演算結果を格納
printf("合計にを数値1で乗算した値は%dです\n",total1);
total2=goukei%suuchi2; //goukeiに加算の演算結果を格納
printf("合計を数値2で剰余した値は%dです\n",total2);
return 0;
}
getchar()
getchar()の使い方が分かり難い。一文字の入力のみ受け取るのはscanfと同じようだが、別の変数を用意しておいて、それに代入してやる? ffluch(stdin)何のことやら。
/**************プログラミング概要*******************/
/****************getcharを使って英数字を一つ入力させる*****************/
#include<stdio.h>
int main(void)
{
char eisuuji;//char型の宣言
printf("文字を入力してください(英数字)\n");
eisuuji=getchar();//プロンプト画面から入力させる
printf("%cが入力されました\n",eisuuji);//結果
fflush(stdin);/********fflush(stdin)でcharを空にしてgetcharのバグを解消***********/
eisuuji=getchar();//プロンプト画面から入力させる
printf("%cが入力されました\n",eisuuji);//結果
fflush(stdin);/*******************/
eisuuji=getchar();//プロンプト画面から入力させる
printf("%cが入力されました\n",eisuuji);//結果
return 0;
}
/**************プログラミング概要*******************/
/****************getcharを使って英数字を一つ入力させる*****************/
#include<stdio.h>
int main(void)
{
char eisuuji;//char型の宣言
printf("文字を入力してください(英数字)\n");
eisuuji=getchar();//プロンプト画面から入力させる
printf("%cが入力されました\n",eisuuji);//結果
fflush(stdin);/********fflush(stdin)でcharを空にしてgetcharのバグを解消***********/
eisuuji=getchar();//プロンプト画面から入力させる
printf("%cが入力されました\n",eisuuji);//結果
fflush(stdin);/*******************/
eisuuji=getchar();//プロンプト画面から入力させる
printf("%cが入力されました\n",eisuuji);//結果
return 0;
}
変数宣言と入出力(printf,scanf)
int型や、double型、char型を宣言して、scanf関数で入力させ、printfで出力させるプログラムを組む練習をした。
難しいのは、int→"%d"、double→"%f"、char→"%c"といったように変数の型に合わせて、変換使用を合致させなければいけない点。あと、scanfの引数には&(アンパーサンド)を付けて、printfでは、必要がないこと。単純そうだが、これがうまく対応せず、コンパイルエラーの連発だった。
include<stdio.h>
int main_lesson1(void)
{
int age;
printf("あなたは何歳ですか?\n");
scanf("%d",&age);
printf("あなたは%d歳です。\n",age);
return 0;
}
/**************プログラミング練習*******************/
#include<stdio.h>
int main_lesson2(void)
{
double ennshuuritu;
printf("円周率の値はいくつですか?\n");
scanf("%lf",&ennshuuritu);
printf("円周率の値は%lfです。\n",ennshuuritu);
return 0;
}
/**************プログラミング練習*******************/
#include<stdio.h>
int main_lesson3(void)
{
char alpha;
printf("アルファベットの最初の文字はなんですか?\n");
scanf("%c",&alpha);
printf("アルファベットの最初の文字%cです。\n",alpha);
return 0;
}
/**************プログラミング練習*******************/
#include<stdio.h>
int main_lesson4(void)
{
double sinchou,taijyuu;
printf("身長を入力してください。\n");
scanf("%lf",&sinchou);
printf("体重を入力してください。\n");
scanf("%lf",&taijyuu);
printf("身長は%lfセンチです。\n",sinchou);
printf("体重は%lfキログラムです。\n",taijyuu);
return 0;
}
/**************プログラミング概要*******************/
#include<stdio.h>
int main_finitto(void)
{
int InumA,InumB; //int型の2変数を宣言
double Dnum; //double型の変数宣言
printf("int型の値を入力してください\n");
scanf("%d",&InumA);
printf("num型の値を入力してください\n");
scanf("%lf",&Dnum);
printf("int型の値を入力してください\n");
scanf("%d",&InumB);
printf("入力された数値は%dと%lfと%dです\n",InumA,Dnum,InumB); //結果
return 0;
}
難しいのは、int→"%d"、double→"%f"、char→"%c"といったように変数の型に合わせて、変換使用を合致させなければいけない点。あと、scanfの引数には&(アンパーサンド)を付けて、printfでは、必要がないこと。単純そうだが、これがうまく対応せず、コンパイルエラーの連発だった。
include<stdio.h>
int main_lesson1(void)
{
int age;
printf("あなたは何歳ですか?\n");
scanf("%d",&age);
printf("あなたは%d歳です。\n",age);
return 0;
}
/**************プログラミング練習*******************/
#include<stdio.h>
int main_lesson2(void)
{
double ennshuuritu;
printf("円周率の値はいくつですか?\n");
scanf("%lf",&ennshuuritu);
printf("円周率の値は%lfです。\n",ennshuuritu);
return 0;
}
/**************プログラミング練習*******************/
#include<stdio.h>
int main_lesson3(void)
{
char alpha;
printf("アルファベットの最初の文字はなんですか?\n");
scanf("%c",&alpha);
printf("アルファベットの最初の文字%cです。\n",alpha);
return 0;
}
/**************プログラミング練習*******************/
#include<stdio.h>
int main_lesson4(void)
{
double sinchou,taijyuu;
printf("身長を入力してください。\n");
scanf("%lf",&sinchou);
printf("体重を入力してください。\n");
scanf("%lf",&taijyuu);
printf("身長は%lfセンチです。\n",sinchou);
printf("体重は%lfキログラムです。\n",taijyuu);
return 0;
}
/**************プログラミング概要*******************/
#include<stdio.h>
int main_finitto(void)
{
int InumA,InumB; //int型の2変数を宣言
double Dnum; //double型の変数宣言
printf("int型の値を入力してください\n");
scanf("%d",&InumA);
printf("num型の値を入力してください\n");
scanf("%lf",&Dnum);
printf("int型の値を入力してください\n");
scanf("%d",&InumB);
printf("入力された数値は%dと%lfと%dです\n",InumA,Dnum,InumB); //結果
return 0;
}
Cの型
Cには型がある。今日、勉強した。
int,double,charなどに変数を代入し、格納するために必要だそうだ。
たとえば、int型に整数を格納出来、それ以外の数を代入しようとするとコンパイルエラーとなる。
int,double,charなどに変数を代入し、格納するために必要だそうだ。
たとえば、int型に整数を格納出来、それ以外の数を代入しようとするとコンパイルエラーとなる。
Hello.c world!!
これは、世界で有名なプログラミングで文字列をコンソールに表示するため、プログラミングです。
#include<stdio.h>
int main(void)
{
printf("Hello.c world!!");
return 0;
}
#include<stdio.h>
int main(void)
{
printf("Hello.c world!!");
return 0;
}
les régionales renforcent la crédibilité de l'opposition
Politique économique : les régionales renforcent la crédibilité de l'opposition
- VIE POLITIQUE POLITIQUE ECONOMIQUEFed's Yellen more complex than dove label implies
I think her appointment was the best choice for US macro economy.
Fed's Yellen more complex than dove label implies| Reuters: "Yellen's name is inevitably mentioned among the Fed's most dovish members, or those more likely to favour lower interest rates to support economic growth and boost labour markets."
Treasury Auctions Set for This Week - Schedule
Treasury Auctions Set for This Week - Schedule - NYTimes.com: "The Treasury’s schedule of financing this week includes the regular weekly auction of new three- and six-month bills on Monday, and an auction of four-week bills on Tuesday."
Hungary Forint Flirts With Old Range vs. EUR - XpatLoop.com - Business & finance
Hungarian forint has been robust during the seasons "so called crises" and their economy strength shows in the bond market.
Greek Bonds Advance After European Leaders Back Rescue Plan
Spreads between Greek bonds and German bunds tightened, as a relief reaction that a deal has been reached among EU nations.
アルゼンチン、債務スワップに関する有価証券届出書を関東財務局に提出
アルゼンチン、債務スワップに関する有価証券届出書を関東財務局に提出
| Reuters: "アルゼンチン政府は25日、日本で債務不履行に陥ったソブリン債のスワップ計画の条件を関東財務局に提出"
| Reuters: "アルゼンチン政府は25日、日本で債務不履行に陥ったソブリン債のスワップ計画の条件を関東財務局に提出"
FAPRI Says Economic Turnaround Will Fuel Crop Price Recovery
WTI oil future price is in a random walking at 80$ per a barrel at the moment.But if oil price is pressured upside momentum lead by strong demands from Asia,the price would be beyond 100$ with no wonder.So Who`s gonna survive?
Wallaces Farmer - FAPRI Says Economic Turnaround Will Fuel Crop Price Recovery: "The economic recovery will be accompanied by projected stronger energy prices. The FAPRI economists expect that the continuing recovery of crude oil prices along with bioenergy mandates will grow the demand and strengthen the world price of ethanol through 2019. Global net trade in ethanol is projected to increase by 3.12 billion gallons and reach 4.15 billion gallons by 2019."
India faces more rate hikes to tame inflation
India faces more rate hikes to tame inflation: Analysts- Indicators-Economy-News-The Economic Times: "RBI looks set to tighten monetary policy further after raising interest rates for the first time in nearly two years as it bids to check Burst the Inflation balloon
Implications of a rising inflation rate
spiralling inflation, economists say.
In a move that surprised experts, the Reserve Bank of India (RBI) hiked short-term rates from record lows late Friday to battle near double-digit annual inflation amid fast-strengthening industrial output.
Expectations had been for a rate hike at the bank's scheduled policy review on April 20 but the RBI said in a statement that inflation had 'been a source of growing concern.'
The wholesale price index (WPI) in Asia's third-largest economy was 9.89 percent in February, well above the central bank's own estimate of 8.5 per cent by the end of the current financial year this month.
On Friday, the RBI raised the repo, the rate at which it lends to commercial banks, by 25 basis points to 5.0 per cent."
Teva to buy Ratiopharm for nearly $5 bln |
Israel drugmakers are having a strong competitiveness in that sector.
| Reuters: "Israel's Teva (TEVA.TA) (TEVA.O) won the battle for generic drugmaker Ratiopharm, paying 3.7 billion euros ($5.1 billion) to fix its weakness in Germany, the world's second-largest generics market."
Argentine economy expanded or contracted in 2009?
MERV(Argentina stock index) vs BSVP(Brazil) vs (Mexico)
Guessing time: Argentine economy expanded or contracted in 2009? — MercoPress: "Argentina's government expects the economy to grow 2.5% in 2010, according to its budget proposal. That compares to official forecasts of 6% growth in Brazil, Latin America's largest economy and 3.9% in Mexico, the region's second largest economy.
Argentina's growth and industrial output data releases were accompanied on Friday by additional financial information from the government.
The primary budget surplus narrowed to 1.21 billion pesos (310 million USD) in February from 1.60 billion pesos reported in February 2009. Tax income growth has slowed as Argentina's economy tries to pull out of the 2009 slowdown caused in part by the world financial crisis.
The government faces about 15 billion USD in debt payments this year as it seeks regulatory approval to reopen the country's 2005 debt restructuring. Argentina hopes to re-enter the international capital markets once it restructures 20 billion in paper left over from the country's 2001/2002 debt default."
Argentina industry output jumps on Brazil demand
Argentina economy looks expanding with Brazilian domestic consumptions.
| Reuters:
"* 11 pct industrial output rise blows past market view
* Car exports to Brazil help keep production healthy"
* Car exports to Brazil help keep production healthy"
Finance Bonds Pull Ahead as JPMorgan Sells Debt: Credit Markets
Some people see those attractive.
Finance Bonds Pull Ahead as JPMorgan Sells Debt: Credit Markets - BusinessWeek: "Debt sold by banks, insurers and brokers returned 0.81 percent this month through yesterday, compared with 0.4 percent for the rest of the market, according to Bank of America Merrill Lynch index data. The cost to borrow for banks is the lowest since February 2008, with yields falling to within 1.93 percentage points of Treasuries on March 18."
Finance Bonds Pull Ahead as JPMorgan Sells Debt: Credit Markets - BusinessWeek: "Debt sold by banks, insurers and brokers returned 0.81 percent this month through yesterday, compared with 0.4 percent for the rest of the market, according to Bank of America Merrill Lynch index data. The cost to borrow for banks is the lowest since February 2008, with yields falling to within 1.93 percentage points of Treasuries on March 18."
2010年の半導体支出は2けた成長の見込み
2010年の半導体支出は2けた成長の見込み--米調査:ニュース - CNET Japan: "OEM(Original Equipment Manufacturer)による2010年の半導体支出は、前年比で13%と大幅に増加し、1779億ドルになると予測されている。一方、EMS(Electronic Manufacturing Service)プロバイダによる2010年の支出は、前年比15.1%増の377億ドルになる見込み。"
Bank of Canada sees low rates, but not copying Fed | Business | Reuters
Bank of Canada sees low rates, but not copying Fed
| Business
| Reuters: "The Bank of Canada believes interest rates should stay at near-zero levels for another few months even though the economy is showing signs of quicker than expected recovery, the central bank chief said on Thursday.
At the same time, Bank of Canada Governor Mark Carney said there was no need for Canada to align its interest rate moves with those of the United States, as speculation grows that Ottawa could start removing emergency stimulus measures before Washington does."
| Business
| Reuters: "The Bank of Canada believes interest rates should stay at near-zero levels for another few months even though the economy is showing signs of quicker than expected recovery, the central bank chief said on Thursday.
At the same time, Bank of Canada Governor Mark Carney said there was no need for Canada to align its interest rate moves with those of the United States, as speculation grows that Ottawa could start removing emergency stimulus measures before Washington does."
Subscribe to:
Posts (Atom)
Nikkei225
28000-28550 up in the early session, down lately.
-
米半導体工業会が発表した4月の売上高は25%減。底を打った形ではあるが、本格的な需要回復は不透明な模様だ。 source - nikkei
-
ドイツ政府は、今年度中に東西ドイツ統一後の財政負担(400億ユーロ)を上回る規模の国債を発行することを決定。 景気後退に伴う税収の減収と800億ユーロを超える景気対策が必要なため。 09,10年度の財政赤字は対GDP比で3%を超え、ユーロ圏の財政協定に抵触する恐れが強まっている。...
-
今日の予想 30000円ー29780円




