本帖最后由 鸦领主 于 2020-12-23 15:22 编辑
(之所以定义一个数组是因为要同时定义多个同类型的变量,节省内存)
1.数组:
数组是一组具有相同数据类型的有序变量的集合,再内存中表现为一块连续的存储区域。
a)数组定义:普通变量定义后加[常量]
如:类型标识符 数组名[常量表达式]
char s [20]
而后的scanf_s("%s",s,sizeof(s)) s可以用&也可以不用
因为s是char数组,s本身指向这个数组首地址。
s里保存的本身就是个地址。&是取地址,所以可以用也可以不用
b)数组初始化:用{}给数组赋予初值
初始化元素的个数可以不全(用1个到总数个常量和变量)
未初始化全,把其余的归零
数组清零:char s[20]={0}
不指定个数 int s[]={2,55,36,44}
c)求数组空间:
sizeof(数组)也可以说是sizeof(元素)*元素的个数
_countof(数组)用到#include <stdlib.h>
2.定义一个字符串数组,循环打印出每个数组的内容,一直到结尾符'\0'结束(\0占一个位置)
#include<stdio.h>
int main()
{
char c[20];//定义一个20空间的字符串数组
scanf_s("%s", &c,20); //指定20个长度给scanf_s使用
//或则使用sizeof(s)更方便,上面变化下面不用改动
int i = 0;
while (c[i]!='\0')//到结尾符结束循环或者可以写成c[i]!=0
{
printf("c[%d]:%c=%d 地址:0x%x\n",i,c,c,&c);
i++;
}
return 0;
}
数组
3.定义一个字符串数组,得出你输入的字符串的长度
#include<stdio.h>
int main()
{
char c[50];
scanf_s("%s", &c,sizeof(c));
int i = 0;
while (c[i][i])//这里可以简化成这个样子
i++;
printf("你输入了%d个字符串", i);
return 0;
}
数组
4.定义一个字符串数组,将输入的字符串反序输出(①反一个输出一个,②全部反序再输出)
汉字反序的话就会变成另一个汉字,不再是原来的汉字
①
#include<stdio.h>
int main()
{
char c[50];
scanf_s("%s", &c,sizeof(c));
int i = 0;
while (c[i])
i++;
while (i > 0)
printf("%c",c[--i]);
return 0;
}
②
#include<stdio.h>
int main()
{
char c[50];
scanf_s("%s", &c,sizeof(c));
int i = 0;
while (c[i])
i++;
int n=0;
while (--i>n)
{
int t = c[n]; //把n的值先给t
c[n] = c[i];//再把i的值给n
c[i]= t;//最后把n也就是t的值给i
n++;
}
printf("%s", c);
return 0;
}
}
123456789
i=9,n=1
t=n(t=1)
n=i(n=9)此时是 923456789
i=t(i=1)此时是 923456781
经过循环i--,n++
i=8,n=2
t=n(t=2)
n=i(n=8)此时是 983456789
i=t(i=2)此时是 983456721
....
数组
5.定义一个整数数组,输入几个数字用00做结尾符,求出他们的总和和平局值
#include<stdio.h>
int main()
{
int i[20];
int n = -1;
do
{ //没有办法像字符串一样一次性输入进去
scanf_s("%d", &i[++n]); //做一个循环,比如 40 30 55用00做结尾符
} while (i[n] != 00); //第一次把40放入i[0],再次循环把30放入i[1].....
float f = 0;
n = 0;
while (i[n]!=00)
{
f = f + i[n++];
}
printf("总和是%0.1f平局值是:%0.2f", f, f / n);
return 0;
}
数组
6.定义一个整数数组,随便输入几个数字,实现冒泡排序
#include<stdio.h>
#include <stdlib.h>
int main()
{
int i[10];
int y = 0;
printf("请随机输入%d个数字进行排序:\n", _countof(i));
while (y < _countof(i))
{
scanf_s("%d", &i[y++]);
}
//===================中间为核心算法
y = 0;
while (y< _countof(i)-1)
{
int n = 0;
while (n < _countof(i) -1-y) //每执行一次外层循环那么10-1-0 ,10-1-1,10-1-2 .....
{ //不断减少内层循环的次数
if (i[n] > i[n + 1]) //如果 i[n]=i[0]也就是5那么i[n+1]=i[1]=6 不执行 ,然后n+1
{ //i[1]=6 i[2]=7 不执行 n+1
int t = i[n]; //i[2]=7 i[3]=3 执行代码i[2]i[3]交换位置,此时数字顺序是5 6 3 7 1 2 8 9 10 n+1
i[n] = i[n + 1]; // i[3]=7 i[4]=1 执行代码i[3]i[4]交换位置,此时数字顺序是5 6 3 1 7 2 8 9 10 n+1
i[n + 1] = t;// // .....
} // 最后数字顺序应该是5 6 3 1 2 7 8 9 10
n++; //然后再次执行外层循环,再执行这个循环,同样原理
}
y++;
}
//===================中间为核心算法
int n = 0;
while (n < _countof(i))
printf("%d ", i[n++]);
return 0;
}
C语言学习第9天 数组即练习
|