《C语言及程序设计》实践项目——数组与函数应用

简介: 返回:贺老师课程教学链接【项目1-有序数组中插入数据(函数版)】  有一个足够“大”的数组a,其中已经存储了n个呈升序排列的数据。调用函数insert(a, n, m),可以将数m插入到a中的合适位置,使其仍然保持升序,并且返回值为数组中有效数字的个数(即原先的n加1)。  例如,若a中数据为1 7 8 17 23 24 59 62 101,n=9,需要插入的数字m为50,调用函数inse

返回:贺老师课程教学链接


【项目1-有序数组中插入数据(函数版)】
  有一个足够“大”的数组a,其中已经存储了n个呈升序排列的数据。调用函数insert(a, n, m),可以将数m插入到a中的合适位置,使其仍然保持升序,并且返回值为数组中有效数字的个数(即原先的n加1)。
  例如,若a中数据为1 7 8 17 23 24 59 62 101,n=9,需要插入的数字m为50,调用函数insert(a, n, m)后,a中数据为1 7 8 17 23 24 50 59 62 101,n=10。
  下面给出了调用函数insert的main函数,请写出insert函数来,实现上述功能。

int main()
{
    int a[N]= {1, 7, 8, 17, 23, 24, 59, 62, 101};
    int i, n=9;
    int m =50;
    n = insert(a, n, m);   //在长度为n的a数组中插入m,使仍保持有序
    for(i=0; i<n; ++i)
        printf("%d ", a[i]);
    printf("\n");
    return 0;
}
[ 参考解答]


【项目2 - 删除数组元素】
del函数的作用是删除数组a中的指定元素x,n为数组a的元素个数。函数的返回值,为删除元素后的有效元素个数(数组中可能有重复元素)。函数的原型为:
int del (int a[10],int n,int x)
(1)请实现这个函数,并完成测试。
(2)如果在函数调用时,要求数组中的元素呈升序排列呢?

[参考解答]


【项目3 - 数组的排序】
(1)编写函数,完成冒泡排序
要求不能改变下面的main函数。

//两个函数bubble_sort和output_array的声明
   
int main( )
{
    int a[20]={86,76,62,58,77,85,92,80,96,88,77,67,80,68,88,87,64,59,61,76};
    int b[15]={27,61,49,88,4,20,28,31,42,62,64,14,88,27,73};
    bubble_sort(a,20);   //用冒泡法按降序排序a中元素
    output_array(a,20);   //输出排序后的数组
    bubble_sort(b,15);   //用冒泡法按降序排序b中元素
    output_array(b,15);   //输出排序后的数组
    return 0;
}
//请在下面定义bubble_sort和output_array函数

(2)字符数组排序:改造(1)的程序,使其能对字符数组进行排序,其中:
int a[20]={...};
int b[15]={...};
改为
char a[20] = {'s','o','r','t','b','u','b','b','l','e','s','e','l','e','c','t','o','k','o','k'};
char b[15] = {'a','b','a',...};  //自己补足
(3)体验选择排序:改造(1)的程序,将bubble_sort(...)改为select_sort(...),排序算法由冒泡排序换作为选择排序,排序结果由降序变为升序,完成类似的任务。

[参考解答]


【项目4 - 查成绩】
(1)score1.txt提供了某大学两个班某次测验的数据,包括每位同学的学号及成绩。
请编程序,输入学号,查找出该同学的成绩。
提示1:可以定义两个int型数组,其中一个n存放学号,另一个s存放成绩,可以保证两个数组中,元素下标相同,对应的是同一位同学。例如n[18]值为3123,s[18]为98,说明学号为3123的同学成绩为98。
提示2:因为数据无序,运用顺序查找算法,在n数组中依据学号进行查找,在s数组中对应下标的值则为其成绩。例如,通过在n中的查找,得出学号为3123的同学的下标为18,则其成绩为s[18]。
下面是完成应用的部分代码,已经能够输出成绩清单。请在此基础上实现有关的函数:

int main()
{
    int num[200], score[200];  //分别保存学号和成绩
    int count;  //代表学生人数
    int index;  //代表查找到的学生的下标
    int key;
    count = readData(num, score);   //将成绩数据从文件中读到数组中
    printf("请输入要查找的学生学号:");
    scanf("%d",&key);
    index = search(num, count, key);  //在count个学生中查找学号为key的学生对应的下标
    if(index<0)    //输入的学号不存在时,index的值要求返回-1
        printf("不存在学号为%d的同学\n",key);
    else
        printf("学号为%d的同学的成绩是:%d\n", key, score[index]);
    return 0;
}

(2)在实际工程中,为了让频繁执行的查询更快一些,常要求对数据进行排序,再进行查询。请改造程序:①在调用readData(num, score);读入数据后,立即调用自定义函数sort对两个数组进行排序(注意在排序需要交换时,应该同时交换两个数组中对应的值,以保证同一下标,对应的是同一个学生的学号和成绩);②这样,search函数可以实现为二分查找了;③改造main函数,支持多次的查找。

[参考解答]

目录
相关文章
|
6天前
|
程序员 C语言
C语言库函数 — 内存函数(含模拟实现内存函数)
C语言库函数 — 内存函数(含模拟实现内存函数)
15 0
|
17天前
|
编译器 C语言 C++
【C语言】memset()函数(内存块初始化函数)
【C语言】memset()函数(内存块初始化函数)
23 0
|
17天前
|
编译器 C语言 C++
【C语言】memcpy()函数(内存块拷贝函数)
【C语言】memcpy()函数(内存块拷贝函数)
37 0
|
18天前
|
C语言 C++
【C语言】rand()函数(如何生成指定范围随机数)
【C语言】rand()函数(如何生成指定范围随机数)
15 0
|
6天前
|
程序员 C语言 开发者
C语言库函数 — 字符串函数(含模拟实现字符串函数)
C语言库函数 — 字符串函数(含模拟实现字符串函数)
30 0
|
13天前
|
存储 C语言
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现1
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现
|
13天前
|
机器学习/深度学习 C语言
【C语言】函数的系统化精讲(三)1
【C语言】函数的系统化精讲(三)
|
13天前
|
编译器 C语言
【C语言】函数的系统化精讲(一)2
【C语言】函数的系统化精讲(一)2
|
13天前
|
编译器 Serverless C语言
【C语言】函数的系统化精讲(一)1
【C语言】函数的系统化精讲(一)
|
13天前
|
存储 程序员 编译器
【C语言第二回】main、printf和库函数
【C语言第二回】main、printf和库函数