객체 지향 프로그래밍 겨울 작업 3

이 작품은 과정 속 2020 객체 지향 프로그래밍
어디 작업이 필요 객체 지향 프로그래밍 겨울 작업 2
대상 작업 프로그램 제목 완료 계속 1.
블로그를 게시 2
기타 참조
github의의 작업 창고

프로그래밍 문제

1. 작업 두 프로그래밍 문제를 계속합니다.
2. 최적화 아키텍처, 코드의 사고 확장은, 예를 들어, 나는 그런 루프를 수행하는 방법 선택, 다른 기능을 추가해야합니다.
3. 질문 : 기존의 프로그래밍 언어를 참조 할 수 있습니다, 이러한 언어의 내용이 참가합니다. 선택 루프는 함수, 또는 숫자의 범위를 확대하고, 같은 음수를 지원한다.

(1) 먼저, 그것의 확장의 문제에 대해 생각합니다.
난 당신이 코드의 강력한 확장을 원하는 경우, 그 코드를 확장하는 것입니다 대회에 기능을 추가 할 필요가 있어야한다고 생각합니다. 그것은 다음과 같이 여러 부분으로 분리 할 수 있어야, 상대가 너무 가까이 아니라, 커플 링 코드의 다양한 부분을 필요로한다, 상대적으로 강한 목표를 달성하기 위해 코드를 확장하고자, 다양한 기능 사이의 상호 작용은 달성 할 수있는보다 낮은 수준입니다.
(2) 다음 단계는 몇 가지 기능을 추가하는 것입니다.
우선 필요성이 코드는 음수를 지원합니다. 의심의 여지가 계산의 수의 범위를 충족하는 코드를 수 있도록하는 것입니다 정수에 한정되는 것은 아니다.
이것은 제 개수의 부호에 대응하는 정확한 문자 입력을 결정할 필요가있다. 이 정수의 경우 I는 서명 기능을 썼다 반환 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;
} 

부호 문자를 결정한 후 디지털 부분에 변환 할 수 있습니다. 아직 두 가지 기능의 사용이다 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;
} 

마지막 부분은 출력한다. 최종 결과가 정수가 될 수 있거나 I가 정상으로 간주 양수 수 있도록, 음의 수있는 바와 같이, 음의 수는 특별 출력을 표현하는 데 사용

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"); 
}

코드는 별도의 표시하지 않고, 또한 I는 잘 음 알림 기능뿐만 곱셈과 나눗셈을 첨가하지만, 이들 메인 함수에
(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"); 
}

그것을 실행의 결과를 봐

여기 중지이 할당.

추천

출처www.cnblogs.com/monkd/p/12315497.html