这个作业属于哪个班级 | 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=2i-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里面没找到这题,这题我既然能想到,肯定是之前遇到过,现在找不到也就算了罢。