码迷,mamicode.com
首页 > 编程语言 > 详细

数组和字符串

时间:2015-08-20 01:31:26      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:数组   字符串   排序   算法   函数   

数组
具有相同数据类型的元素的有序集合
特点:
	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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!