C言語初心者なのですが、
数値計算の方法で、
新規作成をするにあたって、
どの種類の新規作成を使用していいのか
わかりません。
おそらく数値計算といってもあいまいなのかも知れませんが、
とりあえず簡単なものでいいです。
例えば A+B=CやA*B=D
といった物の計算です。
これをどの新規作成で作成すればいいのかを教えてください。
お願いします。
かなり初歩的なことでごめんなさい。

このQ&Aに関連する最新のQ&A

A 回答 (8件)

こんにちわ


#3のsueokaです

「ヘッダファイル」の補足を。
・・・と言っても僕もCに熟知しているわけではないので、
この説明が総てではありません。

「ソースファイル」と「ヘッダファイル」の違いは簡単に言うと
「処理を定義するファイル」と「データを定義するファイル」
と思ってよいのではないでしょうか。
「データの定義」と言うのは始めのうちはピンとこないと思われますが、
「ソースファイルのあちこちで使う共通の値」とか、
「幾つかのデータをまとめた構造体」などを定義するのによく使われています。
(構造体と言うのはデータを一まとめにしたデータ形式のようなものです)

別に、ファイルを分けなくてはいけないことはありません。
が、分けておくと分かりやすくなりますよね。
このファイルは処理が記述されているファイルで、
このファイルはデータが記述されているファイル・・・と管理できます。

それと、ヘッダファイルと言うのは幾つかのソースファイルから
参照することが出来ます。つまり、ヘッダファイルで定義したデータは
幾つかのソースファイルで共有することが出来ると言うことですね。
「ソースファイルなんて2つも3つも作らないよ。」
と言うのであれば特にヘッダファイルは必要ないと思います。

なんてごちゃごちゃ書きましたが、#7の人が紹介しているページを
見るのが一番かな。「猫でも分かる・・・」はかなり有名なページです。

それと、本だったら「独習C++」がお勧めです。
独習シリーズは分かりやすいですよ。
    • good
    • 0

honiyonさんがおっしゃっているように、まずは基本的なところを押さえた方が良いと思います。

とりあえず初めてみたいのなら、下記のURLが参考になると思います。

参考URL:http://www.kumei.ne.jp/c_lang/
    • good
    • 0

こんにちは、honiyonです。



 まずは Visual C++の初級者向けの参考書を購入されてみてはいかがですか?

 まだCそのものについても詳しく理解されていないようですので、参考書も無しにVisualC++を使うのは難解でしょう。 

 
    • good
    • 0

私も大学の課題で数値計算などやりますが、


Visual C++しか持ってないので
Visual C++での説明をします。
私の場合、
「メニュー」->「新規作成」->「ファイルタブ」->「C++ソースファイル」
で作ってます。
何分自分も初心者に毛が生えた程度なので、
あまりいいやり方ではないかもしれませんが、
とりあえずこれでできます。
ほかのソフトについては全く解りません。
皆さんがおしゃるように、開発環境がわからなければ、回答しにくいと思いますよ。

この回答への補足

おそらく、開発環境は
マイクロソフト社のVC++です。
補足が遅れてすみませんでした。

補足日時:2001/08/21 13:59
    • good
    • 0

コンパイラのあるディレクトリに path を通して、コマンドラインでコンパイルするのもありですね。



VisualC/C++なら、
>cl filename.c
とするだけで filename.exeができます。

適当なエディタ(メモ帳など)でソースを書き、保存してコンパイルすればよいです。
    • good
    • 0

「数値計算用の・・・」といった新規作成はない・・・と思います。


どういった目的でもとりあえず始めはいっしょです。
(ウィンドウを必要とするかとかになるとちょっと違いますが。)

tomoryoさんが何の開発ソフトを使用しているかが分からないのですが、
VC++の場合は、ソフトを立ち上げて、
メニュ「ファイル」->「新規作成」->「プロジェクトタブ」から選びます。

数値計算だけなら画面は必要ないかもしれないので、
「Win32 Console Application」が良いかな?
プロジェクト名を入力して「OK」でプロジェクトが作成されます。

あとはもう一度新規作成から「ソースファイル」や「ヘッダファイル」を
作成してみてください。

でも、こう言ったことは、マニュアルにも載っていると思いますし、
もしマニュアルをお持ちでないのなら、市販の解説本を購入することを
お勧めします。

この回答への補足

ソースファイルは大体わかると思うのですが、
ヘッダファイルというのにいまいちぴんとこないです。
そこには何を記せばいいのでしょう?
一応、ソースファイルに新規作成してみて、
実行したらできたのですが、
ヘッダファイルには何もしなかったので、
よく理解できません。
ヘッダファイルは必ずしも必要ではないのですか?

補足日時:2001/08/21 13:55
    • good
    • 0

こんにちは、honiyonです。



 要はプロジェクトの新規作成について、どれを選んで良いか分からないという事でしょうか?
 
 「新規作成」とはプロジェクトの作成の事を指していると思います。 これは言語というより、開発環境の使い方に関わる方です。 開発環境(ソフト)によって、操作方法は様々なので、どんな開発環境を使用しているか明記されていないと答える事が出来ません。

 因みにこの辺りは開発環境に添付されていたマニュアルに関われていると思います。(専門用語で説明されていると思いますけど^^;)

 参考になれば幸いです(..

  
    • good
    • 0

初歩的なことはいいのですが、質問の意図をはっきりさせたほうがよろしいかと。


想像するに、VC++やC++Builder等の統合開発環境を使用しての質問かと思いますが、そのへんをちゃんと書いたほうがいいですよ。

この回答への補足

すみません。
何分初心者もいいところなものですから、
質問内容もかなりあいまいだとは思います。
これだけでは、回答にも困るのでしょうか?

補足日時:2001/08/20 12:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q2 ~ 200 の素数 a, b, c (a < b < c) が、b - a = c - b を満たすa,b,cをビット操作を用いて求め、すべてを表示せよ

ちょっと考えてみました。でも、分かりません・・・まず、int型のintvalに200bitを割り当てて、intval=0としたいのですが、どうしたらいいのでしょう??
とりあえず考えてみたプログラムを誰か見て下さい!!お願いします。
#define BYTESIZE 200
#define MAX 200
main()
{
int i,j,intval=0;
for(i=2;i<=MAX/2;i++)
{
if(intval&(1<<(i-1)){}
else for(j=i*2;j<=MAX;j+=i)intval|=(1<<(j-1));
}/*素数を0、それ以外を1に
for(i=2;i<=MAX/2;i++)
for(j=2;j<=(MAX-i)/2;j++)
if((intval&(1<<(i-1))&&(intval&(i+j-1))&&(intval&(1<<(i+2*j-1)))) print("%3d %3d %3d (%3d)\n",i,i+j,i+2*j,j);
}/*三つ子の素数を調べ出力

ちょっと考えてみました。でも、分かりません・・・まず、int型のintvalに200bitを割り当てて、intval=0としたいのですが、どうしたらいいのでしょう??
とりあえず考えてみたプログラムを誰か見て下さい!!お願いします。
#define BYTESIZE 200
#define MAX 200
main()
{
int i,j,intval=0;
for(i=2;i<=MAX/2;i++)
{
if(intval&(1<<(i-1)){}
else for(j=i*2;j<=MAX;j+=i)intval|=(1<<(j-1));
}/*素数を0、それ以外を1に
for(i=2;i<=MAX/2;i++)
for(j=2;j<=(MAX-i)/2;j++)
if((intval&...続きを読む

Aベストアンサー

まずint型は200ビットもありません。通常は32ビットです。
200ビット使いたければint型を7個用意する必要があります。
つまり
int intval[7];
宣言して、
intval[0] 0~31ビット
intval[1] 32~63ビット
intval[2] 64~95ビット
.
.
.
intval[6] 182~200ビット
として使います。

第iビットの情報を取り出すときは
(intval[i>>5]>>(i&31))&1

第iビットを1にするときは
intval[i>>5]|=1<<(i&31);

とすれば良いでしょう。
関数やマクロを用意することをお勧めします。
例えば
int get(int intval[],int i)
{
return (intval[i>>5]>>(i&31))&1;/*0か1が返って来る。*/
}

void on(int intval[],int i)
{
intval[i>>5]|=1<<(i&31);
}

という感じです。

まずint型は200ビットもありません。通常は32ビットです。
200ビット使いたければint型を7個用意する必要があります。
つまり
int intval[7];
宣言して、
intval[0] 0~31ビット
intval[1] 32~63ビット
intval[2] 64~95ビット
.
.
.
intval[6] 182~200ビット
として使います。

第iビットの情報を取り出すときは
(intval[i>>5]>>(i&31))&1

...続きを読む

Qif ( a & b == b )

aはビットフラグで、メモリ、FDD、HDD、FANなどの故障状態を表しています。
bは条件です。FDDとHDDが両方故障なら2進で11です。
FDDとHDDが両方故障であるのを得るために2進の11がdefineしてあるのは変更できませんが、FDDとHDDが両方故障であるのを調べるために
if ( a & b == b )
を実行するのには何か無駄がある気がしますが、もっとよい方法はありますか?

Aベストアンサー

> if((a^b) ==0) または if(!(a^b))
a^bが0になるのはaとbが等しいときですから、
これは以下のif文と同じことになります。
> if(a==b)
これはたぶん、質問の意図とは違う動作だと思います。
# なお、==や!演算子は^演算子よりも優先順位が高いので
# ^を先に演算させたいならかっこが必要です。


私もちょっと考えて、if(!(~a&b)) が思いつきましたが
あまり効率が良さそうでもないですね。
(これならif((a&b)==b)の方がまだ意図が分かりやすい分良さそうです。)

Q”int *a,*b”というポインタ変数宣言した値でa=&bということ

”int *a,*b”というポインタ変数宣言した値でa=&bということはできる?


”int *a,*b”このような変数をグローバル宣言した場合、
a=&bというようなことはできるのでしょうか?


”int *a,*b”
この宣言で、
aが10番地
bが20番地に定義されたと仮定しています。

Aベストアンサー

#6です。
>回答頂きありがとうございます。
>一応整理させてください。
>質問1:
>(1)int *a, *b; //宣言
>(2)a = b;
>これをメモリアドレスの変化で見ていった場合、
>(1)
>アドレス10:a NULL
>アドレス20:b (仮に1200)
>(2)
>アドレス10:a (仮に1200)
>アドレス20:b (仮に1200)
回答:
OKです。但し
アドレス10:a NULL のところは正確には、アドレス10:a 不定
となります。
不定の意味は初期化していないので何が入っているか判らない。
(0かも知れないし、そうでないかも知れない。あるいは35かも知れないし、そうでないかもしれない)
という意味です。(NULLの箇所は以降同じです)


>質問2:
>(1)' int *a, *b; //宣言
>(2)' a = (int *)&b;
>これをメモリアドレスの変化で見ていった場合
>(1)'
>アドレス10:a NULL
>アドレス20:b NULL
>(2)'
>アドレス10:a 20
>アドレス20:b NULL
>このような違いがあるということですね。
回答
はい、その通りです。

>質問3:
>int *a, *b; //宣言
>a=&b;
>このやり方はできないので、
>もし、やりたいのならば、
>(1)'' int **a, *b //宣言
>(2)'' a=&b;
>これをメモリアドレスの変化で見ていった場合
>(1)''
>アドレス10:a NULL
>アドレス20:b NULL
>(2)''
>アドレス10:a 20
>アドレス20:b NULL
>このようにメモリ内が変化していくということなんでしょうか?
回答
はい、その通りです。
>質問3のポインタのポインタの使い方はこれでよいでしょうか?
回答
はい、よいです。
ちなみに、このような事例に遭遇することはないでしょうが、
int ***a,**b;
の場合、a=&bは構文的に正しいです。
a=(int***)b;(強引なキャスト)
も正しいです。
int *a;
int **a;
int ***a;
の違いを理解することが必要です。
使いませんが、
int **********a;なども構文的にはありです。

#6です。
>回答頂きありがとうございます。
>一応整理させてください。
>質問1:
>(1)int *a, *b; //宣言
>(2)a = b;
>これをメモリアドレスの変化で見ていった場合、
>(1)
>アドレス10:a NULL
>アドレス20:b (仮に1200)
>(2)
>アドレス10:a (仮に1200)
>アドレス20:b (仮に1200)
回答:
OKです。但し
アドレス10:a NULL のところは正確には、アドレス10:a 不定
となります。
不定の意味は初期化していないので何が入っているか判らない。
(0かも知れないし、そうでないかも知れない。あるいは35かも知れない...続きを読む

Qa[i]とa[i+1]を入れ替えるような関数を作成するC言語の問題

以下のように配列aとそのサイズsとインデックスiを引数
にとり、a[i]とa[i+1]を入れ替えるような関数を作成する問題。

但し、この関数内で配列の外側をアクセスしないようにエラー
チェックをすること。正常に処理が終了した場合は0を返し、
そうでない場合は-1を返すようにする。

main関数では、10個分の整数を入れる配列を宣言し、
データをユーザに入力させる。
次に、ユーザに1個整数を入力させ、0からその番号まで順に
iをずらしてswap_array関数を読んだ後、配列に入っているデータを
表示させる。

・配列にデータを入力でき、交換が正しくできている
・ユーザが配列の外側を指定した場合は、エラーである旨を
表示して終了する。

取りあえずこうゆうかんじになるのですが、//の前などをどうにすればいいか分かりません。分かる方は知恵を貸してください。

int swap_array(int a[], int s, int i)
{
//a[i]番目とa[i+1]番目を入れ替え処理をする

//正しく交換できた場合はreturn(0);
//エラーが発生した場合はreturn(-1);
}
int main()
{
//サイズ10の配列の宣言
int a[10];
//ユーザに10個のデータの入力をさせる
int i;
for(i=0;i<10;i++){
scanf("%d",&a[i]);
}
//0番目から何番目まで入れ替えるかユーザに聞く: (ユーザがnと入力)
int n;
......

//繰り返し構造を使って、0番目からn番目まで隣同士を交換
for(i=0;i<=n;i++){
int v;
// swap_arrayを繰り返し呼び出すが、毎回戻り値が0であることを
        //チェックしてエラーが発生していないことを確かめる
v=swap_array(a,10,i);

// エラーが発生していたら エラーが発生したことを表示して
//break;文で繰り返し構造から外にでる。
if(v==-1) break;
}

//エラーが発生しなかった場合に、入れ替えられた配列の内容を表示
if(v!=-1){
..... 配列の内容を表示
}

return(0);

以下のように配列aとそのサイズsとインデックスiを引数
にとり、a[i]とa[i+1]を入れ替えるような関数を作成する問題。

但し、この関数内で配列の外側をアクセスしないようにエラー
チェックをすること。正常に処理が終了した場合は0を返し、
そうでない場合は-1を返すようにする。

main関数では、10個分の整数を入れる配列を宣言し、
データをユーザに入力させる。
次に、ユーザに1個整数を入力させ、0からその番号まで順に
iをずらしてswap_array関数を読んだ後、配列に入っているデータを
...続きを読む

Aベストアンサー

こんな感じではだめでしょうか…。

#include <stdio.h>

unsigned int swap_array(int a[],unsigned int size,unsigned int s)
{
unsigned int temp,i=s;
if (size<s) return s;// 要素数を返す
while (i-1) temp=a[s-i+1],a[s-i+1]=a[s-i],a[s-i--]=temp;
return 0;
}
int main()
{
int a[10];
unsigned int n,i=0,size=sizeof(a)/sizeof(unsigned int);

do{
printf("%d個目のデータ?",i+1);
scanf("%d",&a[i]);
}while(++i<size);

//do{
printf("入れ替え対照、何番目のデータ(1~%d個)?",size);
scanf("%d",&n);
//}while(n>size || !n);
//この段階で範囲制限させる時は上記2行のコメントを解除

if (i=swap_array(a,size,n)) printf("エラー>要素数%dは範囲外です\r\n",i);
else for (i=0;i<size;i++) printf("%d個目:%d\r\n",i+1,a[i]);
return 0;
}

こんな感じではだめでしょうか…。

#include <stdio.h>

unsigned int swap_array(int a[],unsigned int size,unsigned int s)
{
unsigned int temp,i=s;
if (size<s) return s;// 要素数を返す
while (i-1) temp=a[s-i+1],a[s-i+1]=a[s-i],a[s-i--]=temp;
return 0;
}
int main()
{
int a[10];
unsigned int n,i=0,size=sizeof(a)/sizeof(unsigned int);

do{
printf("%d個目のデータ?",i+1);
scanf("%d",&a[i]);
}while(++i<size);

//do{
printf("入れ替え対照、何番目のデータ(1~%d個...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報