C语言博客作业02--循环结构

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

0.PTA总分排名


1.本章学习总结

1.1 for循环语法

语法: for(循环变量赋初值; 循环条件; 循环变量增量)

  • 注意语句间用‘;’隔开,不是‘,’。
    并不是所有的条件都要填,例如循环条件不填则代表这个函数进入无限循环。

简单案例如:

#include <stdio.h>
#include<math.h>
int main()
{
	int n;
	int i;
	double sum=0;
	scanf("%d", &n);
	for (i = 1; i <= n; i++) {
		sum = sum + pow(-1, i +1 )*i / (2 * i - 1);
	}
	printf("%.3f", sum);
	return 0;
}

1.2 while、do while循环语法

语法:

  • while
while(条件)
{循环体}
  • do while
do
{循环体}
while(条件)
  • while先判断条件后进入循环;
    do while先做一次循环后再判断条件,比较适合用于第一个条件特殊情况的例子。

案例如

  1. 用do-while语句计算从1加到100的值
#include <stdio.h>
int main(){
    int i,sum=0;
    i=1;
    do{
        sum=sum+i;
        i++;
    }
    while(i<=100);
    printf("%d\n",sum);
    return 0;
}

1.3 跳出循环相关语句break\continue

  • break语句在循环体中使用,表示结束循环,常用于在死循环中找到正确的值后退出。
    也用于switch-case语句中,执行case语句后退出。

  • continue语句在循环中使用,表示结束下面循环语句,并且重新开始循环,常用于循环中符合条件的情况下执行(如例题所示)。

案例一(break

#include<stdio.h>
int main(void)
{
  int n,N,a,i;
  scanf("%d %d",&n,&N);
  for(i=1;;i++)
  {
    scanf("%d",&a);
    if(a<0||i>N)
    {printf("Game Over\n");
     break;}
    if(a>n) 
    printf("Too big\n");
    else if(a<n) 
    printf("Too small\n");
    else if(a==n&&i==1)
    {printf("Bingo!\n");
     break;}
    else if(a==n&&i>1&&i<=3)
    {printf("Lucky You!\n");
     break;}
    else if(a==n&&i>3&&i<=N)
    {printf("Good Guess!\n");
     break;}
  }
}

案例二(continue)

  • 题目:输出0到100以内偶数的和

#include <stdio.h>
int main()
{
     int sum = 0;
     for(int i=0;i<=100;i++)
     {
         if(i % 2 != 0){
             continue;
         }
         sum += i;
     }
     printf("100位数字中的偶数和为:%d",sum);
 
    return 0;
}

1.4 嵌套循环

  • 嵌套循环是指在大循环中套用小循环如
for( ; ;){
for( ; ;){}
}

经典案例(硬币换算)

#include<stdio.h>
int main() {
	int money;
	int i;
	int j;
	int k;
	int count = 0;
	scanf("%d", &money);
	for (i = money/5; i >0; i--) {
		for (j = money / 2; j >0; j--) {
			for (k =money; k>0 ; k--) {
				if (i * 5 + j * 2 + k == money) {
					printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n", i, j, k, i + j + k);
					count++;
				}

			}
		}
	}
	printf("count = %d", count);
	return 0;
}
  • 像嵌套循环这类题集一定要理清楚思路,大循环是什么?小循环如何嵌套进去?像这个硬币换算,以前不会做,现在觉得简单了,是因为了解到“大循环循环一次,小循环整个运行完”,理解后就豁然开朗了。

学习体会

  1. 戒骄戒躁,嵌套循环思路不能乱。
  2. 合理利用break与continue,在代码中畅通无阻。
  3. 多次练习才能掌握好(如换硬币题)
  4. 不会就要去求助他人,别在一棵树上吊死。

2 编程技巧总结

  1. 数列求和问题
  • 数列求和关键点在于规律,凡是数列都会有规律,如本题,应该想到每次循环加上的项应该是前一项的10倍加上a,问题就解决了。
  1. 字符如何转数字、数字逆序问题等
  • 字符转数字只要将字符减去一个字符‘0’即可,同理数字转字符加上一个字符即可(注意字符Ascall码所对应的值)。
  • 数字逆序问题在于在循环中巧妙的运用‘%’和‘/’解析每一个数,然后将第一个数乘10n(n为位数),加上第二个数乘10(n-1),以此类推。
  1. 图形打印问题
  • 此类题目应该与嵌套循环结合,从视频中注意到i j k的关系表达式式关键,思考如何才能用简洁的代码打出。
  1. 四则运算
    注意点:while循环和switch-case复合使用
    如案例:简单计算器
    循环语句为
while (1) {

		scanf("%d ", &num);
		switch (c) {
		case '+':
			sum += num;

			break;
		case '-':
			sum -= num;

			break;
		case '*':
			sum *= num;

			break;
		case '/':
			if (num == 0) {
				printf("ERROR");
				goto out;
			}
			sum = sum / num;

			break;

		default:
			printf("ERROR");
			goto up;
			break;
}

  • 小心除数为0的特殊情况!

3.PTA实验作业

3.1 数列求和问题

  • 伪代码
int 首项a;总项数n;
int 储存a的数b;
int 计数i;
定义 总和sum=0;
输入a,n;
for(i=1;i<=n;i++){
  和前一项相加赋值给sum;
}
输出sum;


  • 注意点:每次乘10后都要加a,如何实现,可以用b储存。

3.2图形打印问题

数据处理:定义计数的i j k;
i控制行数;j控制空格;k控制*数;

代码:

  • 此类题目应该与嵌套循环结合,从视频中注意到i j k的关系表达式式关键,思考如何才能用简洁的代码打出(不要像我一样复杂。。)

3.3 printf 调试检误

例:



  • 提交列表:
posted @ 2020-11-22 21:30  此处应该有名字  阅读(249)  评论(0编辑  收藏  举报