ポインタ作業I

16552 ワード

文書ディレクトリ
  • 6-4コード暗号化(10分)
  • include

  • 6-4コード暗号化(10分)
    情報が簡単に盗まれないように,暗号化により暗号化された暗号文に変換する必要がある.関数encrypt()を作成して呼び出し、必要に応じて文字列の内容を変更する必要があります.変換ルールは以下の通りである:小文字zはaに変換され、他のアルファベットはそのアルファベットASCIIコードの順序の後のアルファベットに変換され、例えばoはpに変換される.
    関数インタフェース定義:void encrypt(char*s);
    ここでsは文字列ヘッダアドレスである.
    審判試験プログラムのサンプル:
    #include
    include
    define MAXLINE 80
    void encrypt ( char *s); int main (void) { char line [MAXLINE];
    gets(line); encrypt (line); printf ("%s", line); return 0; }
    /*ここに答えを記入してください*/
    入力サンプル:adfz
    出力サンプル:bega
    void encrypt(char *s)
    {
        int i;
        for(i=0;s[i]!='\0';i++)
        {
            if(s[i]=='z')
                s[i]='a';
            else
                s[i]+=1;
        }
    }
    

    6-4年と日数を入力し、対応する年、月、日(15分)を出力します.
    関数の定義と呼び出しを要求するmonth_day(year,yeardy,*pmonth,*pday)は,計算した月と日をパラメータpmonthとpdayで返す.たとえば、2000と61を入力し、それぞれ3と1を返します.つまり、2000年の61日目は3月1日です.
    関数インタフェース定義:void month_day ( year, yeardy, *pmonth, *pday)
    ここでyearは年、yeardayは日数、pmonthとpdayは計算された月と日です.
    審判試験プログラムのサンプル:
    include
    void month_day ( int year, int yearday, int * pmonth, int * pday);
    int main(void){int day,month,year,yearday;/*日、月、年および日数を表す変数*/scanf("%d%d",&year,&yearday);month_day(year,yearday,&month,&day);/*計算月、日関数*/printf("%d%d%d",year,month,day);return 0;}
    /*ここに答えを記入してください*/
    入力サンプル:2000 61
    出力サンプル:2000 3 1
    void month_day ( int year, int yearday, int * pmonth, int * pday)
    {
    	int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    	if(year%400==0||(year%4==0&&year%100!=0))
    		a[1]=29;
    		int i,sum=0;
    		if(yearday<=31)
    		{
    			*pmonth=1;
    			*pday=yearday;
    		}
    		else
    		for(i=0;i<12;i++)
    		{
    			sum+=a[i];
    			if(sum==yearday)
    			{
    				*pmonth=i+1;
    				*pday=a[i];
    				break;
    			}
    			if(sum>yearday)
    			{
    				*pmonth=i+1;
    				*pday=yearday-sum+a[i];
    				break;
    			}
    		}	
    } 
    

    6-4二分検索(15分)
    10個の要素の整形配列aがあり、値が小さいから大きいまで秩序化されている.整数xを入力し、配列内でxを検索し、見つかった場合は対応する下付き文字を出力します.そうでない場合は、「Not Found」を出力します.関数int Bsearch(int*p,int n,int x)の作成を要求し、戻り下付きを見つけ、戻り-1が見つからない.
    関数インタフェースの定義:
    int Bsearch(int *p, int n, int x);
    ここで、pは配列ヘッダアドレスであり、nは配列要素の個数であり、xは検索する値である.戻り値の下付き文字が見つかり、戻り値-1が見つかりません.
    審判試験プログラムのサンプル:
    include
    int Bsearch(int *p, int n, int x); int main(void) { int a[10] = {1,2,3,4,5,6,7,8,9,10}; int x, m; scanf("%d",&x); m = Bsearch(a, 10, x); if(m >= 0) printf(“Index is %d”,m); else printf( “Not Found”);
    return 0;
    

    }
    /*ここに答えを記入してください*/
    入力サンプル:8
    出力サンプル:Index is 7
    int Bsearch(int *p, int n, int x)
    {
    	int low,high,mid;
    	low=0;high=n-1;
    	mid=(low+high)/2;
    	while(low<high)
    	{
    		if(x==p[mid])
    			return mid;
    		else if(x<p[mid])
    		{
    			high=mid-1;
    			mid=(low+high)/2;
    		}
    		else
    		{
    			low=mid+1;
    			mid=(low+high)/2;
    		}
    	}
        if(low>=high)
            return -1;
    }
    

    6-24関数の選択法によるソート(25点)
    本題では,整数配列を選択法で単純にソートする関数を実現することが要求される.
    関数インタフェース定義:void sort(int a[],int n);
    ここで、aは並べ替えられる配列であり、nは配列a中の要素の個数である.この関数は、配列a中の要素を選択法で昇順に並べ、結果は配列a中に残る.
    審判試験プログラムサンプル:#include#define MAXN 10
    void sort( int a[], int n );
    int main() { int i, n; int a[MAXN];
    scanf("%d", &n);
    for( i=0; i

    }
    /*あなたのコードはここに埋め込まれます*/
    入力サンプル:4 5 1 7 6
    出力サンプル:After sorted the array is:1 5 6 7
    void sort( int a[], int n )
    {
    	int i,j,t,k;
    	for(i=0;i<n;i++)
    	{
    		k=i;
    		for(j=i;j<n;j++)
    			if(a[k]>a[j])
    				k=j;
    		if(k==i)
    			continue;
    		else
    		{
    			t=a[k];
    			a[k]=a[i];
    			a[i]=t;	
    		}
    	}
    }