*py = &y; /* 让其分别指向x、y 和max 三个变量*/
*pmax = &max; /* 其中,max 用来保存x、y 中较大的变量*/ *pmax = *px; /* 调试时设置断点 */ if(pmax < py)
pmax = py;
printf(\return 0;
}
运行结果(改正后程序的运行结果) 3 5
max = 5 改错汇总
错误行号: 7 正确语句: px = &x; 错误行号: 8 正确语句: py = &y;
错误行号: 9 正确语句: pmax = &max; 错误行号: 11 正确语句: if(*pmax < *py) 错误行号: 12 正确语句: *pmax = *py; 二、改错题
改正下列程序中的错误,有n 个整数,使前面各数顺序循环移动m 个位置(m After moved: 3 4 5 1 2 源程序(有错误的程序) 1 #include 2 void mov(int *x, int n, int m); 3 int main(void) 4 { 5 int a[80], i, m, n, *p; 6 7 printf(\8 scanf(\9 for(p = a, i = 0; i < n; i++) 10 scanf(\11 mov(a,n,m); 12 printf(\13 for(i = 0; i < n; i++) 14 printf(\15 16 return 0; 17 } 18 void mov(int *x, int n, int m) 19 { 20 int i,j,k; 21 for(i = 0; i < m; i++){ 22 23 for(j = n-1; j > 0; j--) 24 x[j] = x[j - 1]; 25 x[0] = x[n – 1]; 26 } 27 } 改错汇总 错误行号: 10 正确语句: scanf(\行号: 22 增加语句: k = x[n-1]; 错误行号: 25 正确语句: x[0] = k; 三、编程题 1. 编写程序计算输入的两个实数的和与差。要求自定义一个函数sum_diff(float op1, float op2,float *psum, float *pdiff),其中op1 和op2 是输入的两个实数,*psum 和*pdiff 是计算得出的和与差。自定义main 函数,并在其中调用sum_diff 函数。 输入输出示例 input op1 and op2 : 4 6 4.000000+6.000000=10.000000; 4.000000-6.000000=-2.000000 解答:参见8.3.1 节中8-2 题。 2. 编写程序拆分输入实数的整数部分与小数部分。要求自定义一个函数void splitfloat(float x,int *intpart, float *fracpart),其中x 是被拆分的实数,*intpart 和*fracpart 分别是将实数x 拆分出来的整数部分与小数部分。自定义main 函数,并在其中调用splitfloat 函数。 输入输出示例 12.4567 The intpart is: 12 The fracpart is: 0.456700 解答: #include void splitfloat(float x, int *intpart, float *fracpart); int main(void) { float x, frac_part; int int_part; scanf(\ splitfloat(x, &int_part, &frac_part); printf(\printf(\return 0; } void splitfloat(float x, int *intpart, float *fracpart) { if(x<0) x=-x; *intpart=(int)x; *fracpart=x-*intpart; } 3. 定义函数void sort(int a[],int n),用选择法对数组a 中的元素升序排序。自定义main 函数,并在其中调用sort 函数。 输入输出示例 Input n (n<=10): 6 Input array of 6 integers:1 5 –9 2 4 –6 After sorted the array is: -9 –6 1 2 4 5 解答: #include void swap (int *px, int *py); void sort(int a[ ], int n); int main(void) { int n, a[10], i; printf(\scanf(\ printf(\:\for (i=0; i scanf(\sort (a,n); printf(\for (i=0; i printf(\return 0; } void sort(int a[ ], int n) { int i, j, index; for( i = 0; i < n-1; i++ ) { index=i; for (j = i+1; j < n; j++ ) if (a[j] < a[index]) index = j; swap (&a[i], &a[index]); } } void swap (int *px, int *py) { int t; t = *px; *px = *py; *py = t; } 4. 在数组中查找指定元素。输入一个正整数n (1 输入输出示例(运行2 次) 第一次运行: Input n: 3 Input 3 integers:1 2 -6 Input x:2 index = 1 第二次运行: Input n: 5 Input 5 integers:1 2 2 5 4 Input x:0 Not found 解答: #include int i, n, res, x; int a[10]; int search(int list[], int n, int x); scanf(“%d”,&n); for(i = 0; i < n; i++) scanf(\scanf(\res = search(a, n, x); if(res != -1) printf(\else printf(\return 0; } int search(int list[], int n, int x) { int i; for(i = 0; i < n; i++) if(list[i] == x) return i; return -1; } 5. 有n 个人围成一圈,按顺序从1 到n 编好号。从第一个人开始报数,报到3 的人退出圈子,下一个人从1 开始重新报数,报到3 的人退出圈子。如此下去,直到留下最后一个人。 问留下来的人的编号。 输入输出示例 Input n: 5 Last No is: 4 解答:参见8.3.2 节中程序设计第4 题。 9 1 练习参考答案 9-1 上机运行例9-1 的程序。 解答:(略) 9-2 定义一个能够表示复数的结构类型,一个复数包括实数与虚数两个部分。 解答: struct complex{ float real; float imaginary; }; 9-3 人的出生日期由年、月、日组成,请在例9-1 中的通讯录结构中增加一个成员:出生日期,用嵌套定义的方式重新定义该结构类型。 解答: struct date{ int year; int month; int day; }; struct nest_student{ int num; char name[10]; struct date birthday; /* 定义出生日期 */ int computer, english, math; double average; }; 9-4 例9-2 中,如果不定义函数count_average (),应该如何改写主函数,以实现程序功能。 解答: 将主函数中的语句: s1.average = count_average (s1); /*函数调用,结构变量作为函数参数*/ 改写为: s1.average = (s1.math + s1.english + s1.computer) / 3.0; 9-5 例9-2 中,如果要计算的是三门课程的课程平均成绩,应该如何改写程序。 解答: 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C语言程序设计及实验指导练习及习题参考答案(8--10)(4)在线全文阅读。
相关推荐: