zoukankan      html  css  js  c++  java
  • C语言博客作业02--循环结构

    0.展示PTA总分

    1 .单循环结构

    2 .嵌套循环

    1.本章学习总结

    1.1 学习内容总结

    for循环

    	for (i = 1; i <= N; i++)
            {
              ......
            }
    

    由初值表达式、条件表达式、步长表达式、循环体语句组成。

    while循环

    while (x!=0)
    		{
    			if (x > 0) {
    				i=i+1;
    			}
    			if(x<0)
    			{
    				j=j+1;
    			}
    			scanf("%d", &x);
    		}
    

    由循环条件、循环体语句组成。循环体语句内要有改变条件的机会。

    do-while循环

    do
    {
    <循环体语句>
    }
    while(<循环条件>);
    

    while与do-while的区别:while先判断后循环,do-while先循环后判断

    break与continue

    break结束所在的循环,continue跳过下面的循环语句,重新循环,即结束一次循环,进入下一次循环,而不是退出循环。

    循环嵌套

    顾名思义,即一个循环语句内使用另一个循环语句。需要注意变量的改变,避免内外循环对变量两次赋值,导致死循环。

    for (i = 1; i <= N; i++)
    	{
    		for (j = 1; j <= i; j++)
    		{
    			printf("%d*%d=%-4d", j, i, j * i);
    			if (j == i)
    			{
    				printf("
    ");
    			}
    		}
    	}
    

    1.2 本章学习体会

    随着知识的深入和拓展,C语言开始展现它的难度了,诸如循环嵌套、函数和数据类型都需要自己有着深刻的理解。同时这些新知识教给我解决问题的新方法,让我的代码更简洁,更实用。还有遇到难题时,问同学或者百度是个解决问题的捷径,但是这条捷径会让自己的思考能力减弱,丧失解决问题的勇气,所以说遇见难题,还是要靠自己去解决,这样才能真正进步。

    代码量统计:802行(每个程序减去两行大括号)

    2. PTA实验作业

    2.1 c04--嵌套循环 7-6 水仙花数

    2.1.1 伪代码

    #include<stdio.h>  
    #include<math.h>
    int main()
    {
    定义变量N,n(限定循环范围),s(计算各个数的n次方之和)。i,j,k,I,J(循环用变量)
    输入N;
    计算n,i;
    for (i; i < n; i++)
    	{
    		s = 0;
    		I = i;
    		while (I > 0)
    		{
    			计算s
    		}
    		if (s == i)//判断是否为水仙花数
    		{
    			printf("%d
    ", i);
    		}
    	}
    	
    	return 0;
    }
    

    2.1.2 代码截图

    2.1.3 造测试数据

    输入数据 输出数据 说明
    7 1741725、4210818、9800817、9926315 最大N

    2.1.4 PTA提交列表及说明

    部分正确:运行超时
    原因及解决方法:在计算s是使用了pow函数,导致运行超时,将pow函数改为for循环。

    2.2 c04--嵌套循环 7-8 查询水果价格

    2.2.1 伪代码

    #include<stdio.h>  
    #include<math.h>
    int main()
    {
       定义变量n(用户选择),i(循环次数)
    printf("[1] apple
    [2] pear
    [3] orange
    [4] grape
    [0] exit
    ");
    
    	for (i = 1; i <= 5; i++)
    	{
                    输入选择
    		if (n == 0)
    		{
    			break;
    		}
    		switch (n)
    		{
    		case 1:printf("price = 3.00
    "); break;
    		case 2:printf("price = 2.50
    "); break;
    		case 3:printf("price = 4.10
    "); break;
    		case 4:printf("price = 10.20
    "); break;
    		default:printf("price = 0.00
    ");
    		}
    	}
    	return 0;
    }
    

    2.2.2 代码截图

    2.2.3 造测试数据

    输入数据 输出数据 说明
    6 price = 0.00 n不在0~4之间

    2.2.4 PTA提交列表及说明

    部分正确:输入大于4的数无输出
    原因及解决方法:未考虑n>4的情况。在switch内添加一个default来处理n>4的情况。

    2.3 c04--嵌套循环 7-9 单词长度

    2.3.1 伪代码

    #include <stdio.h>
    #include <math.h>
    
    int isPrice(int i);
    int main()
    {
    	char c;
    	int s = 0;
    	int flag = 1;//判断是否为第一次输出
    
    	while (1)
    	{
    		c = getchar();
    		if (c == ' ' && s != 0 && flag == 1)
    		{
    			printf("%d", s);
    			s = 0;
    			flag = 0;
    			continue;
    		}
    		if (c == ' ' && s != 0)
    		{
    			printf(" %d", s);
    			s = 0;
    			continue;
    		}
    		if (c == ' ')
    		{
    			continue;
    		}
    		if (c == '.' && s == 0)
    		{
    			break;
    		}
    		if (c == '.' && s != 0&&flag==1)
    		{
    			printf("%d", s);
    			flag = 0;
    			break;
    		}
    		if (c == '.' && s != 0)
    		{
    			printf(" %d", s);
    			break;
    		}
    		s++;
    	}
    
    	return 0;
    }
    

    2.3.2 代码截图

    2.3.3 造测试数据

    输入数据 输出数据 说明
    ABC. 3 一个单词
    ABC . 3 多处空格

    2.3.4 PTA提交列表及说明

    部分正确:一个单词多输出一个空格。
    原因及解决方法:当只有一个单词时,遇到'.'会执行

    if (c == '.' && s != 0)
    		{
    			printf(" %d", s);
    			break;
    		}
    

    所以输出错误。
    利用flag将第一次输出另外执行,即

    if (c == '.' && s != 0&&flag==1)
    		{
    			printf("%d", s);
    			flag = 0;
    			break;
    

    3. 代码互评

    题目:c04--嵌套循环 求n以内最大的k个素数以及它们的和

    同学代码

    自己代码

    1.对于中间加号的输出,我的代码是让加号与数据一起输出,而这份代码选择加号与数据分开输出。
    2.对于素数的判断,两份代码都以n的平方根为循环临界。我的代码多写了对i不是素数的情况的处理,这有点多余。
    3.这份代码总的来说比较简洁。

    题目:c04--嵌套循环 求n以内最大的k个素数以及它们的和

    同学代码

    自己代码

    #include <stdio.h>
    #include <math.h>
    
    int isPrice(int i);
    int leapYear(int x);
    int date(int x, int y, int z);
    int date(int x, int y, int z);
    int main()
    {
    	int x, y, z,t,s=0;
    	char c1, c2;
    	scanf("%d%c%d%c%d", &x, &c1, &y, &c2, &z);
    	
    	if (date(x, y, z))
    		s++;
    	if (date(x, z, y))
    		s++;
    	if (date(y, x, z))
    		s++;
    	if (date(y, z, x))
    		s++;
    	if (date(z, x, y))
    		s++;
    	if (date(z, y, x))
    		s++;
    	if (s == 0)
    	{
    		printf("Invalid Date!");
    	}
    	else printf("%d", s);
    
    	return 0;
    }
    
    int leapYear(int x)
    {
    	if ((x % 4 == 0 && x % 100 != 0) || x % 400 == 0)
    	{
    		return 1;//闰年返回1
    	}
    	else
    	{
    		return 0;
    	}
    }
    
    
    int date(int x, int y, int z)
    {
    	int year;
    	int month;
    	int day;
    	year = x;
    	month = y;
    	day = z;
    	
    		if (month > 12)
    			return 0;
    		if (day > 31)
    			return 0;
    		if (month <= 12)
    		{
    			switch (month)
    			{
    			case 1:
    				if (day <= 31)
    					return 1;
    				else return 0;
    			case 2:
    				if (leapYear(year))
    				{
    					if (day > 29)
    						return 0;
    					else return 1;
    				}
    				else
    				{
    					if (day > 28)
    						return 0;
    					else return 1;
    				}
    			case 3:
    				if (day <= 31)
    					return 1;
    				else return 0;
    			case 5:
    				if (day <= 31)
    					return 1;			
    				else return 0;
    			case 7:
    				if (day <= 31)
    					return 1;
    				else return 0;
    			case 8:
    				if (day <= 31)
    					return 1;
    				else return 0;
    			case 10:
    				if (day <= 31)
    					return 1;
    				else return 0;
    			case 12:
    				if (day <= 31)
    					return 1;
    			default:
    				if (day <= 30)
    					return 1;
    				else return 0;
    			}
    		}
    	
    }
    

    1.这份代码使用了数组,大大减少了代码量,不需要像我一样使用switch语句。

  • 相关阅读:
    elk 分布式数据同步
    mget 同时获取
    Jzoj1460 无题noname
    Jzoj1460 无题noname
    Jzoj1322硬币
    Jzoj1322硬币
    Jzoj1321 灯
    Jzoj1321 灯
    Jzoj1310 生日礼物
    Jzoj1310 生日礼物
  • 原文地址:https://www.cnblogs.com/chenlr/p/11707662.html
Copyright © 2011-2022 走看看