コンピュータ科学-第8週の文字列と動的配列のテーマと参考解答
5335 ワード
「コンピュータ科学」コースのホームページは以下の通りです。http://blog.csdn.net/sxhelijian/article/details/13705597
1、読書プログラム
下記のプログラムを読んで、運転結果を書いて、飛行機に乗る時にプログラムを実行して、結果を記録します。
実際に運転した結果、グウグウウグウ
(2)
(3)
実際に運転した結果、グウグウウグウ
(4)
実際に運転した結果、グウグウウグウ
2、文字列暗号化プログラム
背景:明さんはクラスメートにレさんにメモを伝えさせます。小丽は会心して笑うことを受け取って、みんなは何も分かりません。メモにはM$pszi$yと書かれていますが、実際の文字の前の4番目の文字を約束しています。M$pszi$yはどういう意味ですか?計算してみます。ASCIIコード表で調べてみます。もちろんI love uです。(1)明さんは手続きを書いてください。李さんにラブレターを書く時は、自分の「翻訳」を手間をかけなくてもいいです。元の手紙の各文字はその後の第4文字に暗号化されています。例として、I love uを入力して、M$pszi$yを出力します。参考解答:
参考解答:
参考解答:
プログラムを作って、あるクラスの授業の成績を入力して、順序を並べて出力します。成績は小数点以下かもしれない。クラスの人数が不定で、ダイナミックな配列で完成することが要求されます。下のコードに基づいて完成します。
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;
}