zoukankan      html  css  js  c++  java
  • 第三次作业

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

    0.展示PTA总分


    1.本章学习总结

    1.1 for循环语法

    • 格式:
    for(表达式1;表达式2;表达式3)
    {
         循环体语句
    }
    
    • 表达式1只执行一次
    • 表达式1:初值表达式 表达式2:条件表达式 表达式3:步长表达式
    • 先计算表达式1,再判断表达式2,若为真则计算表达式3并执行循环体语句,后继续进行表达式2的判断。
    • 适用于有指定次数的循环
    • 例题:
      计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和
      代码展示:
    #include <stdio.h>
    int main()
    {
    	int i;//判断变量
    	int n;//循环次数
    	int flag;//改变运算符号引入的中间变量
    	double sum;//总值
    	scanf("%d", &n);
    	flag = 1;
    	sum = 0;
    	for (i = 1; i <= n; i++)
    	{
    		sum = sum + flag*i * 1.0 / (2 * i - 1);//1.0不可省略
    		flag = -flag;
    	}
    	printf("%.3f", sum);
    	return 0;
    }
    

    1.2 while、do while循环语法

    while格式:

    while(表达式)
    {
       循环体语句
    }
    
    • 只有一个判断表达式,可为任意合法表达式
    • 适用于未知循环次数

    do while格式:

    do{
      循环体语句
    }
    
    • 其会先进行一次循环体语句后再进行判断,后执行方式与while语句一样。
    • 两者都需要另加进行初始化部分,并且循环体语句中必须包含能改变循环体条件真假性的操作。
    • 例题:
      给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。
      代码展示:
    #include <stdio.h>
    #include <math.h>
    int main()
    {
    	int a;//输出的数字
    	int n;
    	int i;//判断变量
    	int sum1;//单个数值
    	int sum2;//总值
    	sum1 = 0;
    	sum2 = 0;
    	i = 1;//要在外部先进行初始化
    	scanf("%d %d", &a, &n);
    	while (i <= n)
    	{
    		sum1 = sum1 + a * pow(10,i-1);
    		sum2 = sum1 + sum2;
    		i++;//改变i进行判断
    	}
    	printf("s = %d", sum2);
    	return 0;
    }
    

    目前所写的题目一般都会偏向于使用for和while语句,do while语句在题目的适用较少,do while和while语句是可以进行互换的,选择哪种取决于自己。

    1.3 跳出循环相关语句breakcontinue

    • break语句用于循环语句中,可结束循环。
    • continue语句用于循环语句中,只跳过语句,但是继续循环。
    • break还可还可用于switch语句中,continue只能用于循环。
    • break例子:

    代码1:

    #include <stdio.h>
    int main()
    {
    	int number ;
    	int flag = 1;//初始化flag
    	for (number = 1; number <= 5; number++)
    	{
    		flag++;//此处与下面代码的区别缺失break;
    		flag++;
    	}
    	printf("%d", flag);
    	return 0;
    }
    

    代码2:

    #include <stdio.h>
    int main()
    {
    	int number ;
    	int flag = 1;//初始化flag
    	for (number = 1; number <= 5; number++)
    	{
    		flag++;
    		break;
    		flag++;
    	}
    	printf("%d", flag);
    	return 0;
    }
    

    代码1输出数为11,代码2输出数为2。
    代码2的break直接跳过了其后面的所有表达式,并结束循环。

    • continue例子:
      代码:
    #include <stdio.h>
    int main()
    {
    	int number;
    	int flag = 1;//初始化flag
    	for (number = 1; number <= 5; number++)
    	{
    		flag++;
    		if (number == 5)
    		{
    			continue;//区别于上面代码的break
    		}
    		flag++;
    	}
    	printf("%d", flag);
    	return 0;
    }
    

    与break例子中代码1对比,代码1输出结果为11,代码2输出结果为10,其跳过了后面的flag++,跳出外面继续进行循环。

    1.4 循环嵌套

    • 格式:
    for(表达式1;表达式2;表达式3)
    {
       for(表达式1;表达式2;表达式3)
       {
             循环语句
       }
             循环语句
    }
    //也可替换为do while 和while类型
    
    • 大循环嵌套小循环
    • 可实现复杂循环类型
    • 例题:
      计算1!+2!+...+n!
      代码:
    #include <stdio.h>
    int main()
    {
      int i,j;//两循环变量
      double item,sum;//中间变量  总值
      sum=0;
      for(i=1;i<=100;i++)
      {
        item=1;//不可缺少,保证每次阶乘从1开始
        for(j=1;j<=i;j++)
        item=item*j;
        sum=sum+item;
      }
      printf("%d",sum);
      return 0;
    }
    

    学习体会

    写了pta里面单循环和循环嵌套题目,总结了一些方法,首先是要理清循环的思路,从哪里开始,并且是要怎么循环,循环里面是否会有还需要一层或者多层循环,理清思路后,开始构思代码,用哪只循环语句写更快,以及中间循环变量是如何改变,是否需要用一些判断语句来限制特殊特殊情况,如果是循环嵌套还要考虑里面一些特殊的量变化,之后就是码代码的问题,过程可能需要自己调试测数据来找到错误。

    2.编程技巧总结

    1. 字符如何转数字
    例:

    #include <stdio.h>
    int main()
    {
    	char c1;//字符数据1
    	char c2;//字符数据2
    	scanf("%c %c", &c1, &c2);
    	printf("%d %d %d", c1,c2,c1-c2);
    	return 0;
    }
    
    • 'c1'-'c2'=这种格式输出的数也为数字,例如'9'-'8'=1。

    2. 小写字母换大写字母
    例:

    #include <stdio.h>
    int main()
    {
    	char ch;
    	scanf("%c", &ch);//输入小写字母
    	ch = ch - 'a' + 'A';
    	printf("%c", ch);
    	return 0;
    }
    
    • ch=ch-'a'+'A'的作用即为将小写字母变为大写字母。

    3. 各种数列求和问题

    • 求交错序列前N项和
      例题:
      计算序列 1+2/3+3/5+4/7+5/9+6/11+... 的前N项之和
    #include <stdio.h>
    int main()
    {
    	int i;//循环变量
    	int n;//到第几个数
    	double sum;//总值
    	scanf("%d", &n);
    	flag = 1;
    	sum = 0;
    	for (i = 1; i <= n; i++)
    	{
    		sum = sum + flag*i * 1.0 / (2 * i - 1);
    	}
    	printf("%.3f", sum);
    	return 0;
    }
    
    • 计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和
    #include <stdio.h>
    int main()
    {
    	int i;//循环变量
    	int n;//到第几个数
    	int flag;//实现交错
    	double sum;//总值
    	scanf("%d", &n);
    	flag = 1;
    	sum = 0;
    	for (i = 1; i <= n; i++)
    	{
    		sum = sum + flag*i * 1.0 / (2 * i - 1);
    		flag = -flag;//实现交错
    	}
    	printf("%.3f", sum);
    	return 0;
    }
    

    计算序列和看是否需要需要交错序列,若为交错序列则需要实现交错,需要引入一个变量来实现交错替换。

    • 计算阶乘之和
      例题:
      计算1!+2!+...100!
    #include <stdio.h>
    int main()
    {
       int i,j;
       double item,sum;
       sum=0;//总值
       for(i=1;i<=100;i++)
       {
          item=1;//保证每次阶乘都是1开始连乘
          for(j=1;j<=i;j++)
          {
            item=item*j;//实现阶乘
            sum=sum+item;
          }
    }
    printf("%d",sum);
    return 0;
    }
    

    4. 图形打印问题
    例:

    行(i) 空格(k) 星号(z)
    1 3 1
    2 2 3
    3 1 5
    4 0 7
    5 1 5
    6 2 3
    7 3 1

    上半部分行数到第4行,需要分别找到行i与空格k以及星号z的关系,下半部分同样。后用for循环解题。

    #include <stdio.h>
    int main()
    {
    	int i;//行数
    	int k;//空格数
    	int z;//星号数
    	//上半部分输出部分
    	for (i = 1; i <= 4; i++)
    	{
    		for (k = 1; k <= 4 - i; k++)//k=4-i为上部分k与i关系
    		{
    			printf(" ");
    		}
    		for (z = 1; z <= 2 * i - 1; z++)//z=2*i-1为上部分z与i关系
    		{
    			printf("*");
    		}
    		printf("
    ");//换行要求
    	}
    	//下半部分输出部分
    	for (i = 5; i <= 8; i++)
    	{
    		for (k = 1; k <= i - 4; k++)//k=i-4为下部分k与i关系
    		{
    			printf(" ");
    		}
    		for (z = 1; z <= 15 - 2 * i; z++)//z=15-2*i为下部分z与i关系
    		{
    			printf("*");
    		}
    		printf("
    ");//换行要求
    	}
    	return 0;
    }
    

    5. 输出逆序数
    代码:

    #include <stdio.h>
    int main()
    {
    	int n;//输入的数
    	int m;
    	scanf("%d", &n);
    	m = 0;
    	while (n > 0)
    	{
    		m = m * 10 + n %10;//取一位逐渐递进
    		n = n / 10;//除去以取的一位数
    	}
    	printf("%d", m);
    	return 0;
    }
    

    3.PTA实验作业

    3.1 数列求和问题

    题目:给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和

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

    伪代码:
    scanf("%d %d",&a,&n)//输入a和n的值
    i=1
    while(i<=n)
    {  
       sum1=sum1+a*pow(10,i-1)//单个数的值
       sum2=sum2+sum1;//总值
       i++  
    }
    end while
    

    3.1.2 代码截图

    3.1.3 PTA提交列表及说明

    3.2 图形打印问题

    3.2.1 数据处理

    • 数据表达:int number(行数) char ch(输入的第一个字母) int j(输出前面空格) int k(输出后面空格) int m(中间行数)
    • 数据处理:
      上半部分先用i的for循环,其中嵌套j的循环,输出前面空格。
      后用if的判断语句是否为第一行,若是则只输出一个字母并换行。
      之后再用k的循环来输出后面的空格并输出字母。
      在循环结束时对ch进行变化。
      下半部分重复类似上面的操作。

    3.2.2 代码截图

    3.2.3 PTA提交列表及说明

    3.3龟兔赛跑

    3.3.1 单步调试截图

    3.3.2 代码截图

    3.3.3 PTA提交列表及说明

  • 相关阅读:
    [NOIP提高&洛谷P1024]一元三次方程求解 题解(二分答案)
    浅谈二分答案的原理和相关应用
    Python 30分钟入门指南
    LG P1721 [NOI2016]国王饮水记
    LG P5238 整数校验器
    亡灵序曲
    线性代数三部曲(三)&#183;矩阵
    线性代数三部曲(二)·Gauss消元
    关于$color{darkblue}{Anverking}$的介绍
    线性代数三部曲(一)&#183;行列式
  • 原文地址:https://www.cnblogs.com/960223447a/p/13996912.html
Copyright © 2011-2022 走看看