这个作业属于哪个班级 | C语言--网络2011/2012 |
---|---|
这个作业的地址 | C博客作业02--循环结构 |
这个作业的目标 | 学习循环结构内容,包括for循环、while循环、循环嵌套 |
姓名 | 余智康 |
0. 展示PTA总分
1. 本章学习总结
1.1 for循环
- 语法:
for( /*表达式1*/int i = 0; /*表达式2*/ i <= 9; /*表达式3*/ i++;)
{
/*循环体*/sum += i;
}
- 备注:
- 一轮循环中表达式1只执行一次。
- 执行顺序: 表达式1 ——> 表达式2. ——> 循环体 ——> 表达式3 ——> 表达式2. ——> 循环体 ——> 表达式3 ——> 表达式2. ...//直到表达式2返回值为0时,结束循环。
- 适用于循环的次数确定的类型
1.2 while、do while循环
1.2.1 while循环
- 语法:
while(/*表达式1,循环执行的条件*/ i <= 9)
{
/*循环体*/ sum += i;
}
1.2.2 do - while循环
- 语法:
do
{
sum += i; /*循环体*/
}while(/*循环执行的条件*/);
- 备注: do - while循环无论条件是否满足都会执行一次,while和for循环当条件满足时才执行循环体。
1.3 跳出循环相关语句breakcontinue
1.3.1 break
for(int i = 1; i <= 9; i++)
{
if( i % 2 == 0)
{
break;
}
}
printf("i = %d",i);
- break: 结束本轮循环,不再执行该循环。如例题中输出 i = 2
1.3.2 continue
for(int i = 1; i <= 9; i++)
{
if( i % 2 == 0)
{
continue;
i = 666;
}
}
printf("i = %d",i);
- continue: 跳过循环中continue接下来的语句,开始下一次循环,并没有结束本轮的循环。如例题中输出 i = 10 而不是 i = 666
1.4 循环嵌套
- 例子
for(int i = 1 ; i <= 9 ; i++)
{
for(int j = 1 ; j <= 9; j++)
{
sum += j;
}
}
- 注意事项:
- 外循环执行一次,内循环执行一轮。
- 内循环要注意变量是否有重置。
- 外循环和内循环的循环变量要注意,避免循环变量相同导致循环混乱。
2. 编程技巧总结
图形打印
----------菱形打印(实心与空心)
- (以7行*的菱形为例)
- 外循环控制行数 :i
- 内循环控制空格数 :k
- 内循环控制“*”个数:j
- 找出k跟i的关系,j跟i的关系
- k = | 4 - i |
- j = 7-2*|4-i|
- (以7行上下字母对称的,首个字母为'A'菱形为例)
- 大致与7行*的菱形类似,但用字母代替了
- 判断字母的变化与i的关系
- ch = 64 + 4 -|4-i|
- (以7行*的空心菱形为例)
- 打*的时候做一个判断
- 即在第一个和最后一个的时候打出“*”,其它时候打出“ ”
- 即
if(j == 1 || j == 7 - 2 *fabs(4-i))
{
printf("*");
}
else
{
printf(" ");
}
----------沙漏的打印
- 以星号沙漏为例
- 确定行数和星号的关系,以及剩余的星号数量
- 判断内循环空格数(k)与行数(i)的关系
- 判断内循环星号个数(j)与行数(i)的关系
//行数与星号的判断
scanf("%d", &num);//输入了星号数目
num = num - 1; 减去最中间一行的一个星号
while(num >= 2 * ( line + 2) )
{
line += 2;
num = num - 2 * line ;
}
四则运算
- 生成随机数
number1 = rand();
number2 = rand();
- 生成随机运算符
type = rand() % 4 + 1;
switch(type)
{
case 1:
op = '+';
break;
case 2:
op = '-';
break;
case 3:
op = '*';
break;
case 4:
op = '/';
break;
}
- 生成算式
printf("%d %c %d = ?",number1,op,number2)
- 数字逆序
- 将数字的各个位数取出
- 将数字逆序到另一个变量中
int place[99];
int upsideDown = 0;
int number;
scanf("%d",&number);
for( int i = 0; number > 0; i++)
{
place[i] = number % 10;
number = number / 10;
upsideDown = upsideDown * 10 + place[i];
}
- 自增运算符:运算结果使变量的值增1,但表达式的返回值不同
* 前缀:++i “++i”的表达式返回为 i+1 的值
* 后缀:i++ “i++”的表达式返回的值为 i 的值 - 控制列数
printf("%md,%-md,%m.nf",a,b,c)
其中m为常量- %md 输出宽度为m列,数据实际位数小于m,则左端补空格
- %-md 输出宽度m列,数据实际位数小于m,则右端补空格
- %m.nf 输出宽度m列,包括小数点和符号位。小数保留n位
- 循环输入时,不知道输入数据的个数,可以在最后引入特殊数值结束循环,如引入负数等
- 数列求和
sum = 0;
for( int i = 0; i<=9; i++)
{
sum = sum + i;
}
3. PTA实验作业
3.1 数列求和问题
3.1.1 流程图或伪代码介绍思路
伪代码:
定义双精度浮点型变量x为输入的值,即为e的x次幂;
定义双精度浮点型变量sum为数列的和;
定义双精度浮点型变量number为数列的每一项的数值,用于累加,也用于判断是否不大于0.00001,循环是否进行;
定义整型的k为x的次幂,也为分式的分母;
定义函数为fact,用于求阶乘
··
while (number >= 0.00001)
计算单独一项number的值,需调用阶乘函数fact
累加number并将值赋给sum,k自增
end while
输出sum
··
定义函数fact
定义变量fact用来暂时存储阶乘的值
定义变量x,为被求阶乘的数
for(fact = 1; x > 0; x--)
累乘x,并将值赋给fact
end for
返回fact的值
··
3.1.2 代码截图
3.1.3 PTA提交列表及说明
3.2 图形打印问题
3.2.1 数据处理
- 循环外:
- 定义char 类型变量 ch,用于储存字符
- 定义char 类型变量 useless,用于储存输入时候间隔字符和高度的空格
- 定义int 类型变量 height,用于储存图形的高度
- 外循环:
- 定义int 类型变量 i,用于外循环计数
- 定义int 类型变量 blank,用于限制字符外面空格输出的数量
- 定义int 类型变量 limit,用于限制内循环两个字符之间的空格输出的数量
- 内循环:
- 定义int 类型变量 j,用于内循环图形字符的外部的空格计数
- 定义int 类型变量 intoBlank,用于内循环计数输出的两个字符之间的空格数
3.2.2 代码截图
3.2.3 PTA提交列表及说明
3.3 求n以内最大的k个素数以及它们的和
3.3.1 单步调试截图
3.3.1 printf调试截图
3.3.2 代码截图