この作品は、コースに属し | 2020オブジェクト指向プログラミング |
---|---|
ジョブが必要とする場合 | オブジェクト指向プログラミングの冬の操作2 |
対象のジョブ | 1.番組タイトル完了するために、続行 2.ブログを公開します |
その他の参考文献 |
githubのの仕事の倉庫
プログラミングの問題
1.ジョブ2つのプログラミングの問題を継続します。
2.最適化アーキテクチャ、コードの思考の展開は、例えば、私はループを実行する方法、そのような選択などの他の機能を、追加する必要があります。
3.質問:既存のプログラミング言語を参照することができ、これらの言語の内容は参加します。選択ループ、関数、または負の数をサポートするために、数字の範囲などを拡大します。
(1)まず、それの拡大の問題を考えます。
私はあなたのコードの強い展開をしたい場合は、そのコードは、それを拡大することである、満たすために機能を追加する必要があるべきだと思います。それは、それはこのように、いくつかの部分に分離することができるようにする必要があり、接触はそれほど近くない、それはカップリングコードのさまざまな部分を必要とする必要があり、比較的強い目標を達成するために、コードを拡大したいと考え、様々な機能間の相互作用を達成することができ、より低レベル。
(2)次のステップは、いくつかの機能を追加することです。
まず第一に必要なのこのコードは負の数をサポートします。間違いなく、計算の数の範囲を満たすために、コードをできるようにしていることを整数に限定されるものではありません。
なお、第1の数の記号に対応する正しい文字入力を決定する必要があるかもしれません。それが整数である場合、私は、符号関数を書いたリターン1そうでない場合は、-1を返します、間違いなく思考は、最初の文字がの「負」であるかどうかを決定することはありません。コードは以下の通りであります:
int sign(char *c){
char cc[2];
cc[0]=c[0];cc[1]=c[1];
if(strcmp(cc,"负")==0)return -1;
else return 1;
}
記号文字を決定した後、デジタル部分に変換することができます。それでも2つの機能を使用することであるtransform1変換個々の文字は、変換部分を体であります
char han[11][4]={"零","一","二","三","四","五","六","七","八","九","十"};
int transform1(char *c){
int i;
if(strlen(c)==2)
{
for(i=0;;i++){
if(strcmp(han[i],c)==0)break;
}
return i;
}
}
int transform(char *c){
int re;
char ch[2];
if(sign(c)==-1)
c+=2;
if(strlen(c)==2)
re=transform1(c);
else if(strlen(c)==4)
{
ch[0]=c[0];ch[1]=c[1];
if(strcmp(ch,"十")==0)re=10+transform1(c+2);
else re=10*transform1(ch);
}
else if(strlen(c)==6)
{
ch[0]=c[0];ch[1]=c[1];
re=10*transform1(ch)+transform1(c+4);
}
return sign(c-=2)*re;
}
最後の部分は、出力されます。最終結果は整数であってもよく、または私は正常とみなさ正の数になるよう、負であってもよいように、負の数は、特別な出力を発現するために使用されています
void print(int num){
if(num>=100||num<=100){
printf("抱歉,当前数据超出表示范围");
return ;
}
if(num<0){
printf("warning! 当前已亏欠:");num*=-1;
}
if(num<=10&&num>=0)printf("%s",han[num]);
else if(num<=19)printf("十%s",han[num%10]);
else if(num%10==0)printf("%s十",han[num/10]);
else printf("%s十%s",han[num/10],han[num%10]);
printf("\n");
}
加えて、私はまた、乗算、除算、並びに負リマインダー機能を追加したが、これらは主機能であり、コードが別表示されない
(3)モジュールのテストを分割する、最後の仕事は、デジタルテストに漢字ました、この行為があること、印刷テストの一部を。
コードは以下の通りであります:
#include<stdio.h>
char han[11][4]={"零","一","二","三","四","五","六","七","八","九","十"};
void print(int num){
if(num>=100||num<=-100){
printf("抱歉,当前数据超出表示范围\n");
return ;
}
if(num<0){
printf("warning! 当前已亏欠:");num*=-1;
}
if(num<=10&&num>=0)printf("%s",han[num]);
else if(num<=19)printf("十%s",han[num%10]);
else if(num%10==0)printf("%s十",han[num/10]);
else printf("%s十%s",han[num/10],han[num%10]);
printf("\n");
}
int a[10]={0,-5,23,56,20,-20,99,100,-100,-50};
int main(){
int i;
for(i=0;i<10;i++){
printf("%4d ",a[i]);
print(a[i]);
}
getchar();
return 0;
}
コンパイラの実行に示す結果:
図に示されているスクリプトの結果をコンパイル
期待される結果に見られるようにのうち何もなかったです。
加えて、私はまた、上述した負の数に乗算し、機能の分割、および起因して加え、リアルタイムの結果を思い出さされるようにするたびに、特殊なケースであり、我々はコード全体を見て、負であります
#include<stdio.h>
#include<string.h>
int transform1(char* c);
int transform(char* c);
void print(int num);
char han[11][4]={"零","一","二","三","四","五","六","七","八","九","十"};
int sign(char *c){
char cc[2];
cc[0]=c[0];cc[1]=c[1];
if(strcmp(cc,"负")==0)return -1;
else return 1;
}
int main(){
int a,i;
char bian[20];
char cc[10];
char number[10];
scanf("%s",cc);
if(strcmp(cc,"整数")==0){
int num;
scanf("%s",bian);
for(i=0;i<2;i++)scanf("%s",cc);
num=transform(cc);
scanf("%s",cc);
while(strcmp(cc,"看看")!=0){
if(strcmp(cc,bian)==0){
scanf("%s %s",cc,number);
if(strcmp(cc,"增加")==0)num+=transform(number);
if(strcmp(cc,"减少")==0)num-=transform(number);
if(strcmp(cc,"乘以")==0)num*=transform(number);
if(strcmp(cc,"除以")==0)num/=transform(number);
if(num<0)print(num);
scanf("%s",cc);
continue;
}
if(strcmp(cc,bian)!=0){
scanf("%s %s",cc,number);
scanf("%s",cc);
}
}
scanf("%s",cc);
while(strcmp(cc,bian)!=0){
printf("未定义该物品");
for(i=0;i<2;i++)scanf("%s",cc);
}
if(strcmp(cc,bian)==0){
print(num);
}
}
getchar();
getchar();
return 0;
}
int transform1(char *c){
int i;
if(strlen(c)==2)
{
for(i=0;;i++){
if(strcmp(han[i],c)==0)break;
}
return i;
}
}
int transform(char *c){
int re;
char ch[2];
if(sign(c)==-1)
c+=2;
if(strlen(c)==2)
re=transform1(c);
else if(strlen(c)==4)
{
ch[0]=c[0];ch[1]=c[1];
if(strcmp(ch,"十")==0)re=10+transform1(c+2);
else re=10*transform1(ch);
}
else if(strlen(c)==6)
{
ch[0]=c[0];ch[1]=c[1];
re=10*transform1(ch)+transform1(c+4);
}
return sign(c-=2)*re;
}
void print(int num){
if(num>=100||num<=-100){
printf("抱歉,当前数据超出表示范围");
return ;
}
if(num<0){
printf("warning! 当前已亏欠:");num*=-1;
}
if(num<=10&&num>=0)printf("%s",han[num]);
else if(num<=19)printf("十%s",han[num%10]);
else if(num%10==0)printf("%s十",han[num/10]);
else printf("%s十%s",han[num/10],han[num%10]);
printf("\n");
}
それを実行した結果を見て
、この割り当てはここで停止します。