一 C语言的循环语句---while
while(条件)
{
C语言语句;
....
}
特点:
<1>循环判断
<2>条件为真的时候,执行循环
思考:写一个和while等价的for?
for(;条件;) <=> while(条件)
经验:
for语句更多的用在循环次数,while语句更多的用在循环判断?
思考:如何用while写一个死循环?
while()//错误 while(非0值) -> while(1)
二 C语言的循环语句---do --- while
do{
C语言语句;
....
}while(条件);
执行过程:先执行C语言语句,然后判断条件是否为真,如果真循环继续,否则循环结束
特点:
<1>先做事情,然后判断事情的结果
<2>至少执行一次
练习:
用do--while实现 1 + 2 + ... + 100的累加和?
点击(此处)折叠或打开
- #include <stdio.h>
- int main()
- {
- int i = 1;
- int sum = 0;
- do{
- sum += i;
- i ++;
- }while(i <= 100);
-
- printf("sum = %d\n",sum);
- return 0;
- }
三 C语言的循环控制语句 break,continue,goto
1.break 语句
(1)用在循环中语句,用来跳出当前循环[结束当前循环的运行]
(2)用在switch--case语句中,用来结束语句的执行
注意:break语句只能跳出当前层的循环,而不能直接跳出多层的嵌套循环
2.continue 语句
在循环中遇到continue语句,continue语句后面C语句将不会执行,直接进行下一次循环
注意:
<1>它只能用在循环语句
<2>它并不是跳出循环,而是继续下一次循环
练习:使用continue语句,求 1 - 100 ,偶数累加和[如果是奇数,不进行累加]
点击(此处)折叠或打开
- #include <stdio.h>
- int main()
- {
- int i;
- int sum = 0;
- for(i = 1;i <= 100;i ++)
- {
- if(i % 2 != 0)
- continue;
- sum += i;
- }
- printf("sum = %d\n",sum);
- return 0;
- }
3.goto 语句
用法:
goto 标签;
跳到指定标签去运行
注意:标签必须在函数的内部,不能重复
int main()
{
label1://标签
....
label2://标签
....
return 0;
}
四 C语言多个数据的连续存储-----数组
C语言的数组可以用来存储多个数组,当我们定义一个数组,可以配多个连续内存空间,我们用这些内存空间
来存储数据。
1.数组的定义
数据类型 数组名[数组元素的个数];
思考:定一个数组和定义一个变量的区别?
定义一个数组等价于定义多个变量,并且分配的内存是连续
例如:定义一个有5个元素的整型数组
int a[5];//正确
-----------------------------------------------
//错误的定义
int b = 5;
int a[b]; //定义数组要求数组的元素的个数确定,而此时b是一个变量
//错误的定义
int a[]; //没有写数组元素个数,不知道数组的大小
-----------------------------------------------
分析:
int a[5];
数组成员:a[0],a[1],a[2],a[3],a[4]
数组中每个成员大小:取决于数组的数据类型[指针数组比较特殊] , 此时数组成员大小:4
整个数组的大小:数组成员的个数 * 数组成员的大小 ,我们可以直接通过sizeof(数组名)计算整个数组大小
注意:
数组名标示数组的首地址
点击(此处)折叠或打开
- #include <stdio.h>
- int main()
- {
- int i;
- int index_max,index_min;
- int max,min;
- int a[10];
-
- printf("Input arry value : ");
- for(i = 0;i < 10;i ++)
- {
- scanf("%d",&a[i]);
- }
- printf("Output arry : ");
- for(i = 0;i < 10;i ++)
- {
- printf("%d ",a[i]);
- }
- printf("\n");
- //找出数组中的最大值,和最大值所在的下标
- //找出数组中的最小值, 和最小值所在的下标
- index_max = 0;
- max = a[0];
- index_min = 0;
- min = a[0];
- //1 3 2 4
- //
- for(i = 1;i < 10;i ++)
- {
- if(max < a[i]){
- max = a[i];
- index_max = i;
- }
- if(min > a[i]){
- min = a[i];
- index_min = i;
- }
- }
- printf("max = %d,index = %d\n",max,index_max);
- printf("min = %d,index = %d\n",min,index_min);
- return 0;
- }
任务:
1.输入10个整数到10个元素的数组中,然后将数组逆置,最后数组的元素的值
3 5 7 6 8 10
a[0] a[1] a[2] ...a[7] a[8] a[9]
逆置:
10 8 6 7 5 3
点击(此处)折叠或打开
- #include <stdio.h>
- int main()
- {
- int i;
- int j;
- int data;
- int a[10];
- printf("Input arry value : ");
- for(i = 0;i < sizeof(a)/sizeof(a[0]);i ++)
- {
- scanf("%d",&a[i]);
- }
- printf("Before reverse : ");
- for(i = 0;i < sizeof(a)/sizeof(a[0]);i ++)
- {
- printf("%d ",a[i]);
- }
- printf("\n");
- //reverse
- i = 0;//第一个元素下标
- j = sizeof(a)/sizeof(a[0]) - 1;//最后一个元素下标
-
- while(i < j)
- {
- data = a[i];
- a[i] = a[j];
- a[j] = data;
- i ++;
- j --;
- }
- printf("After reverse :");
- for(i = 0;i < sizeof(a)/sizeof(a[0]);i ++)
- {
- printf("%d ",a[i]);
- }
- printf("\n");
- return 0;
- }
2.输入10个字母到字符数组中,如果将字符数组中的大小字母,将它转成小写字母存储,
然后输出最大的字符和最小的字符
点击(此处)折叠或打开
- #include <stdio.h>
- int main()
- {
- int i = 0;
- char max_char,min_char;
- unsigned char buf[10];
- printf("Input char :");
- for(i = 0;i < sizeof(buf)/sizeof(buf[0]);i ++)
- {
- scanf("%c",&buf[i]);
- }
- for(i = 0;i < sizeof(buf)/sizeof(buf[0]);i ++)
- {
- printf("%c",buf[i]);
- }
- printf("\n");
-
- //把大写字符转成小写字符存储
- for(i = 0;i < sizeof(buf)/sizeof(buf[0]);i ++)
- {
- if(buf[i] >= 'A' && buf[i] <= 'Z')
- {
- buf[i] += 32;
- }
- }
- for(i = 0;i < sizeof(buf)/sizeof(buf[0]);i ++)
- {
- printf("%c",buf[i]);
- }
- printf("\n");
- //假设
- max_char = buf[0];
- min_char = buf[0];
-
- for(i = 1;i < sizeof(buf)/sizeof(buf[0]);i ++)
- {
- if(max_char < buf[i])
- {
- max_char = buf[i];
- }
- if(min_char > buf[i])
- {
- min_char = buf[i];
- }
- }
- printf("max_char : %c\n",max_char);
- printf("min_char : %c\n",min_char);
- return 0;
- }
思考:定义一个字符数组?
char a[10];