コンピュータ科学-第8週の文字列と動的配列のテーマと参考解答

5335 ワード

「コンピュータ科学」コースのホームページは以下の通りです。http://blog.csdn.net/sxhelijian/article/details/13705597
1、読書プログラム
下記のプログラムを読んで、運転結果を書いて、飛行機に乗る時にプログラムを実行して、結果を記録します。
#include<stdio.h>
int main()
{
    int i;
    for(i='A'; i<'I'; i++,i++)
        printf("%c",i+32);
    printf("
"); return 0; }
運転結果は、__u_u_u_u u_u u_u u u_u u_u u u_u u u u_u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u
実際に運転した結果、グウグウウグウ
(2)
#include<stdio.h>
int main()
{
    char ch;
    scanf("%c", &ch);
    while(ch!='
') { printf("%c", ch-6); scanf("%c", &ch); } return 0; }
プログラムの機能は以下の通りです。実際にプログラムを実行して体験します。
(3)
#include<stdio.h>
#include<string.h>
int main()
{
    char *p1,*p2,str[50]="ABCDEFG";
    p1="abcd";
    p2="efgh";
    strcpy(str+1,p2+1);
    strcpy(str+3,p1+3);
    printf("%s",str);
    return 0;
}
運転結果は、__u_u_u_u u_u u_u u u_u u_u u u_u u u u_u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u
実際に運転した結果、グウグウウグウ
(4)
#include <stdio.h>
int main( )
{
    char s[]="abcdefg";
    char *p;
    p=s;
    printf("ch=%c
",*(p+5)); return 0; }
運転結果は、__u_u_u_u u_u u_u u u_u u_u u u_u u u u_u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u
実際に運転した結果、グウグウウグウ
2、文字列暗号化プログラム
背景:明さんはクラスメートにレさんにメモを伝えさせます。小丽は会心して笑うことを受け取って、みんなは何も分かりません。メモにはM$pszi$yと書かれていますが、実際の文字の前の4番目の文字を約束しています。M$pszi$yはどういう意味ですか?計算してみます。ASCIIコード表で調べてみます。もちろんI love uです。(1)明さんは手続きを書いてください。李さんにラブレターを書く時は、自分の「翻訳」を手間をかけなくてもいいです。元の手紙の各文字はその後の第4文字に暗号化されています。例として、I love uを入力して、M$pszi$yを出力します。参考解答:
#include<stdio.h>
int main()
{
    char s[80], t[80];
    int i;
    gets(s);
    for(i=0; s[i]!='\0'; i++)
    {
        t[i] = s[i]+4;
    }
    t[i] = '\0'; //  i ?
    printf("%s
", t); return 0; }
(2)李さんはプログラムを書いてください。明さんの恋文を読む時、プログラムに「復号」を手伝ってもらいます。彼ら2人の「暗号化」の手段を知った学生がいますので、紙を人が伝え、暗号化された数字(1-9)は二人の約束したジェスチャーで伝えます。復号する時には、暗号化された数字をプログラムとして入力する必要があります。例として、M$pszi$y(回車)4を入力し、I love uを出力します。
参考解答:
#include<stdio.h>
int main()
{
    char s[80], t[80];
    int i, n;
    printf("       :");
    gets(s);
    printf("      :");
    scanf("%d", &n);
    char *pt = t;
    for(i=0; *(s+i)!='\0'; i++,pt++)
    {
        *pt = s[i]-n;
    }
    *pt = '\0';
    printf("%s
", t); return 0; }
(3)剛さんはよく紙を渡してくれます。二人の秘密を知りたいですが、暗号化された数字が分かりません。そこでプログラムを書いて、可能な状況を全部書き上げることができます。例として、M$pszi$yを入力すると、複数行の出力の中に必ず1行がI love uとなります。剛さんです。このプログラムを書いてください。
参考解答:
#include<stdio.h>
int main()
{
    char s[80], t[80], *pt;
    int i, n;
    printf("       :");
    gets(s);
    for(n=1; n<9; n++)
    {
        pt = t;
        for(i=0; *(s+i)!='\0'; i++,pt++)
        {
            *pt = s[i]-n;
        }
        *pt = '\0';
        printf("%s
", t); } return 0; }
3、文字統計:文字列の大文字、小文字、数字の個数をそれぞれ統計します。
#include<stdio.h>
#include<string.h>
int main()
{
    char str[256], *ps;
    int upper=0, lower=0, digit = 0;
    gets(str);
    for ( ps = str; *ps != '\0'; ps++ )
    {
        if ( *ps >= 'A' && *ps <= 'Z' )
            upper++;
        else if  ( *ps >= 'a' && *ps <= 'z' )
            lower++;
        else if ( *ps >= '0' && *ps <= '9' )
            digit++;
    }
    printf("   : %s
", str); printf(" : %d
", upper); printf(" : %d
", lower); printf(" : %d
", digit); return 0; }
4、プログラミング。動的配列の要素を並べ替えます。
プログラムを作って、あるクラスの授業の成績を入力して、順序を並べて出力します。成績は小数点以下かもしれない。クラスの人数が不定で、ダイナミックな配列で完成することが要求されます。下のコードに基づいて完成します。
#include<stdio.h>
#include<malloc.h>
int main()
{
    int count, i,j;
    float *pf;
    scanf("%d", &count);   //      
    //    ,             
     
    //        
     
    //  


    //        


    free(pf);
    return 0;
}
参考解答:
#include<stdio.h>
#include<malloc.h>
int main()
{
    int count, i,j,r;
    float *pf, tmp;
    scanf("%d", &count);   //      
    //    ,             
    pf = (float*) malloc( sizeof(float) * count );
    //        
    for ( i = 0; i < count; i++ )
    {
        scanf("%f", pf+i);
    }
    //  
    for(j=count-1; j>0; j--)  //   
    {
        for(r=0; r<j; r++)
        {
            if(*(pf+r)>*(pf+r+1)) // pf[r]>pf[r+1],  *(pf+r)  
            {
                tmp = *(pf+r);
                *(pf+r) = *(pf+r+1);
                *(pf+r+1) = tmp;
            }
        }
    }
    //        
    for ( i = 0; i < count; i++ )
    {
        printf("%f
", *(pf+i)); } free(pf); return 0; }