[C言語]キー入力と数字の増減

#include <stdio.h>

int main(){

	int n = 0, j = 0;

	printf("キーを押すと数字が増減\n");
	printf("+:増, -:減, Esc:終了\n\n");
	while(1){
		printf("\r%06d",n);fflush(stdout);

		scanf("%d",&j);

		if(j==43){n++;continue;}
		if(j==45){n--;continue;}
		if(j==27)break;
	}
	printf("\n");
	

	return 0;
}

$ ./main
キーを押すと数字が増減
+:増, -:減, Esc:終了

0000001
0000002
000000a
000000d
000000+
000000;
000000^[
000000^C

あれ? 上手くいってない

[C言語]おみくじ

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){

	char c[128];
	int a, b;
	system("cls");
	printf("おみくじ\n");

	srand((unsigned int)time(NULL));

	while(1){
		gets(c); a=atoi(c);
		if(a==0) break;

		b = rand()%10+1;
		printf(">>>\n");

		switch((a+b)%10){
			case 0: printf("大吉"); break;
			case 1: printf("吉"); break;
			case 2: printf("吉"); break;
			case 3: printf("吉"); break;
			case 4: printf("吉"); break;
			case 5: printf("吉"); break;
			case 6: printf("凶"); break;
			case 7: printf("凶"); break;
			case 8: printf("凶"); break;
			case 9: printf("大凶"); break;
		}
		printf("\n");
	}
	

	return 0;
}

$ ./main
sh: 1: cls: not found
おみくじ
1
>>>

入力値とランダム関数を加算するってのが面白い。

[C言語]サイコロ

#include <stdio.h>
#include <stdlib.h>

int main(){

	int n;

	printf("サイコロを振ります。\n");

	srand((unsigned int)time(NULL));

	n = rand()%6 + 1;

	if(n==1){
		printf("+-------+\n");
		printf("|       |\n");
		printf("|   ●   |\n");
		printf("|       |\n");
		printf("+-------+\n");
	} else if(n == 2){
		printf("+-------+\n");
		printf("| ●     |\n");
		printf("|       |\n");
		printf("|     ● |\n");
		printf("+-------+\n");
	} else if(n == 3){
		printf("+-------+\n");
		printf("| ●     |\n");
		printf("|   ●   |\n");
		printf("|     ● |\n");
		printf("+-------+\n");
	} else if(n == 4){
		printf("+-------+\n");
		printf("| ●   ● |\n");
		printf("|       |\n");
		printf("| ●   ● |\n");
		printf("+-------+\n");
	} else if(n == 5){
		printf("+-------+\n");
		printf("| ●   ● |\n");
		printf("|   ●   |\n");
		printf("| ●   ● |\n");
		printf("+-------+\n");
	} else{
		printf("+-------+\n");
		printf("| ●   ● |\n");
		printf("| ●   ● |\n");
		printf("| ●   ● |\n");
		printf("+-------+\n");
	}

	return 0;
}

$ ./main
サイコロを振ります。
+——-+
| |
| ● |
| |
+——-+

アスキーアートって、こういう仕組みなんだ。
職人がいるんでしょうね。

[C言語]加算で掛算

#include <stdio.h>
#include <stdlib.h>

int main(){
	char buf[128];
	int a,b,c;

	printf("a\n");
	gets(buf);a=atoi(buf);
	printf("b\n");
	gets(buf);b=atoi(buf);

	for(c=0; b>0; b--){
		{c+=a;}
	}
	printf("answer: %d\n",c);

	return 0;
}

$ ./main
a
3
b
4
answer: 12

だいぶ佳境に入ってきたか

[C言語]減算で徐算

#include <stdio.h>
#include <stdlib.h>

int main(){
	char buf[128];
	int a,b,c,d;

	printf("a\n");
	gets(buf);a=atoi(buf);
	printf("b\n");
	gets(buf);b=atoi(buf);

	for(c=0; a>=b;c++){
		{a-=b;}
	}
	printf("answer: %d 余り:%d\n", c, a);

	return 0;
}

$ ./main
a
15
b
4
answer: 3 余り:3

[C言語]数字当てゲーム

#include 
#include 
#include 

int main(){
	int n1;
	int n2;
	int i;
	char c[128];

	srand((unsigned int)time(NULL));
	n1=rand();
	n1%=100;

	for(i=1;i<=10;i++){
		printf("数字:\n");
		fflush(stdout);
		gets(c);n2=atoi(c);
		if(n1==n2) break;
		if(n1 < n2)
			printf(" 大きすぎます\n");
		else
			printf(" 小さすぎます\n");
	}
	if(i<= 10) printf("%d回目で当たり\n",i);
		else printf("アウト! 正解は%dです。\n", n1);

	return 0;
}

$ ./main
数字:
14
小さすぎます
数字:
55
小さすぎます
数字:
78
大きすぎます
数字:
67
4回目で当たり

[C言語]総和

#include 

int main(){
	int sum=0, i=1;

	while(i<=77){
		sum+=i;
		i++;
	}
	printf("1から77までの総和は%dです。\n",sum);

	return 0;
}

$ ./main
1から77までの総和は3003です。

whileではなくforでもokです。

[C言語]アスキーアート

#include 
#include 
#include 
#include 

char buf[8][64];

void Disp0(int);
void Disp1(int);
void Disp2(int);
void Disp3(int);
void Disp4(int);
void Disp5(int);
void Disp6(int);
void Disp7(int);
void Disp8(int);
void Disp9(int);
void DispC(int);


int main(){
	unsigned long t, tO=0;
	char c[128];
	int i, j, k;

	while(1){
		t = time(NULL);
		if(t == tO) continue;
		tO=t;

		strcpy(c, ctime(&t));

		for(j=0,k=0; j<8; j++,k+=8){
			switch(c[11+j]){
				case '0': Disp0(k);break;
				case '1': Disp1(k);break;
				case '2': Disp2(k);break;
				case '3': Disp3(k);break;
				case '4': Disp4(k);break;
				case '5': Disp5(k);break;
				case '6': Disp6(k);break;
				case '7': Disp7(k);break;
				case '8': Disp8(k);break;
				case '9': Disp9(k);break;
				case ':': DispC(k);break;
			}
		}
		system("cls");
		for(i=0; i<8; i++){
			printf("%.64s",&buf[i][0]);
		}
		fflush(stdout);
		if(kbhit()!=0) break;
		Sleep(900);
	}

	void Disp0(int j){
		memcpy(&buf[0][j],"######",8);
		memcpy(&buf[1][j],"#    #",8);
		memcpy(&buf[2][j],"#    #",8);
		memcpy(&buf[3][j],"#    #",8);
		memcpy(&buf[4][j],"#    #",8);
		memcpy(&buf[5][j],"#    #",8);
		memcpy(&buf[6][j],"######",8);
	}

	void Disp1(int j){
		memcpy(&buf[0][j],"     #",8);
		memcpy(&buf[1][j],"     #",8);
		memcpy(&buf[2][j],"     #",8);
		memcpy(&buf[3][j],"     #",8);
		memcpy(&buf[4][j],"     #",8);
		memcpy(&buf[5][j],"     #",8);
		memcpy(&buf[6][j],"     #",8);
	}

	void Disp2(int j){
		memcpy(&buf[0][j],"######",8);
		memcpy(&buf[1][j],"     #",8);
		memcpy(&buf[2][j],"     #",8);
		memcpy(&buf[3][j],"######",8);
		memcpy(&buf[4][j],"#     ",8);
		memcpy(&buf[5][j],"#     ",8);
		memcpy(&buf[6][j],"######",8);
	}

	void Disp2(int j){
		memcpy(&buf[0][j],"######",8);
		memcpy(&buf[1][j],"     #",8);
		memcpy(&buf[2][j],"     #",8);
		memcpy(&buf[3][j],"######",8);
		memcpy(&buf[4][j],"     #",8);
		memcpy(&buf[5][j],"     #",8);
		memcpy(&buf[6][j],"######",8);
	}

	// 省略

	return 0;
}

アスキーアートって、プログラムの中に絵を書くんだな。

[C言語]コマンドライン引数

int argcが引数の数
char *argv[]が引数のアドレス

#include 

int main(int argc, char *argv[]){

	char c[128];
	int i;

	for(i=0; i

$ ./main hello world 2020
argv[0]=./main
argv[1]=hello
argv[2]=world
argv[3]=2020

argv[0]に実行ファイルも含まれることを注意か。

[C言語]素数

素数とは、1と自分自身以外に約数を持たない数

#include 
#include 

int main(){

	int i, iStart, iEnd;
	int j, kosu;
	char c[128];

	printf("探索開始:\n");
	gets(c); iStart=atoi(c);
	printf("探索終了:\n");
	gets(c); iEnd=atoi(c);

	for(i=iStart, kosu=0; i < =iEnd; i++){
		for(j=2; j < i; j++){
			if(i%j==0) break;
		}
		if(j==i){
			if(kosu%10==0) printf("\n");
			printf("%6d ", i);
			kosu ++;
		}
	}
	printf("%d個の素数がありました。\n",kosu);

	return 0;
}

v$ ./main
探索開始:
1
探索終了:
100

2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 25個の素数がありました。