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文章
7604浏览量
136794 -
函数
+关注
关注
3文章
4331浏览量
62596 -
数组
+关注
关注
1文章
417浏览量
25943
发布评论请先 登录
相关推荐
C语言总结_字符串全方位练习
C语言字符串全方位练习,涉及知识点:字符串解析、大小写判断、字符串插入、字符串删除、字符串排序、字符串转整数、字符串转浮点数、时间转换、GPS数据解析等等。
C语言_语句与位运算基本练习
总结C语言语句的几个基本练习题,计算素数、排序、求偶数和、可逆素数、水仙花数、交换大小写、交换变量的值、位运算、语法特性等知识点。
C语言_数组的查找、替换、排序、拼接
这篇文章主要是总结C语言的位运算几个实战例子,接着介绍数组的基本定义用法、数组排序、插入、拼接、删除、字符串查找替换等。
C语言_结构体总结
当前文章介绍动态堆空间内存分配与释放,C语言结构体定义、初始化、赋值、结构体数组、结构体指针的相关知识点,最后通过一个学生管理系统综合练习结构体数组
C语言_链表总结
本篇文章介绍C语言链表相关知识点,涉及链表的创建、单向链表、循环链表、双向链表、单向循环链表,链表常见问题总结等,还列出了结构体数组与链表的练习
C语言如何创建数组
C语言是一种非常强大和灵活的编程语言,它提供了若干数据类型来存储和操作数据。其中之一就是数组,它可以用来存储一系列具有相同数据类型的元素。本文将详细介绍如何在
c语言中数组怎么定义
C语言中,数组是一种用来存储相同类型元素的数据结构。它可以存储多个元素,并通过一个共同的名称来引用这些元素。数组是一种很重要的数据结构,可以用于解决很多实际的问题。 在
评论