C语言I博客作业08

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/CST2020-2/
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2020-2/homework/11589
这个作业的目标 熟练对continue和break语句的运用以及嵌入语句的运用
学号 20208961

1.PTA实验作业(20分/题)

1.1 题目名1: 7-5 幸运彩票 (15分)

题目内容描述:
彩票的号码有 6 位数字,若一张彩票的前 3 位上的数之和等于后 3 位上的数之和,则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。

输入格式:
输入在第一行中给出一个正整数 N(≤ 100)。随后 N 行,每行给出一张彩票的 6 位数字。

输出格式:
对每张彩票,如果它是幸运的,就在一行中输出 You are lucky!;否则输出 Wish you good luck.。

输入样例:
2
233008
123456
输出样例:
You are lucky!
Wish you good luck.

1.1.1数据处理

数据处理:该定义了了N,i,j,a,b,c,d,e,f,l;等整型以及sum,result;等双精度浮点型变量
数据表达:表达式:
        a=i/100000;
        b=(i/10000)%10;
        c=(i/1000)%10;
        d=(i%1000)/100;
        e=(i%100)/10;
        f=i%10;
        sum=a+b+c;
        result=d+e+f;
        sum==result
流程结构:该题运用了for循环语句,以及if-else判断语句。

1.1.2实验代码截图

1.1.3 造测试数据

1.1.4 PTA提交列表及说明


提交列表及说明:

编译错误:求输入数的位数书写错误,将d=(i%1000)/100;e=(i%100)/10;写成(i/100)%10,和(i/1000)%10.
同时思维也出现了一点错误,在for语句中又嵌入了一个for语句导致出现错误
答案错误:将for(j=1;j<=N;j++)中j<N写成j<100导致结果循环了一百多次。。

1.2 题目2: 7-6 Wifi密码 (15分)

题目内容描述:
下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1;B-2;C-3;D-4;请同学们自己作答,每两日一换。谢谢合作!!~”—— 老师们为了促进学生学习也是拼了…… 本题就要求你写程序把一系列题目的答案按照卷子上给出的对应关系翻译成 wifi 的密码。这里简单假设每道选择题都有 4 个选项,有且只有 1 个正确答案。

1.1.1数据处理

数据处理:该题定义了N,i,j,k;等整型变量和m,n;等字符型变量。同时还定义了一个数组result,用来存放元素。
数据表达:表达式:    case 'A':result[i]=1;break;
                    case 'B':result[i]=2;break;
                    case 'C':result[i]=3;break;
                    case 'D':result[i]=4;break;
                    default:break;
流程结构:该题运用了for循环语句和if语句,switch语句。

1.2.2 实验代码截图


1.2.3 造测试数据

1.2.4 PTA提交列表及说明


提交列表及说明:

编译错误:对于字符型函数char认识不清没有写getchar();,同时在switch语句接受后直接写printf(\n);
导致编译错误。
运行超时:输入的判断条件错误导致运行不出来.
答案错误:对于输出这个地方出现答案错误没有再一次运用for语句进行循环
而是直接输出result的值。导致答案错误。

2.代码互评(5分)

同学代码截图1

自己代码截图1:

不同之处:
1.该同学运用了定义一个数组解决问题的方法,我没有使用。
2.我定义多个变量来代替输入的数的位数,他直接将方程式写入if语句中。
3.他运用的方法比较新颖和简单,我的这个比较繁琐。
同学代码截图2:

自己代码截图2:

不同之处:
1.我只运用for语句,该同学还是用了数组。
2.我定义的变量较少它定义的变量较多,我只使用了一个%d*%d=%-4d
而他还用了num = (n * (n + 1)) / 2,使用的表达式也比较复杂。
3.我使用的方法看着比较简便,它使用的方法比较的新颖,很好用。

3.学习总结(15分)

3.1 学习进度条(5分)

3.2 累积代码行和博客字数(5分)

3.3 学习内容总结和感悟(5分)

3.3.1 学习内容总结

3.3.2 学习体会
感受:
1.这次的作业感觉比较的难,相对于前几周所用的时间也更长一点。对于很多题目都出现了较多的题目。
首先就是选择题对于代码的理解能力较低,如if (j%2) continue;这里就不是很清楚。
2.对于break和continue的用法还是不太清楚。如在判断是否为素数时为什么不可以用if(m%i==0);continue;。
3.对于数组问题不太会,还有对于字符型函数的运用也不太熟练。
收获:
1.对于嵌入问题更加的了解了,同时也学习到了运用数组解决问题。
2.对于理解代码的能力稍稍提高了一点。

对于跳出整个循环的解决方案:

c语言的break语句只能跳出离它最近的一层循环,但是我们有时候需要跳出多层循环,以下有几种跳出多重循环的方法:
1.使用goto

for (int i = 0; i < MAX1; i++)
{
    for (int j = 0; j < MAX2; j++)
    {
        if (condition)
        {
            symbol = 1;
            goto outloop;
        }
    }
}
outloop:
//somecode

2.写成函数 return

for ()
{
    for ()
    {
        for ()
        {
            if(condition)
            {
                symbol = 1;
                return;
            }
        }
    }
}

3.直接修改外层循环条件

for(int i = 0; i < MAX1; i++)
{
    for(int j = 0; j < MAX2; j++)
    {
        if(condition1)
        {
            symbol = 1;
            i = MAX1;
            break;
        }
    }
}

4.在外层循环设置判断条件
内层循环判断满足条件修改标志后 外层循环进行判断:

for(;symbol != 1 && condition1;)
{
    for(;symbol != 1 && condition2;)
    {
        for(;symbol != 1 && condition3;)
        {
            if(condition)
            {
                symbol = 1;
            }
        }
    }
}

5.在大循环后面判断标志加入break

for(;condition1;)
{
    for(;condition2;)
    {
        for(;condition3;)
        {
            if(condition)
            {
                symbol = 1;
            }
        }
        if (symbol == 1){
            break;
        }
    }
    if(symbol == 1){
        break;
    }
}

参考资料:
https://blog.csdn.net/u011475211/article/details/42041783
转载于:https://www.cnblogs.com/oddcat/p/9700277.html

posted @ 2020-12-12 18:32  hdd沈小檐  阅读(245)  评论(14)    收藏  举报