2023/9/27 讲课用

发布时间 2023-09-26 22:14:47作者: actypedef

杂谈

表达式

首先来明确一些概念

值(value)

即为一个静态的数据。值可以是整数,浮点数,字符,字符串等

变量(variable)

可以形象地理解为,存储值得容器。

变量有诸多类型,一般而言,变量只能存储对应类型的值。

int a=0;

“ 我向系统声明:我需要一小块内存,来存储一个整数变量,变量的值为 \(0\)

变量的值可变,通过赋值操作实现

变量名不是变量的值

char TJU='?';
cout<<YJU<<endl;
//运行结果:?

a=b;//把b的值赋给a,b的值不会改变

int a=1,b=2;
a=b;
cout<<a<<" "<<b<<endl;
//运行结果:2 2

表达式(不知道英语是啥)

表达式的结果是值

1234*4321+1145/14这种表达式的结果就是算数的结果

(a==b&&(c!=d||e>f))这种表达式的值就是逻辑运算的结果,true or false

一般来说,非零的值都被认为是true

逻辑运算

逻辑与,逻辑或,逻辑非

&& || !

逻辑与&& ,两侧都为 true ,结果才是 true

逻辑或||,两侧都为 false ,结果才是 false

逻辑非!,真变假,假变真

运算优先级(选):非>算数>与>或

当然,小括号是最优先的,如果你拿不准,多加点小括号总没有错

if(表达式){
    ;
}
while(表达式){
    ;
}

// 当表达式的值为 true 时,循环才能持续进行,分支中的语句才会执行

if(a>b){
    if(b>c){
      do sth;
    }
}
//equal to
if(a>b&&b>c){
    do sth
}

三目运算符(选)

a>b?a:b;
条件?满足时的值:不满足时的值
科普,不会也没事

i++ 与 ++i

有时间再说

嵌套

例题:对于不定组的 a 和 b,计算两数之和,并统计 998244353 在结果中出现了多少次

int cnt=0;//记得初始化,否则值由系统随机分配
while(cin>>a>>b){
    int sum=a+b;
    if(sum==998244353)
        cnt++;
    cout<<sum<<endl;//这是与局部有关的结果
}
cout<<sum<<endl;//这是与全局有关的结果

例题:课后题 4

int cnt=0;
while(cin>>a>>b>>c){
    cnt=0;//每次要初始化,不能让上次的结果影响到了下次
    for(int i=a;i<=b;i++)
        if(c%i==0)
            cnt++;//局部的计算过程
    cout<<cnt<<endl;//这是对于一组abc的结果
}

bonus: break & continue

有时间再说

SUBMIT 后发生的事

当你提交你的代码后,评测姬会对你的代码进行评测

一般来说,Online Judge 实现的功能,就是对你的代码进行评测,看看它能否完成题目要求的功能

//a+b problem
//Sample input:
//1 3
//Sample output:
//4
int a,b;
cin>>a>>b;
cout<<1+3<<endl;

显然,这份代码输出结果满足样例,但它不能满足题目要求:求给定两个数的和

Online Judge 所作的事,就是让你的代码去计算更多,更加一般的数据

1234 4321

5555

诸如此类

后台的评测数据有很多组,一般不会让错误代码蒙混过关

在线与离线

在线(选)

在线操作,就是当你每进行一次输入,就对当此输入进行运算,随即输出结果

离线(选)

离线操作,就是存下输入的内容,再统一计算、统一输出

关于读入不定行数的数据

while(cin>>x){
    calc(x);
    cout<<ans<<endl;
}
//another possible version:
// while(~scanf("%d",&x)){
while(scanf("%d",&x)!=EOF){
    ;
}

这样,一般被称为在线操作

有的人可能会疑惑:题目中输入的数据是一口气给你的,输出难道不应该在所有输入之后进行吗?评测姬会判我错吗?

这样当然容易实现:把每组数据的答案用数组保存下来,在统一输出即可,不过没必要的,也不会被判错。

原理:评测时,输入数据结尾有个 EOF(End Of File) 作为标记,代表文件的结尾。当 cin读入到 EOF 时,其返回值为 \(0\) ,循环条件不满足,循环自动终止。