C博客作业02--循环结构

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

目录

0.展示PTA总分

  • 单循环

  • 嵌套循环

1.本章学习总结

1.1 for循环语法

for(第一次循环进行前进行的语句1;判断是否进循环的条件2;每次循环结束进行的语句3)
{
      循环语句;
}
  • 三个式子用";"隔开,而不是用","。
  • 不填判断是否进循环的条件的for循环是死循环。
  • for循环比while循环更简洁。

1.2while循环

while (判断条件)
{
      循环语句;
}

do-while循环

do
{
      循环语句;
}
while (判断条件);
  • while循环先判断再进行循环,也就是可能不进行循环;而do-while循环先进行后判断,也就是一定能进入一次循环。
  • do-while的while有;

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

  1. break用于立即退出本层循环;continue结束本次循环并从头再来(本次循环体内不执行continue语句后的其它语句)
  2. 如果有多层循环时,break只会跳出本层循环,不会跳出其他层的循环
  • break:
  • continue:

1.4 循环嵌套

  • 例子:二维数组 判断上三角矩阵
#include <stdio.h>  
int main()
{
    int n;
    int i;
    int j;
    int k;
    int matrix[10][10];
    int matnum[10];
    int flag[10] = { 0 };
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d\n", &matnum[i]);
        for (j = 0; j < matnum[i]; j++) 
        {
            for (k = 0; k < matnum[i]; k++) {
                scanf("%d ", &matrix[j][k]);
                if (j > k && matrix[j][k] != 0) {
                    flag[i]++;
                }
            }
        }
    }
    for (i = 0; i < n; i++) {
        if (flag[i]) {
            printf("NO\n");
        }
        else {
            printf("YES\n");
        }
    }
    return 0;
}
  • 嵌套循环嵌套的执行过程与单个循环的执行过程是一模一样的。多层循环的嵌套就是将单循环的语句中多个循环
  • 可以通过break、continue、goto来更好地执行语句

学习体会

  • 学到循环就感觉不少都是和曾经的奥数数学题一样,老是感觉逻辑思维能力太差,所以在上课时经常答不对互动而且跟不上进度。做作业和刷题时经常出错而导致速度太慢,有时理解不了题目,经常都要询问舍友zgd,之后才能解开迷惑。
  • 有好些pta上的题目测试点没给注解而不知道错哪,单步调试后能解决一些,但还是很多地方不会。希望助教能多讲解

1.各种数列求和问题

#include <stdio.h>
int main (){
	int n;
	double sum, k;
	
	sum = 0, flag = 1, k = 1;
	scanf("%d", &n);
	for(i = 1; i <= n; i++){   
		sum += flag * (i / k);
		flag = -flag;
		k += 2;
	}
	printf("%.3f", sum);	
	return 0;
}
  • 读题时要认真读题,读错的时候写的代码和正确的天壤之别很搞心态
  • 数据类型要看好输出、输入、计算时和保留小数
  • 标识符的应用

2.字符如何转数字

  • 字符如何转数字:
    -'0'

3.数字逆序问题

#include <stdio.h>
int main(){
    int i;
    int n;
    int t;
    int a[10];
    scanf("%d", &n);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    for (i = 0; i < n/2; i++)
    {
        t = a[i];
        a[i] = a[n-1-i];
        a[n-1-i] = t;
    }
    for (i = 0; i < n-1; i++)
        printf("%d ", a[i]);
    printf("%d\n", a[n-1]);
    return 0;
}

4.图形打印问题

#include<stdio.h>
int main()
{
	int i;
	int j;
	int m;
	for (i = 0; i <= 3; i++)
	{
		for (j = 0; j <= 4 - i; j++)
		{
			printf(" ");
		}
		for (m = 0; m <= 2 * i; m++)
		{
			printf("*");
		}
		printf("\n");
	}
	for (i = 0; i <= 2; i++)
	{
		for (j = 0; j <= i + 2; j++)
		{
			printf(" ");
		}
		for (m = 0; m <= 4 - 2 * i; m++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

5.四则运算

例子:简单计算器

#include <stdio.h>

int main() {
	int a, b, flag;
	char op;

	flag = 0;
	scanf("%d", &a);
	while ((op = getchar()) != '=') {
		if (op == '+') 
		{
			scanf("%d", &b);
			a = a + b;
		}
		else if (op == '-') 
		{
			scanf("%d", &b);
			a = a - b;
		}
		else if (op == '*') 
		{
			scanf("%d", &b);
			a = a * b;
		}
		else if (op == '/')
		{
			scanf("%d", &b);
			if (b == 0) 
			{
				flag = 1;
			}
			else
			{
				a = a / b;
			}	
		}
		else
		{
			flag = 1;
		}
	}
	if (flag)
	{
		printf("ERROR\n");
	}
	else
	{
		printf("%d", a);
	}

	return 0;
}

6.运算的优先级

7.前缀后缀

8.大小写转换

  • 可用ASCII码的加减来转换
  • 可用字符来转换

小写转换为大写:+'A'-'a'

小写转换为大写:+'a'-'A'

例子:英文字母替换加密(大小写转换+后移1位)

#include<stdio.h>
int main()
{
	char ch;
	while ((ch = getchar()) != '\n') {
		if (ch  >= 'a' && ch <= 'y')
		{
			ch -= 31;
			putchar(ch);
		}
		else if (ch >= 'A' && ch <= 'Y')
		{
			ch += 33;
			putchar(ch);
		}
		else if (ch == 'z')
		{
			ch = 'A';
			putchar(ch);
		}
		else if (ch == 'Z')
		{
			ch = 'a';
			putchar(ch);
		}
		else
		{
			putchar(ch);
		}
	}
	
	return 0;
}

3.PTA实验作业

3.1 数列求和问题

例子:特殊数列求和

3.1.1 流程图或伪代码介绍思路

#include<stdio.h>
int main() {
	定义变量

	读取变量("%d %d", 变量)
	for (int i = 1; i <= n; i++) 
	{
		计算变量
                改变变量
                累加
	}
	输出结果("s = %d", 变量);
	return 0;
}

3.1.2代码截图

3.1.3 PTA提交列表及说明

错误说明:一开始输出的结果没按输出样例

3.2 图形打印问题

3.2.1 数据处理

  • 每行输出的*是上一行+2或-2
  • 同时' '也对应减少或增加1

3.2.2 代码截图

3.2.3 PTA提交列表及说明

  • 空格的位数错了,在计算for循环的判断条件的地方算错了

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

例子:猜算式?2*7?=3848中的数字

3.3.1 单步调试截图

结果

调试了两次

  1. 第一次的时发现对k的值应该是<=9的
  2. 第二次发现用break无法跳出来层循环就改用了goto

3.3.3 PTA提交列表及说明

  • 由于在vs上错了几次又调试过几次就没啥问题
posted @ 2020-11-22 20:19  一笑惜命  阅读(297)  评论(0编辑  收藏  举报