zoukankan      html  css  js  c++  java
  • 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跳出循环相关语句breakcontinue

    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
    ", &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
    ");
            }
            else {
                printf("YES
    ");
            }
        }
        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
    ", 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("
    ");
    	}
    	for (i = 0; i <= 2; i++)
    	{
    		for (j = 0; j <= i + 2; j++)
    		{
    			printf(" ");
    		}
    		for (m = 0; m <= 4 - 2 * i; m++)
    		{
    			printf("*");
    		}
    		printf("
    ");
    	}
    	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
    ");
    	}
    	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()) != '
    ') {
    		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上错了几次又调试过几次就没啥问题
  • 相关阅读:
    vector向量容器的一些基本操作
    OpenCV鼠标画图例程,鼠标绘制矩形
    网络安全学习笔记--《暗战强人:黑客攻防入门全程图解》
    遗传算法解决TSP问题实现以及与最小生成树的对比
    基于opencv的手写数字字符识别
    最小生成树
    opencv基本图像操作
    使用vs2010 opencv2.4.4编译release版本程序
    【machine translate】deep learning seq2seq
    【DL】物体识别与定位
  • 原文地址:https://www.cnblogs.com/lz02/p/14021108.html
Copyright © 2011-2022 走看看