《标准C语言程序设计》上机报告实验指针、函数程序设计
专业:电信工程
班级:xxxxxxxx
学号:xxxxxxxxxxx
姓名:xxxxx
完成日期:2013年5月11日
一、实验目的
1.进一步掌握调试方法;
2.掌握一维数组、二维数组的定义、初始化和引用;
3.掌握字符串和数组的结合(存储和处理);
4.掌握并熟练使用字符串处理库函数;
5.熟悉数组的操作(矩阵等数学运算、顺序及二分法查找、设标签选择法及交
换法排序等);
6.了解数组下标越界的形式和后果。
二、实验内容
1.深入理解《上机实践训练教程》
2.5实验五案例示范和有关概念文字描述中
的知识点,给出你的理解。
理解:
数组的初始化和赋值:
数组的初始化是在声明后面紧跟一个用花括号括起来的初始化列表,各初始化表达式用逗号分隔,字符数组还可以用一个字符串初始化。而赋值时数组不能作为一个整体操作,只能对数组的元素进行操作。
数组越界:
使用数组时,编译器不会检查下标是否越界,这使程序灵活,快速的同时也产生了安全隐患。使用越界的数组可能修改内存中其他程序甚至操作系统的代码,可能使程序出错甚至系统崩溃,所以在使用数组的时候要留意是否越界,比如循环调用的时候判断条件是否正确。另外,一些处理字符数组的函数例如puts(),strcmp,strcat()都是非常危险的,他们以’\0’为结束的标志,如果用户输入超过了数组定义的大小,这可能发生数组越界。有人曾经利用这一特点发明了在UNIX操作系统传播的蠕虫病毒,它通过很长的输入覆盖操作系统的代码。为了解决这一问题,可以使用fputs(),strncmp,strncat()等函数,添加限制条件保证不会越界。在今后的编程中应该注意这一点。
2.运行实战训练11,理解程序功能并指出其中排序是交换法还是设标签选择
法,以及说明is_modified变量的作用?要求:在后续实战训练中使用相应技巧!
交换排序法
is_modified用来判断内层循环是否进行了交换(没有交换意味着相邻两位的值总是升序或者降序,即整个数组已经满足升序或者降序排列),如果交换则is_modified被赋值为TRUE(即1),否则其值为FALSE(即0)。当其值为FALSE时数组已经完成排序,直接退出外层循环,这样可以减少循环次数,提高程序的效率。
3.用交换法对10个整数进行升序和降序排列后输出,要求外层循环变量分别从
0和1编号实现
#include
#define N 10
int main()
{
int a[N];
int i,j,m,temp;
printf("输入%d个数:\n",N);