{
int workover(int i); int reset(int i); int i=HIGH; reset(i/2.5);
printf(\ reset(i=i/3);
printf(\ reset(i/2);
printf(\ workover(i);
printf(\ return 0; }
workover(int i); {
i=(i%i++)*((i*i)/(2*i)+4); printf(\ return (i); }
reset(int i); {
i=i<=CHANGE?LOW:HIGH++; return (i); }
(3) 分析、编辑并执行以下程序,如果有错,请指出其错误原因,同时需要指出各个变量的存储属性。
/*****file1.c*****/ int last(void); int new(int); int reset(void); exter int i; int main(void) {
int i,j; i=reset();
for (j=1;j<=3;j++) {
printf(“i=%d\\tj=%d\\n”,i,j); printf(“next(i)=%d\\t”,next(i)); printf(“last(i)=%d\\n”,last());
printf(“new(i+j)=%d\\n”,new(i+j)); }
int next(void) {
return (i++); }
return 0; }
/*****file2.c*****/ static int i=10; fast(void) {
rturn (i-=1_); }
new(int i) {
static int j=-5; return (i=j+=++i); }
/*****file3.c*****/ extern int i; reset() {
return (i); }
3.预编译命令实验。具体实例如下: (1) 一般宏替换实验(教材例7-5);
(2) 带参数的宏替换(教材例7-7~例7-12,习题7-8和习题7-9); (3) 习题7-11和习题7-12;
(4) 文件包含(#include \和#include <>)。 实验准备:
(1) 编写所选实验题目的程序代码和流程图; (2) 检查源程序并给出其可能的运行结果说明。 实验步骤:
(1) 上机验证所选题目,并做相应测试和分析; (2) 进行实验分析;
(3) 总结基于函数、宏等技术的模块化程序设计和实现方法及其经验; (4) 编写实验报告。 实验结果:
(1) 根据测试目标写出测试报告; (2) 测试结果分析说明; (3) 测试程序代码清单。
实验七 数组(6学时)
实验目的:
(1) 掌握C语言环境下数组的声明、定义和使用方法,包含其初始化、赋值、输入、输出和处理方法;
(2) 掌握字符数组和字符串数组的使用方法;
(3) 了解数组作为函数参数或返回值的传递和使用方法。 实验内容:(第1题必做,第2、3、4任选一个)
1.数组的基本使用方法实验。包含数组的声明方法、初始化方法、输入、输出方法、元素的引用方法以及数组作为函数参数的使用方法。
(1) 一维数组的声明、初始化及引用方法; (2) 二维数组的声明、初始化及引用方法;
(3) 字符数组和字符串数组的初始化及引用方法的差异分析; (具体实例参见教材实例)
测试函数声明和定义方法时,可以从以下几个方面进行测试:
1) 用已声明和定义的变量作为数组大小的声明; 2) 用已声明的const变量作为数组变量大小的声明; 3) 用宏名表示声明数组变量的大小; 4) 用表达式计算结果作为数组变量的大小; 5) 用宏的运算结果表示声明数组变量的大小。
(4) 分别按行序和列序顺序返回一个二维数组中各个元素的内存空间地址
值,以观察数组元素在计算机内存中的排列规律。 2.一维数组的应用。具体实例如下:
(1) 有一个数组大小为10,内放10个数,请找出其中对大和最小元素来,并
分别将其与数组第1个元素和最后1个元素交换。
(2) 有17个人围成一圈,其编号分别为1到17,如果从1号开始报数,凡报到7
的倍数的人必须离开该圈子,然后再接着往下数,直到最后只剩一个人为止。请问最后一个人原来的位置序号是多少?(扩展问题:请将每个人按出列顺序重新排列后,其排列的顺序是什么?) 3.二维数组应用。具体实例如下:
(1) 输入一个n*n的矩阵。1) 试求除开对角线上元素之外的元素之和;2) 求
每行中与相应对角线元素不同的元素之和;
(2) 有n个学生,m门功课。要求:1) 找出成绩最好的学生及其对应的课程
号码;2) 求全部同学每门课程的平均成绩; 4.字符数组应用。具体实例:
(1) 有三行文字,请找出其中空格的个数,并统计单词的个数。(注:单词
以一个或多个空格为间隔。如果一个单词刚好在行末结束,则下一行开头应该有空格,包含句号和逗号后面也应该有空格!)
(2) 输入n个国家的名字,要求按照字母的先后顺序排序,并输出排序前后的结果。 实验准备:
(1) 编写所选实验题目的程序代码和流程图; (2) 检查源程序并给出其可能的运行结果说明。 实验步骤:
(1) 上机验证所选题目,并做相应测试和分析; (2) 进行实验分析;
(3) 总结基于数组的程序设计和实现方法及其经验; (4) 编写实验报告。 实验结果:
(1) 根据测试目标写出测试报告; (2) 测试结果分析说明; (3) 测试程序代码清单。
实验八 指针(4学时)
实验目的:
(1) 掌握C语言环境下指针的声明、定义和使用方法; (2) 掌握指针和变量以及指针和数组的关系; (3) 掌握指针、数组之间的关系; (4) 掌握指针、函数之间的关系。 实验内容:
1.熟悉指针的基本使用方法。
(1) 请仔细分析以下程序段,并上机测试运行结果,对测试结果进行分析说明。
1) 程序段一:
int main() {
int i=3,j=6,k=9;
printf(“i=%d j=%d k=%d\\n”,*(&i),j,k); return 0; }
2) 程序段二:
int main(void) {
int nA,*p; float fB,*q; p=&nA; q=&fB;
scanf(“%d,%f”, p, q); *p=nA*(*q);
printf(“nA is %d, p is %d and *p is %d\\n”, nA, p,*p); printf(“fB is %f, q is %d and *q is %d\\n”, nA, q,*q); printf(“p+1=%d q+1=%d\\n”,p+1,q+1); return 0; }
3) 程序段三:
int main(void) {
int nA,*p,**q,***r; p=&nA;q=&p;r=&q;
printf(“Please input nA::\\n”); scanf(“%d”,**r);
printf(The results are :”);
printf(“nA? value is %d,%d,%d,%d\\n”,nA,*p,**q,***r); printf(“nA,p,q,r?s value is %d,%d,%d,%d\\n”,nA,p,q,r); return 0; } (2) 设计一个C语言程序,以测试以下表达式的运算顺序。
2. 想使指针变量pt1指向变量nA和nB中的大者,pt2指向其小者,以下程序能否实现此目的?为什么?如果不行,请给出实现的方法。
void swap(int *pt1,int *pt2) {
int *p;
p=p1;p1=p2;p2=p; }
int main(void) {
int nA,nB; int *pt1,*pt2;
scanf(“%d,%d”,&nA,&nB); pt1=&nA;pt2=&nB;
if (nA 3.请仔细分析教材例9-2、9-3、9-6~9-11,上机调试之。记录并分析程序运行结