zoukankan      html  css  js  c++  java
  • 我の第三篇博客

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

    0.展示PTA总分


    1.本章学习总结

    1.1 for循环语法

    1. for语法

    for (表达式1; 表达式2; 表达式3)
    {
    	循环语句;
    }
    //表达式1:最初要执行的表达式(只执行一次)
    //表达式2:每次循环需要判断的条件,如满足才进入循环
    //表达式3:每次循环结束后都要执行
    

    2. for案例

    ⭐ for案例:判断一个数是否为素数
    素数指在大于1的自然数中,除了1和此数自身外,无法被其他自然数整除的数。

    #include<stdio.h>
    int main()
    {
    	int i, num;
    	int flag = 1;
    
    	printf("请输入一个整数:");
    	scanf("%d", &num);
    
    	for (i = 2; i < num / 2; i++)
    	{
    		if (num % i == 0)    //如果2到num/2所有整数都不被num整除,那么num为素数。
    		{
    			flag = 0;
    		}
    	}
    	if (flag == 1)
    	{
    		printf("%d是一个素数", num);
    	}
    	else
    	{
    		printf("%d不是一个素数", num);
    	}
    	return 0;
    }
    

    1.2 while、do while循环语法

    1. 语法

    ⭐ while语法
    当满足条件后,执行下面的循环语句,然后再判断条件,如果满足,则继续循环,如不满足,则跳出循环。

    while (条件)  //入口条件循环,先判断后执行
    	{
    		循环语句;
    	}
    

    ⭐ do while语法
    执行循环语句后,如果条件满足,则继续循环,如果条件不满足,则跳出循环

    do     //出口条件循环,先执行后判断
    {         //因此语句  最少执行一次
    	循环语句;
    } while (条件);
    

    2. 案例

    ⭐ do while案例:验证用户密码是否正确
    先做 输入用户密码这个动作 ,然后再判断用户输入的密码和真正的密码是否一样
    如果一样 那么就出循环 , 如果不一样 就再输一遍。

    #include<stdio.h>
    int main()
    {
    	int password = 123456789;     //密码
    	int UserPassWord;         //用户输入的密码
    
    	do
    	{
    		scanf("%d", &UserPassWord);//输入
    	} while (password != UserPassWord);//判断密码是否一致
    	printf("密码正确");
    	return 0;
    }
    

    ⭐ while案例:计算1+2+3+....+100(累加)

    #include<stdio.h>
    int main()
    {
    	int i = 1;
    	int sum = 0;
    	while (i <= 100)  //入口条件循环
    	{
    		sum = sum + i;//加上每一项的值
    		i++;
    	}
    	printf("%d", sum);//打印
    	return 0;
    }
    

    1.3 跳出循环相关语句breakcontinue

    1. 作用

    ⭐ break作用:用于跳出switch或者跳出循环
    ⭐ continue作用:可以跳过此次循环接下来的语句

    2. 案例

    ⭐ break案例:判断100000000是否为素数
    ⭐ break可以减少循环次数,节约资源!

    #include<stdio.h>
    int main()
    {
    	int i, num;
    	int flag = 1;
    
    	for (i = 2; i < 100000000; i++)     //i从2一直循环到100000000
    	{
    		if (100000000 % i == 0)      //   一亿能整除i时,则进入if语句
    		{
    			flag = 0;      //flag赋值0,代表一亿不是素数
    			break;       //跳出循环
    		}
    	}
    	if (flag == 1)
    	{
    		printf("一亿是一个素数");
    	}
    	else
    	{
    		printf("一亿不是一个素数");
    	}
    	return 0;
    }
    

    ⭐ continue案例:去除字符串中的C字符

    #include<stdio.h>
    int main()
    {
    	int ch;
    
    	while ((ch = getchar()) != '
    ')   //注意括号,是要先赋值ch后再判断是否为回车
    	{
    		if (ch == 'C')//用户输入的‘C’都当作看不见
    		{
    			continue;//跳出此次循环  也就是跳过输出‘C’
    		}
    
    		putchar(ch);   //输出不为‘C’的字符
    	}
    	putchar('
    ');
    	return 0;
    }
    

    1.4 循环嵌套

    1. 语法

    ⭐比较灵活,可以随意套娃

    2. 案例:打印99乘法表(循环嵌套类型)

    ⭐外层循环 “ i ” 控制,内层循环 “ j ” 控制

    #include<stdio.h>
    int main()
    {
    	int i, j;
    
    	for (i = 1; i < 10; i++)   //外层循环  i从1到9
    	{
    		int count = 0;
    		for (j = 1; j < i + 1; j++)    //内层循环  j从1到9
    		{
    			printf("%d*%d=%-3d", i, j, i * j);  //-2d  是两个精度的左对齐
    			count++;
    		}
    		printf("
    ");     //一行结束后需要换行
    	}
    	return 0;
    }
    

    学习体会

    ⭐ 总是把事情拖到最后来做,我觉得挺不好的(我错了,!下次还敢)
    ⭐ 当然社团也占用了不少时间,非要搞啥PPT演讲,我们那小组线下都商讨了4,5次
    ⭐ 能在知识的海洋中遨游~真不错

    2. 编程技巧总结

    技巧1. 逗号运算符(简洁)

    ⭐ 语法:表达式1,表达式2,.........表达式n

      i = 1;
      j = 2;                           
      k = 3;
      //从三行代码变成一行代码
      i = 1, j = 2, k = 3;
    

    技巧2. flag只有0和±1两个值,可以作为单一出口来判断

    if (flag == 1)
    {
    	printf("%d是一个素数", num);
    }
    else
    {
    	printf("%d不是一个素数", num);
    }
    

    技巧3. break跳出嵌套循环

    ⭐跳两次

    #include<stdio.h>
    int main()
    {
    	int i, j;
    
    	for (i = 0; i < 10; i++)
    	{
    		for (j = 0; j < 10; j++)
    		{
    			if (j == 3)
    			{
    				break;//我跳
    			}
    		}
    		if (j == 3)
    		{
    			break;  //我再跳
    		}
    	}
    	printf("i = %d , j = %d", i, j);
    	return 0;
    }
    

    技巧4. 求和问题1-1/3+1/5-1/7

    #include<stdio.h>
    int main()
    {
    	int n;
    	int num1;
    	double num2 = 1.0;
    	double amount = 0;
    	int num3 = 1;
    	double flag = 1.0;
    	scanf("%d", &n);
    
    	for (num1 = 1; num1 <= n; num1++)  //num1用来计数
    	{
    		num2 = flag / (2 * num3 - 1);//num2代表数列的每一项
    		num3++;          //num3代表分母  每一项分母加2
    		amount = amount + num2; //amount是总和
    		flag = -flag;    //flag用于 正负一的交换
    	}
    	printf("%f", amount);
    	return 0;
    }
    

    技巧5. 字符转成数字

    #include<stdio.h>
    int main()
    {
    	char ch = 'a';//用%d 即可转数字
    	printf("%d", ch);  //a的ASCII码是97
    	return 0;
    }
    

    技巧6. 数字逆序问题

    ⭐按位取余,把取出来的值进行循环保存

    #include<stdio.h>
    int main()
    {
    	int i; 
    	int temp = 0;//temp作为存储的值 
    
    	scanf("%d", &i);
    	while (i != 0)     
    	{
    		temp = temp * 10 + i % 10;//取余后得到个位, 之后再将这个数字一直乘10,变成最高位
    		i /= 10;                //去除个位
    	}
    	printf("%d", temp); //打印
    	return 0;
    }
    

    技巧7. 四则运算

    ⭐输入两个数,实现它的加减乘除

    #include<stdio.h>
    int main()
    {
    	int num1, num2;
    	scanf("%d %d", &num1, &num2);
    	printf("%d + %d = %d
    ", num1, num2, num1 + num2);
    	printf("%d - %d = %d
    ", num1, num2, num1 - num2);
    	printf("%d * %d = %d
    ", num1, num2, num1 * num2);
    	printf("%d / %d = %d
    ", num1, num2, num1 / num2);
    	return 0;
    }
    

    3.PTA实验作业

    3.1 数列求和问题

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

    ⭐ 从1-2/3+3/5-4/7可以得出这是一个数列,显然要用循环语句
    ⭐ 从前N项之和可得,循环次数固定,为N次,因此用for循环
    ⭐ 从2/3到3/5到4/7可得,分子和分母均为单调增数列,需要用变量来表示它,分子为i,分母为(2*i-1)
    ⭐ 而一正一负,可以用flag来实现正负转换
    ⭐ 需要一个变量来保存每一项的值,当然也可以不用,不过写在一团会很不美观
    ⭐ sum用于累加求和

    3.1.2 代码截图

    3.1.3 PTA提交列表及说明


    刚开始做的时候,思路不明确,分母没有乘i,以为是之前的1-1/3+1/5
    是我大e了,没有闪,希望之后不会再犯这样的“聪明”了,“小聪明”啊!!

    3.2 图形打印问题

    3.2.1 数据处理

    ⭐外循环控制行数: i=1 2 3 4
    ⭐内循环控制空格数: k=3 2 1 0
    ⭐内循环控制“”个数:j=1 3 5 7
    ⭐k和i的关系 k=4-i
    ⭐j和i的关系 j=2
    i-1

    3.2.2 代码截图

    3.2.3 PTA提交列表及说明


    ⭐没注意到题目说“第一行前面有五个空格”,需要控制第一行打印五个空格,
    因此要把(4-i)改成(6-i)

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

    ⭐题目:实现数字倒序
    ⭐用printf观察每一次循环"temp"和"i"的值

    3.3.1 单步调试截图

    ⭐设置断点,添加监视

    ⭐可以观测"temp"和"i"的值

    ⭐运行结果

    3.3.2 代码截图

    3.3.3 PTA提交列表及说明

    ⭐在PTA里面没找到这题,这题我既然能想到,肯定是之前遇到过,现在找不到也就算了罢。

  • 相关阅读:
    python基础-包
    python基础-模块
    python基础-面向过程与函数式
    python基础-二分法
    python基础-函数递归
    python基础-生成器
    QFNU-ACM 2020.11.6 Trating
    ACM 实验室2020.11.01天梯赛练习*4
    QFNU-ACM 2020.10.30 Trating
    QFNU-ACM 2020.10.23 Trating
  • 原文地址:https://www.cnblogs.com/qq690775749/p/14018297.html
Copyright © 2011-2022 走看看