笔记
5> 数组
为什么需要数组
为了解决大量同类型数据的存储和使用问题
为了模拟现实世界
数组的分类、
一维数组
怎样定义一维数组
为n个变量连续分配存储空间
所有变量所占的字节大小必须相等
例子: int a【5】.
一维数组名不代表数组中所有的元素,
一维数组名代表数组第一个元素的地址
有关一维数组的操作
初始化
完全初始化
int a[5] = (1,2,3,4,5);
不完全初始化,未被初始化的元素自动为零
不初始化,所有元米是垃圾值
int a[5];
清零
int a[5]=(0);
错误写法:
int a[5]:
a[5]=(1,2.3、4、5)://错误
只有在定义数组的同时才可以整体赋值,
其他情况下整体赋值都是错误的\
如果要把a数组中的值全部复制给b数组
错误的写法:
b =a;// error
正确的写法
for(i=0;i<5;++i)
b[i]= a[i];
二维数组
函数【C语言的第二个重点
为什么需要函数
避免了重有性操作
有利于程序的模块化\
什么叫函数
逻辑上:能够完成特定功能的独立的代码块
物理上:
能够接收数据[当然也可以不接受数据]
能够对接受的数据进行处理
能够将数据处理的结果返回[当然也可以不返回任何值]
总结: 函数是个工具,它是为了解决大量类似问题而设计的
函数可以当做一个黑匣子
int f(void)
{
return 10;
}
int main(void)
{
int j = 88;
j = f();
printf("%d\n", j);
return 0;
}
如何定义函数
函数的返回值 函数的名字(函数的形参列表)
函数的执行体
1. 函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体方法
2. return 表达式·的含义.
1>终止被调函数,向主调函数返回表达式的值
2>如果表达式为空,则只终止函数,不向主调函数返回任何值
3>break是用来终止循环和switch的,return是用来终止函数的例子:
void f()
return;//return只用来终止函数,不向主调函数返回任何值
int f()
return 10;//第一;终止函数,第二:向主调函数返回10
3. 函数返回值的类型也称为函数的类型,因为如果 函数名前的返回值类型
中表达式的类型不同的话,则
最终函数返回值的类型 以函数名前的返回值类型为准
例子:
int f()
return 10.5;//因为函数的返回值类型是int
//所以最终f返回的是10而不是10.5\
函数的分类
有参函数和 无参函数
有返回值函数 和无返回值函数
库函数 和 用户自定函数
值传递函数 和 地址传递函数
普通函数 和 主函数(main函数)
一个程序必须有且只能有一个主函数
主函数可以调用普通函数 普通函数不能调用主函数
主函数是程序的入口,也是程序的出口\
int main (void){
int val ;
int i;
scanf("%d",&val);
for(i=2;i<val;++i)
{
if (val%i ==0)
break;
}
if (i == val )
printf("yes\n");
else
printf("no\n");
return 0;
}
注意的问题
函数调用和函数定义的顺序
如果函数调用写在了函数定义的前面,则必须加函数前置声明\
函数前置声明:
1. 告诉编译器即将可能出现的若干个字母代表的是一个函数
2.告诉编译器即将可能出现的若干个字母所代表的函数的形参和返回值的具体情况
3.函数声明是一个语句,末尾必须加分号
4. 对库函数的声明是通过#include<库函数所在的文件的名字.h>来实现的
形参和实参
个数相同 位置一一对应 数据类型必须相互兼容\
如何在软件开发中合理的设计函数来解决实际问题\
多学习,多模仿牛人的代码
函数是C语言的基本单位,类是Java, C,C+的基本单位
常用的系统函数
double sqrt(double x);
求的x的平方根
int abs(int x)
求x的绝对值
double fabs(double x)
求x的绝对值
int main (void)
{
int val;
int i;
scanf("%d",&val);
for(i=2; i<val;++i)
{
if(0== val%i)
break;
}
if(i== val)
printf("yes\n");
else
printf("no\n");
return 0;
}
int main (void)
{
int val;
int i;
int j;
scanf("%d",&val);
for(i=2; i<val;++i)
{
for (j=2;j<i;++j)
{
if (0==i%j)
break;
}
if(i== j)
printf("%d\n",i);
}
return 0;
}
变量的作用域和存储方式:
按作用域分:
全局变量
在所有函数外部定义的变量叫全局变量
全局变量使用范围:从定义位置开始到整个程序结束
局部变量
在一个函数内部定义的变量或者函数的形参 都统称为局部变量
void f(int i)
int J=20;
1和j都属于局部变量
局部变量使用范围:只能在本函数内部使用\
注意的问题:
全局变量和局部变量命名冲突的问题
在一个函数内部如果定义的局部变量的名字和全局变量名
一样时,局部变量会屏蔽掉全局变量
按变量的存储方式
静态变量
自动变量
寄存器变量
杭电oj
int main ()
{
char a,b,c,t1,t2;
a=getchar();
getchar();
b=getchar();
getchar();
c=getchar();
getchar();
t1 = (a<b?a:b);
t2 = (a>b?a:b);
a=t1;b=t2;
t1 = (b<c?b:c);
t2 = (b>c?b:c);
b=t1;c=t2;
t1 = (a<b?a:b);
t2 = (a>b?a:b);
a=t1;b=t2;
printf("%c %c %c\n",a,b,c);
return 0;
}
#include<math.h>
int main()
{
double x1,y1,x2,y2,d;
printf("请输入坐标(x1,y1),(x2,y2)\n");
scanf("(%lf,%lf),(%lf,%lf",&x1,&y1,&x2,&y2);
d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
printf("距离=%lf\n",d);
return 0;
}
int main()
{
float r,v;
scanf("%f",&r);
v=4*3.1415*r*r*r/3;
printf("v=%f\n",v);
return 0;
}
struct date {
int years;
int month;
int day;
};
int leap(int year)
{int y,flag=0;
y=year;
if(y%4==0&&y%100!=0||y%400==0)
flag=1;
return(flag);
}
int main()
{ int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
struct date data;
int month, sum;
printf("Input year, month,day:");
scanf("%d,%d,%d",&data.years,&data.month,&data.day);
for(month=1,sum=0; month<data.month; month++)
sum+=days[month];
sum+=data.day;
if(month>2)
sum+=leap(data.years);
printf("%d %d %d is the %dth day in %d.\n", data.years,data.month,data.day,sum,data.years);
return 0;
}
int main(void)
{
int m,n,even_sum,odd_sum,i;
while(scanf("%d%d",&m,&n) !=EOF){
odd_sum = even_sum =0;
if(m>n){
i=m;
m=n;
n=i;
}
for(i=m;i<=n;i++){
if(i&1)
odd_sum += i * i *i;
else
even_sum += i *i;
}
printf("%d %d\n",even_sum,odd_sum);
}
return 0;
}