数组
具有相同数据类型的元素的有序集合
特点:
1、元素类型相同
2、有序排列的
3、连续存储的
格式:类型 名称[个数]
1、类型是指其中元素的数据类型
2、名称是数据首元素的地址
3、个数是数组中元素的数量,不能是变量
例子:int a[5]; char b[3];
成员访问:与相同数据类型的变量没有区别
首元素:a[0]
尾元素:a[4]
说明:成员访问,禁止越界;越界访问,后果自负。
尤其是变量作为数组下标的时候
数组初始化:
全部初始化:int a[5] = {1,2,3,4,5};
全部初始化时,元素个数可以省略
部分初始化:int a[5] = {1,2,3};
部分初始化时,初始化的是前面的元素;
没有被初始化的元素的值默认为0
数组大小:int a[5]; ==> sizeof(a)
只知道数组名,能否求出数组元素个数:
sizeof(a)/sizeof(a[0])
二、字符数组
定义:由字符元素构成的数组
例子:char a[5];
char a[5] = {'A','B','C','D','E'};
char a[] = {"ABCDE"};
char a[] = "ABCDE";
字符串:由双引号括起来的一串字符,打印用%s
scanf从终端获取字符串,只能是不带空格的
gets:从终端获取字符串,可以带空格
puts:向终端打印字符串
字符串末尾有一个‘\0’字符,作为结束标志;
在定义字符数组时,以字符串初始化,
长度至少为可见字符加1(字符串末尾有‘\0’)
三、递归函数
定义:函数内部调用函数本身
特点:
1、内部一定会调用自己
2、一定会有递归终止条件
3、核心操作
优点:代码简洁
缺点:
1、可读性差
2、效率低,内存占用大
3、出错不易定位
函数总结:
1、可以完成特定,可以重复使用
2、可以使函数的实现着和使用者分离
求一个整形数组的最大元素
#include<stdio.h>
2 int max(int a[],int n)
3 {
4 printf("%ld",sizeof(a));
5 int i,ret=a[0];//ret=0;
6 for(i=1;i<n;i++)
7 {
8 if(a[i]>ret)//a[ret]
9 {
10 ret=a[i];//ret=i
11 }
12 }
13 return ret;
14 }
15 int main()
16 {
17 int a[5]={1,2,3,4,5};
18 printf("%d\n",max(a,5));
19 return 0;
20 }
1、求一个整型数组的第二大元素的下标
#include<stdio.h>
int main(int argc,char*argv[])
{
int i,j,max,foot,cmax,cfoot;
int a[5]={1,2,3,4,5};
max=a[0];
for(i=0;i<5;i++){
if(a[i]>max){
max=a[i];
foot=i;
}
}
for(i=0;i<foot;i++){
if(a[i]>cmax){
cmax=a[i];
cfoot=i;
}
}
cmax=a[0];
for(i=0;i<foot;i++){
if(a[i]>cmax){
cmax=a[i];
cfoot=i;
}
}
for(j=foot+1;j<5;j++){
if(a[j]>cmax){
cmax=a[j];
cfoot=j;
}
}
printf("%d\n",cfoot);
return 0;
}
2、从终端获取一个字符串,分别统计其中大写字母、小写字母、数字及其它字符的个数。
1 #include<stdio.h>
2 #include<String.h>
3 int main()
4 {
5 char str[50];
6 int len,i;
7 char c;
8 int number=0,letter=0,space=0,other=0;
9 gets(str);
10 for(i=0;i<strlen(str);i++)
11 {
12 c=str[i];
13 if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
14 {
15 letter++;
16 }
17 else if(c>='0'&&c<='9')
18 {
19 number++;
20 }
21 else if(c==' ')
22 {
23 space++;
24 }
25 else
26 {
27 other++;
28 }
29 }
30 printf("%d,%d,%d,%d",letter,number,space,other);
31
32 return 0;
33 }
3、传入一个整数,将其转换为字符串(考虑负号)
4、使用冒泡法排序整型数组:
#include<stdio.h>
2 void bubble_sort(int a[],int n)
3 {
4 int i;
5 for(i=0;i<n;i++)
6 {
7 int j;
8 for(j=i;j<n;j++)
9 {
10 if(a[i]>a[j])
11 {
12 int temp=a[i];
13 a[i]=a[j];
14 a[j]=temp;
15 }
16 }
17 }
18 }
19 int main()
20 {
21 int a[5];
22 int i;
23 for(i=0;i<5;i++)
24 {
25 scanf("%d",&a[i]);
26 }
27 bubble_sort(a,5);
28 for(i=0;i<5;i++)
29 {
30 printf("%d",a[i]);
31 }
32 printf("\n");
33 return 0;
34 }
选择排序:
1 #include<stdio.h>
2 void selectsort(int a[],int n)
3 {
4 int i;
5 for(i=0;i<n-1;i++)
6 {
7 int j;
8 for(j=i+1;j<n;j++)
9 {
10 if(a[i]>a[j])
11 {
12 int temp=a[i];
13 a[i]=a[j];
14 a[j]=temp;
15 }
16 }
17 }
18 }
19 int main()
20 {
21 //int a[]={5,4,3,2,1};
22 int a[5];
23 int i;
24 for(i=0;i<5;i++)
25 {
26 scanf("%d",&a[i]);
27 }
28 selectsort(a,5);
29 //int i;
30 for(i=0;i<5;i++)
31 {
32 printf("%d",a[i]);
33 }
34 printf("\n");
35 return 0;
36
37 }
5、传入一个整数n,返回1!+2!+3!+…+n!,要求使用递归
int func(int n)
40 {
41 if(n==1)
42 {
43 return 1;
44 }
45 else
46 {
47 return n*func(n-1);
48 }
49 }
50 int main()
51 {
52 int i,n,sum=0;
53 scanf("%d",&n);
54 for(i=1;i<=n;i++)
55 {
56 sum+=func(i);
57 }
58 printf("%d\n",sum);
59 return 0;
60 }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u012701023/article/details/47793665