第一周作业1:查找整数
7-1 查找整数 (10 分)本题要求从输入的N个整数中查找给定的X。如果找到,输出X的位置(从0开始数);如果没有找到,输出“Not Found”。
输入格式:
输入在第一行中给出两个正整数N(≤20)和X,第二行给出N个整数。数字均不超过长整型,其间以空格分隔。
输出格式:
在一行中输出X的位置,或者“Not Found”。
输入样例1:
5 7
3 5 7 1 9
输出样例1:
2
输入样例2:
5 7
3 5 8 1 9
输出样例2:
Not Found
1.实验代码:
#include<stdio.h>
#define N 20 //宏定义N代表20
int main()
{
int i;
long n, x; //定义长整型n,x
int a[N];
scanf("%ld %ld", &n, &x); //注意长整型对应的格式符号ld%
for(i=0; i<n; i++) //将数字存放到数组中
{
scanf("%d", &a[i]);
}
for(i=0; i<n; i++)
{
if(a[i] == x)
{
printf("%d", i);
break;
}
}
if(i==n)
printf("Not Found");
return 0;
}
2.设计思路:
3.本题调试过程碰到的问题级解决办法
问题1:下面有一个错误截图是第一次测试结果,遇到了【段错误】(错误截图1)
解决方案1:这里讲述一下我收集到的段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。这里想更了解的我可以推荐一篇博客(https://blog.csdn.net/e_road_by_u/article/details/61415732)
问题2:开始以为是因为Break语句导致的错误
解决方案2:将break删掉,进行运行,得到的是错误的,根据错误可取推想原因出在了哪里,后来又将最后一个if语句的条件改了才运行正确,因为一开始并没有想到这种所以直接去掉了break语句用了return 0结束(正确截图2)
4.运行截图
正确截图
错误截图
第一周作业2:求最大值及其下标
7-2 求最大值及其下标 (20 分)本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
输入格式:
输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
输入样例:
6
2 8 10 1 9 10
输出样例:
10 2
1.实验代码:
#include<stdio.h>
# define N 10 //宏定义
int main()
{
int a[N];
int n, i, m, q=0; //注意q要赋初始值,考虑特殊情况
scanf("%d", &n);
for(i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
m = a[0];
for(i = 0; i < n; i++)
{
if(a[i] > m)
{
m = a[i];
q = i; //注意题目要求c输出的是【最小下标】
}
}
printf("%d %d", m, q);
return 0;
}
2.设计思路:
3.本题调试过程碰到的问题级解决办法
问题1:没有给q赋初始值,后来看了其他人代码依旧不能理解
解决方案:付出是之后调试,询问得知需考虑特殊情况,若为给q赋初始值,当数组中的第一个数大于其他数字时,if语句不满足会直接输出一个随机的q值,所以必须给q赋初始值
问题2:错误截图2中我将第二个for循环写成i=1而不是i=0
解决方案:这也是一种忽略了会存在数组中第一个数会大于下一个数字的情况,这是后面改过来才发现自己忽略思考的地方,这种思考不周全实我经常会犯的错误,所以说我们要养成习惯,即使这个题已经完成了依旧要思考为什么是这样的而不是另一种写法
4.运行截图
PTA正确截图
PTA错误截图