0.展示PTA总分(0----2)
1.本章学习总结(2分)
1.1 学习内容总结
整理这两周学习主要知识点,并能对每个知识点介绍简单案例或语法
1.嵌套循环
顾名思义,就是循环之中套有循环,从而达到多次重复运算,获得结果的目的。
//判断N位数中所有水仙花数
#include
#include
int main()
{
double N; //输入要求的几位数;
int a; //N位数的下界;
int t; //临时变量,储存;
int i = 0; //循环数;
int s = 0; //各位数立方的和;
scanf("%lf", &N);
a = pow(10, N - 1); //计算立方;
t = a;
while (N >= 3 && N <= 7) //主循环;判断输入位数范围;
{
while (pow(10, N - 1) <= a && pow(10, N) >= a ) //子循环;判断范围之间的数是否符合;
{
t = a;
while (i < N) //孙子循环;计算位数立方和;
{
s = s + pow(t % 10, N);
t /= 10;
i++;
}
i = 0;
if (a == s)
{
printf("%d\n", a);
}
a++;
s = 0;
}
break;
}
return 0;
}
同样的,for循环,do_while循环也是相同的。
- (1)这里要注意两个语句,break语句和continue语句区别。
- break语句跳出的是整个循环,它不仅可以在循环语句中使用,同样的,switch语句中仍然可用它跳出。它会使整个语句结束。
- continue语句跳出的是本次循环,即遇见它本循环语句结束,但是它不能出现在switch语句中。
- (2)循环条件
- 在做题过程中可故意制造一些死循环,如while(1)循环体语句中用一个if语句判断条件是否成立,再用break跳出,节省了循环条件的控制。
- 同样的,for(;;) ( for ()也可以 )中没有循环条件,所以就是无条件循环,就是只能通过循环体中的内容来跳出循环。
2.函数
1.自定义函数
- 使用优点
- 相同功能的代码可以放在同一个函数内,供其他函数调用。 解决代码重复问题,更简洁。 可读性更好,
- 代码扩展性更好。增加新的功能,不需要更改其他函数。
- 代码维护性更好。查错针对某个功能函数检查。
- 结构
[数据类型说明] 函数名称 (参数)
{
执行代码块;
return (表达式);
}
- 一般推荐把自定义函数放在main()函数前面。如果放在main()后面还需要对函数进行声明。
2.函数调用
- 我们需要用到自定义的函数的时候,就得调用它,那么在调用的时候就称之为函数调用。在C语言中,函数调用的一般形式为:函数名([参数]);
注意:- 1.对无参函数调用的时候可以将[ ]包含的省略。
- 2.[ ]中可以是常数,变量或其它构造类型数据及表达式,各参数之间用逗号分隔。
3.参数
//在函数中不需要函数参数的称之为无参函数,在函数中需要函数参数的称之为有参函数,有参和无参函数的一般形式如下:
[数据类型说明] 函数名称 (参数列表) //有参;有参函数更为灵活,可以控制输入值,而无参就比较死板了。
{
执行代码块;
return (表达式);
}
[数据类型说明] 函数名称 ()//无参;
{
执行代码块;
return (表达式);
}
- 形参实参
- 形参是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数,相当于接受站。实参是在调用时传递该函数的参数相当于一个发射站,其信息可以被被调函数使用。
- 形参只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。(划重点!!)
- 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。
4.返回值
- 函数的返回值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。
- 利用函数返回值可以进行真假的判断;
//返回两个整数中较大的一个
int max(int a, int b)
{
if (a > b)
{
return a;
}
else
{
return b;
}
}
3.变量
- 局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。在复合语句中也可定义变量,其作用域只在复合语句范围内。
- 全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。
1.2 本章学习体会
- 学循环的时候变量的改变有点生疏,尤其是到临界点的时候,该不该进下一个循环,如何重新赋值,如何构造一个循环这样子的不是太懂。我做的时候必须借用草稿纸在纸上把思路理清了才能去做,但是这样速度很慢。更加深入的学习让我真正理解到计算机这门学科果真十分注重实践,很多时候,在你脑海中是一回事,你打成代码是一回事,它一运行又是一回事。这真的让人苦恼。也会是我突破的方向吧。
- 计算这两周代码量
第七周 | 第八周 | 总计 |
---|---|---|
620 | 750 | 1270 |
2.PTA实验作业(6分)
从PTA题目集中选3题你最满意的题目,题目选难度越大,分值越高。每题2分,做如下内容:
2.1 查询水果价格
2.1.1 伪代码
int main()
{
输出菜单; //这里同样可以加一个自定义函数来做;
int choice;
int i;
for (i = 0; i <= 4; i++) //利用一个循环语句,控制数入的次数;
{
scanf("%d", &choice);
当数入为0时,直接退出 if (choice == 0) break;
switch (choice)
{
判断choice的值,输出相对应的价格;
}
}
return 0;
}
2.1.2 代码截图
2.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
1 | price=3.00 | 一个数,正确 |
1 1 2 2 2 | price = 3.00(换行)price = 3.00(换行)price = 2.50(换行)price = 2.50(换行)price = 2.50 | 恰好5个数 |
1 0 | price=3.00 | 输入0结束 |
2.1.4 PTA提交列表及说明
1.部分正确:用scanf()输入的时候,每个数字间用空格隔开,导致输出结果的格式总是错误;
2.部分正确:刚开始的时候没有想到在printf()中换行符之后加一个空格,就开始疯狂改动其他的。。。
3.部分正确:在我改格式的时候解决了超过范围数字,恰五位数字等输出情况,终于解决了问题。
总结:应该在vs上整好再交pta的当初我一度怀疑是不是pta出了问题,心态爆炸。。~
2.2 题目名 求n以内最大的k个素数以及它们的和
2.2.1 数据处理
int n;
int Prime()
{
自定义函数,如果是素数返回1,不是的话返回0;
}
int main()
{
返回素数,传递符号 +%d
计算素数和,输出结果;
}
return 0;
}
2.2.2 代码截图
2.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
1000 10 | 997+991+983+977+971+967+953+947+941+937=9664 | 结果正确 |
12 6 | 11+7+5+3+2=28 | 结果正确,形式正确 |
2.2.4 PTA提交列表及说明
1.编译错误:这道题我在vs上演示了很长时间,才放在pta上,复制的时候出现了错误。
2.答案错误:没有考虑到0,1,2的情况,所以不正确;
2.3 题目名 换硬币
2.3.1 数据处理
int main()
{
int count5 ;
int count2 ;
int count1 ;
int counttoal = 0;//总方案数
int x;//数入的金额;
scanf("%d", &x);
使用三个循环分别计算5分,2分,1分出现的数量可能;
凑到结果为输入金额;
return 0;
}
2.3.2 代码截图
2.3.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
8 | fen5:1, fen2:1, fen1:1, total:3(换行)count = 1 | 最小x |
13 | ```结果太多,不便展示 | 结果正确 |
2.3.4 PTA提交列表及说明
总结:这是一个逗号引起的惨案。。
1.答案错误:黑人问号?明明在vs上面写对了,为什么结果错误?
2.答案错误:一定是pta搞错了我没有仔细发现程序问题;
3.答案错误:心态爆炸ing....
4.答案正确:求助大佬,发现,要求英语逗号,我的是汉语逗号。。。当场自闭。
3.代码互评(2分)
找2份同学代码,和自己代码比较,建议互评代码尽量找代码风格差异较大。
1.同学代码截图
自己代码截图
- 1.我感觉两份代码在想法上是共通的,同学的代码每进行完一次循环后进入下一层,讲所有的可能求出,取余额,再次进入下一层。我的代码用的是比较粗暴一点的方法。但结果相同;
- 2.同学的想法比较细致,考虑到每一种情况该如何计算,而我的代码比较简介。这是我要学习的地方。
- 1.想法思路大致相同,都是构造一个自定义函数。不过,自定义函数放置位置不同而已。当自定义函数放在main() 函数前面时,不需要进行函数的声明
- 2.都利用了自定义函数中return的返回值判断是不是素数。然后同学的代码将cnt即素数的位置分开看,第一位printf(''%d'', i) 其他的位置都多输出一个''+''。最后一位是输出''=%d'',给了我这样的一种思考方法。而我的代码引进了一个位置变量position,判断输入素数所在的位置,再决定出去内容。