高级语言程序设计课程第六次个人作业

                         **高级语言程序设计课程第六次个人作业**

001
*题目:编写函数fun(int m, int k, int xx[]),将小于整数m的非素数存入xx数组中,个数由k返回。

问题:怎么都没有输出
解决:在主函数中,我fun中写成了xx[],问了同学后,把[]删去,问题解决!(原来主函数引用时不能加[]啊!)

002
题目:编写函数,将长度为n的字符串从第m个字符开始的全部字符复制成另一个字符串。

问题:发现最后多了一行换行
解决:原来自己又忘记跳过‘\n’了,补上后,问题解决

003
题目:编写函数用冒泡法将数组按从小到大的顺序排列。

问题:
解决:

004
题目:将n个整数按输入顺序的逆序排列,要求应用带指针参数的函数实现。

问题:
解决:

005
题目:写一个函数打印arr数组的内容,不使用数组下标,使用指针。

问题:出现死循环
解决:很低级的错误,函数中的** n 没有减1**,循环条件一直为真。

006
题目:编写程序,分别找出多个n×m数组的最大值、最小值,并输出两个值的下标。

问题:
解决:

007
题目:判断上三角矩阵。上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。本题要求编写程序,判断一个给定的方阵是否上三角矩阵。

问题:
解决:无(这题老师上课讲过了)

008
题目:给定一个按升序排列的二维数组,编写一个函数来判断目标值是否存在于数组中。数组是一个m x n的矩阵,可使用算法快速查询。

问题:不知道应该怎么设计算法
解决:翻书,找到了二分查找法,思考后,尝试将二维数组的数存入新的一维数组中,这样就可以使用二分查找法了。(但似乎运行时长有点长
我想到了第二种办法:先判断想找的数和第1个元素和最后一个元素的大小关系,如果不在区间内就return 0。然后将它和每一行的最后一个数比较,找到比他大的数中的最小值。然后又在那一行寻找,找得到就有return 1,否则return 0
第一种方法:二分查找法


第二种方法

009
**题目:编写一个函数,输入一个整数,将其分解为两个质数之和。提示:函数可以声明为int split(int n, int a, int b)。n作为传入参数,a和b作为传出参数。若无法分解返回0,可以分解则返回1。

问题:发现输入 8 竟然无法被分解
解决:经调试,发现我的int split(int n, int *a, int *b)函数中,对i的判断条件为i<sqrt(n),这是错误的,将其改为 i<n,问题解决。

010
题目:编写函数void shift(char s, int n),请原地将字符串s循环左移n次。例如,字符串“hello”左移3次得到“lohel”。*

问题:不会逆序输出
解决:上网查找方法原理,主要内容见shift函数部分。问题解决

011
题目:写一个程序读入一个二维整型数组并判断它是否为魔方矩阵。在魔方阵中,所有的行、列和对角线都拥有相同的和。

问题:发现无论怎么输入,都不为魔方矩阵
解决:经调试,我的 s1 又没有初始化!!!改后,问题解决。

012
题目:利用指针,判断两个字符串是否相等。忽略大小写。例如,输入 “hello”和”hELlO”,认为它们是相等的。返回值:1表示相等。0表示不同)。

问题:一开始没有考虑若输入为非字母的情况
解决:完善函数:引用<ctype.h>库函数中的判断函数判断是否为字符,问题解决。

总结思考:
1.对指针的使用,特别是数组指针的使用还不是很熟练,我觉得我应该多去看看例题,再挖掘一下。
2.依旧是初始化问题,有时候还是会忘记,但情况已经有了改善,至少有好几题我已经会快速记住要初始化了!
3.在读取字符串的时候,还是会遗忘考虑最后输入的 \n ,这需要注意
4.对于第八题的查找算法,还不是很清楚,我觉得我写的算法用时应该很大,会很慢,还要再想想。
5.还是要多看看课本理论,这样才会更快也更加理解题意与原理。

posted @ 2024-11-10 16:42  王馨怡  阅读(8)  评论(0编辑  收藏  举报