1、上机实验题目解题思路上机实验题目解题思路目录指针之二 32455:步骤: 32456:步骤: 32457:步骤: 43577:步骤: 43578:步骤: 43579:步骤: 53581:步骤: 53583:步骤: 63584:步骤: 63584:步骤: 73585:步骤: 73586:步骤: 8指针之一 82453:步骤: 82454:步骤: 93575:步骤:方法同2454 93576:步骤: 93580:步骤: 103582:步骤: 10函数 112452:步骤: 112482:步骤: 113574:步骤: 123571:步骤: 12函数 123565:步骤: 123566:步骤: 133
2、567:步骤: 133568:步骤: 133569:步骤: 143570:步骤: 143571:步骤: 143573:步骤: 14数组 143552:步骤: 143553:步骤: 153555:步骤: 153556:步骤: 153561:步骤: 153893:步骤: 153895:步骤: 163900:步骤: 163905:步骤: 16指针之二2455:步骤:1) 定义两数交换的函数void swap(int *p1, int *p2),交换两指针所指向的值。.2) main函数:20个元素的浮点数组表示n个数,用选择排序或冒泡排序对n个数进行从小到大的排序,对排序过程中的交换两数用函数调用来
3、实现,如交换ai和aindex为swap(&ai, &aindex);2456:步骤:法一:1) 定义移数函数mov(int *a, int n),把数组最后面一个数移到最前面,其他数往后移一位,具体过程为:a) 先保存最后一个元素b) 从第一个元素开始到倒数第二个元素都往后移一位c) 最后一个元素放到最前面2) 定义main函数,多组输入测试数据,循环调用移数函数mov()。int main() int a100, m, n, i; while (scanf(%d%d, &n, &m) != EOF)/多组输入n、m值 for(I = 0; I n; i+) scanf(“%d”, &ai)
4、;for (i = 0; i 1时,调用函数mov(a, n, m-1)具体过程为:d) 先保存最后一个元素e) 从第一个元素开始到倒数第二个元素都往后移一位f) 最后一个元素放到最前面g) 如果m1,move(a, n, m-1);2) 定义main函数int main() int a100, m, n, i; while (scanf(%d%d, &n, &m) != EOF)/多组输入n、m值 for循环输入数组的每一个元素mov(a, n, m);for循环输出数组的每一个元素 Return 0;2457:步骤:1) 定义逆序函数void sort(int *p1, int n),逆序
5、排列p1地址开始的n个数。循环变量i从0开始到n/2,*(p+i)与*(p+n-1-i)交换。若是定义函数为void sort(int x, int n),则改为*(p+i)为xi,其实作为形参int *p与int p是完全等价的,后面*(p+2)与p2是等价的。2) main函数:多组输入测试。int main() int num20, n, i; while (scanf(%d, &n) != EOF)/多组输入n值 for循环输入数组的每一个元素sort(num, n);/逆序排列数组num,或sort(&num0, n) 或int *p, p = num, sort(p,n);for循
6、环输出数组的每一个元素 Return 0;3577:步骤:与2456完全相同。3578:步骤:1) main函数:定义三个一维字符数组s180/s280/s380,定义一个用于交换的临时字符数组t80。如同三个整数的排序,先比较符数组s1、s2,若s1大于s2则交换两字符串;再比较s1、s3,若s1大于s3则交换两字符串;这样s1一定是最小的。再比较s2、s3,若s2大于s3则交换两字符串。2) 比较字符数组s1、s2为:strcmp(s1, s2)3) 字符串S1和s2交换为:strcpy(t, s1); strcpy(s1, s2); strcpy(s2, t);若写s1 = s2,为错误
7、。4) 由于有三次比较,就会有三次交换,三次交换为重复代码,考虑用交换函数实现。交换函数定义为:void swap(char *str1, char *str2)/表示函数功能要交换str1、str2对应两个字符值 char t80; 步骤3的三个语句3579:步骤:1) 自定义求字符串长度函数int length(char *s),功能为返回字符串s的长度。int length(char *s) int i; .return i;2) main函数:多组输入测试。int main() char str80; while (gets(str) != NULL) printf(%dn, leng
8、th(str); return 0;3581:步骤:1) 自定义排序函数void sort(int *p, int n),功能是对以p的值为起始地址的n个数排序。void sort(int *p, int n)/冒泡法排序代码,也可写成选择法排序的 int i, j, t; For(I = 0; i n-1; i+)For(j=0; j pj+1)/aj可改为*(p + j),pj+1可改为*(p + j +1)t = pj; pj = pj+1; pj+1 = t;2) main函数:多组输入测试。int main()Int a100;Int I, n; while (scanf(%d, &
9、n) != EOF) 输入数组每一个元素; 调用排序函数; 输出数组每一个元素; 换行printf(n); return 0;3583:步骤:1) 自定义排序函数void sortA(int *p, int n),功能是对以p的值为起始地址的n个数从小到排序;方法参考题目35812) 自定义排序函数void sortD(int *p, int n),功能是对以p的值为起始地址的n个数从大到排序,方法参考题目3581。3) main函数:多组输入测试。int main() Int a10, i;Char c; while (scanf(%c, &c) != EOF) 输入10个整数; Getch
10、ar();/得到10个整数输入时的最后一个回车符,让下一次的%c能得到字符A或D If (c = A)调用排序函数sortA(a, 10); Else if (c = D) 调用排序函数sortD(a, 10); 输出数组每一个元素; 换行printf(n); return 0;3584:步骤:1) 自定义查找函数int search(int list, int n, int x),功能是在以list值为起始地址的n个数中找x,若找到返回下标,否则返回-1.2) main函数:多组输入测试。int main() int a10, x, i, result; while (scanf(%d, &
11、a0) != EOF) for (i = 1; i 10; i+) scanf(%d, &ai); scanf(%d, &x); result = search(a, 10, x); if (result = -1) printf(Not foundn); else printf(%dn, result); return 0;3584:步骤:1) 自定义查找函数int search(int list, int n, int x),功能是在以list值为起始地址的n个数中找x,若找到返回下标,否则返回-1.2) main函数:多组输入测试。int main() int a10, x, i, re
12、sult; while (scanf(%d, &a0) != EOF) for (i = 1; i s2时,返回1,当s1=s2时,返回0,当s1 0,所以“abcd”大于”abc”。int strcomp(char *s1, char *s2) int result, Return result;2) main函数:多组输入测试。int main() char s180, s280; while (gets(s1) != NULL) gets(s2); printf(%dn, strcomp(s1, s2); return 0;指针之一2453:步骤:1) 定义两数交换的函数void swa
13、p(int *p1, int *p2),交换两指针所指向的值。.2) main函数:多组输入a、b,调用交换函数交换两变量值。代码框架:void swap (int *p1, int *p2) int main() int a, b; Int *pointer_1, *pointer_2;while (scanf(%d%d, &a, &b) != EOF)/输入a、b值 Pointer_1 = .; Pointer_2 = .; If (a b) Swap(.);printf(“%d %dn”, a, b); return 0; 2454:步骤:h) 定义同2453相同的函数void swap
14、(int *p1, int *p2),交换两指针所指向的值。i) 定义main函数,多组输入三个数,从大到小输出。int main() int a, b,c; while (scanf(%d%d, &a, &b) != EOF)/输入a、b值 If (a b) Swap(&a, &b); If (a c) Swap(&a, &c); If (b c) Swap(&b, &c);printf(“%d %d%dn”, a, b, c); return 0; 3575:步骤:方法同24543576:步骤:1) 定义类同2453函数void swap(float *p1, float *p2),交换两
15、指针所指向的值。2) 定义main函数,多组输入五个数,从小到大输出。int main() int a5, i, temp; while (scanf(%f, &a0) != EOF)/输入a、b值 for (i=1; i5; i+) scanf(“%f”, &ai); 选择排序完成5个数的排序,其中交换通过 Swap(&a, &a)完成;循环输出a的所有元素; return 0; 3580:步骤:1) 自定义函数input(int a, int n),output(int a, int n);Void input(int a, int n)/函数无返回值,等效于void(int *a, in
16、t n) int i; For (i=0; in; i+) Scanf(“%d”, &ai);2) 在main函数中,调用它,完成对数组n个元素的输入输出。Int main() int array100, n; While (scanf(“%d”, &n) != EOF) Input(array, n); Output(array, n); Return 0;3582:步骤:1) 定义一个计算两个数和、差的函数sumDiff(int op1, int op2, int *pSum, int *pDiff),功能是求两个数op1、op2的和、差,其中*psum和*pdiff是计算得出的和与差,代
17、替return 返回值,故函数不需要返回任何值了。Void sumDiff(int op1, int op2, int *pSum, int *pDiff)/op1、op2是要计算的两数*pSum = op1 + op2;/ pSum是main()函数中变量的地址,故修改的是main()函数中变量的值2) 在main函数中,调用它,计算输入的任意两个数的和与差。Int main() int a, b, s, d; While (scanf(“%d%d”, &a, &b) != EOF) sumDiff(a, b, &s, &d); printf(“sum=%d, diff=%dn”, s, d
18、); Return 0;函数2452:步骤:3) 定义判断素数函数int prime(int x):当x是素数时,函数返回1,否则返回0.4) main函数:多组输入n、m,对n-m间的每一个数i,调用函数prime(x)判断是否是素数,若是就输出。代码框架:int prime (int x) / (循环从2到sqrt(x),不能从2到x-1) int main() int m, n,i; while (scanf(%d%d, &n, &m) != EOF)/输入n、m值 for (i=n; i= m; i+) If () Printf(“%d ”, i); ./输出素数printf(“n”)
19、; return 0; 2482:步骤:3) 定义递归函数int age(int n, int m, int k),功能是求第n个人的岁数,并返回此岁数。函数:int age(int n, int m, int k) int result; if(n = = 1)result = k;else result = age(n-1, m, k) + m; return result;4) 定义main函数,多组输入,输出第n个人的岁数。3574:步骤:1) 定义函数int reverse(int n),功能返回n的逆序数。函数:int reverse (int n) int result=0; d
20、o while(.!=0); return result;2) 定义main函数,多组输入n,输出结果。3571:步骤:1) 定义递归函数int fib(int n),,功能是求返回第n项Fibonacci数。函数:int fib(int n) int i, f1, f2, item,result; if(n = = 1 | n=2) result = 1; else result = fib(n-1) + fib(n-2) return result;2) 定义main函数, 多组输入,输出结果。int main()int .while (scanf() != EOF) for (i = m
21、; i y) z = x; else z = y; return z;2) main函数:定义三个变量a、b、c和m、多组测试输入三个整数;两次调用函数,就可得到最大数了。3567:步骤:1) 定义判断素数的函数int prime(int x),若是素数返回1,否则返回0。2) 主函数:从100-200每个数都通过调用函数prime(i)来判断是否素数。int main () int i; For (I = 100; I 200; i+) If (prime(i) = =1) Printf(“%5d”, i);(以上代码未处理换行)3568:步骤:1) 定义求n!函数int fact(int
22、n),函数返回n!值。(既可用整数表阶乘也可用浮点表阶乘)2) 主函数:从1-10每个数都通过调用函数fact(i)来求i!,并累加求和。由于阶乘和较大,故用浮点表示和。int main () int i; float sum; For (I = 1; I =10; i+) Sum += fact(i); Printf(“%fn”, sum);3569:步骤:1) 定义函数int fn(int a, int n),返回aa(n个a)。2) 主函数核心语句:循环i=1到n, s += fn(a,i)。3570:步骤:1) 定义函数int countdigit(int number, int di
23、git),返回number 中数字digit的个数关键算法:取出number的每一位,若等于digit,则计数count加1,最后返回count。2) 主函数核心语句:输入x, 个数n=countdigit(x, 2)。3571:步骤:1) 定义函数int factorsum(int number),返回number的因子和。关键算法:i从1到number-1,若i是number的因子,则累加和sum;最后返回sum。2) 主函数main(),核心语句:i从m到n,若I = = fact(i),则输出i。3573:步骤:1) 定义函数int is(int number),若数字立方和等于本身,
24、返回1,否则返回0。关键算法:累加number的每一位数字,若和等于number,则返回1,否则返0。2) 主函数main(),核心语句:i从m到n,若I = = is(i),则输出i。数组3552:步骤:1) 定义数组a1010, s10及相关变量2) 多组测试:输入m, n ;二重for循环输入数组a的每一个元素(scanf(“%d”, &aij),注意%d后不加空格)。3) 对于第一行a0的每个元素a0j(j=0-n-1)都和第m-1行对应元素交换。4) 对每一行(i=0-m-1),计算元素和并存入数组si中5) 输出数组a的每一行(i=0-m-1)元素及si,并换行。3553:步骤:1) 定义数组a1010及相关变量2) 多组测试:输入 n ;二重for循环输入数组a的每一个元素(scanf(“%d”, &aij),注意%d后不加空格)。3) 主对角线元素:aii,副对角线ain-1-i。3555:步骤:1) 定义数组a66、标记是否上三角变量flag、及相关变量2) 多组测试:输入n ;flag=1; 二重for循环输入数组a的每一个元素3) 对于主对角线以下每个元素进行判断,如果不为零的,则flag=0同时跳出循环。4)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1