如何入手ACM(新手进阶篇)

前言

经过这一段时间的学习,相信你们起码写个a+b是没有问题了。下面给大家再解除一层封印:判断语句与循环语句
我是按照洛谷训练新手村的顺序跟你们讲的。
以后基本不会写完整的代码,除非写题解,你们自己完善。

判断语句

判断语句总体上可分为两类:if……else型和switch型,记住:问题基本用if……else就能解决,我从未用过switch。

>>> if……else

c语言是计算机高级语言,其每一句话都已经很接近人类所想的过程。
例えば:如果今天是周六,那我就去外面上网

int today;//申请一个变量叫today,
scanf("%d",&today);//输入今天是星期几(为today赋值)
if(today==6)printf("go to netcafe");

这只是个片段,头文件什么的你自己加去。
经过编译后如果你输入6那if后面printf函数的内容就会输出,其他的就不行。
#========================================================#

这里出现了 “==”这个运算符特此说明一下:
在计算机中一个等于号代表的意思是赋值,例えば:

//代码2
int a;
a = 5;

这是给变量a赋值为5的意思;
如果在代码2的基础上加一句:

if(a==6)// a==6  is  false

你会发现他后面的语句不管有无,一定不会去执行。
为什么呢?
原因:因为计算机会检验if 括号中的语句,如果为真就执行后面的语句
由于括号中的值为假,不去执行后续语句。

可以好好看看:运算符相关资料
#========================================================#

>>>問題:如果今天是周六或周日我就去上网呢?

你们可能会想到这样写:

if(today==6)printf("go to netcafe");
else if(today==7)printf("go to netcafe");

这样是没有问题,但是是不是有点太麻烦了呢?编程就是让复杂问题简单化呀!どうすればいいのか?
其实上面的链接里有相关内容。我们使用一个逻辑运算符中的或即可

if(today==6 || today==7)printf("go to netcate");

if语句的用法会了吧?if中逻辑运算符中的且就交给你自己探索了。
其实if……else中还可以嵌套if……else语句,自己摸索吧。

循环语句

先提个问题:如果有题目让你输出 从1到10 这十个整数你会怎么办?

printf("1");
printf("2");
printf("3");
.....
还是
printf("123456.....");

像这样?开玩笑!想想这上面的小标题是要讲什么的。
再强调一遍:编程就是让复杂问题简单化。正解在此:

int i;//一般循环所用的变量就是i,j,k。我都是这么用的
for(i=1;i<=10;i++)
{
	printf("%d",i);
}

这里的这个花括号是不是很新奇?为何要加?

原因:for循环和if语句一样,只会执行紧跟在其后面的第一条语句,如果想执行多条语句那你就得加个花括号: {}

说点题外话
程序员中的流派很多的,就比如这个花括号的写法就分为了两派
流派一:

if(a==1){
printf("mzh is handsome");
}

流派二:

if(a==1)
{
	printf("mzh is handsome");
}

先说明一下:我是流派二的,如果你们要是写成第一种形式的话,我会把你当作异教徒的。ハハハハハ
流派一这种写法看着就很难受。
刚才用到的循环语句叫for循环语句。与while循环do……while循环并称循环语句。

>>>for循环

语法:for ( init; condition; increment )

上面那个for循环代码简称为 代码

->init就是初始化循环所使用的变量,代码中把i初始化为1。
->然后判断condition是否为真。真就接着执行循环语句,反之结束循环。代码中当i等于11的时候已经不符合条件了,循环结束。
->代码中i++的意思知道吧?我记得运算符的链接里有,就是每次循环结束后i会+1,不再多讲了。

>>>while循环

语法:while(condition)
只要while里的条件满足他就会一直执行

int i;
i=1;
while(i<=10)
{
	printf("%d",i);
}

do……while循环

语法:

do
{	
}while(condition)

他和while的区别就是:**do……while不管condition满不满足条件他都至少执行一次。**由于do……while本人很少用故不再多说。

循环控制语句

如果说你在循环变量的途中遇到了一个因素需要对循环进行一些操作该怎么办呢?

while(true)
{
	if(confition)break;//如果满足了某个条件,直接退出循环。
	else
	{
	/* code text  */
	}
}

for循环同理。

数组

这里再顺便说一下数组吧,把这个讲完新手村的题目应该都没有问题了。

假如给你100个变量然后依次输出,你怎么做?

难道是:

int a1,a2,……,a100
printf("%d%d……%d",a1,a2,……,a100);

这样?ダメです!!!
数组就是干这种事情的。声明数组和声明普通的变量并无两样:

int a[100];
double b[1000];
char c[1000];
float d[1000];

即可。
那上述问题如何输入输出变量呢?

int i;
int a[101];
for(i=1;i<=100;i++)scanf("%d",&a[i]);
for(i=1;i<=100;i++)printf("%d",a[i]);

需要注意的一点就是:数组的起始下标为0
所以说如果 定义一个a[100]的数组 其实是从a[0]到a[99],这时候如果对a[100]进行操作会导致数组越界进而产生错误,而这个错误将会是致命的,甚至会引发一些安全漏洞,以后有机会再说。
在这里插入图片描述我要求不多,如果有能写出顺序与分支题目的,把AC图片截图给我,源代码也发我一份。根据各位表现选拔人员。

发布了36 篇原创文章 · 获赞 29 · 访问量 3949

猜你喜欢

转载自blog.csdn.net/YUK_103/article/details/102809259