最近也挺充实的,在学习MYSQL,Java ,数据结构与算法,接触了GitHub啦,也学了git的使用,今后会继续学习的!今天就整理这些啦,晚安,加油加油!
一、函数的调用
(一)函数的递归调用
在调用函数的过程中,直接或间接地调用该函数本身,称为函数的递归调用。
示例:
int f(int)
{
int y,z;
z=f(y); //在执行该函数的过程中又调用了该函数
return z;
}
示例:用递归方法求n!
#include <stdio.h>
int main()
{
int fac(int x);//函数声明
int y;
printf("请输入一个数:\n");
scanf("%d",&y);
printf("%d!=%d",y,fac(y));//调用函数fac()
}
int fac(int x)
{
int f;
if(x<0)
printf("error!");
else if(x==0||x==1)
f=1;
else
f=fac(x-1)*x;
return f;
}
输入0
输入10
二、数组
(一)定义数组
1、一维数组的定义:
形如:int a[8]、int b[10] 、int c[3] 由类型、变量名、常量表达式组成。
2、二维数组的定义:
形如:int a[3][4]、int c[5][6]类型、变量名、常量表达式(代表行)、常量表达式(代表列)组成
3、字符数组的定义:
形如:char c[10],char a[5],char[5][2]
(二)数组的引用
1、一维数组的引用
数组名[下标],下标可以是常量、变量、表达式,形如:a[1]、a[2*5-8]、c[8]
2、二维数组的引用
数组名[下标][下标],形如:a[5*2][3-1]、c[4][2-1]
3、字符数组的引用
示例:
#include <stdio.h>
int main()
{
char a[10]={'b','o','y','.'};
int i;
for(i=0;i<10;i++)
printf("%c",a[i]);
printf("\n");
return 0;
}
运行结果:
注意:数组元素可以出现在表达式中也可以被赋值,形如:a[5][1]=b[5*2-6]b[6]
(三)数组的初始化
初始化:即在定义数组时同时给各数组元素赋值
1、一维数组的初始化
形如:int a[2]={1,2,5}、int a[10]={1,2,3,4,5,6,7,8,9,10}
int a[5]={1,2}(未赋值部分元素自动设定为0)、int[ ]={1,2,3}(可以省略数组名)
2、二维数组的初始化
按照行,列进行赋值,形如:int a[2][3]={{1,2,3},{4,5,6}}
所有元素放到一个括号,形如:int a[2][3]={1,2,3,4,5,6}
省略,形如:int [ ][3]={1,2,3,4,5,6} (列不能省)
对部分,形如:
int a[2][3]={{1},{2,8}}
1 0 0
2 8 0
未赋值的元素自动设定为0
3、字符数组的初始化
char c[3]={‘b’,‘o’,‘y’};
char c[ ]={‘b’,‘o’,‘y’};
使用字符串常量来初始化字符数组
形如:
char a[ ]={“boy”};(此时,a数组的长度为4,而不是3,因为它包含了一个空字符‘\0’)
char a[3]=“boy”;
4、字符串
‘\0’作为字符串结束的标志
#include <stdio.h>
int main()
{
int c[10];
printf("请输入字符串:\n");
scanf("%s",c);//不是&c,c是数组名
printf("输入的字符串是:\n%s",c);
return 0;}
结果是:
输入,输出连续的字符串:
字符串输出的原理是:按字符数组名c找到其数组的第一个元素的地址,然后逐个输出其中的字符,直到遇到‘\0’为止。
在输入字符串boy后,系统会自动在“boy”的后面自动添加‘\0’
#include <stdio.h>
int main()
{
int str1[10],str2[10],str3[10];
printf("请输入字符串:\n");
scanf("%s%s%s",str1,str2,str3);//不是&c,c是数组名
printf("输入的字符串是:\n%s %s %s",str1,str2,str3);
return 0;
}
运行结果:
注意:输入连续的字符串时用空格分隔开
5、8个处理字符串的相关函数
输出一个字符串:puts
#include <stdio.h>
int main()
{
char str[10]="boy";
puts(str);
return 0;
}
运行结果:
输入一个字符串:gets
#include <stdio.h>
int main()
{
printf("请输入一个字符串:\n");
char str[10];
gets(str);
return 0;
}
运行结果:
字符串连接函数:
char str1[10],str2[10];
一般形式为:strcat(str1,str2)
#include <stdio.h>
int main()
{
char str1[30] = "boy love", str2[] = " me";
printf("%s", strcat(str1, str2));
return 0;
}
运行结果:
字符串复制函数:
char str1[10],str2[10];
一般形式:strcpy(str1,str2)
#include <stdio.h>
int main()
{
char str1[5], str2[] = "me";
printf("%s", strcpy(str1, str2));//或写成strcpy(str1,"me")
}
运行结果:
字符数组要足够大以便容纳复制的字符串
不能直接将一个字符串赋给一个字符数组
字符串比较函数:
char str1[10],str2[10];
一般形式:
strcmp(str1,str2)
比较规则:自左至右逐个字符比较ASCII码值
字符串相同,函数值为0;
字符串1>字符串2,函数值为一个整数;
字符串1<字符串2,函数值为一个负整数;
测字符串长度的函数:
char str[10];
一般形式:strlen(str);
#include <stdio.h>
int main()
{
char str1[ ]="boy";
printf("%d", strlen(str1));
return 0;
}
字符串转换为小写的函数
char str1[5]=“BOY”;
strlwr(str1)
#include <stdio.h>
int main()
{
char str1[ ]="BOY";
printf("%s", strlwr(str1));
return 0;
}
运行结果:
字符串转换成大写的函数
char str1[5];
一般形式:strupr(str1);
#include <stdio.h>
int main()
{
char str1[ ]="boy";
printf("%s", strupr(str1));
return 0;
}
运行结果:
注意:在使用字符串处理函数时,应加上#include<string.h>
在Vsual Studio 2019中可不加
二维数组举例
题目:将二维数组a[1][2]的行列元素互换,存到另外的一个二维数组中
如下:
# include <stdio.h>
int main()
{
int a[2][3]={{0,1,2},{2,4,5}};
int b[3][2];
int i,j;
/*输出数组a元素,将a,b数组元素互换*/
printf("输出数组a的各元素:\n");
for (i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%5d",a[i][j]);
b[j][i]=a[i][j]; //a的i赋给b的j ,j=2,i=3
}
printf("\n");
}
printf("输出数组b的各元素:\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
printf("%5d",b[i][j]);
}
printf("\n");
}
return 0;
}
运行结果:
下一篇:数组作为函数参数,变量的存储方式、生存期,指针