你好!!!
1for(k=0;s[k];k++)循环结束的表示是s[k]=='/0',你要知道字符数组的结标志是‘\0’,即NULL,在ascll表中可以看到null对应的ASCLL码是0,这才是使循环结束的标志,要是字符数组:char s="12134211";改为char s="12130211";程序还是循环到最后,读到字符0的时候,在ABCLL表中可以看到整数0所对应的ascll码是48,所以循环还是执行的。2当然是v[i]++;结束才可以,要是循环要是成立的话,执行的是{}内的所有语句
还有就是关于break的用法,要是没有break:看看你的程序:
switch(s[k])
{case'1':i=0;
case'2':i=1;
case'3':i=2;
case'4':i=3;}
要是s[k]='1'的话,会执行case'1':i=0;由于后面没有break,那么还得执行case'2':i=1;,同样还得执行case'3':i=2;
case'4':i=3;,即最后i的值是3,那么v[i]++;自加的是数组v的4个元素,
当s[k]='2'的时候,会执行case'2':i=1;,由于后面没有break,那么还得执行同样还得执行case'3':i=2;
case'4':i=3;,即最后i的值还是是3,那么v[i]++;自加的是数组v的4个元素
、、、、
由此可以每次循环后i的值都是3,那么自加的始终是v[3]的值,v[0],v[1],v[2]还是0;
代码:
#include<stdioh>
#include<stringh>
main()
{char s="12134011";
int v[4]={0,0,0,0},k,i;
for(k=0;s[k];k++)
{
switch(s[k])
{case'1':i=0;
case'2':i=1;
case'3':i=2;
case'4':i=3;
}
v[i]++;
}
for(k=0;k<4;k++)printf("%d ",v[k]);
}
结果:0 0 0 8 Press any key to continue
EOF 其实是一个宏,在预编译期间会被编译器用 -1 代替
也就是说,当scanf 的返回值是 -1 时就会跳出循环。
scanf 的返回值是前 N 个成功度取得数据的数量,简单点说就是成功读了多少个数据,不过有区别,如果你第一个输入数据非法的话,就算你后面是合法输入,也会返回 0 。
EOF 是 end of file 的意思,也就是文件尾。如果是读文件的话,读到文件尾就会结束循环。
如果使用键盘输入的话, 输入 Ctrl + z 就可以结束循环(貌似是模拟文件结束符还是什么的,我也不太清楚),不过我所说的是在windows 环境下,如果是其他 *** 作系统就另当别论了。
印象中,以前在百度 scanf()=EOF 看到过一篇文章就是这么讲的
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
最好可以一步一步说明
解析:
循环结构 循环结构是三种基本程序结构之一。它通过一定的条件
控制动作脚本中某一语句块反复执行,当条件不满足时就停止循环。这种程序结构对实现交互性的影片有着举足轻重的作用,在制作动画时,我们经常使用这种程序结构。
for语句是实现程序循环结构的语句,它的语法格式更紧凑,在循环起始语句中包含了循环控制变量的初始值、循环条件和循环控制变量的增量,清楚明了,因此使用较为广泛。for语句使用的一般形式为:for(表达式
1;条件表达式;表达式2)
{
代码块
}
表达式1:是一个在开始循环序列前要计算的表达式,通常为赋值表达式。
条件表达式:计算结果为true(真)或false(假)的表达式。在每次循环前计算该条件,当条件的计算结果为true时执行循环,当条件的计算结果为false时退出循环。
表达式2:一个在每次循环迭代后要计算的表达式,通常使用带++(递增)或--(递减)运算符的赋值表达式。
for语句的执行过程是,先计算“表达式1”的值,然后判断“条件表达式”的值是true(真)还是false(假),如果条件是true,那么执行循环体中的代码块,执行完以后,再执行“表达式2”,接着开始新一轮的循环;如果条件是false,那么就跳出循环,执行for语句的后继语句。
比如 从1 加到 100 可以
int i;
int SUM = 0; /累加器要至0/
for (i = 1; i <= 100; i ++)
{
SUM = SUM + i; /或者 SUM += i/
}
public class Hello{ //这是一个公共的类 Hello
public static void main(String args[]){ //带有main函数
int x=1,sum =0; // 定义了 x 和sum 2个变量
while(x<=20){ //从这一行的"{ "开始,一直到x++; 下一行的"}"结束。这是循环体。
sum +=x; // sum+=x; 的意思就是 sum=sum+x;
x++ ; // x++ 的意思就是 x=x+1; (这叫自加运算)
}
Systemoutprintln(sum); //这行是输出。 是在循环结束后的输出。所以在循环中变量的变化不会被输出。
所输出的内容是循环之后的。
}
} 循环中的意思是: 当x<=20的时候 才进入循环,否则就会跳出去的。
进入循环后做了2件事。 sum+=x和x++ 然后再回到上面去判断循环条件的真假。从而决定是否继续循环。 我对上程序有疑问: 循环条件(x<=20)。这一句。
我记得好像不可以这样写。数学中都能看出是x小于、等于20
编程中这样写编译没有提示错误吗?
你这样写试试,这是一个习惯,要改:(x<20||x==20)
第一个for,说明这个数组是三行,所以要循环三次;
然后里面嵌套了一个for,说明每行有两个数据。
所以现执行i=0;k=0;k=1;
再执行i=1;k=0;k=1;
最后执行k=2;k=0;k=1;
这样输入的循环就结束了。
下面的两个循环和上面的一样,只是输出变为输出了。输出32的数组。
呵呵 俺来帮你分析吧
单片机的循环程序和子程序有什么区别与联系
1 区别:
循环程序就是一段要反复执行的代码 只能在该处执行一次
即(执行一次要循环多次这一段代码)
子程序是一个相对独立的代码 单片机可以多次使用它 只要需要 就可以多次调用它
调用子程序要用到堆栈
每次运行只执行一次该段代码 但可以多次执行(没有次数上的限制)。
2 联系:
二者都是单片机的一种程序形式,一个子程序内部可以包含一个循环程序(如延时子程序)。
呵呵 满意就给加分喽
我是一名多年的单片机工程师,下面的讲解你可以参考一下。
原句是下面这样的。
while(n)
{
语句1;
语句2;
语句;
}
如果n>=1,就无限执行花括号里面的语句,如果n=0,就不执行花括号里面的语句,往下面执行。
常用的共有3种方式:
1 while(1)是无限循环花括号里面的语句。
比如:
while(1)
{
a=b;
c=d;
}
这样语句a=b; c=d;,从上到下执行完后,然后又回到起始点,再从上到下执行,如此无限循环。
2 while(0)
{
a=b;
c=d;
}
e=g;
这里n=0,不执行花括号里面的语句,直接跳过,执行e=g;
3 while(i--)
这里n为可变化的数字。
假设i=50,每执行完花括号里面一次,i就减1,这个就是符号“--”的原理,“--”名字叫做自减,直到i=0就退出while花括号里面的语句,相当于执行while花括号里面的语句50次。
比如:
i=50
while(i--)
{
a=b;
c=d;
}
e=g;
这样语句a=b; c=d;,从上到下执行完后,然后又回到起始点,再从上到下执行,如此循环50次后,就退出while语句,往下面执行e=g。
3 如果你想学习更多的C语言程序与电路知识,百度一下“17个实验学会单片机”,就可以看到教程了,感兴趣的朋友可以找一下。
i控制外循环的次数, i从1开始到6结束,说明外循环6次。
j,m控制内循环的次数。
i=1时,j从1到5结束,输出5个空格,m从1到1结束,输出1个,然后换行。
i=2时,输出4个空格,3个,换行
i=3时,输出3个空格,5个,换行
i=4时,输出2个空格,7个,换行
i=5时,输出1个空格,9个,换行
i=6时,输出0个空格,11个,换行
最终结果为:
评论列表(0条)