C语言的第三阶段学习(函数和数组)

调用函数:

函数名(参数值)

()起到了表示函数调用的重要作用

引用函数时,没有参数也需要()

函数原型上,()表示未知参数类型,(void)表示没有参数

#include<stdio.h>

void cheer()//函数头
{
   printf("cheer\n");
}//函数体

int main()
{
    cheer;//无法运行cheer函数
    cheer();//可运行cheer函数
}

传值:

如果有常数,则需要给出正确的数量和顺序,这些值会按照正确的顺序用来初始化函数中的常数

()内有变量,这个变量也只作为一个值输入函数,作为函数的参数

int sum(int a,int b)
{
    printf("a");
}

int main()
{
    int c,d;
    c=4,d=5;
    sum(c,d);//c和d只作为一个值输入sum()函数
//即4和5作为函数里面的a和b的值

}

函数原型:

函数头,以“;”结尾,就构成了函数的原型

函数原型的目的是告诉编译器这个函数长什么样

int sum (int a, int b);//声明

int main()
{
   sum(1,2);
}


int sum(int a,int b)//定义
{ 
   a+=b;
   return a;
}

return:return停止函数的执行,并送回一个值

表达方式:return;                 return 表达式;

一个函数里可以出现多个return语句(最好不要)


int max(int a,int b)//int类型,有返回值 
{
	int ret;
	if(a>b){
		ret=a;
	}else{
		ret=b;
	}
	return ret;//return表示结束,并把ret的值赋给运用这条函数的地方 
}

int main()
{
	int a,b,c;
	a=5;
	b=6;
	c=max(a,b);
	printf("%d",c);
} 

比较:void表示没有返回值的函数,调用的时候不能做返回值的赋值,不能使用带值的return。

函数类型不匹配 

调用函数时给的值与参数的类型不匹配时编译器并不会报错,编译器会悄悄地把类型转换,最后结果可能不是所期望的值

如:函数内用int,而输入值为double类型,最终结果为int类型

逗号运算符的使用:

函数f(a,b)内的","为标点符号

函数f((a,b))内,用()把a,b圈起来,此时","为运算符

数组:

例题:求平均数,并找出比平均数大的数

#include<stdio.h>

int main()
{
	int x;
	double sum=0;
	int cnt=0;
	int number[100];//从0开始算,要注意number会不会超过100
	
	scanf("%d",&x);
	while(x!=-1){//输入-1以结束读取需计算平均数的数
		number[cnt]=x;//令数值进入数组
		sum+=x;//sum将数值相加
		cnt++;//记录数值的个数
		scanf("%d",&x);//读取下一个数值
	}
	if(cnt>0){
		printf("%f\n",sum/cnt);
		
		int i;
		for(i=0;i<cnt;i++){
			if(number[i]>sum/cnt){//当数值大于平均数时
				printf("%d\n",number[i]);
			}
		}
	}
}

定义数组:

<类型>变量名称[元素数量];          如int a[100];

<类型>变量名称[元素数量]={赋值,赋值,赋值.....};      如int a[]={1,2,3};   int a[3]={0};

c99中可以指定某个元素为定值     int a[4]= { [2]=3,[3]=4 };

元素数量必须是整数

 

 例题:输入数量不确定的[0.9]内的整数,统计每一种数字出现的次数

#include<stdio.h>

int main()
{
	const int number=10;//数组的大小
	int x;
	int count[number];//定义数组
	int i;
	
	for(i=0;i<number;i++){
		count[i]=0;
	}
	//初始化数组,令数组的每一个数为0

	scanf("%d",&x);
	while(x!=-1){
		if(x>=0&&x<=9){
			count[x]++;
		}
		scanf("%d",&x);
	}
	//开始记数
	for(i=0;i<number;i++){
		printf("%d:%d\n",i,count[i]);
	}
    //输出记数结果
}

遍历数组:

for(i=0;i<number;i++){
	b[i]=a[i];
}
//将数组a的数值复制到数组b

for(i=0;i<number;i++){
	count[i]=0
}
//初始化数组,将数组的每一个变量为0

for(i=0;i<number;i++){
	if(a[i]==key){
		ret=i;
		break;
	}
}
//查看数组内符合key的数

for(i=0;i<number;i++){
	if(a[i]>average){
		printf("%d",a[i]);
	}
}
//输出数组内大于average的数

for(i=0;i<number;i++){
	printf("%d:%d",i,a[i]);
}
//输出数组内的每一个数

构造素数表:

#include<stdio.h>

int main()
{
	int isPrime[25];
	int i;
	int x;
	for(i=0;i<25;i++){
		isPrime[i]=1;
	}
	//初始化isprime数组,使数组全部为1
	for(x=2;x<25;x++){
		if(isPrime[x]){//1即为执行,若isPrime为1,运行
			for(i=2;i*x<25;i++){
				isPrime[i*x]=0;//符合条件的isPrime使其值为0,0即为不执行
			}
		}
	}
	
	for(i=2;i<25;i++){
		if(isPrime[i]){//剩下值仍为1的isPrime
			printf("%d\t",i);
		}
	}

}


多维数组:

<变量类型> 变量名称[行数][列数]

如 int a[ 3 ][ 5 ];       即a是一个3行5列的矩阵

遍历:

for(i=0;i<3;i++){
	for(j=0;j<5;j++){
		a[i][j]=i*j;
	}//a[i][j]是一个int,表示第i行第j列上的单元
}

初始化:

int a[][5]={
       {0,1,2,3,4},
       {2,3,4,5,6},
};

行数可以由编译器来数,列数必须给出

每行一个{},逗号隔开

如果省略,表示补零

矩阵游戏:

#include<stdio.h>


int main()
{
	const int size=3;
	int board[size][size];
	int i,j;
	int numX;
	int numY;
	int result=-1;//-1没人赢,1X赢,0Y赢
	
	//读入矩阵
	for(i=0;i<size;i++){
		for(j=0;j<size;j++){
			scanf("%d",&board[i][j]);
		}
	} 
	
	 //检查行
	 for(i=0;i<size&&result==-1;i++){
	 	numX=numY=0;
	 	for(j=0;j<size;j++){
	 		if(board[i][j]==1)//如果board有值,则numX加一 
	 		     numX++;
	 	}else{
	 		numY++;
	 	}
	 } 
	 if(numY==size){//当numY等于3时 
	 	result=0;
	 }else if(numY==size){
	 	result=-1;
	 }
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值