本节目录
2.5.1 一维数组
A.定义
B.初始化
//2_5_1
#include<stdio.h>
int main()
{
int a[10]={5,3,2,6,8,4};
for(int i=0;i<10;i++){
printf("a[%d]=%d\n",i,a[i]);
}
return 0;
}
C.递推
//2_5_2
#include<stdio.h>
int main()
{
int a[10];
scanf("%d",&a[0]);
for(int i=1;i<10;i++){
a[i]=a[i-1]*2;
}
for(int i=0;i<10;i++){
printf("a[%d]=%d\n",i,a[i]);
}
return 0;
}
2.5.2 冒泡排序
A.算法内理解
B.算法实现
b1.交换2个数
//2_5_3
#include<stdio.h>
int main()
{
int a=1,b=2;
int temp =a;
a=b;
b=temp;
printf("a=%d,b=%d\n",a,b);
return 0;
}
b2.冒泡排序实现
//2_5_4
#include<stdio.h>
int main()
{
int a[10]={3,1,4,5,2};
for(int i=1;i<=4;i++){//进行n-1趟
//第1趟时从a[0]到a[n-i-1]都与它们下一个数比较
for(int j=0;j<5-i;j++){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<5;i++){
printf("%d",a[i]);
}
return 0;
}
2.5.3 二维数组
A.定义
注意:对定义为int a[size1][size2]的二维数组,其第一维的下标的取值范围只能是 0 ~(size1-1),其第二维的下标的取值范围只能是 0 ~ (size2-1)
B.初始化
//2_5_5
#include<stdio.h>
int main()
{
int a[5][6]={{3,1,2},{8,4},{},{1,2,3,4,5,}};
for(int i=0;i<5;i++){
for(int j=0;j<6;j++){
printf("%d",a[i][j]);
}
printf("\n");
}
return 0;
}
C.运算
//2_5_6
#include<stdio.h>
int main()
{
int a[3][3],b[3][3];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
scanf("%d",&a[i][j]);
}
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
scanf("%d",&b[i][j]);
}
}
int c[3][3];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
c[i][j]=a[i][j]+b[i][j];
}
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
printf("%d ",c[i][j]);
}
printf("\n");
}
return 0;
}
D.大型数组声明位置
//2_5_7
#include<stdio.h>
int a[1000000];
int main()
{
for(int i=0;i<1000000;i++){
a[i]=i;
}
for(int i=0;i<1000000;i++){
printf("%d ",a[i]);
}
return 0;
}
hhhhhhhhh运行的时候眼睛都花了,我为什么要干这种事情哈哈哈哈哈哈哈
跑了快3分钟
E.多维数组
//2_5_8
#include<stdio.h>
int main()
{
int a[3][3][3];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
for(int k=0;k<3;k++){
scanf("%d",&a[i][j][k]);
}
}
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
for(int k=0;k<3;k++){
printf("a[%d][%d][%d]=%d\n",i,j,k,a[i][j][k]);
}
}
}
return 0;
}
自己竟然在好奇三维数组怎么显示出来,不是这样的啊,不能这样想,三维、二维的显示都是后期我们来控制的,其实这些多维数组本质上就是一维数组,就是线性存储在连续存储空间上的
2.5.4 memset ----对数组中的每个元素赋相同的值
//2_5_9
#include<stdio.h>
#include<string.h>
int main()
{
int a[5]={1,2,3,4,5};
//赋初值0
memset(a,0,sizeof(a));
for(int i=0;i<5;i++){
printf("%d",a[i]);
}
printf("\n");
//赋初值-1
memset(a,-1,sizeof(a));
for(int i=0;i<5;i++){
printf("%d",a[i]);
}
printf("\n");
//赋初值1(会乱)
memset(a,1,sizeof(a));
for(int i=0;i<5;i++){
printf("%d",a[i]);
}
printf("\n");
return 0;
}
2.5.5 字符数组
A.初始化
a1.普通方法
//2_5_10
#include<stdio.h>
int main()
{
char str[15]={'G','o','o','d',' ','s','t','o','r','y','!'};
for(int i=0;i<11;i++){
printf("%c",str[i]);
}
return 0;
}
b1.直接赋值字符串
//2_5_11
#include<stdio.h>
int main()
{
char str[15]="Good story!";
for(int i=0;i<11;i++){
printf("%c",str[i]);
}
return 0;
}
B.输入输出
b1.scanf输入,printf输出
//2_5_12
#include<stdio.h>
int main()
{
char str[10];
scanf("%s",str);
printf("%s",str);
return 0;
}
注意:
1.%s通过空格或换行符识别字符串的结束,如上图所示,难免觉的有些不方便
2.scanf使用%s时,后面数组名不需要加&
b2.getchar输入,putchar输出
//2_5_13
#include<stdio.h>
int main()
{
char str[5][5];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
str[i][j]=getchar();
}
getchar();//为了将输入中每行末尾的换行符吸收掉
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
putchar(str[i][j]);
}
putchar('\n');
}
return 0;
}
运行结果有点点奇怪
b3.gets输入, puts输出
//2_5_14
#include<stdio.h>
int main()
{
char str1[20];
char str2[5][10];
gets(str1);
for(int i=0;i<3;i++){
gets(str2[i]);
}
puts(str1);
for(int i= 0;i<3;i++){
puts(str2[i]);
}
return 0;
}
这段代码,通过gets(str1)将第一个字符串存入字符数组str1中,然后通过for循环将后面3个字符串分别存于str2[0],str2[1],str2[2]中
C.字符数组的存放方式
//2_5_15
#include<stdio.h>
int main()
{
char str[15];
for(int i=0;i<3;i++){
str[i]=getchar();
}
puts(str);
return 0;
}
2.5.6 string.h的头文件
A.strlen()
//2_5_16
#include<stdio.h>
#include<string.h>
int main()
{
char str[10];
gets(str);
int len=strlen(str);
printf("%d\n",len);
return 0;
}
B.strcmp()
//2_5_17
int main()
{
char str1[50],str2[50];
gets(str1);
gets(str2);
int cmp=strcmp(str1,str2);
if(cmp<0) printf("str1<str2\n");
else if(cmp>0) printf("str1>str2\n");
else printf("str1 == str2\n");
return 0;
}
注意:这里是字典序,并不是字符串长度比较
C.strcpy()
//2_5_18
#include<stdio.h>
#include<string.h>
int main()
{
char str1[50],str2[50];
gets(str1);
gets(str2);
strcpy(str1,str2);
puts(str1);
return 0;
}
D.strcat()
//2_5_19
#include<stdio.h>
#include<string.h>
int main()
{
char str1[50],str2[50];
gets(str1);
gets(str2);
strcat(str1,str2);
puts(str1);
return 0;
}
2.5.7 sscanf 与 sprintf
//2_5_20
#include<stdio.h>
int main()
{
int n;
char str[100]="123";
sscanf(str,"%d",&n);
printf("%d\n",n);
return 0;
}
//2_5_21
#include<stdio.h>
int main()
{
int n=233;
char str[100];
sprintf(str,"%d",n);
printf("%s\n",str);
return 0;
}
//2_5_22
#include<stdio.h>
int main()
{
int n;
double db;
char str[100]="2048,3.14,hello",str2[100];
sscanf(str,"%d,%1f,%s", &n ,&db,str2);
printf("n=%d,db=%.2f,str2=%s\n",n,db,str2);
return 0;
}
标记问题:emmm这里出了一点小问题,我的3.14和hello没有像课本那样显示出来,而且我也没找到问题在哪里,先暂时搁置一下