自考《计算机软件基础》实验指导

上传人:人*** 文档编号:577765031 上传时间:2024-08-22 格式:PDF 页数:28 大小:3.05MB
返回 下载 相关 举报
自考《计算机软件基础》实验指导_第1页
第1页 / 共28页
自考《计算机软件基础》实验指导_第2页
第2页 / 共28页
自考《计算机软件基础》实验指导_第3页
第3页 / 共28页
自考《计算机软件基础》实验指导_第4页
第4页 / 共28页
自考《计算机软件基础》实验指导_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《自考《计算机软件基础》实验指导》由会员分享,可在线阅读,更多相关《自考《计算机软件基础》实验指导(28页珍藏版)》请在金锄头文库上搜索。

1、 计算机软件基础实验指导主编徐显秋重庆科技学院计算机系实验一 C程序的运行环境、运行方法和数据类型、运算符的简单输入输出一、实验目的1 . 熟悉使用计算机系统, c 程序运行环境.2 . 熟悉并掌握C程序的编辑、编译、连接和运行.3 . 掌握C语言的数据类型以及各种数据的正确输入、输出.4 . 学会编写和运行简单的C语言程序.二、实验内容1 . 进入C编译集成环境, 熟悉集成环境的界面和菜单的使用方法.2 . 输入并运行教材第2页的程序. incl u de v oid main ( ) int a, b, max ;s canf ( % d, , & a, & b) ;if (a b)max

2、 = a;el s emax 二 b;p r int f ( max = % dn , max ) ;检查输入的程序有无错误, 对源程序进行编译, 观察屏幕上显示的编译信息, 无错后再进行下一步连接.运行程序, 观察分析运行结果, 该程序的功能是: .3 . 输入以下程序.# incl u de v oid main ( ) int a, b;fl oat x , y ;char cl , c2 ;s canf (z ,% d, %d, & a, & b) ;s canf (z ,% f, % e , & x , & y ) ;s canf ( % c, % c” , & cl , & c2

3、) ;p r int f ( a= % d, b= % dn” , a, b) ;p r int f C a= % cf b= % cn, z, a, b) ;p r int f (z ,x = % f, y = % en , x , y ) ;p r int f ( cl = % c, c2 二 % cn” , cl , c2 ) ;p r int f ( cl = % d, c2 = % dn” , cl , c2 ) ; 编译、连接后, 运行时输入下列数据.9 7 9 8 3 . 5 9 . 5 6 Aa观察结果, 分析原因, 得出结论. 总结出数据输入、输出的规律和容易出错的地方.(数

4、值的默认分隔符可以是回车或空格, 如果s canf语句中数值的输入格式是逗号分隔, 数值输入时就要用逗号隔开. )4 . 尝试编辑一个简单的C语言程序, 并上机调试、运行, 得出结果.用C语言程序编写教材11页习题中二、6 题, 输出表达式3 * 9 % 2 + 9 % 2 * 5 的值.程序:运行结果:三、完成实验报告实验完成后应整理并写出实验报告. 报告内容应包括: 题目、实验目的、程序流程图、程序清单、运行结果、功能分析、心得与体会. (其 中 “ 程序流程图”和 “ 心得与体会”为选做)实验二顺序结构、选择结构和循环结构的c程序设计一、实验目的1 . 掌握在C语言中, 正确使用赋值语句

5、, 正确使用逻辑运算符和逻辑表达式.2 . 熟练掌握if语句(包括if语句的嵌套) , 多分支选择s w it ch语句.3 . 熟练掌握w hil e语句、dow hil e语句和for 语句实现循环的方法.4 . 在程序设计中掌握一些简单常用的算法.二、实验内容要求先编写好教材4 2 页习题五中各小题的程序, 然后上机调试、运行, 得出结果.1 . 从键盘输入若干个字符, 分别统计其中字母(区分大、小写) 、数字字符和其他字符的个数 .分析: 利用字符的A SC H 值不同, 分别设置统计不同字符个数的条件, 假设从键盘输入一个字符给C , 当A W C W ,r时, C为大写字母; 当a

6、 W C W z 时, C为小写字母;当 O W C W 9 时, C为数字字符; 其余为其他字符.注意C语言中逻辑运算符和逻辑表达式的正确使用.参考程序:# i n cl ude vo i d m ai n ( )(ch ar c;i n t n l , n 2 , n 3, n 4;n l = n 2 = n 3= n 4= 0; /* 要进行加、减运算的变量赋0, 乘、除的赋1 * /p r i n tf ( 请输入若干字符w h i l e ( ( c= getch ar ( ) ) ! = n ) i f ( c = A & c = Z)n l + + ;el se i f ( c

7、= a & c = O & c = 9 )n 3+ + ;el se n 4+ + ;p r i n tf ( 大写字母: %dn 小写字母: dn 数字字符: %dn 其他字符: %dn ” , n l , n 2 , n 3, n 4) ;2 . 输入a、b c、d 四个整数, 求最小值M i n 和最大值M ax .分析与提示:参照书上2 6 页例2 -1 2 求四个数中最大数的解题思路, 同样可以求出四个数中的最小数.先将a 赋给变量M i n , 然后分别用其他三个数和M i n 比较, 若某数小于M i n , 就把这个数赋给 M i n ( 替换M i n 的值) , 比较完成后

8、, M i n 中存放的就是a、b、c、d 四个数中的最小数.参考程序:tti n cl ude vo i d m ai n () i n t a, b, c, d, M i n , M ax ;p r i n tf ( 请输入4 个整数: ) ;scan f C %d, %d, %d, %d , &a, &b, &c, &d) ;M i n = a;i f( b M i n ) M i n = b;i f( c M i n ) M i n = c;i f( d M ax ) M ax = b;i f( c M ax ) M ax = c;i f( d M ax ) M ax = d;p r

9、i n tf ( M i n = %d, M ax = %dn , M i n , M ax ) ;)3.已知银行整存整取存款不同期限的月息利率分别为:0.63%期限一年0.66%期限两年月息利率= 0.69%期限三年0.75%期限五年0.84%期限八年要求输入存钱的本金和期限, 求到期时能从银行得到的利息与本金的合计. 提示: 使用多分支sw i tch 语句编写程序. 参 考 程 序 :i n cl ude vo i d m ai n ( )(do ubl e m , 1 ; A fl o at 有效数字 67位, do ubl e 有效数字 1 5 1 6 位* /i n t y ;p

10、r i n tf ( 请输入本金和存款期限: ) ;scan f (z ,%l f, %d, z, &m , &y ) ; /* do ubl e 型输入用%I f* /sw i tch ( y )(case 1 : l = m * 0. 6 3/1 00; br eak ;case 2 : l = m * 0. 6 6 /1 00; br eak ;case 3: l = m * 0. 6 9 /1 00; br eak ;case 4: l = m * 0. 7 5 /1 00; br eak ;case 5: l=m*O. 84/100;break;default:printf ( 输入

11、错误n) ;)printf m+1) ; /*double 型输出可用%If、%e、% g*/)4编程输出如下图形:参考程序:# include void main ( )(int i, j, k;for (i=l;i=4;i+)for (j=l;j=10-i;j+)printf ; /* 注意空格的表示* /for (k=l;k i oontY- -JC + 8 当x-10Il寸0 x为其他值时分析与讨论:程序:运行结果:三、完成实验报告实验完成后应整理并写出实验报告.报告内容应包括: 题目、实验目的、程序流程图、程序清单、运行结果、功能分析、心得与体会.( 其 中 “ 程序流程图”和 “

12、心得与体会”为选做)实验三 C程序设计中数组的应用一、实验目的1 .掌握一维数组和二维数组的定义、赋值和输入、输出的方法.2 .掌握字符数组和字符串的使用方法.3 .掌握一些与数组有关的常用算法.二、实验内容要求先编写好教材66页习题六中各小题的程序, 然后上机调试、运行, 得出结果.1 . 在具有1 0 个数的递增序列中加入一个x ( x由键盘输入) , 使结果仍然有序.分析: 假设a 1 0 中存放着1 0 个递增序列的数, 由键盘输入一个x , x 需要和a 1 0 中的数依次比较大小, 寻找适当的位置插入, 插入后原数组中1 0 个数变为1 1 个数, 仍然递增, 注意开始需预留数组空

13、间.参考程序:# i n c l u d e v o i d m a i n () i n t a l l , i , x ;p r i n t f ( 请输入1 0 个递增序列的数: ) ;f o r ( i = 0 ; i = 0 ; i 一) i f ( a i x )a i + l = a i ;e l s e a i + l = x ; b r e a k ; p r i n t f ( x 插入后的数组序列: “ ) ;f o r ( i = 0 ; i = 1 0 ; i + + )p r i n t f / * ” t : 将当前位置移到下一个水平制表位( 输出) * /p r

14、 i n t f ( n ) ;2 .从键盘输入字符串a和字符串b , 并在a串中的最小元素后面插入字符串b .参考程序:# i n c l u d e t t i n c l u d e v o i d m a i n ()(c h a r a 1 0 0 , b 5 0 , c 1 0 0 , m i n ; / * 数组大小的设置要恰当* /i n t i , k ;p r i n t f ( 请输入字符串a : ) ;g e t s ( a ) ;p r i n t f ( 请输入字符串b : ) ;g e t s ( b ) ;m i n = a 0 ;f o r ( i = 0 ;

15、 a i ! = 0 ; i + + ) i f ( a i m i n ) m i n = a i ; m i n 中存放新的更小值, 参与后面的循环, 寻找最小值* /k = i ;f o r ( i = 0 ; a i + k + l ! = 0 ; i + + ) c i = a i + k + l ;c i + l = 0 ; / * 此语句是在c串结尾加“ 0 , 也可移到循环体外*/f o r ( i = 0 ; b i ! = 0 ; i + + ) a i + k + l = b i ;a i + k + 2 = 0 ; / * 此语句是在a串结尾加“ 0 , 也可在循环体外

16、用a i = 0 实现* /)s t r c a t ( a , c ) ;p u t s ( a ) ;)3 . 编写一个程序, 将两个字符串s i 和 s 2 比较, 如果s l s 2 , 输出一正数; s l = s 2 , 输出0 ; s l s 2 , 输出一个负数. 不要用s t r c m p 函数. 两个字符串用g e t s 函数读入. 输出的正数或负数的绝对值应是相比较的两个字符串的相应字符的AS C JI 码的差值. 分 析 :两个字符串的比较方法: 两个字符串自左向右逐个字符比较( 按AS C H码值大小) , 直到出现不同的字符或遇到 0 为止. 参 考 程 序 :

17、S i n c l u d e # i n c l u d e t t i n c l u d e v o i d m a i n () c h a r s l 1 0 0 , s 2 1 0 0 ;i n t i , k ;p r i n t f ( 请输入字符串s i : ) ;g e t s ( s l ) ;p r i n t f ( 请输入字符串s 2 : ) ;g e t s ( s 2 ) ;f o r ( i = 0 ; s l i ! = 0 |s 2 i ! = 0 ; i + + ) k = s l i - s 2 i ;i f ( k = = 0 ) c o n t i

18、 n u e ;e l s e b r e a k ;i f ( k 0 )p r i n t f ( s l s 2 , % d n ” , k ) ;i f ( k = = 0 )p r i n t f ( s l = s 2 , % d n ” , k ) ;i f ( k 0 )p r i n t f ( s l s 2 , % d n , k ) ;)4 . 编写一个程序, 将字符串s 2 中的全部字符拷贝到字符数组s i 中. 不用s t r c p y 函数, 复制时 0 也要复制过去, 0 后面的字符不复制.参考程序:#include #include void main (

19、)(int i, j;char si 100, s250;printf( 请输入字符串si:);gets (si);printf ( 请输入字符串s2:);gets (s2);for (i=0; sli != 0 ; i+);for (j=0; s2j != 0 ; j+)sli=s2j;i+;sli=s2j; / * 也可用语句 sli= 0 实现* /puts (si);)5 .有一行字符, 要求将每个单词中的第一个字符改写成大写字母( 如果原来已是大写字母,则不变) . 分析与提示: 首先把一行字符串放在一个字符串数组ci中, 要将每个单词中的第一个字符改写成大写字母, 考虑两种情况,

20、一是当i=0且(c0= a & &c0= a & & ci= z )时, 都需要改写, 而原来已是大写字母就不变. 程 序 :三、完成实验报告实验完成后应整理并写出实验报告. 报告内容应包括: 题目、实验目的、程序流程图、程序清单、运行结果、功能分析、心得与体会. ( 其 中 “ 程序流程图”和 “ 心得与体会”为选做)实验四 c程序设计中函数的应用一、实验目的1 .熟练掌握函数的定义和声明的方法.2 .熟悉调用函数时实参与形参的对应关系, 以 及 “ 值传递”的方式.3 .掌握函数的嵌套调用和递归调用的方法.4 .熟练掌握全局变量和局部变量的概念和用法.二、实验内容要求先编写好教材92页习题

21、六中各小题的程序, 然后上机调试、运行, 得出结果.1.求方程ax? + bx + c= 0的根, 用三个函数分别求当b-4ac大于0、等于0和小于0时的根并输出结果, 从主函数输入a、b、c的值.参考程序:#include #include void funl(float a, float b)(float x=0;x=-b/(2*a);p r i n t f C x = % f n, , x );v o i d f u n 2 ( f l o a t a , f l o a t b , f l o a t t )(d o u b l e x l = 2 , x 2 = 0 ;x l = (

22、 - b + s q r t ( f a b s ( t )/ ( 2 * a );x 2 二 ( - b - s q r t ( f a b s ( t )/ ( 2 * a );p r i n t f (, zx l = % l f , x 2 = % l f n , x l , x 2 );v o i d f u n 3 ( f l o a t a , f l o a t b , f l o a t t )(f l o a t m = 0 ;d o u b l e n = 0 ;m = - b / ( 2 * a );n = s q r t ( f a b s ( t )/ ( 2 *

23、a );p r i n t f r x l = % l f + % l f i n, z, m , n );p r i n t f (z zx 2 = % l f - % l f i n/ z, m , n );v o i d m a i n ()(f l o a t a = 0 , b = 0 , c = 0 , t = 0 ;p r i n t f ( 请输入 a , b , c 的值: );s c a n f ( %f, % f , % fz ,, &a , &b , &c );i f ( a = = 0 )p r i n t f ( x = % f n ” , - c / b );e

24、l s e(t = b * b - 4 * a * c ;i f ( t = = 0 )f u n l ( a , b );e l s e i f ( t 0 )f u n 2 ( a , b , t );e l s ef u n 3 ( a , b , t );)2 . 编写C语言程序, 其中f u n 函数的功能是: 求n以内( 不包括n )同时能被3与 7 整除的所有自然数之和的平方根; 主函数的功能是输入n的值, 调 用 f u n 函数, 并输出结果.参考程序:# i n c l u d e # i n c l u d e f l o a t f u n ( i n t n )(i

25、n t i , s = 0 ; / * s 要赋初值 0 * /f l o a t x ;f o r ( i = 0 ; i n ; i + + )(i f ( i % 3 = 0 & i % 7 = = 0 )s = s + i ;)x = s q r t ( s );r e t u r n ( x );)v o i d m a i n ()(i n t n ;f l o a t y ;p r i n t f ( 请输入 n : );s c a n f &n );y = f u n ( n );p r i n t f ( % f n , y );)3 . 输入下面的程序, 对输出结果进行分析

26、. 程 序 :# i n c l u d e v o i d f ( i n t c )(i n t a = 0 ;s t a t i c i n t b = 0 ;a + + ;b + + ;p r i n t f ( % d : a = % d , b = % d n ” , c , a , b );)m a i n () i n t i ;f o r ( i = l ; i = 3 ; i + + )f ( i );)运行结果: 分 析 与 思 考 :程序中a 、b的初值均为0 , 三次 调 用 f函数, a 、b的值各有什么变化, 为什么?4.编写一个程序, 主函数输入年份, 输出是否

27、闰年的结果, 调用f u n 函数进行判断, 若参数 y 为闰年, 则返回1 , 否则返回0 .分析与提示:判断是否闰年的条件有两个: 一是能被4整除, 但不能被1 0 0 整除. 二是能被4 0 0 整除. 可以把两个条件加在一起, 用逻辑表达式表示出来, 对输入的年份进行是否符合条件的判断后, 按要求返回不同的值. 逻辑表达式: ( y % 4 = = 0 & y % 1 0 0 ! = 0 ) II ( y % 4 0 0 = = 0 ). 程 序 :运行结果:三、完成实验报告实验完成后应整理并写出实验报告. 报告内容应包括: 题目、实验目的、程序流程图、程序清单、运行结果、功能分析、心

28、得与体会. ( 其 中 “ 程序流程图”和 “ 心得与体会”为选做)实验五线性表的基本操作一、实验目的1 .掌握线性表的基本运算.2 .掌握顺序存储的概念, 学会对顺序存储数据结构进行操作.3 .加深对顺序存储数据结构的理解, 逐步培养解决实际问题的编程能力.二、实验内容要求先编写好教材1 4 2 页习题六中各小题的程序, 然后上机调试、运行, 得出结果.1 .已知长度为n的线性表A 采用顺序存储结构, 请写一算法, 找出该线性表中值最小的数据元素.分析与提示:由于线性表A 采用顺序存储结构, 表中数据节点是存放在一段连续的空间中, 所以在算法中按一位数组处理比较方便. 参考算法( 参照教材类

29、C语言描述) :# d e f i n e M 1 0 0 / * 设顺序表最大长度为M * /d a t a M ; / * 设节点数据类型为整型* / * n 代表线性表表长* / * A代表线性表* / , n ) / * A i 替代 A d a t a i , n 替代 A n * /i , m i n ;s t r u c t i n ti n t n ; A;i n t f i n d ( A i n tm i n = A 0 ;f o r ( i = 0 ; i = n - l ; i + + ) i f ( A i m i n )m i n = A i ;p r i n t

30、f ( “ m i n 二 % d n , m i n ) ;)参考程序: i n c l u d e # d e f i n e M 1 0 0s t r u c t l i s t i n t d a t a M ;i n t n ;) ;i n t f i n d ( l i s t * p t r ) i n t i , m i n ;m i n = p t r - d a t a 0 ;f o r ( i = 0 ; i n ; i + + ) i f ( p t r - d a t a i d a t a i ; r e t u r n m i n ;)v o i d m a i

31、n ( )(i n t m i n ;s t r u c t l i s t A= 9 , 7 , 5 0 , 4 , 6 , 7 , 6 ; / * 线性表初始化: 赋初值、表长* /m i n = f i n d ( &A) ; / * 调用f i n d 。函数查找最小值* /p r i n t f ( “ 线性表最小值 m i n = % d n, z, m i n ) ;)2.已知长度为n的线性表采用顺序存储结构, 并且数据元素按值的大小非递减排列, 写一算法, 在该线性表中插入一个数据信息为i t e m 的元素, 要求插入该元素以后, 线性表仍然保持按值的大小非递减排列.参考算法

32、( 参照教材类C语言描述) :# d e f i n e M 1 0 0s t r u c t i n t d a t a M ;i n t n ;)A;v o i d i n s e r t ( A , i t e m ) i n t i ;i f ( n = = m ) 表满, 无法插入;e l s e f o r ( i = n - l ; i = 0 ; i -)i f ( A i i t e m )A i + l = A i ;e l s eA i + l = i t e m ;n + + ;)参考程序:# i n c l u d e U d e f i n e M 1 0 0 /

33、* 设顺序表最大长度为M * /s t r u c t l i s t i n t d a t a M ; / * 设节点数据类型为整型* /i n t n ; / * n 代表线性表表长* / ;v o i d i n s e r t ( l i s t * p t r , i n t i t e m )i n t i ;i f ( p t r - n = = M ) p r i n t f ( 表满, 无法插入 ) ; e l s e i f ( p t r - n = = O ) / * 表空, 直接插入* /p t r - d a t a O = i t e m ;e l s e f

34、o r ( i = p t r - n - l ; i = 0 ; i - - ) i f ( p t r - d a t a i i t e m ) p t r - d a t a i + l = p t r - d a t a i ;e l s e b r e a k ;p t r - d a t a i + l = i t e m ;)p t r - n = p t r - n + l ; / * 表长加 1 * /)r e t u r n ;)v o i d m a i n ( )(i n t i , i t e m l ;s t r u c t l i s t A= 1 , 3 ,

35、9 , 1 2 , 4 5 , 7 8 , 6 ; / * 线性表初始化* / s c a n f ; / * 输入要插入的值* /i n s e r t ( &A, i t e m l ) ; / * 调用 i n s e r t ( ) 函数插入值* /f o r ( i = 0 ; i A. n ; i + + ) / * 显示插入操作后的线性表* / p r i n t f ( 线d t ” , A. d a t a i ) ; )3.已知长度为n的线性表A 采用顺序存储结构, 并且元素按值的大小非递减排列, 写一算法, 删除该线性表中值相同的多余元素( 该算法完成后, 线性表中数据元

36、素严格按值递增排列 .参考算法( 参照教材类C语言描述) :# d e f i n e M 1 0 0s t r u c t i n t d a t a M ;i n t n ; A;v o i d d e l e t e ( A , n ) i n t i , j , k ;f o r i = 0 ; i = n - l ; i + + f o r ( j = i + l ; j = n - l , j + + ) i f ( A i = = A j )f o r ( k = j ; k A k + l ;n ;)参考程序:# i n c l u d e # d e f i n e M 1

37、0 0/ * 设顺序表最大长度为M * /s t r u c t l i s t i n t d a t a M ; / * 设节点数据类型为整型* /i n t n ; / * n 代表线性表表长* /) ;v o i d d e l e t e i t e m ( l i s t * p t r ) i n t i , j , k ;f o r ( i = 0 ; i n - l ; i + + )(f o r ( j = i + l ; j n - l ; j + + )(i f ( p t r - d a t a i = = p t r - d a t a j ) f o r ( k

38、= j ; k n - l ; k + + ) p t r - d a t a k = p t r - d a t a k + l ; p t r - n = p t r - n - l ;/ * 删除相同元素( 相同元素后的元素依次向前移动) 后, 需从新的p t r - d a t a j 开始判断* / j ;I)r e t u r n ;)v o i d m a i n ( )(i n t i ;s t r u c t l i s t A= 1 , 3 , 3 , 3 , 4 5 , 7 8 , 7 8 , 9 0 , 8 ; / * 线性表初始化* /d e l e t e i t

39、e m ( &A) ; / * 调用d e l e t e i t e m O 函数删除相同元素* /f o r ( i = 0 ; i n e x t ! =N U LL) p =p -n e x t ;n +;)r e t u r n (n );)参考程序:# i n c lu d e i n c lu d e # i n c lu d e s t r u c t n o d e(i n t d a t a ;s t r u c t n o d e *n e x t ; ;i n t le n g t h (s t r u c t n o d e *p )(i n t n =0; /*用

40、n 返回线性表长度*/w hi le (p -n e x t ! =N U LL) p =p -n e x t ;n +;)r e t u r n (n ););v o i d m a i n ()(/*链表初始化,产生具有5 个节点的链表,li s t 为链表头节点指针*/i n t i ,le n =0;s t r u c t n o d e *li s t , *p t r l, *p t r 2;1 i s t =(s t r u c t n o d e *) m a llo c (s i z e o f (s t r u c t n o d e ) ; /*申请一个表头节点li s

41、t */1i s t -n e x t =N U LL;p t r l=li s t ; /*指针p e r l指向头节点*/f o r (i =0;i d a t a =(r a n d ()%100+l);p t r 2-n e x t =N U LL;p t r l-n e x t =p t r 2;p t r l=p t r l-n e x t ; /*移动p e r l始终指向尾节点, 为下一个新增节点插入作准备*/)/*求链表li s t 的长度*/le n =le n g t h(li s t );p r i n t f (链表的长度 le n g t h二 %d n , le

42、n );)5 . 已知非空线性链表第一个链节点的指针为li s t ,请写一算法,删除线性链表的第i 个节点 .参考算法(参照教材类C语言描述):s t r u c t n o d e i n t d a t a ;s t r u c t n o d e *n e x t ; *p , *q , *li s t ;s t r u c t n o d e *d e l(li s t , i ) i n t j ;p =li s t ;f o r (j =0;j n e x t ;q =p -n e x t ;p -n e x t =p -n e x t -n e x t ;f r e e (q

43、);)参考程序:# i n c lu d e # i n c lu d e # i n c lu d e s t r u c t n o d e(i n t d a t a ;s t r u c t n o d e *n e x t ;);v o i d d e le t e n o d e (s t r u c t n o d e *p , i n t i )(/*查找第i 个节点*/i n t j ;s t r u c t n o d e *f r o n t =p ;f o r (j =0;j n e x t =N U LL)b r e a k ;e ls e(f r o n t 二 p

44、 ;p =p -n e x t ;)i f (j =i ) /*查找成功,删除第i 个节点*/(f r o n t -n e x t =p -n e x t ;f r e e (p );r e t u r n ;)v o i d m a i n ()(/*链表初始化,产生具有5 个节点的链表,li s t 为链表头节点指针*/i n t i ;s t r u c t n o d e *li s t , *p t r l, *p t r 2;li s t = (s t r u c t n o d e *) m a llo c (s i z e o f (s t r u c t n o d e )

45、;li s t -n e x t 二 N U LL;p t r l=li s t ;s r a n d ( (u n s i g n e d )t i m e (N U LL);f o r (i =0;i d a t a =(r a n d ()%100+l);p t r 2-n e x t 二 N U LL;p t r l-n e x t =p t r 2;p t r l=p t r l-n e x t ; /*移动p t r l指向新节点, 为下一个新节点的插入坐准备*/)p t r l=li s t ;w hi le (p t r l-n e x t ! =N U LL)(p t r l

46、=p t r l-n e x t ;p r i n t f (, z%d t, z, p t r l-d a t a );)p r i n t f (n );s c a n f (%d ,& i ); /*输入要删除的节点*/d e le t e n o d e (li s t ,i );p r i n t f (n );p t r l=li s t ;w hi le (p t r l-n e x t ! =N U LL)(p t r l=p t r l-n e x t ;p r i n t f ( %d t , p t r l-d a t a );)6 . 己知非空线性链表第一个链节点的指针

47、为li s t ,请写一算法,找出链表中数据域值最小的那个链节点,并将其链接到链表的最前面.参考算法(参照教材类C语言描述):s t r u c t n o d e i n t d a t a ;s t r u c t n o d e *n e x t ; *p , *q , *s , *li s t ;s t r u c t n o d e *f i n d (li s t ) i n t i ;p = li s t ;m i n = p -d a t a ;w hi le (p ! =N U LL)p = p -n e x t ;i f (p -d a t a n e x t ;q -n

48、e x t =q -n e x t -n e x t ;s -n e x t =li s t -n e x t ;li s t -n e x t =s ;)参考程序:# i n c lu d e -i n c lu d e t t i n c lu d e s t r u c t n o d e(i n t d a t a ;s t r u c t n o d e *n e x t ;);v o i d Fi n d An d E x c ha n g e (s t r u c t n o d e * p )(s t r u c t n o d e *he a d =p , *m i n ,

49、*m i n f r o n t , *f r o n t ;i f (he a d -n e x t =N U LL) r e t u r n ;/ * 查找最小值节点*/m i n f r o n t =f r o n t =p ;m i n =p -n e x t ;p =p -n e x t ;w hi le (p -n e x t ! =N U LL)(f r o n t =p ; /*随 p向表尾移动并始终保留p 节点的前一个节点指针*/p =p -n e x t ;i f (m i n -d a t a p -d a t a )m i n f r o n t =f r o n t

50、 ; Am i n f r o n t 为指向最小节点的前一个节点指针*/m i n 二 p ;)/ * 将最小值节点放到链表的最前面*/m i n f r o n t -n e x t =m i n -n e x t ;m i n -n e x t =he a d -n e x t ;he a d -n e x t =m i n ;)v o i d m a i n ()(/ * 链表初始化,产生具有5 个节点的链表,li s t 为链表头节点指针*/i n t i ;s t r u c t n o d e *li s t ,*p t r l, *p t r 2;1i s t =(s t r

51、u c t n o d e *) m a llo c (s i z e o f (s t r u c t n o d e );li s t -n e x t =N U LL;p t r l=li s t ;s r a n d ( (u n s i g n e d )t i m e (N U LL);f o r (i =0;i d a t a =(r a n d ()%100+l);p t r 2- n e x t =N U LL;p t r l-n e x t =p t r 2;p t r l=p t r l-n e x t ;)p t r l=li s t ;w hi le (p t r l

52、-n e x t ! =N U LL)(p t r l=p t r l-n e x t ;p r i n t f (, z%d tz ,, p t r l-d a t a );)p r i n t f (n );Fi n d An d E x c ha n g e (1i s t );p t r l=li s t ;w hi le (p t r l-n e x t ! =N U LL)(p t r l=p t r l-n e x t ;p r i n t f (, ,%d t/z, p t r l-d a t a );)7 . 设不带头节点的循环链表第一个节点指针为li s t ,请写一个逆置

53、该循环链表的算法.参考算法:s t r u c t n o d e i n t d a t a ;s t r u c t n o d e *n e x t ; *p , *li s t , *r e a r , *f r o n t ;s t r u c t n o d e *i n v e r s i o n (li s t ) r e a r -n e x t =li s t ;f r o n t =li s t ;p = f r o n t -n e x t ;w hi le (p ! =li s t )(r e a r =p -n e x t ;p -n e x t =f r o n

54、t ;f r o n t =p ;p =r e a r ;)li s t -n e x t =f r o n t ;) 参 考 程 序 :# i n c lu d e # i n c lu d e # i n c lu d e s t r u c t n o d e(i n t d a t a ;s t r u c t n o d e *n e x t ;);/ * 链表倒置函数*/s t r u c t n o d e *i n v e r s i o n (s t r u c t n o d e * he a d )(s t r u c t n o d e *f r o n t , *p

55、, *r e a r ;f r o n t =he a d ;p =f r o n t -n e x t ;w hi le (p ! =he a d )(r e a r =p -n e x t ;p -n e x t =f r o n t ;f r o n t 二 p ;p =r e a r ;)he a d -n e x t =f r o n t ;r e t u r n f r o n t ;v o i d m a i n ()/ * 链表初始化,产生具有5 个节点的循环链表,li s t 为链表头节点指针*/i n t i ;s t r u c t n o d e *li s t , *

56、p t r l,*p t r 2;li s t =(s t r u c t n o d e *) m a llo c (s i z e o f (s t r u c t n o d e );li s t -n e x t =N U LL;s r a n d ( (u n s i g n e d )t i m e (N U LL);li s t -d a t a =(r a n d ()%100+l);p t r l=li s t ;f o r (i =0;i d a t a =(r a n d ()%100+l);p t r 2-n e x t =N U LL;p t r l-n e x t

57、=p t r 2;p t r l=p t r l-n e x t ;)p t r l-n e x t =li s t ; /*尾节点指向头节点,形成循环链表*/*显示链表*/p t r l=li s t ;p r i n t f p t r l - d a t a ) ;w hi le (p t r l-n e x t ! =li s t )(p t r l=p t r l-n e x t ;p r i n t f p t r l - d a t a ) ;)p r i n t f (n n );/*倒置*/1i s t =i n v e r s i o n (li s t );/*再次显示链

58、表*/p t r l=li s t ;p r i n t f (, z%d t / p t r l-d a t a );w hi le (p t r l-n e x t ! =li s t )(p t r l=p t r l-n e x t ;p r i n t f p t r l-d a t a );)p r i n t f (n n );)8 . 已知非空线性链表第一个链节点的指针为li s t ,请写一算法,将该链表中数据信息为i t e m l的所有节点的数据信息修改为i t e m 2. 算 法 : 心 得 与 体 会 :三、完成实验报告实验完成后应整理并写出实验报告.报告内容应包括

59、:题目、实验目的、程序流程图、程序清单、运行结果、功能分析、心得与体会.(其中“ 程序流程图”和 “ 心得与体会”为选做)实验六常用的排序方法一、实验目的1 .掌握常用的排序方法和算法, 直接插入排序、冒泡排序、直接选择排序.2 . 理解各种方法的特点, 并能灵活应用.3 . 加深对排序的理解,逐步培养解决实际问题的编程能力.二、实验内容要求先编写好教材2 0 8 页习题五中各小题的程序, 然后上机调试、运行, 得出结果.1. 已知两个单链表中的元素递增有序, 试写一算法将两个有序表合并成一个递增有序表.算法应利用原有的链表节点空间.参考程序:# include t t include str

60、uct node int data;struct node * ne x t; ;void F indA ndlnse rte r( struct node * listl, struct node * list2 )(struct node * ptrl, * front, * ptr2 ;front= listl;ptrl= front- ne x t ;w hile ( 1 ist2 - ne x t ! = NUL L )(ptr2 = list2 - ne x t ;w hile ( ptrl! 二 NUL L )(if ( ptrl- data ptr2 - data) bre a

61、k;front= ptrl;ptrl= ptrl- ne x t ;)if ( ptrl二 二 NUL L )(front- ne x t = list2 - ne x t ;bre ak;)e lse(list2 - ne x t = ptr2 - ne x t ;front- ne x t= ptr2 ;ptr2 - ne x t = ptrl;front= front- ne x t ;)void main ()/*建立第一个链表并初始化, he adl为链表头节点指针* /int i, le nl= 0 , le n2 = 0 ;struct node * he adl, * he a

62、d2 , * ptrl, * ptr2 ;he adl= ( struct node * ) malloc( siz e of( struct node ) ) ;he adl- ne x t= NUL L ;ptrl= he adl;printf ( 请输入第一个链表节点个数: ) ;s c a n f &l en l );for( i= 0 ; i d a t a ) ;ptr2 - ne x t= NUL L ;ptrl- ne x t= ptr2 ;ptrl= ptrl- ne x t;)/*建立第一个链表并初始化, he ad2 为链表头节点指针* /he ad2 = ( struc

63、t node * ) malloc( siz e of( struct node ) ) ;he ad2 - ne x t二 NUL L ;ptrl= he ad2 ;printf ( 请输入第二个链表节点个数: ) ;scanf & le n2 ) ;for ( i= 0 ; i le n2 ; i+ + )(ptr2 = ( struct node * ) malloc( siz e of( struct node ) ) ;/ * 给每个节点的data元素赋值* /printf ( 请输入节点元素的值( 递增输入) : ) ;scanf ( d , & ptr2 - data) ;ptr

64、2 - ne x t= NUL L ;ptrl- ne x t= ptr2 ;ptrl= ptrl- ne x t;)/*显示两个链表* /printfC n 链表 1 如下: n ) ;ptrl= he adl;w hile ( ptrl- ne x t! = NUL L )ptrl= ptrl- ne x t ;printf (, z% dtz ,, ptrl- data ) ;)printf C n 链表 2 如下: n ) ;ptrl= he ad2 ;w hile ( ptrl- ne x t! = NUL L )(ptrl= ptrl- ne x t ;printf ptrl- d

65、ata ) ;)F indA ndlnse rte r( he adl, he ad2 ) ;/ *显示合并后的链表* /printf ( n合并后的链表如下: n) ;ptrl= he adl;w hile ( ptrl- ne x t! = NUL L )(ptrl= ptrl- ne x t ;printf ptrl- data ) ;)printf( n” ) ;)2 .已知一维数组a1 0 中存放了 0 9 共 1 0 个互不相同的无序数字, 试编一算法, 将它们对号入座( 如, a 0 中存放。 al中存放1 等) .要求算法的时间复杂度为0 ( n) .参考程序:# includ

66、e void main () int i, j, t;int a1 0 = 2 , 5 , 7 , 9 , 3 , 6 , 4 , 8 , 1 , 0 ;for ( i= 0 ; i = 9 ; i+ + )printf( dt , ai) ;printf( n) ;/ * 对数组a 排序( 冒泡排序法) * /for ( i= 0 ; i 9 ; i+ + )(for( j= 0 ; j aj+ U)(t= aj ; aj= aj+ l ; aj+ l= t;)for ( i= 0 ; i = 9 ; i+ + ) printf (, /% dt, ai) ; printf ( n ) ;)

67、3. 己知序列( 3 5,78,12,26,90,41,66,5 8 ) , 请写出对该序列分别采用插入排序、选择排序、冒泡排序方法进行升序排序的各趟结果, 并分析它们的时间复杂度.插入排序各趟结果:插入排序时间复杂度:选择排序各趟结果:选择排序时间复杂度:冒泡排序各趟结果:冒泡排序时间复杂度:三、完成实验报告实验完成后应整理并写出实验报告.报告内容应包括: 题目、实验目的、程序流程图、程序清单、运行结果、功能分析、心得与体会.( 其 中 “ 程序流程图”和 “ 心得与体会”为选做)参考答案实验一2.求出a、b中大的数.4. 尝试编辑一个简单的C语言程序, 并上机调试、运行, 得出结果.用 C

68、 语言程序编写教材1 1 页习题中二、6题, 输出表达式3 * 9 % 2 + 9 % 2 * 5 的值.参考程序:# include main () float x ;x = 3 * 9 % 2 + 9 % 2 * 5 ;printf ( x = % fn , x ) ;)实验二5 . 编程求解下列函数:x + 8 当x 1006寸Y= v %+ 8 当元 100寸0 元为其他值时参考程序:# include void main () int x , y ;printf ( x = ”) ;scanf ( “ % d , & x ) ;if ( x 1 0 0 )y = x + 8 ;e l

69、se if ( x - 1 0 )y = - x + 8 ;e lsey = 0 ;printf ( x = % d, y = % dn , x , y ) ;实验三5 . 有一行字符, 要求将每个单词中的第一个字符改写成大写字母( 如果原来已是大写字母, 则不变) .参考程序:# include Sinclude void main ()(int i;char s1 0 0 ;printf ( “ 请输入一行字符: “ ) ;ge ts( s) ;for ( i= 0 ; si! = 0 ; i+ + )(if ( s0 = a & & s0 = z )s0 = s0 - 3 2 ;if (

70、 siT= = & & si = a & & si = z )si= si- 3 2 ;)puts( s) ;实验四4 . 编写一个程序, 主函数输入年份,输出是否闰年的结果, 调用f u n 函数进行判断, 若参数 y e a r为闰年,则返回1,否则返回0.参考程序:# i nc l ud e i nt f un( i nt y )(i f ( ( y % 4=0 & & y % 100! =0)|( y % 400=0)re turn 1;e l sere turn 0;v oi d m a i n () i nt x ,y e a r;pri ntf ( ” 请输入年份: );sc a

71、 nf & y e a r);x =f un( y e a r);i f ( x =l )pri ntf ( ,% d 年是闰年. n” , y e a r);e l sepri ntf (/z% d 年不是闰年. n” , y e a r);实验五8 . 已知非空线性链表第一个链节点的指针为l i st,请写一算法,将该链表中数据信息为i te m l 的所有节点的数据信息修改为i te m 2.参考算法:struc t nod e c h a r d a ta ;struc t nod e *ne x t;*p, *l i st;struc t nod e *re pl a c e ( l

72、 i st, i te m 2) i nt i ;c h a r i te m l , i te m 2;p= l i st-ne x t;w h i l e ( p! =N U LL)p= p-ne x t;i f ( p-d a ta =i te m l )p-d a ta =i te m 2;)参考程序:# i nc l ud e # i nc l ud e # i nc l ud e struc t nod e(i nt d a ta ;struc t nod e *ne x t;);/ * 查找并修改函数( 针对非循环链表)*/v oi d Fi nd And M od i f y

73、( struc t nod e *h e a d , i nt i te m l , i nt i te m 2)(struc t nod e *p=h e a d ;d o(i f ( p-d a ta =二 i te m l ) p-d a ta =i te m 2;p=p-ne x t ;w h i l e ( p! =N U LL);)v oi d m a i n( )(/ * 链表初始化,产生具有5 个节点的非循环链表,l i st为链表头节点指针*/i nt i , num =0, i te m l , i te m 2;struc t nod e *l i st,*ptrl ,

74、*ptr2;l i st=( struc t nod e *) m a l l oc ( si z e of ( struc t nod e );l i st-ne x t=N U LL;pri ntf ( 请输入节点数据值( 整数) );sc a nf ( 级d , & num );l i st-d a ta =num ;ptrl =l i st;f or ( i =0;i d a ta =num ;ptr2-ne x t=N U LL;ptrl -ne x t=ptr2;ptrlz :ptrl -ne x t;/ * 显示链表*/ptrl =l i st;pri ntf ( % d t”

75、, ptrl -d a ta );w h i l e ( ptrl -ne x t ! =N U LL)(ptrl =ptrl -ne x t ;pri ntf ( % d t , ptrl - d a ta );)pri ntf C n n, z);/* 将 i te m l 修改为 i te m 2*/pri ntf ( 请输入 i te m l );sc a nf ( % d , ;pri ntf ( 请输入 i te m 2);sc a nf & i te m 2);Fi nd And M od i f y ( l i st, i te m l , i te m 2);/ * 再次显示

76、链表*/ptrl =l i st;pri ntf ( d t” , ptrl -d a ta );w h i l e ( ptrl -ne x t ! =N U LL)(ptrl =ptrl -ne x t ;pri ntf ptrl -d a ta );pri ntf ( n n);实验六3 . 已知序列( 3 5 , 7 8 , 1 2 , 2 6 , 9 0 , 4 1 , 6 6 , 5 8),请写出对该序列分别采用插入排序、选择排序、冒泡排序方法进行升序排序的各趟结果, 并分析它们的时间复杂度.插入排序各趟结果:选择排序各趟结果:R 0R l R 2R 3R 4R 5R 6R 7R

77、8初始3578122690416658第 1趟783578122690416658第 2 趟121235782690416658第 3 趟261226357890416658第 4 趟901226357890416658第 5 趟411226354178906658第 6 趟661226354166789058第 7 趟581226354158667890时间复杂度: 0 5 )时间复杂度: 0( /)初始3578122690416658第 1 趟1278352690416658第 2 趟1226357890416658第 3 趟1226357890416658第 4 趟1226354190786658第 5 趟1226354158786690第 6 趟1226354158667890第 7 趟1226354158667890冒泡排序各趟结果:初始3578122690416658第 1 趟3512267841665890第 2 趟1226354166587890第 3 趟1226354158667890第 4 趟1226354158667890时间复杂度: 0( r)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号