0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言总结_数组全方位练习

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-08-14 09:34 次阅读

C语言数组的练习题:涉及到数组插入、数组删除、数组下标数据的左移右移、数组排序、数组排序优化、数组的数据拼接等等。

(1)函数基本使用: 函数基本定义、封装、传参、调用、局部变量、全局变量、只读变量、静态变量
(2)数组基本使用: 数组基本定义、使用赋值、字符串。

1. 数组基本知识

1. 概念:  同一个类型的集合。
2. 定义:  int data[100];  //数组data里可以存放100个int类型
     100必须是常量(C89)。定义数组时,如果没有赋初始值[]一定要填大小。
     int data[]={1};
3.数组赋值: 只有在定义的使用才可以整体赋值。int data[10]={12,34,56,7,89};
4.数组下标[]访问从0开始。  比如:  buff[100];  下标范围: 0~99
5.数组的名称就是首地址。int buff[100];
1.2 字符串数组
1. 字符串录入:  scanf(“%s”);  gets()  fgets
2. 头文件: string.h
3. 从键盘录入字符串的方法 
scanf("%s",str); //从键盘上录入字符串,字符串结尾: '\0'
gets(str);       //从键盘上录入字符串
fgets(str,100,stdin); //从键盘上录入字符串 (标准输入)

#include 
int main(int argc,char **argv)
{
	int int_data[100]={12,34,56,78};    //整型数组
	char char_data[]={'A','B','C'};     //字符数组
	char str1_data[]={'A','B','C','\0'}; //字符串数组
	char str2_data[]="ABC";//字符串数组
	
	printf("char_data=%d\n",sizeof(char_data)); //3
	printf("str1_data=%d\n",sizeof(str1_data)); //4
	printf("str2_data=%d\n",sizeof(str2_data)); //4
	return 0;
}
字符串数组特性: 结尾有’\0’

2. 数组相关的题目(分析)

2.1 数组的数据插入

 int a[]={1,2,3,4,5,6,7};  在第2位数据后插入一个888
   结果: 1,2,888,3,4,5,6,7
#include 
int main(int argc,char **argv)
{
	int data[10]={1,2,3,4,5,6,7,8,9};
	//1,2,3,4,4,5,6,7,8,9
	int addr;
	int i;
	printf("输入插入的位置:");
	scanf("%d",&addr);
	
	/*1. 向后移动数据,空出位置*/
	for(i=8;i>=addr;i--)
	{
		data[i+1]=data[i];
	}
	
	/*2. 查看移动之后的效果*/
	for(i=0;i<10;i++)printf("%d ",data[i]);
	printf("\n");
	
	data[addr]=888; //插入的数据
	
	/*3. 最终效果*/
	for(i=0;i<10;i++)printf("%d ",data[i]);
	printf("\n");
	
	return 0;
}

2.2 数组数据的删除

 int a[]={1,2,3,4,2,6,7};   将第2位数据删除掉
结果: 1,3,4,5,6,7
示例:
#include 
int main(int argc,char **argv)
{
	int data[10]={1,2,3,4,5,6,7,8,9,10};
	//1,2,4,5,6,7,8,9,10,10
	int addr;
	int i;
	printf("输入删除的位置:");
	scanf("%d",&addr); //2

	/*1. 向前移动,将数据覆盖掉*/
	for(i=addr-1;i<10-1;i++)
	{
		data[i]=data[i+1];
	}
	
	/*2. 查看移动之后的效果*/
	for(i=0;i<9;i++)printf("%d ",data[i]);
	printf("\n");
	
	return 0;
}

2.3 变量排序

数组数据排序。从键盘上输入一串数据(整数),从大到小排序,再输出。
int a[]={12,67,45,13,1,5}; 排序之后: 67,45,13,12,5,1

排序: 计算平均数。班级成绩、温度数据…

例子: 从键盘上随机输入3个数,将3个数按照从大到小的顺序输出。

#include 
int main(int argc,char **argv)
{
	int a,b,c;
	int tmp; //存放临时数据
	printf("请输入3个数:");
	scanf("%d%d%d",&a,&b,&c); //以回车作为结束符号,以空格作为间隔符号
	printf("源数据:%d,%d,%d\n",a,b,c);
	
	//从大到小
	if(a)>

2.4 数组冒泡排序

#include 
int main(int argc,char **argv)
{
	int data[10];
	int tmp; //存放临时数据
	int i,j;
	int cnt=0; //排序比较的总次数
	
	/*1. 录入数据*/
	printf("请输入10个数:");
	for(i=0;i<10;i++)scanf("%d",&data[i]);
	/*2. 打印源数据:*/
	printf("源数据:");
	for(i=0;i<10;i++)printf("%d ",data[i]);
	printf("\n");
	/*3. 冒泡排序*/
	for(i=0;i<10-1;i++) //比较轮数
	{
		for(j=0;j<10-1-i;j++) //每一轮比较的次数
		{
			if(data[j]>data[j+1]) //从小到大
			{
				tmp=data[j];
				data[j]=data[j+1];
				data[j+1]=tmp;
			}
			cnt++; 
		}
	}
	
	/*4. 打印结果数据:*/
	printf("排序之后的数据:");
	for(i=0;i<10;i++)printf("%d ",data[i]);
	printf("\n");
	
	printf("排序的总次数:%d\n",cnt);
	return 0;
}

分析:

/*
data[]={1,2,3}
第一轮: [0]和[1]  [1]和[2]  2 3 1   每一轮保证最小的数在最后
第二轮: [0]和[1]  3 2 1
*/

排序: 从大到小
1 2 3 4 5 
第一轮:
(1) 2 1 3 4 5
(2) 2 3 1 4 5
(3) 2 3 4 1 5
(4) 2 3 4 5 1   
   
第二轮:
(1) 3 2 4 5 1
(2) 3 4 2 5 1
(3) 3 4 5 2 1
(4) 3 4 5 2 1

第三轮:
(1) 4 3 5 2 1
(2) 4 5 3 2 1
(3) 4 5 3 2 1
(4) 4 5 3 2 1

第四轮:
(1) 5 4 3 2 1
(2) 5 4 3 2 1
(3) 5 4 3 2 1
(4) 5 4 3 2 1

2.5 冒泡排序优化

#include 
int main(int argc,char **argv)
{
	int data[10];
	int tmp; //存放临时数据
	int i,j;
	int cnt=0; //排序比较的总次数  45:
	int flag=0; //标志位置
	
	/*1. 录入数据*/
	printf("请输入10个数:");
	for(i=0;i<10;i++)scanf("%d",&data[i]);
	/*2. 打印源数据:*/
	printf("源数据:");
	for(i=0;i<10;i++)printf("%d ",data[i]);
	printf("\n");
	/*3. 冒泡排序*/
	for(i=0;i<10-1;i++) //比较轮数
	{
		for(j=0;j<10-1-i;j++) //每一轮比较的次数
		{
			if(data[j]>data[j+1]) //从小到大
			{
				tmp=data[j];
				data[j]=data[j+1];
				data[j+1]=tmp;
				flag=1;
			}
			cnt++; 
		}
		if(flag==0) //不需要继续排序
		{
			break; //跳出最外层循环
		}
		flag=0; //清除标志位,方便第2次判断
	}
	
	/*4. 打印结果数据:*/
	printf("排序之后的数据:");
	for(i=0;i<10;i++)printf("%d ",data[i]);
	printf("\n");
	
	printf("排序的总次数:%d\n",cnt);
	return 0;
}

分析:

data[]={1,2,3}
第一轮: [0]和[1]  [1]和[2]  2 3 1   每一轮保证最小的数在最后
第二轮: [0]和[1]  3 2 1

2.6 数组数据的拼接(整数)

 int a[]={1,3,4,5,6,7};   int b[]={11,13,14,15,16,17};
将a和b拼接到c数组里。 最终int c[]={1,3,4,5,6,7, 11,13,14,15,16,17}
 必须保证c数组空间足够大。

示例代码:

#include 
int main(int argc,char **argv)
{
	int src_data[10]={1,2,3,4,5};
	int new_data[]={6,7,8,9}; //
	int i;
	for(i=0;i

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7513

    浏览量

    124165
  • 函数
    +关注

    关注

    3

    文章

    3845

    浏览量

    61223
  • 数组
    +关注

    关注

    1

    文章

    406

    浏览量

    25580
收藏 人收藏

    评论

    相关推荐

    [分享]全方位剖析BGA布线规则与技巧

     全方位剖析BGA布线规则与技巧  http://www.weeqoo.com/bbs/bbsdetail-271365-13.html
    发表于 07-17 10:33

    行车记录仪全方位录像

    行车记录仪全方位录像
    发表于 04-17 11:15

    C语言典型练习题及答案

    C语言典型练习题及答案 c语言初学者必备
    发表于 08-10 12:34

    全方位距离雷达动态检测系统的设计怎么设计

    具有全方位距离检测功能,具有全方位距离显示功能 能够智能找出距离最短的能力
    发表于 03-06 15:26

    C语言教程(算法、数组、函数、指针)全方位讲解PPT合集

    。做任何事情都要有一定的步骤。  计算机算法--计算机能够执行的算法。  计算机算法的分类:  数值运算算法:求解数值;  非数值运算算法:事务管理领域。本文档的主要内容详细介绍的是C语言教程之数组
    发表于 10-16 14:12

    全方位立体电容传感器的设计

    就会工作,这时我们可以用它来控制声音、报警器、灯光等电路或设备。  五、总结  本项设计解决传统传感器只能单一方向传感的问题,实现全方位立体传感的目的,通过查阅相关文献,没有他人进行同图1 本设计的实物电路 类研究。图1所示为本设计的实物电路。  
    发表于 11-12 16:26

    关于c语言数组下标的加减平移知识点总结不看肯定后悔

    关于c语言数组下标的加减平移知识点总结不看肯定后悔
    发表于 10-14 08:58

    C语言入门教学之数组资料总结免费下载

    本文档的主要内容详细介绍的是C语言入门教学之数组资料总结免费下载主要内容包括了:1 一维数组的定义和一维数组元素的引用2 一维
    发表于 10-23 17:53 5次下载
    C<b class='flag-5'>语言</b>入门教学之<b class='flag-5'>数组</b>资料<b class='flag-5'>总结</b>免费下载

    C语言程序设计教程之数组使用练习和文件和输入输出的资料概述

    本文档的主要内容详细介绍的是C语言程序设计教程之数组使用练习和文件和输入输出的资料概述。
    发表于 11-16 17:47 5次下载
    C<b class='flag-5'>语言</b>程序设计教程之<b class='flag-5'>数组</b>使用<b class='flag-5'>练习</b>和文件和输入输出的资料概述

    C语言总结_数组与函数传参练习

    字符串标准处理函数介绍(string.h)、指针和数组当做函数形参,指针定义、函数返回指针、void类型定义指针、类型强制转换、常量声明、extern外边引用声明关键字。
    的头像 发表于 08-14 09:36 572次阅读

    C语言总结_数组知识

    当前文章复盘C语言数组数组定义规则、数组空间类型、数组下标使用、数组存放的数据类型、
    的头像 发表于 08-14 09:38 1049次阅读

    C语言总结_字符串函数封装练习

    字符串函数重写练习:字符串比较、字符串拼接、字符串查找、字符串拷贝、内存比较、内存拷贝、内存初始化、内存比较、二维数组定义及基本使用、位运算练习--通过取模打印中文字模在控制台。
    的头像 发表于 08-14 09:42 709次阅读

    C语言总结_字符串全方位练习

    C语言字符串全方位练习,涉及知识点:字符串解析、大小写判断、字符串插入、字符串删除、字符串排序、字符串转整数、字符串转浮点数、时间转换、GPS数据解析等等。
    的头像 发表于 08-14 09:41 1137次阅读

    C语言_结构体总结

    当前文章介绍动态堆空间内存分配与释放,C语言结构体定义、初始化、赋值、结构体数组、结构体指针的相关知识点,最后通过一个学生管理系统综合练习结构体数组的使用。
    的头像 发表于 08-14 09:52 811次阅读

    C语言_链表总结

    本篇文章介绍C语言链表相关知识点,涉及链表的创建、单向链表、循环链表、双向链表、单向循环链表,链表常见问题总结等,还列出了结构体数组与链表的练习题,将在下篇文章贴出完整代码。
    的头像 发表于 08-14 09:53 1431次阅读