C言語関係掲示板

過去ログ

No.49. ポインタを使った九九の表のプログラム


「以下の二つの配列を用意して、それらの要素をポインタを使って指し示し、それらの積を計算して表示し、九九の表を作りなさい。」
int a[9] = {1,2,3,4,5,6,7,8,9}
int b[9] = {1,2,3,4,5,6,7,8,9}

っていう宿題が出たのですが全く分からなくて困ってます。
どなたかプログラムを教えて下さい。本当にお願いします。


>「以下の二つの配列を用意して、それらの要素をポインタを使って指し示し、それらの積を計算して表示し、九九の表を作りなさい。」
>っていう宿題が出たのですが全く分からなくて困ってます。

一度、配列だけを使って九九の表を作ってみるのはどうでしょう。
後は、それをポインタを使ったプログラムに変えるだけ。


こんにちは、ともじです。ポインタを使った九九の表のヒントをあげましょう。(^。^)
下記に、ポインタを相対的に用いたプログラムと、ポインタを絶対的に用いた
プログラムを提示します。下線部は自分で埋めてみましょう。

/* ポインタを相対的に用いた九九の表 */
#include <stdio.h>
int main(void)
{
        int i,j;
        int *pa,*pb;
        int a[9] = {1,2,3,4,5,6,7,8,9};
        int b[9] = {1,2,3,4,5,6,7,8,9};

        pa = _______ ;
        pb = _______ ;

        for (i=0; i<9; i++) {
                for (j=0; j<9; j++) {
                        printf(" %2d", _____________________ );
                }
                printf("\n");
        }

        return(0);
}



/* ポインタを絶対参照で用いた九九の表 */
#include <stdio.h>
int main(void)
{
        int i,j;
        int *pa,*pb;
        int a[9] = {1,2,3,4,5,6,7,8,9};
        int b[9] = {1,2,3,4,5,6,7,8,9};

        pa = ________ ;
        pb = ________ ;

        for (i=0; i<9; i++) {
                pb=________ ;
                for (j=0; j<9; j++) {
                        printf(" %2d", _____________________ );
                        ________++ ;
                }
                printf("\n");
                ________++ ;
        }

        return(0);
}


こんにちは。
おかげさまで球の体積のプログラムはできたのですが、九九の表のプログラムの空欄部分が分かりません・・・。
どうか教えて下さい。


これ以上は、ちょっと・・・。( ̄~ ̄;) ウーン

ということで、頑張って教科書を勉強してみましょう。

#はっきり言って、球よりも、九九の方がはるかに簡単ですよ。
#それから、球の方、ちゃんとモンテカルロ法の参考ホームページ見ておいて
#下さいね。


空欄に入る文字数だけ教えて下さい(笑)
お願いしますぅm(ToT)m


>空欄に入る文字数だけ教えて下さい(笑)
>お願いしますぅm(ToT)m

/* ポインタを相対的に用いた九九の表 */
#include <stdio.h>
int main(void)
{
        int i,j;
        int *pa,*pb;
        int a[9] = {1,2,3,4,5,6,7,8,9};
        int b[9] = {1,2,3,4,5,6,7,8,9};

        pa = 1文字 ;
        pb = 1文字 ;

        for (i=0; i<9; i++) {
                for (j=0; j<9; j++) {
                        printf(" %2d", 15文字 );
                }
                printf("\n");
        }

        return(0);
}


/* ポインタを絶対参照で用いた九九の表 */
#include <stdio.h>
int main(void)
{
        int i,j;
        int *pa,*pb;
        int a[9] = {1,2,3,4,5,6,7,8,9};
        int b[9] = {1,2,3,4,5,6,7,8,9};

        pa = 1文字 ;
        pb = 1文字 ;

        for (i=0; i<9; i++) {
                pb=1文字 ;
                for (j=0; j<9; j++) {
                        printf(" %2d", 11文字 );
                        2文字++ ;
                }
                printf("\n");
                2文字++ ;
        }

        return(0);
}

でも、文字数なんか当てにするより、ここ読んだ方が早いんでは。
http://www9.plala.or.jp/sgwr-t/sec10-2.htm


ありがとうございました。
ポインタなしと、ありで、出来ました。
で、私が出来てもダメですよね?
でも、うれしい!!です。


>ありがとうございました。
>ポインタなしと、ありで、出来ました。
>で、私が出来てもダメですよね?
>でも、うれしい!!です。

いいなぁ・・・(笑)
1文字のやつは「a」と「b」でいいんでしょうか?
15文字のは全く分かんないです。
もっとヒント下さい。オバカですいません・・・。


>1文字のやつは「a」と「b」でいいんでしょうか?
>15文字のは全く分かんないです。
>もっとヒント下さい。オバカですいません・・・。

これで出来なきゃ、お残りお掃除です。

#include <stdio.h>
int main(void)
{
        int     a[] = {1,2,3,4,5,6,7,8,9},*pa;
        int     i;

        pa = a;

        for (i=0; i<9; i++)
                printf("%d\n",*(pa+i));

        return(0);
}


>>1文字のやつは「a」と「b」でいいんでしょうか?
>>15文字のは全く分かんないです。
>>もっとヒント下さい。オバカですいません・・・。
>
>これで出来なきゃ、お残りお掃除です。
>
>#include <stdio.h>
><pre>
int main(void)
{
int a[] = {1,2,3,4,5,6,7,8,9},*pa;
int i;

pa = a;

for (i=0; i<9; i++)
printf("%d\n",*(pa+i));

return(0);
}
</pre>
>
>

15文字 *(pa+i)**(pb+j)

・・・合ってますか?それともお残りお便所掃除ですか?
(ドキドキ・・・)


>15文字 *(pa+i)**(pb+j)
>
>・・・合ってますか?それともお残りお便所掃除ですか?
>(ドキドキ・・・)

正解、帰っていいです。
おうちでも、しっかり勉強するように。(^。^)


よし。おれもできた。
なるほどね。

15文字のところはポインタを使って掛け算をやってます。


あまり良いプログラムではないですが
「ポインタを絶対参照で・・・」の改良型。
ただ単に行数を短くすることだけに努めてみました。

#include <stdio.h>
int main(void)
{
        int *pa, *pb;
        int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        int b[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

        pa = a;
        pb = b;

        do {
                pb = b;
                do {
                        printf(" %2d", (*pa) * (*pb));
                } while (9 != *pb++);
                putchar('\n');
        } while (9 != *pa++);

        return (0);
}


最終的にポインタが最終要素の次まで指しているので
あまりお薦めは出来ませんが、、、、
(一応規格上では問題無いはずです)


失敗、失敗。
こうした方が短いですね。

#include <stdio.h>
int main(void)
{
        int *pa, *pb;
        int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

        pa = pb = a;

        do {
                pb = a;
                do {
                        printf(" %2d", (*pa) * (*pb));
                } while (9 != *pb++);
                putchar('\n');
        } while (9 != *pa++);

        return (0);
}


じゃあ、私も。

#include <stdio.h>

int main(void)
{
        int *pa, *pb;
        int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

        for (pa = a; pa < a+9; pa++)
                for (pb = a; pb < a+9; pb++)
                printf("%2d%c",(*pa) * (*pb),(pb<a+8)?' ':'\n');

        return (0);
}


降参です!!(汗)

私だったら
a + 8なんかは&a[8]と書いてしまうでしょうね。
まだまだ修行が足りませんね。

精進します。

戻る


「初心者のためのポイント学習C言語」 Last modified:2001.10.7
Copyright(c) 2000-2002 TOMOJI All Rights Reserved