4.1
关系表达式与逻辑表达式
ps:
算术运算符:加减乘除等
关系运算符:比大小的
逻辑与逻辑或
非!的运算级别(应该)最高
4.2
if-else
#include <stdio.h>
//上课这个写while的原因是方便一次一次的验证,但是真实考试的时候不建议这么写,直接写for循环就可以
//oj就是这么错的!!!
//练习if-else
int main() {
int i;
while(scanf("%d",&i))
{
if(i>0)
{
printf("bigger\n");
}
else{
printf("not bigger\n");
}
}
return 0;
}
还是规范编程,写个括号
4.3
while循环
#include <stdio.h>
int main() {
int i=1,total=0;
while(i<=100)//在这里加分号会造成死循环
{
total+=i;
i++;
}
printf("%d",total);
return 0;
}
for循环
例子:1-100之间所有数求和
#include <stdio.h>
//for循环实现从1加到100
int main() {
int total=0;
for(int i=0;i<=100;i++)
{
total+=i;
}
printf("%d\n",total);
return 0;
}
例子:1-100之间的奇数求和
自己写的:
#include <stdio.h>
//for循环实现从1加到100
//使用continue,跳过一次
int main() {
int total=0;
for(int i=0;i<=100;i++)
{
if(i%2!=0){
total+=i;
}
else{
total=total;
}
}
printf("%d\n",total);
return 0;
}
老师写的:
#include <stdio.h>
//for循环实现从1加到100
//使用continue,跳过一次
int main() {
int total=0;
for(int i=0;i<=100;i++)
{
if(i%2==0){
continue;
}
total+=i;
}
printf("%d\n",total);
return 0;
}
不要忘记这些基础!!!
ps:在while里面continue要谨慎!!!(能用for还是for)
#include <stdio.h>
int main() {
int i=1,total=0;
while(i<=100)//在这里加分号会造成死循环
{
if(i%2==0)
{
continue;
}
total+=i;
i++;
}
printf("%d",total);
return 0;
}
上面这个程序continue直接给跳出循环了,去到最上面int i=1那里了
正确改法:
#include <stdio.h>
int main() {
int i=1,total=0;
while(i<=100)//在这里加分号会造成死循环
{
if(i%2==0)
{
i++;
continue;
}
total+=i;
i++;
}
printf("%d",total);
return 0;
}
break 结束整个循环
#include <stdio.h>
//break停止整个循环
int main() {
int total=0;
int i;
for(i=0;i<=100;i++)
{
if(total>2000)
{
break;
}
total+=i;
}
printf("%d\n",total);
printf("%d\n",i);
return 0;
}
4.4
oj作业
下面这两个写不出来的oj建议每天复习!!!
第一题:
#include <stdio.h>
int main() {
int a,b=0,backup;
scanf("%d",&a);
backup=a;
while(a)
{
b=b*10+a%10;
a=a/10;
}
if(b==backup)
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
举个栗子:
当输入为4321时
第一轮:a%10=1
b=1
a/10=432
第二轮:a%10=2
b=110+2=12
a/10=43
第三轮:a%10=3
b=1210+3=123
a/10=4
第四轮:a%10=4
b=123*10+4=1234
a/10=0
可以看出是相反的,不符合题意
在这里要注意12321这种符合题意的数,b一开始的其实是最高位(这句话好像除了我以外很难有人懂)
就是上面这一句,实现了从低位到高位的转换
结合上面错误栗子可以看一下。
第二题:
关于abcd在for循环里面设置循环次数的时候想复杂了,只要循环的次数可以包含过来最多多少张就可以
关于n总数的讨论:
第一次:
100/5=20
100/2=50张
第二次:
总数才40张,上面两个计算超过四十张的就可以将n设置为40
第三次:
剩下三种最少各要一张,所以最后一种最多37张
#include <stdio.h>
int main() {
int a,b,c,d;
int i=0;
for(a=1;a<=10;a++)
{
for(b=1;b<=20;b++)
{
for(c=1;c<=37;c++)
{
for(d=1;d<=37;d++)
{
if(a+b+c+d==40&&10*a+5*b+2*c+d==100)
{
// printf("%d %d %d %d\n",a,b,c,d);
i++;
}
}
}
}
}
printf("%d\n",i);
return 0;
}
善于运用极限思想