えっと、昨日先生に
「構造体を作れ!」と言われて
全然出来ませんでした。
本とかを見て理解するのではなくて、
実際に自分で何も見ないで
出来るようになりたいのです。
で、何でもいいので、
何か問題を出して欲しいのです。

昨日の先生の例:四角形を作れ!
#include <stdio.h>

struct Sikaku{
int x1;
int y1;
int x2;
int y2;
};

main()
{
struct Sikaku s[100];

s[0].x1 = 20;
s[0].y1 = 20;
s[0].x2 = 40;
s[0].y2 = 40;
}

何か問題を出したら、考えて回答を書きますので、よろしくお願いします。
いっぱい出してください。
お願いします。

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

A 回答 (6件)

> 本とかを見て理解するのではなくて、


> 実際に自分で何も見ないで出来るようになりたいのです。

その考えは根本的に間違っていると思いますよ。
本を見て、試行錯誤して、失敗して、ヘルプを見て、先人に聞いて、
そして又本を見て…。
言語はそれを繰り返して覚えていくものだと思います。
⇒もちろんそうでない人もいますが。

ちなみに本にある例題は全てこなしているのですよね?

では例題など、
クライアント/サーバ型通信モジュールを作成し、
通信電文を構造体に格納して電文の内容を確認せよ。
プロトコルはTCP/IPを使用する事。

この回答への補足

僕もよく分からないのですが、
昨日はいきなり作れと言われたので、
「本とか見ないと出来ないです」
と言ったら、
「お前は基礎的なことをいちいち本とか見ないと
出来ないのかよ」
と言われてショックでした。
ですので、基礎的な例題でいいので
何か出してください。

補足日時:2001/12/26 10:23
    • good
    • 0

本を見ないで作る方がいたら相当すごい人だと思いますよ。


私なんか、スペルがかけなくて、辞書を引いたりよくしています。

No1.での「お前は基礎的なことをいちいち本とか見ないと
出来ないのかよ」というのは、良いようにとったら、
あまりにも初歩的なとこがわかっていないのでは、
たとえば、「struct」のスペルが
わかないとか、変数をどのように宣言(intやfloat)すればいいのか
わからないとかそう言ったものではないでしょうかね?

でも、先生が出された例って、こんな例しか使っていないのであれば、
教えようとする人間でも一生懸命ではないでしょうね。
こんな問題に、こんな解答はおかしいとは思うのですが・・・・

さて本題に入ります。
問題としていくつかあげておきますのでやってみてはどうでしょう?

1. クラスの生徒の出席番号と名前を入れ、それをprintfで表示しなさい。
2. CDのアルバム名を構造体で宣言し、中に曲名をいれ、それをprintfで表示しなさい。
3. (応用)三角形の頂点を代入し、その中心を求める。

以上、このようなものでよろしいでしょうか?
    • good
    • 0

プログラムは「つまらない例題」で「勉強」しようとすると失敗する可能性大です。


今作ってるプログラムが実際に動いたときに自分が嬉しいかどうか。

1、プログラムが動いた→だけどそれが何?
2、プログラムが動いた→おお、スゲー感動!

1と2だと上達の速度が256倍違います。
プログラムが出来たとき、だけどそれが何?と思ったら要注意。
まずは自分が興味をもっているものを題材に選ぶのが良いと思います。
    • good
    • 0

ご自分でも例題は作れますよ。

例えば、
・所有しいてるCDのデータ(タイトル・アーティスト)を格納する構造体
・住所録
・スケジュールを格納する構造体(日付、期間、場所、内容など)

基本的に構造体はデータベースの1レコードとしてとらえればいくらでも例題は転がっています(それだけではないですけど)。身近にあるもので自分の興味のあるデータを構造体化(というのか^^;)してみれば面白いと思います。

ただ、実際のプログラミングでは構造体を作ることは主体ではなく、データを効率よく操作できるように構造体を設計することが主眼ですから、まずは何をしたいのかということから考えないと、ですね(例えばCDのタイトルは何文字格納できるようにしようとか、アーティスト名は名前を直接入れるか番号で管理しようかとか、スケジュールの日付は文字列にしようか数字にしようかとか...きりがないですが)
    • good
    • 0

こんなのはどうでしょう?



Q1.
あるゲームで、高得点を取得した上位20名のスコアラーの名前
(ASCIIで15文字以内)とその得点(符号なし整数)を保持したい。
これを実現しうる構造体としてどのようなものが考えられるか。

Q2.
やはり、あるゲームで、平面上を任意の方向に等速直線運動する
ミサイルが存在する。このミサイル1個の現在の座標と移動方向を保持する
構造体としてとしてどのようなものが考えられるか。

あんまりその先生の仰った事は気にしないほうがいいです。
最初のうちはだれだって本見ながら、その言語を実際に使いながら
覚えるものだと思います。
    • good
    • 0

なんか根本的に間違ってませんか?



>「お前は基礎的なことをいちいち本とか見ないと出来ないのかよ」
>と言われてショックでした。

とありますが、
これは、「今すぐ本を何も見ずに作りなさい」と言ってるのではなく、
「そのぐらい基礎的なことは本を見ずに作れるレベルに早くなりなさい」
と言ってるんです。
つまり、今構造体をわかっていないpowan1さんは、
なおさら本を見て勉強する必要があると思いますよ。

しかもこの場で私に例題を与えてくださいというのも変な話です。
まずは本の例題ぐらい解けるようになりましょう。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

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

Qint nII[10] = { 0 }について

久々にCを使ってプログラムを組んでいるのですが、基本的な構文を思い出せず
いくつか教えていただきたく質問させていただきました。

1)配列すべてを初期化するのに、宣言時に

int nII[10] = { 0 };

で大丈夫だった(全ての要素が0で初期化)と記憶しているのですが、間違いないでしょうか?

2)構造体の初期化は

struct tm tm;
memset(&tm, 0, sizeof(struct tm))

で大丈夫でしょうか?

3)構造体の宣言は

typedef struct{
int a;
}HOGE, *LPHOGE;

HOGE st; // <- struct HOGE stと同じ
LPHOGE pst; // <- struct HOGE* pstと同じ

で問題ないでしょうか?

以上、3つ質問になって申し訳ないのですが、よろしくお願いします。

Aベストアンサー

1)OK
2)たぶんOK
3)HOGEという名前の構造体はない(当該の構造体には名前がない)ので、
// 以下のコメント記述が誤っています。ただし、

HOGE st;
LPHOGE pst;
という定義そのものはOK

Q{x = x>y ? x:y; return x;}

#include <iostream>
using namespace std;

inline int max(int x, int y){x = x>y ? x:y; return x;}

int main()
{
int num1, num2, ans;

cout << "2つの整数を入力して。\n";
cin >> num1 >> num2;

ans = max(num1, num2);

cout << "最大値は" << ans << "です。\n";

return 0;
}
の{x = x>y ? x:y; return x;}の部分の意味が解りません。

Aベストアンサー

inline int max(int x, int y){x = x>y ? x:y; return x;}
これを普通に関数で書くと

int max(int x, int y)
{
x = x>y ? x:y;
return x;
}

です。

x = 部分は右辺の結果が代入されます。これはわかりますよね。
x>y?x:y;
と書くと?より左にある条件式を判定し、その結果が真である場合は:で区切られた左側の値を、偽である場合は右の値を帰します。
x>yが真であればxを、偽であればyを返します。
それが、左辺値xに代入され、関数の戻り値として帰ります。

従って、2つの値をこの関数に入れると、大きいほうの値が帰ることになります。

Qint kosuu; とstruct tanka_kosuu kosuu[10]; の関係は

同プログラムの内容で現在3個の質問をしておりますが!
 その質問を解決する上で4つ目の質問をさせていただきます。
 悪しからず・・・
 さて
以下のサイトのプログラムで 些細な疑問がございます。
https://oshiete.goo.ne.jp/qa/9062058.html
 で
 struct tanka_kosuu {
int tanka; 
int kosuu; 
int kingaku; /
以上の中にあるkosuuと
 struct tanka_kosuu kosuu[10];のkosuu[10]とは直接関係がありますか?
 馬鹿な質問ばかりで申し訳ございませんがよろしくお願いいたします。

Aベストアンサー

#No.1です。

>kosuu[10];をakb[10];変えたところ 以下の errorでてコンパイルできません!?
> example10.c(15) : error C2065: 'kosuu' : 定義されていない識別子です。


宣言している変数名を変更したら、その変数を利用している場所(エラーメッセージで15行目と書かれています)の変数名も変更する必要があると思いませんか?

下の例で、1行目も変数をaからbに変えたら、2行目,3行目のaも、bに変える必要があのはご理解いただけますよね?
01: int a;
02: a = 10;
03: printf("a=%d\n", a);

Qstruct tanka_kosuu kosuu[10];の[10]て何

#include <stdio.h>
struct tanka_kosuu {
int tanka;
int kosuu;
int kingaku;
};
int main()
{
         struct tanka_kosuu kosuu[10];
       構造体宣言 構造体名  変数名
struct tanka_kosuu kari_nyuuryoku = {-1, 0, 0};
int nyuuryoku_kosuu = 0;
while(kari_nyuuryoku.tanka != 0){
scanf("%d %d", &kari_nyuuryoku.tanka,
&kari_nyuuryoku.kosuu);
kosuu[nyuuryoku_kosuu] = kari_nyuuryoku;
nyuuryoku_kosuu++;
}
return 0;
}
以上ですが、
 struct tanka_kosuu {
int tanka;
int kosuu;
int kingaku;
以上と
struct tanka_kosuu kosuu[10];は
 以下
int tanka;
int kosuu[10];
int kingaku;
 と同じ意味ですか?
 それとも
  int tanka[10];
int kosuu[10];
int kingaku[10]; 
 と同じ意味ですか?
int tanka[10];と
 int kingaku[10];の
 合計に[10]は必要ないですよね
以上すべて私の考え方が間違っていたならごめんなさい。
 以上よろしくお願いいたします。

#include <stdio.h>
struct tanka_kosuu {
int tanka;
int kosuu;
int kingaku;
};
int main()
{
         struct tanka_kosuu kosuu[10];
       構造体宣言 構造体名  変数名
struct tanka_kosuu kari_nyuuryoku = {-1, 0, 0};
int nyuuryoku_kosuu = 0;
while(kari_nyuuryoku.tanka != 0){
scanf("%d %d", &kari_nyuuryoku.tanka,
&kari_nyuuryoku.kosuu);
kosuu[nyuuryoku_kosuu] = kari_nyuuryoku;
nyuuryoku_kosuu++;
}
return 0;
}
以上です...続きを読む

Aベストアンサー

#1です。

>struct tanka_ data { ・・・・(1)
>  int tanka;
>  int kosuu;
>  int kingaku;
>};
・・・途中省略
>} これでいいでしょうか

(1)のところは、変えてはいけません。
struct tanka_kosuu { 
のままにして下さい。
他は、問題ありません。

Qchar AA[]{"全角文字"};から"全"という一字を取り出したい

 今晩は、Cの初心者です、宜しくお願いします。
 全角文字の入ったchar AA[]{"全角文字"};から"全"という文字一字を取り出す時にAA[0]とかくとエラーになります。
 どのようにしたら取り出せるのでしょう。
 ポインタを使う方法と使わない方法を教えて下さい。
 宜しくお願いします。

Aベストアンサー

お疲れ様です。

まずお伺いしたのがOSおよび開発するためのコンパイラです。

ロケール等の話は分かりませんが、昔のC言語で日本語を扱う場合には全角文字1文字で2個つのchar領域を使用していました。
(マルチバイト文字セットと言います。)

詳細は参考URLを参照の事。

windowsでVCと仮定した場合、charを使われていると言うことは、多分、shift-jis(シフトJIS)で文字列を扱っていると思われます。

結論として全角文字1文字だけを取り出したいという場合は、結局char2個分のデータを取り出す必要があります。

>char AA[]={'全','角'};

char AA[]="全角";
とし
>printf("%s%s\n" , AA[0],AA[1] ) ;

printf("%c%c\n" , AA[0],AA[1] ) ;
とすれば、「全」だけを表示する事が可能と思われます。

日本語を文字列で表示する為の文字コードについては
Shift-JISだけでなく、UnicodeやUTF・EUC・JISなどがあります。

もう少し詳しく記載してあるホームページはないか探してみましたが、ちょっと無理でした。

参考URL:http://marupeke296.com/CPP_charUnicodeWideChar.html

お疲れ様です。

まずお伺いしたのがOSおよび開発するためのコンパイラです。

ロケール等の話は分かりませんが、昔のC言語で日本語を扱う場合には全角文字1文字で2個つのchar領域を使用していました。
(マルチバイト文字セットと言います。)

詳細は参考URLを参照の事。

windowsでVCと仮定した場合、charを使われていると言うことは、多分、shift-jis(シフトJIS)で文字列を扱っていると思われます。

結論として全角文字1文字だけを取り出したいという場合は、結局char2個分のデータを取り出...続きを読む


人気Q&Aランキング

おすすめ情報