杨佳琴

第三次博客作业

PTA分数


本章学习总结

for循环语法

for 循环语句的一般形式为:

for (表达式1; 表达式2; 表达式3)
{
        循环体语句;
}
  1. for语句中,用两个分号分隔三个表达式,但for的后面没有分号,因为for与其后面的循环体语句合起来作为一条完整的语句。
  2. 在for语句的执行过程中,表达式2,循环体语句和表达式3将重复执行,而表达式1只有进入循环前执行一次。

while、do while循环语法

while 循环执行顺序的格式是:

while (表达式)
{
       循环体 语句;
}
  1. 当表达式的值为“真”时,循环执行,直到表达式的值为“假”,循环中止并继续执行while的下一条语句。
  2. while语句中的表达式可以是任意合法的表达式,循环语句只能是一条语句。

do while循环语法

do-while语句的一般形式为:

    do
{
        循环体语句
}
    while(表达式);
  1. 它先执行循环体,后判断循环条件,所以无论循环条件的值如何,至少会执行一次循环体。
  2. 第一次进入循环时,首先执行循环体语句,然后再检查循环控制条件,即计算表达式,若值为“真”,继续循环,直到表达式的值为“假”,循环结束,执行do—while的下一条语句。

break语句

  1. break语句强制控制循环结束,一旦执行了break语句,循环提前结束,不再执行循环体中位于其后的其他语句。
  2. break语句应该和if语句配合使用,循环提前结束,不在执行循环体中位于其后的其他语句;否则,若break无条件执行,意味着永远不会执行循环体中break后面的其他语句。

continue语句

  1. continue语句的作用是跳过循环体中continue后面的语句,继续下一次循环,一般也需要与if语句配合使用。
  2. continue循环语句和break语句的区别在于,break结束循环,而continue只是跳过后面语句继续循环。break语句除了可以终止循环外,还用于switch语句,而continue只能用于循环。

循环嵌套

嵌套类型

在C语言中,if-else、while、do-while、for 都可以相互嵌套。所谓嵌套(Nest),就是一条语句里面还有另一条语句,例如 for 里面还有 for,while 里面还有 while,或者 for 里面有 while,while 里面有 if-else,这都是允许的。

嵌套错误

  1. 在c中可以嵌套调用函数,但不可以嵌套定义函数。
  2. 出现标识符未定义,重定义等错误。

学习体会·

  1. 代码的难度逐渐增加,越来越考验自己的思维逻辑能力,而且题目难度增大。
  2. 感觉自己在c语言学习方面仍有欠缺,很多时候看到一个题目,根本不知道该从哪里去做,从哪里开始。
  3. c语言学习应注意一些细节问题,像有时候一个嵌套错误,语法错误,甚至是符号错误,这条代码也无法运行。

编程技巧总结

判断是否为素数

  1. 即判断数m能否被2~m-1之间的整数整除,用%来判断。
  2. 设i取值[2,m-1],如果m不能被此区间上的任何一个数整除,即对每个i,m%i都不为0,则m是素数;若m被此区间的某个数整数,则m是素数。

通过循环打印图形

运用双重for的循环嵌套

max初值/min初值

先读入第一个数,将它赋给min和max,然后读余下的n-1个数,与它们比较

统计整数位数

只需要设计一个计时器,因为C语言中除法只留下整数部分,所以可以拿数字/10;数字位数即为循环次数,待n为个位时n/10=0,循环结束。

交错数列实现方式

使用sign来实现正负号转变

大小写字母的转化方式

小写转大写:ch-'a'+'A'
大写转小写:ch-'A'+'a'

字符转数字问题

让数字字符去减‘0’得到的就是数字的值

四则运算

用'+''-''*''/'符号进行运算。

数字逆序

每分离一位数,就把这位数变为个位,之前的乘以十升为高位,以此类推

PTA实验作业

数列求和问题

流程图或伪代码介绍思路

奇数列为正,偶数列为负,用%来判断是否为偶数列。用for循环结构进行运算。

代码截图

#include<stdio.h>
int main()
{
    int i, n;
    double x = 1;
    double m = 1;
    double sum;
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        if (i % 2 == 0)
        {
            x = -(i / m);
        }
        else
        {
            x = i / m;
        }
        sum = sum + x;
        m = m + 2;
    }
    printf("%.3lf", sum);
    return 0;
}

PTA提交列表及说明


刚开始是没有想到它的求和关系是什么,偶数列和奇数列如何进行符号转换运算。

图形打印问题

代码截图

#include<stdio.h>
int main()
{
    char ch;
    int n,i,j,k;
    scanf("%c %d",&ch,&n);
    char arr[10][10];
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)arr[i][j]=' ';//初始化二维数组全为字符0
    arr[0][(n-1)/2]=arr[n-1][(n-1)/2]=ch;//第一排和最后一排特殊处理
    arr[0][(n-1)/2+1]=arr[n-1][(n-1)/2+1]='1';
    arr[(n-1)/2][n]='1';//特殊处理用1来标志每一行的字符后面
    ch++;   //字符由整型存储固ch++可以是b变成c
    for(i=1,j=1;i<=(n-1)/2;i++,j++){//由一行最中间来开始,每往下一行便分别加一减一
        arr[i][(n-1)/2+j]=ch;
        arr[i][(n-1)/2-j]=ch;
		arr[i][(n-1)/2+j+1]='1';
		ch++;	
    }//上半部分 
    ch-=2;j-=2;
    for(;i<n;i++,j--){
        arr[i][(n-1)/2+j]=ch;
        arr[i][(n-1)/2-j]=ch;
		arr[i][(n-1)/2+j+1]='1';
		ch--;	
    }
    for(i=0;i<n;i++){//输出处理好的二维数组,遇到1便换行否则行末会多多余空格pta会判格式错误
        for(j=0;j<n;j++){
            if(arr[i][j]=='1')break;
            printf("%c",arr[i][j]);
        }printf("\n");//一行结束后输出换行符。
    }   
}

PTA提交列表及说明


在网上进行了查询,也是在室友的帮助下完成的。

自选一题,介绍printf调试如何检查错误

单步调试截图

代码截图

#include<stdio.h>
int main()
{
	int time;
	int rabbitdis = 0;
	int turtledis = 0;
	int totaltime;

	scanf("%d", &totaltime);

	for (time = 1; time <= totaltime; time++)
	{
		rabbitdis = rabbitdis + 9;
		turtledis = turtledis + 3;
		if (time % 10 == 0)
		{
			if (turtledis < rabbitdis)
			{
				if (time + 30 > totaltime)
				{
					turtledis = turtledis + 3 * (totaltime - time);
					break;
				}
				else
				{
					turtledis = turtledis + 3 * 30;
					time = time + 30;
				}
			}
		}
	}
	if (turtledis > rabbitdis)
	{
		printf("@_@ %d", turtledis);
	}
	else if (turtledis == rabbitdis)
	{
		printf("-_- %d", turtledis);
	}
	else
	{
		printf("^_^ %d", rabbitdis);
	}
	return 0;
}

PTA提交列表及说明

posted on 2020-11-22 22:31  长安&  阅读(147)  评论(2编辑  收藏  举报

导航