(5)C言語の基礎知識を固めて、誰が手を出して、誰が収穫します.


質問18:関数InverseByWord(char*sentence)を作成し、英語の文を単語の逆順序で保存する機能を実現し、テストプログラムを与える.(50点)
例えば:This is aninteresting programme.
逆順後:programme interesting an isThis
問題19:プログラミングはデータ暗号化を完了した.データは5ビットの整数で、暗号化のルールは、各数字に6を加え、8で割った余数でその数字を置き換え、1位と5位を交換し、2位と4位を交換することです.(15分)
 
問題20:システムによって生成される数字を当ててください.要求:ユーザーは最大10回推測する機会があり、10回以内に数字を当てると、プログラムは祝賀情報を表示し、10回連続して数字を当てなければ、ゲームは自動的に終了する.(25点)
(ヒント:次のライブラリ関数を使用できます.
randomize();システムの時間をランダムシードとして使用する;stdlib.hライブラリに含める
random(100):0-99の間のランダム数をランダムに生成します.stdlibに含める.hライブラリ内
toupper():ctype.hライブラリに含まれる文字cを大文字の英字に変換します.
 
問題18実装コード:
/* author:    */
/* date:2011/11/03 */

#include "Stdio.h"
#include "Conio.h"

#define N 200

void InverseByWord(char* sentense);

int main(void)
{
 /*            */
  char str[N],*str_temp;
  puts("please input a sentense:");
  gets(str);
  InverseByWord(str);
/*  puts(str); */
/* printf("%s
",InverseByWord(str));*/ getch(); return 0; } void InverseByWord(char* sentense) { char* begin_p,*end_p,*str_new; begin_p = sentense; end_p = sentense+strlen(sentense)-1; str_new = (char*)malloc(strlen(sentense)+1); memset(str_new,0,strlen(sentense)+1); while(end_p>begin_p) { while(*end_p!=' '&&end_p>begin_p) { end_p--; } if(*end_p==' ') { *end_p='\0'; end_p++; strcat(str_new,end_p); strcat(str_new," "); } else { strcat(str_new,end_p); } } puts(str_new); /* strcpy(sentense,str_new); puts(sentense); */ free(str_new); str_new = NULL; /* strcpy(sentense,str_new); */ /* puts(sentense); */ /* return str_new; */ }

問題19実装コード:
/* author    */
/* date:2011/11/03 */

#include "Stdio.h"
#include "Conio.h"

#define N 5

int main(void)
{
 /*            */
 int m_num,m_temp,m_i,m_j,arr_bit[5];
 puts("please input a 5 bits number:");
 scanf("%d",&m_num);
 m_temp = m_num;
 for(m_i=0;m_i<N;m_i++)
 {
    arr_bit[m_i] = (m_temp%10 + 6)%8;
    m_temp/=10;
 }
 m_i=0;
 m_j=N-1;
 while(m_i<m_j)
 {
 /*    m_temp = arr_bit[m_i]; */
     arr_bit[m_i]^=arr_bit[m_j];
     arr_bit[m_j]^=arr_bit[m_i];
     arr_bit[m_i]^=arr_bit[m_j];
     m_i++;
     m_j--;
 }
 printf("maked digtal is %d
",m_temp=(arr_bit[0]+\ arr_bit[1]*10+arr_bit[2]*100+arr_bit[3]*1000+arr_bit[4]*10000)); getch(); return 0; }

問題20実装コード:
/* author:    */
/* date:2011/11/03 */

#include "Stdio.h"
#include "stdlib.h"
#include "time.h"
#include "ctype.h"
#include "Conio.h"

int main(void)
{
 /*            */
  int m_randnum,m_count=0,m_input;
  randomize();
  m_randnum  = random(100);
  while(m_count<10)
  {
     m_count++;
     puts("please 0-99 number:");
     scanf("%d",&m_input);
     if(m_input==m_randnum)
     {
        puts("congratulations you!answer very right!");
        break;
     }
     else
     {
        if(m_input>m_randnum)
        {
        puts("very be sorry!answer error,so big!");
        }
        else
            puts("very be sorry!answer error,so little!");
     }
  }
  printf("total guess %d once
",m_count); getch(); return 0; }