第四周《C语言及程序设计》实践项目26 实现线性表基本操作的函数

【项目1-有序数组中插入数据(函数版)】

/*
 * Copyright (c) 2016, CSDN学院
 * All rights reserved.
 * 文件名称:【项目1-有序数组中插入数据(函数版)】.cpp
 * 作    者:张易安
 * 完成日期:2016年 9 月 9 日
 * 版 本 号:v1.0
 *
 * 问题描述: 有一个足够“大”的数组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。
 */
#include<stdio.h>
#define N 100
int insert(int[] ,int ,int );
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);
	for(i=0;i<n;i++)
	{
		printf("%d\t",a[i]);
	}
	printf("\n");

	return 0;
 }
 /*
 insert(a,n,m)的函数功能是插入一个数字到顺序数组中
 入口参数:
    a-存放数字的数组
	n-数字的个数
	m-插入的数字
*/
int insert(int a[],int n,int m)
 {
 	int i=n-1;//先是把数组的个数减少一个 ,因为是从0开始a[0]=1
 	while(a[i]>m&&i>=0)//当个数大于0且数组中的值大于m时
 	{
 		a[i+1]=a[i];//数组中的值向后退一位
 		i--;
	 }
	 i++;//因为不加一的话就会在24上赋值 

	a[i]=m;//m的值赋给数组
	n++;//10个数字
	return n;
 }
 //体会,当看不懂一个程序的时候。最好的方法就是把自己当做电脑按着步骤自顶向下一步一步的执行,或者一步一步调试便于理解 

运行结果

【项目2 - 删除数组元素】

/*
 * Copyright (c) 2016, CSDN学院
 * All rights reserved.
 * 文件名称:【项目2 - 删除数组元素】.cpp
 * 作    者:张易安
 * 完成日期:2016年 9 月 9 日
 * 版 本 号:v1.0
 *
 * 问题描述:del函数的作用是删除数组a中的指定元素x,n为数组a的元素个数。函数的返回值,为删除元素后的有效元素个数(数组中可能有重复元素)。函数的原型为:
 int del (int a[10],int n,int x)
(1)请实现这个函数,并完成测试。
(2)如果在函数调用时,要求数组中的元素呈升序排列呢?
 */
#include<stdio.h>
int del(int a[],int n,int x);
int main()
{
	int a[20]={12,45,78,47,58,25,36,98,56,25,41,45,48,42,35,59,75,41,24,86};
	int i,n;
	n = del(a,20,75);
	for(i=0;i<n;i++)
	{
		printf("%d\n",a[i]);
	}
	printf("\n");

	return 0;
 }
 /*
 del(int a[],int n,int x)函数是为了珊瑚数组中的一个元素
 输入参数
    a[]-数组元素
	n-数组个数
	x-要删除的数字
 */
int del(int a[],int n,int x)
{
	int p,q=0;
	for(p=0;p<n;p++)
	{
		if(a[q]!=x)
		{
			a[p]=a[q];
			p++;
		}
	}
	 return p;//我就想不通了,为什么把p还给主函数了后就会输出不一样的解雇,难道是改变了数组?
}

运行结果

【项目3 - 数组的排序】

/*
 * Copyright (c) 2016, CSDN学院
 * All rights reserved.
 * 文件名称:【项目4-工资的排序】.cpp
 * 作    者:张易安
 * 完成日期:2016年 9 月 9 日
 * 版 本 号:v1.0
 *
 * 问题描述:从文件salary.txt中读入工人的工资(不超过500人),全部增加20%(好事),然后对工资数据进行排序,将排序后的结果保存到文件ordered_salary.txt中。
做完打开文件看看结果,玩这么多数据于股掌之间,相信你会有成就感的。
 */
#include<stdio.h>
void bubble_sort(int arr[],int num);
void output_array(int arr[],int num);
int main()
{
	int a[20]={87,76,62,58,77,85,92,88,77,67,80,68,88,87,64,59,61,76,75,63};
	int b[15]={27,61,49,88,4,20,28,31,42,62,64,14,88,27,73};
	bubble_sort(a,20);
	output_array(a,20);
	bubble_sort(b,15);
	output_array(b,15);

	return 0;
 }
void bibble_sort(int arr[],int num)
{
	int i,j,t;
	for(j=0;j<num-1;j++)//num-1趟比较
	  for(i=0;i<num-j-1;i++)//每趟进行num-J次两两比较
	    if(arr[i]<arr[i+1])
	    {
	    	t=arr[i];
	    	arr[i]=arr[i+1];
	    	arr[i+1]=t;
		}
		return;
}
void output_array(int arr[],int num)
{
	int i;
	for(i=0;i<num-1;i++)
	{
		printf("%d",arr[i]);
	}
	printf("%d\n",arr[num-1]);

	return;
 }
//又是这个算法,要记下来,自己做一直都想不起来! 

运行结果

【项目4 - 查成绩】

/*
 * Copyright (c) 2016, CSDN学院
 * All rights reserved.
 * 文件名称:【项目4-工资的排序】.cpp
 * 作    者:张易安
 * 完成日期:2016年 9 月 9 日
 * 版 本 号:v1.0
 *
 * 问题描述:score1.txt提供了某大学两个班某次测验的数据,包括每位同学的学号及成绩。
 *请编程序,输入学号,查找出该同学的成绩。
 *提示1:可以定义两个int型数组,其中一个n存放学号,另一个s存放成绩,可以保证两个数组中,元素下标相同,对应的是同一位同学。例如n[18]值为3123,s[18]为98,说明学号为3123的同学成绩为98。
 *提示2:因为数据无序,运用顺序查找算法,在n数组中依据学号进行查找,在s数组中对应下标的值则为其成绩。例如,通过在n中的查找,得出学号为3123的同学的下标为18,则其成绩为s[18]。
 *下面是完成应用的部分代码,已经能够输出成绩清单。请在此基础上实现有关的函数:
 */
#include<stdio.h>
#include<stdlib.h>
int readData(int[], int []);
int search(int[], int, int);
int main()
{
	int num[200],score[200];
	int count;
	int index;
	int key;
	count = readData(num,score);
	scanf("%d",&key);
	index = search(num,count,key);
	if(index>=count)
	  printf("不存在学号为%d的同学\n",key);
	else
	  printf("序号为%d的同学的成绩是:%d\n",key,score[index]);

	  return 0;
 }
int readData(int n[],int s[])
{
	int c=0;
	FILE *fp;
	fp = fopen("scorel.txt","r");
	if(fp==NULL)
	{
		printf("open file error!\n");
		exit(0);
	}//套路
	while(fscanf(fp,"%d%d"
	,&n[c],&s[c])!=EOF)
	{
		c++;
	 }
	fclose(fp);

	return c;
}
int search(int n[],int c,int k)
{
	int i;
	for(i=0;i<c;i++)
	{
		if(n[i]==k)
		  break;
	}
	if(i==c)
	  i=-1;

	  return i;
}

运行结果

【项目4 - 查成绩】

时间: 2024-11-08 20:14:47

第四周《C语言及程序设计》实践项目26 实现线性表基本操作的函数的相关文章

第7周 C语言及程序设计提高例程-26 实现线性表基本操作的函数

1.删除指定位置上的数据: 问题及答案: /*删除指定位置上的数据*/ #include<stdio.h> #define SIZE 100 //定义一个字符常量 int deletedate(int[],int,int); //声明一个删除函数 int n=10; //数组中实际有用的数据 int main() { int a[SIZE]={25,45,36,48,89,57,65,25,26,16}; int i,locate; scanf("%d",&loca

C语言及程序设计 实践项目——C语言程序初体验

[项目1-输出点阵图] 编一个程序,用你的姓名读音首字母,组成类似的趣图 提示:printf("--\n");语句会输出双引号中的内容,'\n'完成换行[参考解答] [项目2-完成简单计算] (1)编程序,输入长方形的两边长a和b,输出长方形的周长和面积 提示:边长可以是整数也可以是小数:实现乘法的运算符是*[参考解答] (2)编程序,输入两个电阻R1和R2的阻值,求它们并联后的阻值R 提示:计算公式为r=1/(1/r1+1/r2)):电阻值为浮点数[参考解答] (3)输入摄氏温度值(

数据结构算法C语言实现(一)---2.3线性表的顺序表示和实现

注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实现,主要操作包括建表,插入元素,删除元素,查找元素,合并表等操作,根据书中伪代码编写了C语言,使用int类型进行了测试,需要注意的是查找元素时使用了函数指针,C语言初学者不易理解,可查阅相关书籍学习. 二.头文件 1 //head.h 2 /** 3 My Code 4 */ 5 #include

数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表

一.简述 [暂无] 二.头文件 1 #ifndef _2_3_part1_H_ 2 #define _2_3_part1_H_ 3 //2_3_part1.h 4 /** 5 author:zhaoyu 6 email:[email protected] 7 date:2016-6-4 8 note:realize my textbook <<数据结构(C语言版)>> 9 */ 10 //----线性表的单链表存储结构---- 11 /** 12 My Code 13 to mak

【C语言及程序设计】项目1-26-2&amp;3&amp;5:成绩等级 &amp; 分段函数求值switch语句版 &amp; 个人所得税计算器switch语句版

switch语句常用于解决多分支.分段问题,该语句的关键就在于将具体问题中的分段.分支条件转化为常量constant. 首先,一定要理解switch语句是如何执行的: 项目1-26-2:成绩等级 1 /* 成绩等级(switch).cpp: 2 问题描述:给出一百分制成绩,要求输出成绩等级'A','B','C','D','E'.90分以上为'A',80-89分为'B',70-79分为'C',60-69分为'D',60分以下为'E'. 3 */ 4 5 #include "stdafx.h&quo

【C语言及程序设计】项目1-4-2-4:计算圆柱体表面积

1 /*圆柱体表面积.cpp: 2 问题描述:输入圆柱体的半径r和高h,输出圆柱体的表面积s.提示:π值直接写3.1415926 3 */ 4 5 #include "stdafx.h" 6 7 8 int main() 9 { 10 float r, h, A; 11 printf("Input the radius and height of the cylinder.\n"); 12 scanf_s("%f \n %f", &r,

【C语言及程序设计】项目1-32-(5)&amp;(6):输出小星星

问题描述:https://blog.csdn.net/sxhelijian/article/details/44158317 输出小星星(5) 1 #include "stdafx.h" 2 3 int main() 4 { 5 int x, x1; 6 scanf_s("%d", &x); 7 x1 = x; 8 9 //输出第1行(特殊行) 10 for (int i = 0; i < x - 1; i++) 11 { 12 printf(&quo

【C语言及程序设计】项目1-36-2:转圈加密

问题描述:https://blog.csdn.net/sxhelijian/article/details/44159363 1 #include "stdafx.h" 2 3 int main() 4 { 5 char c('\0'); 6 7 while (c != '\n') 8 { 9 //c = getchar(); 10 scanf_s("%c", &c); 11 12 //加密的情况 13 if ( 14 (c < 120 &&a

【C语言及程序设计】项目1-36-3:消除多余的空格

问题描述:从键盘上的输入一句话,直到按回车键为止,这些字符被原样输出,但若有连续的一个以上的空格时只输出一个空格.例如,输入:I   am     a            teacher.,输出I am a teacher. 笔者的code: 1 #include "stdafx.h" 2 3 int main() 4 { 5 char c('\0'), m('\0'); 6 7 do 8 { 9 c = getchar(); 10 if ( (m == ' ') &&