ポインタ作業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
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
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”);
}
/*ここに答えを記入してください*/
入力サンプル:8
出力サンプル:Index is 7
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];
}
/*あなたのコードはここに埋め込まれます*/
入力サンプル:4 5 1 7 6
出力サンプル:After sorted the array is:1 5 6 7
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;
}
}
}