tickler blog

2009-11-13

[]データサイズを調べるプログラム 19:31

#include <stdio.h>

main()
{

    printf("char = %d\n",sizeof(char));
    printf("short = %d\n",sizeof(short));
    printf("int = %d\n",sizeof(int));
    printf("long = %d\n",sizeof(long));
    printf("float = %d\n",sizeof(float));
    printf("double = %d\n",sizeof(double));
    printf("整数リテラル = %d\n",sizeof(123));
    printf("小数点数リテラル = %d\n",sizeof(3.14));

    return 0;
}

2009-11-12

[]複合代入演算子 19:07

複合代入演算子

Russian乗算アルゴリズム 20:26

Russian乗算プログラムとは - tickler blog

#include <stdio.h>

main()
{
    int a, b, x, y, z=0, ans;

    printf("x? ");
    scanf("%d",&x);
    printf("y? ");
    scanf("%d",&y);

    a = x; b = y;

    do
    {
        ans = x%2;
        if(ans == 1)
            z = z + y;

        x = x/2;
        y = y*2;
    } while (x != 0);


    printf("%d * %d = %d \n",a , b, z);

        return 0;
}

2009-11-11

変数名を分かりやすく名付けられるようになりたい。

覚えた文法:do while文 20:05

do{

ループさせる処理A

} while( 条件式P );

まず、処理A が行われ、その後、条件式P が評価される。P が真ならば、処理A に戻る。Pが、偽ならdo while文は、終了する。

今日作ったプログラム1 20:06

Russian乗算アルゴリズムを利用した、x, y の積を求めるプログラム

Russian乗算とは,2 つの正整数 x, y の積を 求める以下のアルゴリズム

  1. z に 0 を代入する。
  2. x が 0 になるまで,以下のステップを繰り返す。
    1. x が奇数ならば,z に y を加える。
    2. x を 2 で割ったときの商を x に代入する。
    3. y を 2 倍する。
  3. z が x と y の積である。

長くなるのでプログラムの部分は以下に省略。

作ったプログラムを家に持ち帰るのを忘れたのでプログラムそのものを省略^^;

Russian乗算アルゴリズム - tickler blog

今日作ったプログラム2 20:06

n を入力して、それを素因数に分解したものを表示するプログラム。do while文を使ったもの。

調べると、while文でこれの半分程度に短く出来るみたい。下に、それを載せておいた。

続きを読む

今日作ったプログラム3 20:06

n を素因数分解して、それを表示するプログラムwhile文を使ったもの。

続きを読む

2009-11-10

[]素数の一覧表示 19:45

関数を使ってみたけど、初めてなので、よく分かってない。

2~n まで繰り返し素数のチェックをして、素数の時(ans == -1)、配列変数 prime に代入されるような処理をしようとした。でも、配列の中身を表示させると変な数になるので、その処理を止めて、素数の数だけを出力するようにした。一応、n = 10000 の時まで正しく素数の数が出力された。

追記:配列変数を使わなければ、ふつーに一覧表示出来た。n = 100, 10000 を表示させて、きちんと表示された。

#include <stdio.h>
#include <math.h>

int primecheck(int n);

main()
{
	int i, n, ans;

	printf("n? ");
	scanf("%d",&n);

	for (i = 2;i < n+1;i++)
	{
		ans = primecheck(i);
	
		if (ans == -1) printf("%d, ", i);
	}
		return 0;
}

int primecheck(int n)
{
	int max, i, ans=-1;

	max = (int)sqrt(n);
	
	for (i = 2;i <= max; i++)
	{
		if (n % i ==0)
		{
			ans = 0; //素数でない
			break;
		}
		else
		{
			ans = -1; //素数である
		}
	}
	
	return ans;
}

2009-11-09

[]作るプログラムとか 19:43

[]プログラム書式 19:22

読みやすいプログラムを心がけるために以下のことを守る。

  • ブロック({})は縦に表示させる
  • インデントは、スペース4個分
  • 演算子の前にスペース1個
  • 関数名と ( の間にスペースは置かない
  • 変数引数を区切るカンマのあとにスペース1個
  • if, switch, for, while と ( の間にはスペース1個
  • if, for で{}を省く場合は、同じ行に処理を書く
  • 処理の区切りに改行を入れる

例(if の書式)

    if (a > b)
        ans = a;
    else
        ans = b;

[]素数判定 19:22

これを元にして「n を入力して、その n までの素数をすべて表示する」プログラム作成する。

#include <stdio.h>
#include <math.h>

main()
{
	int max, i, n, ans=-1;
	/*ans を -1 で初期化しておかないと、n = 2 の時に、max が 1 になり
	for の繰り返しが一度も行われないので、-1 で初期化した */

	printf("n? ");
	scanf("%d",&n);

	max = (int)sqrt(n);
	
	for (i = 2;i <= max; i++)
	{
		if (n % i ==0)
		{
			ans = 0; //素数でない
			break;
		}
		else
		{
			ans = -1; //素数である
		}
	}
	
	if (ans == -1)
	{
		printf("%d is prime.",&n);
	}
	else
	{
		printf("%d is not prime.",&n);
	}
	
	return 0;
}