代码改变世界

C博客作业02-循环结构

2020-11-21 21:05  米奈希尔。  阅读(151)  评论(0编辑  收藏  举报

| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业02--循环结构 |
| 这个作业的目标 | 学习循环结构内容,包括for循环、while循环、循环嵌套。 |
|姓名 | 罗发槺 |

0.展示PTA总分。


1.本章学习总结。

1.1 for循环语法。

for(语句;限制条件语句;语句)
{
      语句;
}

例如:

    for (i=1;i<=n;i++)
    {   b=i*2-1;
        a =(double) c*i/b;
        sum = sum + a;
        c=-c;
    }

1.2 while、do while循环语法。

while(限制条件)                  
{
      语句;
}

例如:

    while(t>90)
    {
        t-=90;
        n++;
    }
do
{
      语句;
}while(限制条件);//分号不能忘。

例如:

    do{
        scanf("%d",&n);
        if(n>0)
        {
            i++;
        }
        else if(n<0)
        j++;
        limit++;
    }while(limit>19||n!=0);

1.3 跳出循环相关语句break\continue.

  • break用来跳出循环和switch结构。
  • continue用来跳出当前循环的后面语句,不结束循环,继续循环。
    例子:
    while(c!='\n')
    {
        scanf("%c",&c);
        if(c=='\n')
        break;//满足条件直接跳出当前循环,如果是continue,只是跳过后面的语句,循环还是继续的,直到满足while语句的条件后跳出循环。
        if(c=='0'||c=='1')
        sum=sum*2+c-'0';
        else
        {
            printf("error input!");
           return 0;
        }
    }

1.4 循环嵌套。

简单来说就是在循环里面在加循环,例如:

    while(count!=n)//外循环
    {
        scanf("%d",&N);
        scanf("%d",&NUM);
        count1=1;
        while(count1!=N)//内循环
        {
            scanf("%d",&num);
            if(num>NUM)
            NUM=num;
            count1++;
        }
        printf("%d\n",NUM);
        count++;
    }

1.5小知识点。

1. printf("%md"),m用来控制输出宽度限定,是正的右对齐,如果是负的就左对齐。

  • 案例截图:

2.

scanf("%d",&a);
scanf("\n%c",&c);

读入字符的时候可以在%c的前面加个\n或空格,这样可以消掉前面输入的空格或回车,防止读入错误。

2 编程技巧总结.

数列求和。

  • 凡是数列求和,必用循环结构,其他就看表达式,没什么好说的。
    for (i=1;i<=100;i++)
    {
        sum = sum + i;//中间表达式看题目要求
    }

数字逆序问题。

        while(n>0)
        {
            N=N*10+n%10;//数字逆序核心表达式
            n/=10;
        }
  • 两三行代码就可以实现数字逆序,是不是很简单。

图形打印编辑技巧。

  • 先想好图形规律,利用嵌套循环,来得到。
    例如下面这个打印菱形的题。
    for(i=1;i<=7;i++)//注意控制总体打印层数
    {
        for(k=0;k<=fabs(4-i);k++)//注意控制空格数量
            printf(" ");
        for(j=1;j<=7-2*fabs(4-i);j++)//注意控制乘号数量
            printf("*");
        printf("\n");
    }
  • 主要是要注意表达式的合理性。
    效果图
  • 值得一提的是这个图案是对称的,所以控制条件的时候可以用绝对值来实现对称结构,这可以极大的缩小代码的长度。

四则运算

#include <stdio.h>
int main()
{
	int n, sum;
	char c;
	scanf("%d%c", &sum, &c);//读取第一个数字
	while (c != '=')//程序结束控制条件
	{
		scanf("%d", &n);//读取运算符号
		if (c == '+')sum += n;//根据相应的运算符号进行运算
		else if (c == '-')sum -= n;
		else if (c == '*')sum *= n;
		else if (c == '/')
		{
		    if(n==0)//避免错误被除数为0
		    break;
		    else//遇到非法字符时结束循环
		    sum /= n;
		}
		else//等号时跳出循环
		break;
		scanf("%c", &c);//读入下一个数字
	}
	if(c=='=')//判断输入数据是否合法
	printf("%d", sum);
	else
	printf("ERROR");
	return 0;
}
  • 主要是要注意最后一个scanf要放在判断完非法字符后面,这样就不会出现程序错误。其他我注释的这么清楚应该都不是问题。

3.PTA实验作业。

3.1 数列求和问题

3.1.1 流程图或伪代码介绍思路
int 定义需要的变量。
for(初始化;结束循环的条件;控制变量)
{
      按数列求和的规律得到表达式;
}
3.1.2 代码截图

3.1.3 PTA提交列表及说明

  • 运气挺好的一次就对了,后面主要是把自定义符号给改了。需要注意的就是要用flag来控制每次相乘的符号正负问题,其他应该都不是问题。

3.2 图形打印问题。

3.2.1 数据处理
  • i,:用做控制外层循环进行的次数。
  • n:打印的层数。
  • blank:用来负责控制打印空格数量。
  • j:用来控制打印*号数量。
  • temp1,temp2:储存运算式。
  • c:打印的起始字符。
3.2.2 代码截图

第一次代码截图:

第二次代码截图:

第三次改进截图:

3.2.3 PTA提交列表及说明

  • 第一个代码截图搞得比较麻烦,后来看了超星视频才改的简洁很多。
  • 第二个代码的截图在我试的网页编译器上可以正确运行,但是vs显示空白,pta通过不了。于是我就改了第三个代码。
  • 代码三比起代码二更直观简洁,看起来更加舒服,而且因为需要的运算式在循环外只需要算一次,使代码的效率提高。

3.3 自选一题,介绍printf调试如何检查错误

3.3.1 单步调试截图

  • 调试之后知道了1,2这两个数需要单独列出来
  • 调试之后知道,不引入N=3的情况会导致后面的else出现错误,于是加上N=3的情况。
3.3.2 代码截图

3.3.3 PTA提交列表及说明

  • 第一次提交因为没有考虑n=1和n=2的情况。
  • 第二次提交没有考虑n=3对后面数据的影响。
  • 经过调试后都得到了解决。