C语言程序设计(第五章 数组)

C语言程序设计(第五章 数组)

1、一维数组
(1)数组是一组有序数据的集合
(2)用一个数组名(如s)和下标(如15)来唯一地确定数组中的元素,如s(15)就代表第15个学生的成绩。
(3)数组中的每一元素都属于同一个数据类型
一维数组的一般形式为:
类型说明符 数组名[常量表达式];
如何引用一维数组元素:
数组名[下标]
一维数组的定义:
int a[10]        //前面有int,这是定义数组,指定数组包含10个元素
t=a[6]			 //这里的a[6]表示引用a数组中序号为6的元素
例题1:对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求逆序输出。
#include<stdio.h>
int main(){
    int i,a[10];
    for(i=0;i<=9;i++){
        a[i]=i;
    }
    for(i=9;i>=0;i--)
        printf("%d\t",a[i]);
    printf("\n");
    return 0;
}
一维数组的初始化:
int a[10]={0,1,2,3,4,5,6,7,8,9};

//也可以只给数组中的一部分元素赋值
int a[10]={0,1,2,3,4};      //未赋值的元素都为0
例题2:使用数组来处理斐波那契数列问题
int main(){
    int i;
    int f[20]={1,1};
    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]);
    }
    printf("\n");
    return 0;
}

执行结果:
           1           1           2           3           5
           8          13          21          34          55
          89         144         233         377         610
         987        1597        2584        4181        6765
例题3:有10个地区的面积,要求对它们按由小到大的顺序排列
#include<stdio.h>
int main(){
    int a[10];
    int i,j,t;
    printf("请输入10个地区面积:");
    for(i=0;i<=9;i++){
        scanf("%d",&a[i]);
    }
    printf("\n");
    for(j=0;j<9;j++){
        for(i=0;i<9-j;i++){
            if(a[i]>a[i+1]){
                t=a[i];
                a[i]=a[i+1];
                a[i+1]=t;
            }
        }
    }
    printf("排序后输出的结果为:\n");
    for(i=0;i<=9;i++){
        printf("%d\t",a[i]);
    }
    printf("\n");
    return 0;
}

执行结果:
请输入10个地区面积:59 48 26 15 35 78 85 95 62 100

排序后输出的结果为:
15      26      35      48      59      62      78      85      95      100
2、二维数组(矩阵)
二维数组定义的一般形式:
float a[3][4]  
\\以上定义了一个float型的二维数组,第一维有3个元素,第二维有4个元素
如何引用二维数组:
数组名[下标][下标]
二维数组的初始化:
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
例题4:将int a[2] [3]={1,2,3},{4,5,6}转化成int a[3] [2]={1,4},{2,5},{3,6}
#include<stdio.h>
int main(){
    int a[2][3]={{1,2,3},{4,5,6}};
    int b[3][2],i,j;
    printf("数组a:\n");
    for(i=0;i<=1;i++){
        for(j=0;j<=2;j++){
            printf("%5d",a[i][j]);
            b[j][i]=a[i][j];
        }
        printf("\n");
    }
    printf("数组b:\n");
    for(i=0;i<=2;i++){
        for(j=0;j<=1;j++){
            printf("%5d",b[i][j]);
        }
        printf("\n");
    }
    return 0;
}

执行结果:

数组a:
    1    2    3
    4    5    6
数组b:
    1    4
    2    5
    3    6
例题5:有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在行列号
#include<stdio.h>
int main(){
    int i,j,row=0,colum=0,max;
    int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,23,45}};
    max=a[0][0];
    for(i=0;i<=2;i++){
        for(j=0;j<=3;j++){
            if(a[i][j]>max){
                max=a[i][j];
                row=i;
                colum=j;
            }
        }
    }
    printf("max=%d\n所在行列号为:a[%d][%d]\n",max,row,colum);
    return 0;
}

执行结果:

max=45
所在行列号为:a[2][3]
3、字符数组
定义字符数组的方法与定义数值型数组的方法类似:
char c[10]={'I','a','m','','h','a','p','p','y'};
c[0]='I';c[1]=' ';c[2]='a';c[3]='m';c[4]=' ';
c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';
字符数组的初始化:
char c[6]={'I',' ','L','o','v','e'};

char c[]={'l','o','v','e'};
不设置元素个数时,会自动识别该数组长度为4
字符串和字符串结束标志:

C语言规定了一个“字符串结束标志”,以字符’\n’作为结束标志。如果字符数组中存在有若干字符,前面9个字符都不是空字符(’\0’),而第10个字符是’\0’,则认为数组中有一个字符串,其有效字符为9个。也就是说,在遇到字符’\0’时,表示字符串结束,把它前面的字符组成一个字符串。

字符数组的输入输出:

(1)逐个字符输入输出。用格式符"%c"输入或输出一个字符。

(2)将整个字符串一次输入或输出。用"%s"格式符,意思是对字符串(string)的输入输出。例如:

char c[]={"China"};
printf("%s\n",c);
存储情况为 
    C h i n a \0
输出为
    china
4、使用字符串处理函数
(1)puts函数——输出字符串的函数

其一般形式为:

puts(char str[])

1.用puts函数输出的字符串中可以包含转义字符。

2.再用puts输出时将字符串结束标志’\0’转换成’\n’,即输出完字符串后换行。

3.puts函数在遇到空格也会输出。

示例代码:


#include<stdio.h>
int main()
{
	char str[] = { "I Love C program" };
	char str1[] = { "Hello\nworld" };
	puts(str);
	puts(str1);
	return 0;
}
(2)gets函数——输入字符串的函数

其一般形式为:

gets(char str[])

1.从终端输入一个字符串到字符数组,并得到一个函数值。

2.该函数值是字符数组的起始地址。

示例代码:

#include<stdio.h>
int main()
{
	char str[10];
	gets(str);
	puts(str);
	return 0;
}
(3)strcat函数——字符串连接函数

其一般形式为:

strcat(char str1[],char str2[])

1.其作用是把两个字符数组中的字符串连接起来,把字符串2连接到字符串1的后面,结果放在字符数组1中。

2.字符数组1必须足够大,以便容纳连接后的新字符串。

3.连接前两个字符串的后面都有’\0’,连接时将字符串1后面的’\0’取消,只在新字符串最后保留’\0’。

示例代码:

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[30] = {"People's Republic of "};
	char str2[] = { "China" };
	printf("%s", strcat(str1, str2));
	return 0;
}
(4)strcpy和strncpy函数——字符串复制函数

其一般形式为:

strcpy(字符数组1,字符串2)

1.作用是将字符串2复制到字符数组1中去,并且字符数组1必须定义得足够大,以便容纳被复制的

2."字符数组1"必须写成数组名形式(如str),"字符串2"可以是字符数组名,也可以是一个字符串常量。例如:strcpy(str1,“C program”);作用与前面相同。

3.不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。字符数组名是一个地址常量,它不能改变值,正如数值型数组名不能被赋值一样。

示例代码:

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[10];
	char str2[] = { "China" };
	printf("%s\n", strcpy(str1, str2));
	printf("%s\n", strcpy(str1, "program"));
	return 0;
}
 strncpy(字符数组1,字符数组2,int index)

1.作用是将字符串2中最前面index个字符复制到字符数组1中,取代字符数组1中原有的最前面index个字符。

2.复制的字符个数n不应多余字符数组1中原有的字符(不包括’\0’)。

示例代码:

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[10] = {"world"};
	char str2[] = { "hello" };
	printf("%s\n", strncpy(str1, str2,3));
	printf("%s\n", strncpy(str1, "program",3));
	return 0;
}
(5)strcmp函数——字符串比较函数

其一般形式为:

strcmp(字符串1,字符串2)

1.作用是比较字符串1和字符串2,比较的结果有函数值带回。

​ (1)如果字符串1与字符串2相同,则函数值为0。

​ (2)如果字符串1>字符串2,则函数值为一个正整数。

​ (3)如果字符串1<字符串2,则函数值为一个负整数。

2.字符串比较规则:将两个字符串自左向右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到’\0’为止。

​ (1)如全部字符相同,则认为两个字符串相等;

​ (2)若出现不相同的字符,则以第1对不相同的字符的比较结果为准。

示例代码:

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[10] = { "hello" };
	char str2[10] = { "helle" };
	if (strcmp(str1, str2)>0)
		printf("str1>str2:Yes");
	else
		printf("str1<str2:No");
	return 0;
}
(6)strlen函数——测字符串长度的函数

其一般形式为:

strlen(字符数组)

示例代码:

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[10] = { "hello" };
	int size = strlen(str1);
	printf("%d\n", size);
	printf("%d\n", strlen("world"));
	return 0;
}
(7)strlwr函数和strupr函数——分别为转换为小写和大写的函数

其一般形式为:

strlwr(字符串);

strupr(字符串);

示例代码:

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[10] = { "HELlo" };
	char str2[10] = { "WOrld" };
	printf("%s\n", strlwr(str1));		//转换为小写
	printf("%s\n", strupr(str2));		//转换为大写
	return 0;
}
例题6:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
#include<stdio.h>
#include<string.h>
int main(){
    char str[100];
    int i,num=0,word=0;
    char c;
    gets(str);
    for(i=0;(c=str[i])!='\0';i++){
        if(c==' '){
            word=0;
        }
        else{
            if(word==0){
                word=1;
                num++;
            }
        }
    }
    printf("单词数为:%d\n",num);
    return 0;
}

执行结果:
I love you
单词数为:3
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跑不完的脚本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值