이 작품은 과정 속 | 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");
}
그것을 실행의 결과를 봐
여기 중지이 할당.