这个作业属于哪个班级 | C语言--网络2011/2012 |
---|---|
这个作业的地址 | C博客作业00--循环结构 |
这个作业的目标 | 学习循环结构内容,包括for循环、while循环、循环嵌套 |
姓名 | 梁桢 |
目录
0.展示PTA总分
-
单循环
-
嵌套循环
1.本章学习总结
1.1 for循环语法
for(第一次循环进行前进行的语句1;判断是否进循环的条件2;每次循环结束进行的语句3)
{
循环语句;
}
- 三个式子用";"隔开,而不是用","。
- 不填判断是否进循环的条件的for循环是死循环。
- for循环比while循环更简洁。
1.2while循环
while (判断条件)
{
循环语句;
}
do-while循环
do
{
循环语句;
}
while (判断条件);
- while循环先判断再进行循环,也就是可能不进行循环;而do-while循环先进行后判断,也就是一定能进入一次循环。
- do-while的while有;
1.3跳出循环相关语句breakcontinue
- break用于立即退出本层循环;continue结束本次循环并从头再来(本次循环体内不执行continue语句后的其它语句)
- 如果有多层循环时,break只会跳出本层循环,不会跳出其他层的循环
- break:
- continue:
1.4 循环嵌套
- 例子:二维数组 判断上三角矩阵
#include <stdio.h>
int main()
{
int n;
int i;
int j;
int k;
int matrix[10][10];
int matnum[10];
int flag[10] = { 0 };
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d
", &matnum[i]);
for (j = 0; j < matnum[i]; j++)
{
for (k = 0; k < matnum[i]; k++) {
scanf("%d ", &matrix[j][k]);
if (j > k && matrix[j][k] != 0) {
flag[i]++;
}
}
}
}
for (i = 0; i < n; i++) {
if (flag[i]) {
printf("NO
");
}
else {
printf("YES
");
}
}
return 0;
}
- 嵌套循环嵌套的执行过程与单个循环的执行过程是一模一样的。多层循环的嵌套就是将单循环的语句中多个循环
- 可以通过break、continue、goto来更好地执行语句
学习体会
- 学到循环就感觉不少都是和曾经的奥数数学题一样,老是感觉逻辑思维能力太差,所以在上课时经常答不对互动而且跟不上进度。做作业和刷题时经常出错而导致速度太慢,有时理解不了题目,经常都要询问舍友zgd,之后才能解开迷惑。
- 有好些pta上的题目测试点没给注解而不知道错哪,单步调试后能解决一些,但还是很多地方不会。希望助教能多讲解
1.各种数列求和问题
#include <stdio.h>
int main (){
int n;
double sum, k;
sum = 0, flag = 1, k = 1;
scanf("%d", &n);
for(i = 1; i <= n; i++){
sum += flag * (i / k);
flag = -flag;
k += 2;
}
printf("%.3f", sum);
return 0;
}
- 读题时要认真读题,读错的时候写的代码和正确的天壤之别很搞心态
- 数据类型要看好输出、输入、计算时和保留小数
- 标识符的应用
2.字符如何转数字
- 字符如何转数字:
-'0'
3.数字逆序问题
#include <stdio.h>
int main(){
int i;
int n;
int t;
int a[10];
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
for (i = 0; i < n/2; i++)
{
t = a[i];
a[i] = a[n-1-i];
a[n-1-i] = t;
}
for (i = 0; i < n-1; i++)
printf("%d ", a[i]);
printf("%d
", a[n-1]);
return 0;
}
4.图形打印问题
#include<stdio.h>
int main()
{
int i;
int j;
int m;
for (i = 0; i <= 3; i++)
{
for (j = 0; j <= 4 - i; j++)
{
printf(" ");
}
for (m = 0; m <= 2 * i; m++)
{
printf("*");
}
printf("
");
}
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= i + 2; j++)
{
printf(" ");
}
for (m = 0; m <= 4 - 2 * i; m++)
{
printf("*");
}
printf("
");
}
return 0;
}
5.四则运算
例子:简单计算器
#include <stdio.h>
int main() {
int a, b, flag;
char op;
flag = 0;
scanf("%d", &a);
while ((op = getchar()) != '=') {
if (op == '+')
{
scanf("%d", &b);
a = a + b;
}
else if (op == '-')
{
scanf("%d", &b);
a = a - b;
}
else if (op == '*')
{
scanf("%d", &b);
a = a * b;
}
else if (op == '/')
{
scanf("%d", &b);
if (b == 0)
{
flag = 1;
}
else
{
a = a / b;
}
}
else
{
flag = 1;
}
}
if (flag)
{
printf("ERROR
");
}
else
{
printf("%d", a);
}
return 0;
}
6.运算的优先级
7.前缀后缀
8.大小写转换
- 可用ASCII码的加减来转换
- 可用字符来转换
小写转换为大写:+'A'-'a'
小写转换为大写:+'a'-'A'
例子:英文字母替换加密(大小写转换+后移1位)
#include<stdio.h>
int main()
{
char ch;
while ((ch = getchar()) != '
') {
if (ch >= 'a' && ch <= 'y')
{
ch -= 31;
putchar(ch);
}
else if (ch >= 'A' && ch <= 'Y')
{
ch += 33;
putchar(ch);
}
else if (ch == 'z')
{
ch = 'A';
putchar(ch);
}
else if (ch == 'Z')
{
ch = 'a';
putchar(ch);
}
else
{
putchar(ch);
}
}
return 0;
}
3.PTA实验作业
3.1 数列求和问题
例子:特殊数列求和
3.1.1 流程图或伪代码介绍思路
#include<stdio.h>
int main() {
定义变量
读取变量("%d %d", 变量)
for (int i = 1; i <= n; i++)
{
计算变量
改变变量
累加
}
输出结果("s = %d", 变量);
return 0;
}
3.1.2代码截图
3.1.3 PTA提交列表及说明
错误说明:一开始输出的结果没按输出样例
3.2 图形打印问题
3.2.1 数据处理
- 每行输出的*是上一行+2或-2
- 同时' '也对应减少或增加1
3.2.2 代码截图
3.2.3 PTA提交列表及说明
- 空格的位数错了,在计算for循环的判断条件的地方算错了
3.3 自选一题,介绍printf调试如何检查错误
例子:猜算式?2*7?=3848中的数字
3.3.1 单步调试截图
结果
调试了两次
- 第一次的时发现对k的值应该是<=9的
- 第二次发现用break无法跳出来层循环就改用了goto
3.3.3 PTA提交列表及说明
- 由于在vs上错了几次又调试过几次就没啥问题