1、构造数据类型:数组(只包含一种数据类型)、结构体(反之)
2、基本数据类型(字节数):int整型(2、4);unsigined int无符号基本整型(2、4);short短整型(2) ;unsigned short无符号短整型(2);long长整型(4);usigined无符号长整型(4);long long双长型(8);usigned long long无符号双长型(8);
一、数组(Array)的概念:
1、是一种线性表数据结构。
线性表:数据排成像一条线一样的结构(队列、栈、链表)。(相对立的概念是非线性表,比如:二叉树、堆、图等。
2、它用一组连续的内存空间,来存储一组具有相同类型的数据。
二、数组的定义与使用:
int a[10];//10个元素的整型数组
floaot score[50]; //50个元素的单精度实型数组
char string[30]; //30个元素的字符型整数
for(i=0;i<10;i++)
scanf("%d",&a[i]);
//输入全部数组元素
for(i=0;i<10;i++)
printf("%d“,a[i]);
1.一维数组:数字与字符
定义与引用:
int a[10];
float score[50];
char string[30];
//数组必须先定义,后使用
//只能逐个引用数组,不能一次引用整个数组
//数组元素表示形式:数组名【下标】
//其中:下标可以是常量或整型表达式
int a=2,b=4,data[10];
data[a+2}=data[b+1}=8;
data[5+3]=6;
2.一维数组的初始化:
实现方法:
在定义数组时,对数组元素赋初值。
下标:数组元素相对于数组起始地址的位移。
//数组元素全部赋0:
int a[5]={0,0,0,0,0,};
//或
int a[5]={0};
//或对整个数组元素赋初值时,可以不指定长度:
int a[]={1,2,3,4,5,6};
//编译系统根据初值个数确定数组大小
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
printf("------------%d\n",a[2]);//输出元素的值
printf("=============%p",a[2]);//输出元素的地址
return 0;
}
3.数组的使用中需要注意的问题:
(1)、数组下标不能为0、小数、负数。
Fibonacci实例
#include <stdio.h>
int main()
{
int f[20] = {1,1};//定义一个一维数组一共20个数
int i;
for(i=2;i<20;i++)
{
f[i] =f[i-2]+f[i-1];
}
for(i=0;i<20;i++){
if(i%5==0)printf("\n");
printf("%12d",f[i]);
}
return 0;
}
4.字符一维数组的初始化:
字符数组元素逐个赋值
char ch[]={'H','e','l','l','o'};
用字符串对字符数组赋值
char ch[]="hello";
输出方式:
for(i=0;i<5;i++)
printf("%c",ch[i]);//输出指定字符串
//或者
printf("%s",ch);//输出整个字符串
5.字符一维数组的使用案例:
#include <stdio.h>
void main()
{
char a[ ] = {'h','e','l','\0','l','o','\0'};//到\0就停止录入
printf("%s",a);
}
6.字符串数组的处理:
这里的需要在头文件中加入string.h
函数:
字符串输出函数puts(str)
功能:向显示器输出一个字符串(输出完,换行)
字符串输入函数gets(str)
功能:从键盘输入一个以回车结束的字符串放入字符数组中,并自动加入'\0'
puts,gets使用实例:
#include <stdio.h>
void main()
{
char a1[]="china\nbeijing";
char a2[]="china\0beijing";
puts(a1);
puts(a2);
puts("wuhan");
}
输出
#include <stdio.h>
void main()
{
char a1[15],a2[15];
gets(a1);
scanf("%s",a2);
printf("a1=%s\n",a1);
printf("a2=%s\n",a2);
}
输出
String.h中的字符串连接函数strcat
格式:
strcat(字符数组1,字符数组2)
功能:
吧字符数组2连接到字符数组1后面
返值:返回字符数组1的首地址
说明:(1)字符数组1必须足够发大
(2) 连接前,两字符串均以'\0'结束;
连接后,字符串1的’\0‘取消,新字符串后加上’\0‘
/// 连接函数strcat
#include <stdio.h>
#include <String.h>
void main()
{
char str1[30]={"people's Republic of"};
char str2[]={"china"};
printf("%s\n",strcat(str1,str2));
}
拷贝函数strcpy
格式:strcmp(字符串1,字符串2)
功能:比较两个字符,对两字符串从左向右逐个字符比较(ASCII码),直到遇到不同字符或'\0'为止。
返回值:返回int型整数。其值是ASCII码的差值
a.若字符串1<字符串2,返回负整数
b.若字符串1>字符串2,返回正整数
c.若字符串1==字符串2,返回0
说明:字符串比较不能用“==”,必须用strcmp,虽然编译无措,但结果不对
/// 比较函数
#include <stdio.h>
#include <String.h>
void main()
{
int i,j,k;
char a1[]="wuhan",a2[]="beijing";
i=strcmp(a1,a2);
j=strcmp("china","korea");
k=strcmp(a2,"beijing");
printf("i=%d\nj=%d\nk=%d\n",i,j,k);
}
字符串长度函数strlen
格式:
strlen(字符数组)
功能:
计算字符串长度
返回值:
返回字符串长度,但不包括'\0'在内
/// 字符串长度函数strlen
#include <stdio.h>
#include <String.h>
void main()
{
char s2[]="\t\v\\\0will\n";
char s3[]="\x69\082\n";
printf("s2长度为%d\n",strlen(s2));
printf("s3长度为%d\n",strlen(s3));
}
7.快排(选择法):
伪代码:
1.首先通过n-1次比较,从n个数中找出最小的,将它与第一个数交换——第一趟(选择排序),结果最小的数被安置在第一个元素的位置。
2.再通过n-2此比较,从剩余的n-1个书中找出关键字次小的记录,将它与第二个元素交换——第二趟(选择排序)
3.重复上述过程,一共经过n-1趟排序后,排序结束。