数组
为什么需要数组
-
为了解决大规模同类型数字的存储和使用问题
-
可以模拟现实世界
数组的简单使用
#include<stdio.h>
int main()
{
int a[5]={1,2,3,4,5}
//a为数组的名称,5表示该数组中的元素个数,且分别为a[0]、a[1]...
int i;
for(i=1;i<5;++i)
printf("%d\n",a[i])//逐个输出a[0]、a[1]...
return 0;
}
数组的分类
一维数组
怎样定义一维数组
1.为n个变量连续分配存储空间
2.所有的变量数据类型必须相同
3.所有变量所占的字节大小必须相同
4.例子
int a[5];
有关一维数组的操作
初始化
1.完全初始化
int a[5]={1,2,3,4,5}
2.不完全初始化,未被初始化的量会被自动初始化为零
int a[5]={1,2,3}
3.不初始化都为垃圾值
int a[5]
数组的名字代表的是第一个元素的地址
4.清零int a【5】={0}
错误写法
1.int a[5];
a[5]={1,2,3,4,5}
只有在定义数组时才能整体赋值,其他情况下赋值都是错误的
2.若要把b数组的所有元素赋给a数组要使用for循环
a=b; [x]//错误写法
for(i=1;i<5;++i)
a[i]=b[i];//正确写法
二维数组
初始化写法
int [3] []4]={
{1,2,3,4},
{5,6,7,8},
{2,5,6,7}
}
总共12个元素,可以当作3行四列来看待,
如何输出二维数组的元素
利用两个for循环
#include<stdio.h>
int main()
{
int a[3][4]={
{1,2,3,4}
{5,6,7,8}
{9,0,11,12}
}
int i,j;
for(i=0;i<3;++i)
{
for(j=0;j<4;++j)
printf("%d ",&a[i][j]);
printf("\n");
}
return 0;
}
多维数组
多维数组是否存在
不存在,因为内存是线性一维的
什么是多维数组
1.n维数组可以当作每个元素是n-1维数组的一维数组
函数
- 函数的简单使用
#include <stdio.h>
//max是函数的名字,i和j是形式参数,简称形参,void表示函数没有返回值
//函数是个功具来解决一些同类型问题,避免写一些重复代码
void max(int i,int j)
{
if(i>j)
printf("%d\n",i);
else
printf("%d\n",j);
}
int main (void)
{
int a,b,c,d,e,f;
a=1;
b=2;
c=3;
d=34;
e=45;
f=24;
max (a, b);//(a,b)为发送给函数的形参
max (c, d);
max (e, f);
return 0;
}
什么是函数
逻辑上:能够完成特定功能的独立的代码块
物理上:能接收数据
能对接受的数据处理并将处理结果返回
函数是个工具,是为了解决大量类似问题所设计的,函数可当作一个黑匣子
为什么需要函数
1.有利于程序的模块化
2.避免了重复性操作
函数的分类
1.有参函数和无参函数
2.有返回值和无返回值
3.库函数和用户自定义函数
4.普通函数和主main函数
-
一个程序有且仅有一个主函数
-
主函数是程序的入口也是程序的出口
-
主函数可以调用普通函数,普通函数不可调用主函数
-
普通函数间可以相互调用
如何定义函数
函数返回值+函数名(函数的形参列表)
{
函数的执行体
}
-
函数返回值的类型也称为函数的类型,若return的值类型不一致以函数前的为准
-
函数的定义实际是详细描述为什么函数能执行某个特定功能
-
int j(void)括号内的void不能接受数据,int表示返回值是个int 类型的值
-
void()void在前面表示不接受返回值
函数举例
判断一个数是否为素数
#include <stdio.h>
bool IsPrime(int val)
{
int i;
for(i=2;i<val;++i)
{
if(val%i==0)
break;
}
if(val%i)
return true;
else
return false;
}
int main(void)
{
int m;
printf("请输入你要判断的数");
scanf("%d",&m);
if(IsPrime(m))
{
printf("Yes!");
}
else
{
printf("No!");
}
return 0;
}
return和break的区别
break终止循环,return终止被调函数,向主调函数返回表达式的值,若表达式为空则只终止函数不向主调函数返回任何值
函数使用注意的问题
函数的声明
-
函数的声明的作用是告诉编译器即将出现的字母代表的是一个函数
-
告诉编译器即将出现的字母代表的是函数的形参和返回值的具体含义
-
声明是个语句末尾必须加引号
-
对库函数的声明在#include<>中
其他
- 函数的变量只在本函数使用
形参和实参
形参和实参的位置一一对应,数据类型必须相互兼容个数必须一一对应
常用的函数
自行了解
变量的作用域与存储方式
按作用域分类
-
全局变量:在所有函数外部定义的变量,从定义的位置到整个程序结束都能使用它
-
局部变量:在一个函数内部定义的变量或函数的形参,只能在本函数内部使用
-
全局变量和局部变量的命名冲突问题
在一个函数内部和全局变量名一样时局部变量会屏蔽全局变量。
按存储方式分类
1.静态变量
2.自动变量
3.寄存器变量
寄存器变量
练习题
1.ASCII码排序
#include<stdio.h>
int main()
{
char a[3], x;
while(scanf("%s", &a) != EOF)
{
if(a[0] > a[1])
{
x = a[0];
a[0] = a[1];
a[1] = x;
}
if(a[0] > a[2])
{
x = a[0];
a[0] = a[2];
a[2] = x;
}
if(a[1] > a[2])
{
x = a[1];
a[1] = a[2];
a[2] = x;
}
printf("%c %c %c\n", a[0], a[1], a[2]);
}
return 0;
}
2.计算两点间的距离
#include<stdio.h>
#include<math.h>
int main()
{
float x1,x2,y1,y2;
while(scanf("%f %f %f %f",&x1,&y1,&x2,&y2)!=EOF)
{
float Distance=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
printf("%.2f\n",Distance);
}
return 0;
}
3.计算球体积
#include<stdio.h>
#define PI 3.1415927
int main()
{
double n;
while(scanf("%lf",&n)!=EOF)
printf("%.3f\n",4.0/3*PI*n*n*n);
return 0;
}
4.求绝对值
#include<stdio.h>
#include<math.h>
int main()
{ double i;
while(scanf("%lf",&i)!=EOF)
{
printf("%.2lf\n",fabs(i));
}
return 0;
}
5.成绩转换
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n<=100&&n>=0)
{
if(n<60)
printf("E\n");
if(n>=60&&n<70)
printf("D\n");
if(n>=70&&n<80)
printf("C\n");
if(n>=80&&n<90)
printf("B\n");
if(n>=90&&n<=100)
printf("A\n");
}
else
printf("Score is error!\n");
}
return 0;
}
6.第几天
#include<stdio.h>
int main()
{
int days[12] = { 31,0,31,30,31,30,31,31,30,31,30,31 };
int year, month, day;
while (scanf("%d/%d/%d", &year, &month, &day) != EOF) {
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
days[1] = 29;
}
else
{
days[1] = 28;
}
int sum=0;
int i;
for (i = 0; i < month - 1; i++)
{
sum += days[i];
}
printf("%d\n", sum + day);
}
return 0;
}
7.求奇数的乘积
#include<stdio.h>
int main(){
int n,a[99];
while (scanf("%d", &n)!=EOF) {
int j = 1;
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
if ((a[i] % 2) == 1) {
j *= a[i];
}
}
printf("%d\n", j);
}
return 0;
}
8.平方和与立方和
#include<stdio.h>
#include<math.h>
int main()
{
int m,n,i,x,y,u;
while(scanf("%d%d",&m,&n)!=EOF){
x=0,y=0;
if(m>n){
u=n;
n=m;
m=u;
}
for(i=m;i<=n;i++){
if(i%2==1){
y=y+pow(i,3);
}else{
x=x+pow(i,2);
}
}
printf("%d %d\n",x,y);
}
return 0;
}