2020 winter operations -1

This work belongs courses 2020 Object-Oriented Programming
Where the job requires Object-oriented programming winter operations 1
The target job 1. Install the C ++ development environment 2. Complete the quiz, practice questions and programming questions 3. Publish blog
Text of the job https://www.cnblogs.com/ying-hua/p/12222477.html
Other references https://jingyan.baidu.com/article/b2c186c81e79a6c46ef6ffd1.html

A. Questions and Answers

1.c language deficiencies:

I do not know c ++, c language to learn is indeed encounter some awkward place. For example: use a different format character input or output different types of variables, such as% d% lf. Sometimes the entire program to be modified, is too much trouble. The most troubling place is wrong in some parts of the program will not compile time error, such as the written% d% n, or forget to add the address characters &, such errors would be difficult to find.

2.c language compilation process:

(1) preprocessor: The program directives are processed and special symbols.
(2) Compile: converting into a specific program through the assembly code after preprocessing.
(3) Assembly: The assembly code into machine code, to produce an object file.
(4) Connection: connecting a plurality of object files and libraries, to produce an executable file.

II. Practice questions

1. Review the c ++ compiler version

Open devc ++, in the upper right corner, as

2. Use a command-line compiler c language code

Lack of knowledge of what the command line, I searched the following URL, according to his method of operation
https://jingyan.baidu.com/article/b2c186c81e79a6c46ef6ffd1.html
However there are errors, in any case I can not find vsvarsall.bat was seen in the picture is vcvarsall.bat
so I find the directory vcvarsall.bat, imitating the picture of the code to write, actually succeeded

and continue to mimic the picture code successfully generated exe file
but I press enter after input data program quit, I have not had time to see the answer QAQ
so I run the program directly from the command line, and finally succeeded

III. The programming problem (c language)

Problem decomposition

1. How to identify Chinese characters?

It is the essence of Chinese characters on a string, through access to information, learn c language strcmp function can compare strings, so I have to identify all the characters by the following method.
strcmp(str,"整数")==0

2. How to let the computer know you need to define, calculate or output?

I used a similar method to do simulation questions:
program each line can only be a string "integer", "look" or a variable

  • If the first string is a keyword or digital input corresponding Chinese character is not legitimate
  • If the string is "integer", and three strings would then read to determine the legality
  • If the string is "Look", and then be read and determine the legality of a string
  • If not the above three cases, it will be the string as a variable name

3. Chinese characters and English variable variable correspondence

Chinese character input variable name can not be used as a variable name of the program, how to make a Chinese character input variables corresponding to the variable in the program do?
Here I use the structure data type, a definition of the structure, and initialize the following manner

struct Var{
        int engv;          //英文变量 
        char chi[20];      //汉字变量 
    };
struct Var var[100]={0,""};

4. kanji conversion and digital

I defined the following two functions to achieve this function

int to_num(char num[]) //汉字转数字
{
    if(strcmp(num,"零")==0)return 0;
    if(strcmp(num,"一")==0)return 1;
}
void print_chi(int engv) //输出汉字
{
    switch(engv){
    case 0:printf("零\n");break;
    case 1:printf("一\n");break;
    }
}

5. Analyzing the legitimacy

User-entered data may not be legal, there are several cases

  • Keywords or numbers corresponding characters as variable names
  • Keyword typo
  • Digital input is not legitimate (xxi written twenty-one will not work)
  • Repeat define the variable
  • We do not yet defined variables or output operation
  • When do increase more than 99 operations
  • 做减少运算时小于0
    遇到以上几种情况时输出错误提示

6.如何定义变量、运算和输出?

定义

定义变量时将汉字变量名存入结构体数组中,并对其对应的英文变量赋值

运算

读取到“增加”时将对应英文变量加上汉字对应的数值
读取到“减少”时将对应英文变量减去汉字对应的数值

输出

读取到“看看”时输出数值对应的汉字

完整代码

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
struct Var{
        int engv;          //英文变量 
        char chi[20];      //汉字变量 
    };
struct Var var[100]={0,""};
void error()
{
    printf("你写错啦!!!");
}
int op_legal(char op[])
{
    if(strcmp(op,"等于")==0||strcmp(op,"增加")==0||strcmp(op,"减少")==0||
    strcmp(op,"零")==0||strcmp(op,"一")==0||strcmp(op,"二")==0||
    strcmp(op,"三")==0||strcmp(op,"四")==0||strcmp(op,"五")==0||
    strcmp(op,"六")==0||strcmp(op,"七")==0||strcmp(op,"八")==0||
    strcmp(op,"九")==0||strcmp(op,"十")==0||strcmp(op,"十一")==0||strcmp(op,"十二")==0||
    strcmp(op,"十三")==0||strcmp(op,"十四")==0||strcmp(op,"十五")==0||
    strcmp(op,"十六")==0||strcmp(op,"十七")==0||strcmp(op,"十八")==0||
    strcmp(op,"十九")==0||strcmp(op,"二十")==0||strcmp(op,"二十一")==0||
    strcmp(op,"二十二")==0||strcmp(op,"二十三")==0||strcmp(op,"二十四")==0||
    strcmp(op,"二十五")==0||strcmp(op,"二十六")==0||strcmp(op,"二十七")==0||
    strcmp(op,"二十八")==0||strcmp(op,"二十九")==0||strcmp(op,"三十")==0||strcmp(op,"三十一")==0||
    strcmp(op,"三十二")==0||strcmp(op,"三十三")==0||strcmp(op,"三十四")==0||
    strcmp(op,"三十五")==0||strcmp(op,"三十六")==0||strcmp(op,"三十七")==0||
    strcmp(op,"三十八")==0||strcmp(op,"三十九")==0||strcmp(op,"四十")==0||strcmp(op,"四十一")==0||
    strcmp(op,"四十二")==0||strcmp(op,"四十三")==0||strcmp(op,"四十四")==0||
    strcmp(op,"四十五")==0||strcmp(op,"四十六")==0||strcmp(op,"四十七")==0||
    strcmp(op,"四十八")==0||strcmp(op,"四十九")==0||strcmp(op,"五十")==0||strcmp(op,"五十一")==0||
    strcmp(op,"五十二")==0||strcmp(op,"五十三")==0||strcmp(op,"五十四")==0||
    strcmp(op,"五十五")==0||strcmp(op,"五十六")==0||strcmp(op,"五十七")==0||
    strcmp(op,"五十八")==0||strcmp(op,"五十九")==0||strcmp(op,"六十")==0||strcmp(op,"六十一")==0||
    strcmp(op,"六十二")==0||strcmp(op,"六十三")==0||strcmp(op,"六十四")==0||
    strcmp(op,"六十五")==0||strcmp(op,"六十六")==0||strcmp(op,"六十七")==0||
    strcmp(op,"六十八")==0||strcmp(op,"六十九")==0||strcmp(op,"七十")==0||strcmp(op,"七十一")==0||
    strcmp(op,"七十二")==0||strcmp(op,"七十三")==0||strcmp(op,"七十四")==0||
    strcmp(op,"七十五")==0||strcmp(op,"七十六")==0||strcmp(op,"七十七")==0||
    strcmp(op,"七十八")==0||strcmp(op,"七十九")==0||strcmp(op,"八十")==0||strcmp(op,"八十一")==0||
    strcmp(op,"八十二")==0||strcmp(op,"八十三")==0||strcmp(op,"八十四")==0||
    strcmp(op,"八十五")==0||strcmp(op,"八十六")==0||strcmp(op,"八十七")==0||
    strcmp(op,"八十八")==0||strcmp(op,"八十九")==0||strcmp(op,"九十")==0||strcmp(op,"九十一")==0||
    strcmp(op,"九十二")==0||strcmp(op,"九十三")==0||strcmp(op,"九十四")==0||
    strcmp(op,"九十五")==0||strcmp(op,"九十六")==0||strcmp(op,"九十七")==0||
    strcmp(op,"九十八")==0||strcmp(op,"九十九")==0)
        return 0;
    return 1;
}
int var_legal(char vari[])
{
    int i;
    if(strcmp(vari,"整数")==0||strcmp(vari,"等于")==0||
    strcmp(vari,"增加")==0||strcmp(vari,"减少")==0||strcmp(vari,"看看")==0)
        return 0;
    for(i=0;strlen(var[i].chi)!=0;i++)
        if(strcmp(vari,var[i].chi)==0)  //变量已被定义过 
            return 0;
    return 1;
}
int num_legal(char num[])
{
    if(strcmp(num,"零")==0||strcmp(num,"一")==0||strcmp(num,"二")==0||
    strcmp(num,"三")==0||strcmp(num,"四")==0||strcmp(num,"五")==0||
    strcmp(num,"六")==0||strcmp(num,"七")==0||strcmp(num,"八")==0||
    strcmp(num,"九")==0||strcmp(num,"十")==0||strcmp(num,"十一")==0||strcmp(num,"十二")==0||
    strcmp(num,"十三")==0||strcmp(num,"十四")==0||strcmp(num,"十五")==0||
    strcmp(num,"十六")==0||strcmp(num,"十七")==0||strcmp(num,"十八")==0||
    strcmp(num,"十九")==0||strcmp(num,"二十")==0||strcmp(num,"二十一")==0||
    strcmp(num,"二十二")==0||strcmp(num,"二十三")==0||strcmp(num,"二十四")==0||
    strcmp(num,"二十五")==0||strcmp(num,"二十六")==0||strcmp(num,"二十七")==0||
    strcmp(num,"二十八")==0||strcmp(num,"二十九")==0||strcmp(num,"三十")==0||strcmp(num,"三十一")==0||
    strcmp(num,"三十二")==0||strcmp(num,"三十三")==0||strcmp(num,"三十四")==0||
    strcmp(num,"三十五")==0||strcmp(num,"三十六")==0||strcmp(num,"三十七")==0||
    strcmp(num,"三十八")==0||strcmp(num,"三十九")==0||strcmp(num,"四十")==0||strcmp(num,"四十一")==0||
    strcmp(num,"四十二")==0||strcmp(num,"四十三")==0||strcmp(num,"四十四")==0||
    strcmp(num,"四十五")==0||strcmp(num,"四十六")==0||strcmp(num,"四十七")==0||
    strcmp(num,"四十八")==0||strcmp(num,"四十九")==0||strcmp(num,"五十")==0||strcmp(num,"五十一")==0||
    strcmp(num,"五十二")==0||strcmp(num,"五十三")==0||strcmp(num,"五十四")==0||
    strcmp(num,"五十五")==0||strcmp(num,"五十六")==0||strcmp(num,"五十七")==0||
    strcmp(num,"五十八")==0||strcmp(num,"五十九")==0||strcmp(num,"六十")==0||strcmp(num,"六十一")==0||
    strcmp(num,"六十二")==0||strcmp(num,"六十三")==0||strcmp(num,"六十四")==0||
    strcmp(num,"六十五")==0||strcmp(num,"六十六")==0||strcmp(num,"六十七")==0||
    strcmp(num,"六十八")==0||strcmp(num,"六十九")==0||strcmp(num,"七十")==0||strcmp(num,"七十一")==0||
    strcmp(num,"七十二")==0||strcmp(num,"七十三")==0||strcmp(num,"七十四")==0||
    strcmp(num,"七十五")==0||strcmp(num,"七十六")==0||strcmp(num,"七十七")==0||
    strcmp(num,"七十八")==0||strcmp(num,"七十九")==0||strcmp(num,"八十")==0||strcmp(num,"八十一")==0||
    strcmp(num,"八十二")==0||strcmp(num,"八十三")==0||strcmp(num,"八十四")==0||
    strcmp(num,"八十五")==0||strcmp(num,"八十六")==0||strcmp(num,"八十七")==0||
    strcmp(num,"八十八")==0||strcmp(num,"八十九")==0||strcmp(num,"九十")==0||strcmp(num,"九十一")==0||
    strcmp(num,"九十二")==0||strcmp(num,"九十三")==0||strcmp(num,"九十四")==0||
    strcmp(num,"九十五")==0||strcmp(num,"九十六")==0||strcmp(num,"九十七")==0||
    strcmp(num,"九十八")==0||strcmp(num,"九十九")==0)
        return 1;
    return 0;
}
int equal_legal(char equal[])
{
    if(strcmp(equal,"等于")==0)
        return 1;
    return 0;
}
int to_num(char num[])
{
    if(strcmp(num,"零")==0)return 0;
    if(strcmp(num,"一")==0)return 1;
    if(strcmp(num,"二")==0)return 2;
    if(strcmp(num,"三")==0)return 3;
    if(strcmp(num,"四")==0)return 4;
    if(strcmp(num,"五")==0)return 5;
    if(strcmp(num,"六")==0)return 6;
    if(strcmp(num,"七")==0)return 7;
    if(strcmp(num,"八")==0)return 8;
    if(strcmp(num,"九")==0)return 9;
    if(strcmp(num,"十")==0)return 10;
    if(strcmp(num,"十一")==0)return 11;
    if(strcmp(num,"十二")==0)return 12;
    if(strcmp(num,"十三")==0)return 13;
    if(strcmp(num,"十四")==0)return 14;
    if(strcmp(num,"十五")==0)return 15;
    if(strcmp(num,"十六")==0)return 16;
    if(strcmp(num,"十七")==0)return 17;
    if(strcmp(num,"十八")==0)return 18;
    if(strcmp(num,"十九")==0)return 19;
    if(strcmp(num,"二十")==0)return 20;
    if(strcmp(num,"二十一")==0)return 21;
    if(strcmp(num,"二十二")==0)return 22;
    if(strcmp(num,"二十三")==0)return 23;
    if(strcmp(num,"二十四")==0)return 24;
    if(strcmp(num,"二十五")==0)return 25;
    if(strcmp(num,"二十六")==0)return 26;
    if(strcmp(num,"二十七")==0)return 27;
    if(strcmp(num,"二十八")==0)return 28;
    if(strcmp(num,"二十九")==0)return 29;
    if(strcmp(num,"三十")==0)return 30;
    if(strcmp(num,"三十一")==0)return 31;
    if(strcmp(num,"三十二")==0)return 32;
    if(strcmp(num,"三十三")==0)return 33;
    if(strcmp(num,"三十四")==0)return 34;
    if(strcmp(num,"三十五")==0)return 35;
    if(strcmp(num,"三十六")==0)return 36;
    if(strcmp(num,"三十七")==0)return 37;
    if(strcmp(num,"三十八")==0)return 38;
    if(strcmp(num,"三十九")==0)return 39;
    if(strcmp(num,"四十")==0)return 40;
    if(strcmp(num,"四十一")==0)return 41;
    if(strcmp(num,"四十二")==0)return 42;
    if(strcmp(num,"四十三")==0)return 43;
    if(strcmp(num,"四十四")==0)return 44;
    if(strcmp(num,"四十五")==0)return 45;
    if(strcmp(num,"四十六")==0)return 46;
    if(strcmp(num,"四十七")==0)return 47;
    if(strcmp(num,"四十八")==0)return 48;
    if(strcmp(num,"四十九")==0)return 49;
    if(strcmp(num,"五十")==0)return 50;
    if(strcmp(num,"五十一")==0)return 51;
    if(strcmp(num,"五十二")==0)return 52;
    if(strcmp(num,"五十三")==0)return 53;
    if(strcmp(num,"五十四")==0)return 54;
    if(strcmp(num,"五十五")==0)return 55;
    if(strcmp(num,"五十六")==0)return 56;
    if(strcmp(num,"五十七")==0)return 57;
    if(strcmp(num,"五十八")==0)return 58;
    if(strcmp(num,"五十九")==0)return 59;
    if(strcmp(num,"六十")==0)return 60;
    if(strcmp(num,"六十一")==0)return 61;
    if(strcmp(num,"六十二")==0)return 62;
    if(strcmp(num,"六十三")==0)return 63;
    if(strcmp(num,"六十四")==0)return 64;
    if(strcmp(num,"六十五")==0)return 65;
    if(strcmp(num,"六十六")==0)return 66;
    if(strcmp(num,"六十七")==0)return 67;
    if(strcmp(num,"六十八")==0)return 68;
    if(strcmp(num,"六十九")==0)return 69;
    if(strcmp(num,"七十")==0)return 70;
    if(strcmp(num,"七十一")==0)return 71;
    if(strcmp(num,"七十二")==0)return 72;
    if(strcmp(num,"七十三")==0)return 73;
    if(strcmp(num,"七十四")==0)return 74;
    if(strcmp(num,"七十五")==0)return 75;
    if(strcmp(num,"七十六")==0)return 76;
    if(strcmp(num,"七十七")==0)return 77;
    if(strcmp(num,"七十八")==0)return 78;
    if(strcmp(num,"七十九")==0)return 79;
    if(strcmp(num,"八十")==0)return 80;
    if(strcmp(num,"八十一")==0)return 81;
    if(strcmp(num,"八十二")==0)return 82;
    if(strcmp(num,"八十三")==0)return 83;
    if(strcmp(num,"八十四")==0)return 84;
    if(strcmp(num,"八十五")==0)return 85;
    if(strcmp(num,"八十六")==0)return 86;
    if(strcmp(num,"八十七")==0)return 87;
    if(strcmp(num,"八十八")==0)return 88;
    if(strcmp(num,"八十九")==0)return 89;
    if(strcmp(num,"九十")==0)return 90;
    if(strcmp(num,"九十一")==0)return 91;
    if(strcmp(num,"九十二")==0)return 92;
    if(strcmp(num,"九十三")==0)return 93;
    if(strcmp(num,"九十四")==0)return 94;
    if(strcmp(num,"九十五")==0)return 95;
    if(strcmp(num,"九十六")==0)return 96;
    if(strcmp(num,"九十七")==0)return 97;
    if(strcmp(num,"九十八")==0)return 98;
    if(strcmp(num,"九十九")==0)return 99;
}
int is_defined(char vari[])
{
    int i;
    for(i=0;strlen(var[i].chi)!=0;i++)
        if(strcmp(vari,var[i].chi)==0)
            return 1;
    return 0;
}
void print_chi(int engv)
{
    switch(engv){
        case 0:printf("零\n");break;
        case 1:printf("一\n");break;
        case 2:printf("二\n");break;
        case 3:printf("三\n");break;
        case 4:printf("四\n");break;
        case 5:printf("五\n");break;
        case 6:printf("六\n");break;
        case 7:printf("七\n");break;
        case 8:printf("八\n");break;
        case 9:printf("九\n");break;
        case 10:printf("十\n");break;
        case 11:printf("十一\n");break;
        case 12:printf("十二\n");break;
        case 13:printf("十三\n");break;
        case 14:printf("十四\n");break;
        case 15:printf("十五\n");break;
        case 16:printf("十六\n");break;
        case 17:printf("十七\n");break;
        case 18:printf("十八\n");break;
        case 19:printf("十九\n");break;
        case 20:printf("二十\n");break;
        case 21:printf("二十一\n");break;
        case 22:printf("二十二\n");break;
        case 23:printf("二十三\n");break;
        case 24:printf("二十四\n");break;
        case 25:printf("二十五\n");break;
        case 26:printf("二十六\n");break;
        case 27:printf("二十七\n");break;
        case 28:printf("二十八\n");break;
        case 29:printf("二十九\n");break;
        case 30:printf("三十\n");break;
        case 31:printf("三十一\n");break;
        case 32:printf("三十二\n");break;
        case 33:printf("三十三\n");break;
        case 34:printf("三十四\n");break;
        case 35:printf("三十五\n");break;
        case 36:printf("三十六\n");break;
        case 37:printf("三十七\n");break;
        case 38:printf("三十八\n");break;
        case 39:printf("三十九\n");break;
        case 40:printf("四十\n");break;
        case 41:printf("四十一\n");break;
        case 42:printf("四十二\n");break;
        case 43:printf("四十三\n");break;
        case 44:printf("四十四\n");break;
        case 45:printf("四十五\n");break;
        case 46:printf("四十六\n");break;
        case 47:printf("四十七\n");break;
        case 48:printf("四十八\n");break;
        case 49:printf("四十九\n");break;
        case 50:printf("五十\n");break;
        case 51:printf("五十一\n");break;
        case 52:printf("五十二\n");break;
        case 53:printf("五十三\n");break;
        case 54:printf("五十四\n");break;
        case 55:printf("五十五\n");break;
        case 56:printf("五十六\n");break;
        case 57:printf("五十七\n");break;
        case 58:printf("五十八\n");break;
        case 59:printf("五十九\n");break;
        case 60:printf("六十\n");break;
        case 61:printf("六十一\n");break;
        case 62:printf("六十二\n");break;
        case 63:printf("六十三\n");break;
        case 64:printf("六十四\n");break;
        case 65:printf("六十五\n");break;
        case 66:printf("六十六\n");break;
        case 67:printf("六十七\n");break;
        case 68:printf("六十八\n");break;
        case 69:printf("六十九\n");break;
        case 70:printf("七十\n");break;
        case 71:printf("七十一\n");break;
        case 72:printf("七十二\n");break;
        case 73:printf("七十三\n");break;
        case 74:printf("七十四\n");break;
        case 75:printf("七十五\n");break;
        case 76:printf("七十六\n");break;
        case 77:printf("七十七\n");break;
        case 78:printf("七十八\n");break;
        case 79:printf("七十九\n");break;
        case 80:printf("八十\n");break;
        case 81:printf("八十一\n");break;
        case 82:printf("八十二\n");break;
        case 83:printf("八十三\n");break;
        case 84:printf("八十四\n");break;
        case 85:printf("八十五\n");break;
        case 86:printf("八十六\n");break;
        case 87:printf("八十七\n");break;
        case 88:printf("八十八\n");break;
        case 89:printf("八十九\n");break;
        case 90:printf("九十\n");break;
        case 91:printf("九十一\n");break;
        case 92:printf("九十二\n");break;
        case 93:printf("九十三\n");break;
        case 94:printf("九十四\n");break;
        case 95:printf("九十五\n");break;
        case 96:printf("九十六\n");break;
        case 97:printf("九十七\n");break;
        case 98:printf("九十八\n");break;
        case 99:printf("九十九\n");break;
    }
}
void look(char vari[])
{
    int i;
    for(i=0;strlen(var[i].chi)!=0;i++)
        if(strcmp(vari,var[i].chi)==0){     
            print_chi(var[i].engv);
            break;
        }
}
int compute_legal(char compute[])
{
    if(strcmp(compute,"增加")==0||strcmp(compute,"减少")==0)
        return 1;
    return 0;
}
void computef(char vari[],char com[],char num[])
{
    int i;
    if(strcmp(com,"增加")==0){
        for(i=0;strlen(var[i].chi)!=0;i++)
            if(strcmp(vari,var[i].chi)==0){
                if((var[i].engv+to_num(num))>=100)
                    printf("增加的数值过大\n");
                else 
                    var[i].engv+=to_num(num);
                break;
            }
    }
    else{
        for(i=0;strlen(var[i].chi)!=0;i++)
            if(strcmp(vari,var[i].chi)==0){
                if((var[i].engv-to_num(num))<0)
                    printf("减少的数值过大\n");
                else 
                    var[i].engv-=to_num(num);
                break;
            }
    }
}
int main()
{
    int i=0,j;
    char op[10],vari[10],num[10],compute[10],equal[10];
    while(1){
        scanf("%s",op);
        if(op_legal(op)==0)
            error(); 
        else{
            if(strcmp(op,"整数")==0){
                scanf("%s%s%s",vari,equal,num);
                if(var_legal(vari)==0||num_legal(num)==0||equal_legal(equal)==0)
                    error();
                else{
                    var[i].engv=to_num(num);
                    strcpy(var[i].chi,vari);
                    i++;
                }
            }
            else if(strcmp(op,"看看")==0){
                scanf("%s",vari);
                if(is_defined(vari)==0)
                    error();
                else
                    look(vari);
            }
            else{       //计算 
                if(is_defined(op)==0)
                    error(); 
                else{
                    scanf("%s%s",compute,num);
                    if(compute_legal(compute)==0||num_legal(num)==0)
                        error();
                    else{
                        computef(op,compute,num);
                    }
                }
            }
        }
    }
    return 0;
}

原谅我的代码过于冗长QAQ 之后我会再想办法不这么暴力

Guess you like

Origin www.cnblogs.com/ying-hua/p/12222477.html