1.一维数组
一维数组:存储一组相同类型的变量
数组定义类型说明符 数组标识符[常量表达式]
数组引用数组标识符[下标]
数组下标从0开始
//反向输出数组
#include<stdio.h>
int main()
{
int Array[5],index,temp; //定义数组,变量
printf("请输入一个数组:\n");
for(index=0;index<5;index++) //输入数组
{
scanf("%d",&Array[index]);
}
printf("原数组为:\n");
for(index=0;index<5;index++) //输出原数组
{
printf("%d ",Array[index]);
}
printf("\n");
for(index=0;index<2;index++) //交换两次,1和5换,2和4换
{
temp = Array[index]; //中间变量暂存数组
Array[index]=Array[4-index]; //第一次5给1,第二次4给2
Array[4-index]=temp; //第一次1给5,第二次2给4
}
printf("反向数组为:\n");
for(index=0;index<5;index++)
{
printf("%d ",Array[index]);
}
return 0;
}
初始化
1.一一赋值,有几个数赋几个值
2.一部分赋值,未赋值为0
3.不指定数组长度赋值
int a[5]={1,2,3,4,5};
int a[5]={1,2,3};
int a[]={1,2,3,4,5}应用
//数组保存姓名
#include<stdio.h>
int main()
{
char *Name[3]; //字符指针数组
int i;
Name[0] = "张三";
Name[1] = "李四";
Name[2] = "王五";
for(i=0;i<3;i++)
{
printf("%s\n",Name[i]);
}
return 0;
}
2.二维数组
二维数组:由行和列组成的两个一维数组
数组定义数据类型 数组名[表达式1][表达式2]
先放行,再放列
下标可以是整型常量或整型表达式
数组引用数组名[下标][下标]
初始化
1.一一赋值
2.省略行下标,不能省略列下标
3.分组分配
4.部分分配
5.对元素赋值
int a[2][3]={1,2,3,4,5,6};
int a[][3]={1,2,3,4,5,6};
int a[2][3]={{1,2,3},{4,5,6}};
int a[2][3]={{1,2},{3,4}};
int a[2][3];a[0][0]=1;a[0][1]=2;应用
//输出最值并行列互换
#include<stdio.h>
int main()
{
int a[2][3],b[3][2];
int max,min;
int i,j,k,l;
printf("请输入一个二维数组:\n");
for(i=0;i<2;i++) //输入数组
{
for(j=0;j<3;j++)
{
printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
}
printf("二维数组为:\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n"); //分行
}
/*求数组中的最大值及其下标*/
max = a[0][0];
k=0;l=0;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
if(max<a[i][j])
{
max=a[i][j];
k=i;
l=j;
}
}
}
printf("数组中的最大值为:\n");
printf("a[%d][%d]=%d",k,l,max);
printf("\n");
/*求数组中的最小值及其下标*/
min = a[0][0];
k=0;l=0;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
if(min>a[i][j])
{
min=a[i][j];
k=i;
l=j;
}
}
}
printf("数组中的最小值为:\n");
printf("a[%d][%d]=%d",k,l,min);
printf("\n");
/*求行列互换后的数组*/
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
b[j][i] = a[i][j];
}
}
printf("转换后的代码为:\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
printf("%d\t",b[i][j]);
}
printf("\n");
}
return 0;
}
//求对角元素之和
#include<stdio.h>
int main()
{
int a[3][3];
int i,j,sum=0;
printf("请输入:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(i==j)
{
sum = sum + a[i][j];
}
}
}
printf("结果为:%d\n",sum);
return 0;
}
3.字符数组
字符数组:数据元素为字符的数组
数组定义char 数组标识符[常量表达式]
初始化
1.一一对应
2.省略数组长度
3.利用字符串
char a[5]={'H','e','l','l','o'};
char a[]={'H','e','l','l','o'};
char a[5]={"Hello"};\0为结束的标志
%c输出字符,%s输出字符串
//计算单词个数
#include<stdio.h>
int main()
{
char a[100];
int i,Word=1;
char Blank;
gets(a);
if(a[0]=='\0')
{
printf("这里没有字符!\n");
}
else if(a[0]==' ')
{
printf("第一个字符为空格!\n");
}
else
{
for(i=0;a[i]!='\0';i++)
{
Blank= a[i];
if(Blank==' ')
{
Word++;
}
}
printf("单词数为%d",Word);
}
return 0;
}
4.多维数组
多维数组:与二维数组相同,不过下标更多数据类型 数组名[常量表达式1][常量表达式2][常量表达式3]
5.排序算法
5.1 选择排序法
选择排序法:从小到大排列时,将第一个数字与最小值换位,第二个数字与剩下的最小值换位,以此类推,直至所以数字都换过位置
#include<stdio.h>
int main()
{
int i,j;
int a[10];
int temp,pos; //定义临时变量,临时位置
printf("请输入数组元素值:\n");
for(i=0;i<10;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
/*从小到大排序*/
for(i=0;i<9;i++)
{
temp = a[i]; //记录当前元素的值
pos = i; //记录当前元素的位置
for(j=i+1;j<10;j++)
{
if(a[j]<temp) //比较大小
{
temp = a[j]; //最小值替换当前元素值
pos = j; //最小值替换当前元素位置
}
}
a[pos] = a[i]; //交换元素
a[i] = temp; //交换值
}
for(i=0;i<10;i++)
{
printf("%d\t",a[i]);
if(i==4)
printf("\n");
}
return 0;
}
5.2 冒泡排序法
冒泡排序法:每次比较相邻的两个数,将较小的数放在较大的数前面
#include<stdio.h>
int main()
{
int i,j,temp;
int a[10];
printf("请输入一个数组:\n");
for(i=0;i<10;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
/*从小到大排序*/
for(i=1;i<10;i++)
{
for(j=9;j>=i;j--)
{
if(a[j]<a[j-1])
{
temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
}
}
}
for(i=0;i<10;i++)
{
printf("%d\t",a[i]);
if(i==4)
printf("\n");
}
return 0;
}
5.3 交换排序法
交换排序法:将每一个数与后面所有数一一比较,数据符合则交换位置
#include<stdio.h>
int main()
{
int i,j,temp;
int a[10];
printf("请输入一个数组元素:\n");
for(i=0;i<10;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if(a[j]<a[i])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for(i=0;i<10;i++)
{
printf("%d\t",a[i]);
if(i==4)
{
printf("\n");
}
}
return 0;
}
5.4 插入排序法
插入排序法:
#include<stdio.h>
int main()
{
int i,j,temp,pos;
int a[10];
printf("请输入一个数组:\n");
for(i=0;i<10;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
{
temp = a[i];
pos = i-1;
while((pos>=0)&&(temp<a[pos]))
{
a[pos+1] = a[pos];
pos--;
}
a[pos+1] = temp;
}
for(i=0;i<10;i++)
{
printf("%d\t",a[i]);
if(i==4)
printf("\n");
}
return 0;
}
5.5 折半排序法
#include<stdio.h>
void CelerityRun(int left,int right,int array[]);
int main()
{
int i;
int a[10];
printf("请输入一个数组:\n");
for(i=0;i<10;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
CelerityRun(0,9,a);
for(i=0;i<10;i++)
{
printf("%d\t",a[i]);
if(i==4)
printf("\n");
}
return 0;
}
void CelerityRun(int left,int right,int array[])
{
int i,j;
int middle,temp;
i = left;
j = right;
middle = array[(left+right)];
do
{
while((array[i]<middle)&&(i<right))
i++;
while((array[j]>middle)&&(j>left))
j--;
if(i<=j)
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
}while(i<=j);
if(left<j)
CelerityRun(left,j,array);
if(right>i)
CelerityRun(i,right,array);
}
6.字符串处理
6.1 字符串复制(strcpy)
strcpy函数:复制特定长度的字符串到另一个字符串中strcpy(目的字符数组名,源字符数组名)
不能用赋值语句直接赋值
#include<stdio.h>
int main()
{
char a[30],b[30];
printf("输入一个目的字符串:\n");
gets(a);
printf("输入一个源字符串:\n");
gets(b);
strcpy(a,b);
printf("复制后的目的字符串:\n");
puts(a);
return 0;
}
6.2 字符串连接(strcat)
strcat函数:将一个字符串连接到另一个字符串的末尾,组成一个新的字符串strcat(目的字符数组名,源字符数组名)
int main()
{
char a[30],b[30];
printf("输入一个目的字符串:\n");
gets(a);
printf("输入一个源字符串:\n");
gets(b);
strcat(a,b);
printf("连接后的目的字符串:\n");
puts(a);
return 0;
}
6.3 字符串比较(strcmp)
strcmp函数:将一个字符串与另一个字符串一一比较strcmp(字符数组1,字符数组2)
字符串1=字符串2 ,返回0
字符串1>字符串2,返回正数
字符串1<字符串2,返回负数
#include<stdio.h>
int main()
{
char user[20]={"root"};
char password[20]={"123456"};
char u[20],p[20];
int i=0;
while(i<3)
{
printf("请输入用户名:\n");
gets(u);
printf("请输入密码:\n");
gets(p);
if(strcmp(user,u))
{
printf("用户名输入错误!\n");
}
else
{
if(strcmp(password,p))
{
printf("密码错误!\n");
}
else
{
printf("欢迎使用!\n");
break;
}
}
i++;
}
if(i==3)
{
printf("连续输入错误3次!\n");
}
return 0;
}

6.4 字符串大小写转换(strupr/strlwr)
strupr函数:将字符串中的小写字母转换为大写字母其他不变strupr(字符串)
strlwr函数:将字符串中的大写字母转换为小写字母其他不变strlwr(字符串)
#include<stdio.h>
#include<string.h>
int main()
{
char text[20],change[20];
int num;
int i=0;
printf("(1转为大写,2转为小写,0退出)\n");
while(1)
{
printf("请输入转换方式:\n");
scanf("%d",&num);
if(num==1)
{
printf("请输入一个字符串:\n");
scanf("%s",&text);
strcpy(change,text);
strupr(change);
printf("转换完的字符串为:%s\n",change);
}
else if(num==2)
{
printf("请输入一个字符串:\n");
scanf("%s",&text);
strcpy(change,text);
strlwr(change);
printf("转换完的字符串为:%s\n",change);
}
else if(num==0)
{
break;
}
}
return 0;
}
6.5 字符串长度(strlen)
strlen函数:计算字符串的实际长度,不含\0strlen(字符数组名)
#include<stdio.h>
#include<string.h>
int main()
{
char text[50],connect[50];
int num;
printf("请输入一个字符串:\n");
scanf("%s",&text);
num = strlen(text);
printf("字符串长度为:%d\n",num);
printf("请再输入一个字符串:\n");
scanf("%s",&connect);
num=strlen(connect);
printf("字符长度为:%d\n",num);
strcat(text,connect);
printf("连接后的字符串:%s\n",text);
num = strlen(text);
printf("连接后的字符长度为:%d",num);
return 0;
}
7.应用
//反转字符串
#include<stdio.h>
int main()
{
int i,size;
char a[7]={"abcdefg"};
char b[7]={0};
size=sizeof(a);
for(i=0;i<6;i++)
{
b[size-i-2]=a[i];
}
printf("输出源字符为:%s\n",a);
printf("输出目标字符为:%s\n",b);
return 0;
}
//输出系统时间和日期
#include<stdio.h>
#include<time.h>
int main()
{
int command[4]={0,1,2,3};
int num;
struct tm *Time;
printf("1-显示时间\n2-显示日期\n3-退出\n");
while(1)
{
printf("\n请输入命令:");
scanf("%d",&num);
if(command[1]==num)
{
time_t nowTime;
time(&nowTime);
Time=localtime(&nowTime);
printf("系统时间:%d:%d:%d\n",Time->tm_hour,Time->tm_min,Time->tm_sec);
}
else if(command[2]==num)
{
time_t nowTime;
time(&nowTime);
Time=localtime(&nowTime);
printf("系统日期:%d/%d/%d\n",1900+Time->tm_year,Time->tm_mon+1,Time->tm_mday);
}
else if(command[3]==num)
{
return 0;
}
}
return 0;
}
//字符串加密、解密
#include<stdio.h>
#include<string.h>
int main()
{
int i;
int result = 1;
int count = 0;
char Text[128]={'\0'};
char cryptograph[128]={'\0'};
printf("(1为加密,2为解密,3为退出)\n");
while(1)
{
printf("\n请输入命令:");
scanf("%d",&result);
if(result==1)
{
printf("输入要加密的明文:");
scanf("%s",&Text);
count = strlen(Text);
for(i=0;i<count;i++)
{
cryptograph[i]=Text[i]+i+5;
}
cryptograph[i]='\0';
printf("加密后的密文是:%s\n",cryptograph);
}
else if(result==2)
{
count=strlen(Text);
for(i=0;i<count;i++)
{
Text[i] = cryptograph[i]-i-5;
}
Text[i]='\0';
printf("解密后的明文是:%s\n",Text);
}
else if(result==3)
{
printf("运行结束!\n");
break;
}
else
{
printf("请输入字符:\n");
}
}
return 0;
}
