while
int i=1;
while(i<5)
{
printf("%d\n",i);
i++;
}
死循环:while(1);
do ... while
int i=12;
do
{
printf("%d ",i);
i++;
} while (i<=6); //do while 无论条件是否成立,都会先执行一次。
/* while (i<=6)
{
printf("%d ",i); //先进行判断,后执行程序
i++;
} */
while 先判断,后执行
do ... while 先执行(一次),后判断
循环控制语句
for (int i = 1; i < 6; i++)
{
if (i==3)
{
// break; //1 2
// continue; //1 2 3 4 5
return 0; //1 2
}
printf("%d\n",i);
}
数组
由一个或多个相同类型的数据组成的集合。
特点:1. 数据类型必须相同;
2. 内存连续。
一维数组:
格式:
存储类型 数据类型 数组名[元素个数]
int a[5]
注:只有在定义数组时,[ ] 中元素表示元素个数,其他情况下[ ]表示的是索引/下标。
strcpy(s, "world");若初始化时未赋值,只能通过这个函数来赋值
例:
int a[5] = {1,2,5,6,8};
printf("%d %d %d\n",a[0],a[2],a[4]); //1 5 8
访问元素:数组名[索引] // 索引从 0 开始
数据类型保持一致
int a[5]={2,3,4,5,6};
char b[5]={'q','w','e'};
数组名:
!数组名也是数组首地址,是一个地址常量,不能被修改(不能为左值)。
%p:地址
int a[5] = {1,2,5,6,8};
printf("%d %d %d\n",a[0],a[2],a[4]); //1 5 8
printf("%p\n",a); //0x7ffe804e70d0
printf("%p\n",&a[0]); //0x7ffe804e70d0
a[5] 5 :数组大小
a[5] 5 :数组大小
sizeof(a)-->元素个数 * 数据类型大小 5*4=20
int a[5] = {1,2,5,6,8};
int a1[5] = {3,4};
int a2[5] = {9};
int b[] = {1,2,5,6,8};
int b1[] = {3,4};
int b2[] = {9};
printf("%ld\n",sizeof(b)); //20
printf("%ld\n",sizeof(b1)); //8
printf("%ld\n",sizeof(b2)); //4
printf("%ld\n",sizeof(a)); //20
printf("%ld\n",sizeof(a1)); //20
printf("%ld\n",sizeof(a2)); //20
初始化
- 完全初始化
int a[5] = {2,3,4,5,6};
- 部分初始化
int a[5]={2,3};
未初始化部分,默认值为0;
int a[5] = { }; // 0 0 0 0 0
int a[5] = { 0 }; // 0 0 0 0 0
—————————————————————————————————
int a[5]={4,5}; //部分初始化
printf("%d %d\n",a[2],a[3]); //0 0
- 未初始化
int a[5];
值为随机值;
可单独赋值 a[0] = 2;
遍历数组
int a[5]={};
for (int i = 0; i < 5; i++)
{
scanf("%d",&a[i]);
}
for (int i = 0; i < 5; i++)
{
printf("%d\n",a[i]);
}
int a[5]={9,8,7,6,5};
for(int i=0;i<5;i++)
{
printf("%p\n",&a[i]);
}
练习:数组随机赋五个值,求其中最大值和最小值。
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a[5]={};
for (int i = 0; i < 5; i++)
{
scanf("%d",&a[i]);
}
int max=a[0],min=a[0];
for (int i = 0; i < 4; i++)
{
if (max<a[i+1])
{
max = a[i+1];
}
if (min>a[i+1])
{
min = a[i+1];
}
}printf("最大值为:%d\n最小值为:%d\n",max,min);
return 0;
}
清零函数
bzero
#include <strings.h>
void bzero (void *s, size_t n);
功能:数组清零(将其中值变为0)
参数:s:数组首地址 n:字节大小 size _t==int
返回值:无
bzero(a,sizeof(a)); //数组清零
for(int i=0;i<5;i++)
printf("%d\n",a[i]); //0 0 0 0 0
return 0;
memset
#include <string.h>
void *memset(void *s, int c, size_t n);
功能:数组清零
参数:s:数组首地址 n:字节大小 c:要设置的值
返回值:数组首地址
memset(a,0,sizeof(a)); //数组清零
for(int i=0;i<5;i++)
printf("%d\n",a[i]); //0 0 0 0 0
return 0;
按字节赋值 int 4字节
1字节=8位 00000001 00000001 00000001 00000001
字符数组
存放字符串
char a[5]= {'n','i','c','e'};
char b[5]={"nice"};
char c[33]="nice";
char d[]="nice";
printf("%ld\n",sizeof(a)); //5
printf("%ld\n",sizeof(b)); //5
printf("%ld\n",sizeof(c)); //33
printf("%ld\n",sizeof(d)); //5
字符数组输入输出
- for
for(int i=0;i<5;i++)
scanf("%c",&ch[i]);
for(int i=0;i<5;i++)
printf("%c",ch[i]);
- %s
char [33] = {0};
scanf("%s",ch);
printf("%s\n",ch);
—————————————————————————
char ch[33]={0};
scanf("%[^\n]",ch);//scanf默认遇到空格或回车赋值结束,如果想保留空格, 可以加 scanf("%[^\n]",ch)
printf("%s\n",ch);
3. gets puts(字符串专用)
gets
char *gets(char *s);
功能:终端输入字符串
参数:字符数组首地址
返回值:字符数组首地址
puts
int puts(const char *s);
功能:终端输出字符串
参数:字符数组首地址
返回值:字符个数
char s[33]={};
gets(s);
puts(s);