我の第三篇博客

| 这个作业属于哪个班级 | 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 跳出循环相关语句break\continue

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()) != '\n')   //注意括号,是要先赋值ch后再判断是否为回车
	{
		if (ch == 'C')//用户输入的‘C’都当作看不见
		{
			continue;//跳出此次循环  也就是跳过输出‘C’
		}

		putchar(ch);   //输出不为‘C’的字符
	}
	putchar('\n');
	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("\n");     //一行结束后需要换行
	}
	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\n", num1, num2, num1 + num2);
	printf("%d - %d = %d\n", num1, num2, num1 - num2);
	printf("%d * %d = %d\n", num1, num2, num1 * num2);
	printf("%d / %d = %d\n", 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里面没找到这题,这题我既然能想到,肯定是之前遇到过,现在找不到也就算了罢。

posted @ 2020-11-22 19:26  强扭的甜瓜  阅读(106)  评论(0编辑  收藏  举报