C言語の基礎演習問題

1.整数の階乗を計算する。

#include<stdio.h>
int main()
{
	int i =1;
	int n=0;
	int ret=1;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
	    ret=ret*i;
	}
    printf("%d",ret);

	return 0;
}

2.1!+2!+3!+4!+5!+6!+...+10!の和を求める。

#include<stdio.h>
int main()
{
	int i =1;
	int n=0;
	int j=1;
	for(j=1;j<=10;j++)
	{
	  int ret=1;
	  for(i=1;i<=j;i++)
	  {
	      ret=ret*i;
	  }
	 n=n+ret;
	}
    printf("%d",n);
	return 0;
}

以下のようにより効率的な実装も可能である。

#include<stdio.h>
int main()
{
	int n=0;
	int j=1;
	int ret=1;
	for(j=1;j<=10;j++)
	{
	    ret=ret*j;
	    n=n+ret;
	}
    printf("%d",n);
	return 0;
}

3.整列済み配列から特定の数値を検索する。

まず線形探索による実装を示す。

#include<stdio.h>
int main()
{
	int arr[]={1,2,3,4,5,6,7,8,9,10};
	int j=5;
	int i=0;
	int sz=sizeof(arr)/sizeof(arr[0]);
	for(i=0;i<=sz;i++)
	{
	    if(arr[i]==j)
	    {
	        printf("インデックス:%d",i);
	        break;
	    }
	    if(i==sz)
	    {
	       printf("対象が見つかりません"); 
	    }
	}
	return 0;
}

次に二分探索を用いる実装を示す。計算量はO(log n)である。

#include<stdio.h>
int main()
{
	int arr[]={1,2,3,4,5,6,7,8,9,10};
	int j=7;
	int sz=sizeof(arr)/sizeof(arr[0]);
	int left=0;
	int right=sz-1;
	while(left<=right)
	{
	   	int mid=(left+right)/2;
	    if (arr[mid]<j)
	    {
	        left=mid+1;
	    }
	    else if(arr[mid]>j)
	    {
	        right=mid-1;
	    }
	    else
	    {
	        printf("インデックス:%d",mid);
	        break;
     	}
	}
	if(right<left)
     	{
     	    printf("見つかりません");
     	}
	return 0;
}

4.文字列の両端から中央に向かって文字が徐々に移動し、最終的に出会うアニメーションを表示するプログラムを作成する。

#include<stdio.h>
#include<windows.h>
int main()
{
	char arr1[]="hello world!!!";
	char arr2[]="##############";
	int sz=strlen(arr1);
	int left=0;
	int right=sz-1;
	while(left<=right)
	{
	    	arr2[left]=arr1[left];
	        arr2[right]=arr1[right];
	        printf("%s\n",arr2);
	        Sleep(1000);
	        left++;
        	right--;
	}
	return 0;
}

実行結果:

h############!
he##########!!
hel########!!!
hell######d!!!
hello####ld!!!
hello ##rld!!!
hello world!!!

5.ログインシステムを模擬的に実装する。パスワード入力は3回まで許可され、正解するとログイン成功、三回失敗するとプログラムを終了する。

#include<stdio.h>
#include<string.h>
int main()
{
	char password[20]={0};
	int i=0;
	for(i=0;i<3;i++)
	{
	    printf("パスワードを入力してください:");
	    scanf("%s",password);
	    if(strcmp(password,"abcdef")==0)
	    {
	        printf("ログイン成功\n");
	        break;
	    }
	    else
	    {
	        printf("パスワードが正しくありません\n");
	    }
	    
	}
	if(i==3)
	{
	    printf("3回パスワードを間違えたため、プログラムを終了します\n");
	}
	return 0;
}

実行例:

abcdef
パスワードを入力してください:ログイン成功

タグ: C言語 基礎文法 アルゴリズム 二分探索 階乗計算

5月19日 09:14 投稿