C语言博客作业--数据类型

一、PTA实验作业

题目1:7-4 打印菱形图案

1.本题PTA提交列表

2.设计思路

{
	int n,j,i,k; 
	输入n;
	/*输出上半部分*/ 
	for (i=1;i<=n;i=i+2) { 输出上半个菱形 
		for(j=n-i;j>0;j--)每一行输出的空格比上一行少两个
			printf(" "); 
		for(k=i;k>0;k--)每一行输出的* 等于行数
			printf("* ") ;
		putchar('\n');换行 
	} 
	/*输出下半部分*/
	for(i=n-2;i>0;i=i-2) {	下半部分与上半部分相反
		for(j=n-i;j>0;j--) 输出的空格数
			printf(" "); 
		for(k=i;k>0;k--)每一行输出的* 等于行数
			printf("* ") ;
		putchar('\n');换行
	}
	return 0;
}

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

  • 碰到的问题:输出空格时判断条件写成(j=n-i+1;j>0;j--),导致多输出一个空格

  • 调试过程:输入3,输出空格后

    输出*

    换行后,发现又输出了空格,n=3时,第二行应该没有空格

题目2:7-6 掉入陷阱的数字

1.本题PTA提交列表

2.设计思路

{
	定义变量分别存放原来的数以及计算后的数,定义count=1表示计算的次数
	输入第一个数num1 
	储存num1,令num2=num1
	调用trap函数,传入num1并将返还值存于num1 
	if(num1==num2)
		输出printf("%d:%d",count,num1); 
	else{
		while(num1!=num2){
			储存num1的值,num2=num1;
			调用函数num1=trap(num1);
			输出printf("%d:%d",count,num1); 
			count++; 
		} 
		循环结束再输出一次 printf("%d:%d",count,num1);
	}
	结束 ;
} 
int trap(int n)		计算陷阱数函数
{
	int x,sum=0;
	while(x>0){
		取出最低位x=n%10;
		累加到 sum;
		去掉最低位 x/=10;
		}
	sum = 3*sum+1;
	返还函数值 ;
} 

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

  • 碰到的问题:最开始没有储存num1的值,调用函数后没有判断num1==num2,导致本来应该不进入循环,只输出一遍结果,而进入循环后输出一遍结果循环结束后有输出了一次结果
  • 调试过程:输入值为13

    函数结束后返还值为13,此时应该直接输出结果然后结束程序,但没有判断返还前后的值是否相等,导致进入while循环

    循环中输出一次结果

    循环结束后再出输出,共输出两次,但是要输出一次就够

PTA列表说明:主要情况就是上述问题

题目3:7-10 简单计算器

1.本题PTA提交列表

2.设计思路

{
    定义变量 int num,sum;
	char op;
    输入第一个数字num和第一个运算符op;
    赋值sum=num;
    while op!='='{
         输入数字num;
        if (op=='/'&&num==0)||(op!='+'&&op!='-'&&op!='*'&&op!='/'&&op!='='){    //如果运算符为‘/’同时输入数为0或者运算符不为‘+’,‘-’,‘*’,‘/’
                输出Error;
                结束 return 0;
        }
        else{
            switch(op){        //判断运算符并进行相应运算
                case '+':sum+=num;break;
				case '-':sum-=num;break;
				case '/':sum/=num;break;
				case '*':sum*=num;break;
                }
            输入下一个运算符 op;
        }
    }
    输出结果sum;
    结束 return 0;
} 

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

  • 本题调试过程碰到的问题: (op'/'&&num0)的条件写成 (op='/'&&num==0),少了一个等号导致判断条件错误

  • PTA提交列表说明
    PTA2分的提交列表是因为op=='/'中少了一个等号,16分是因为没有对分母为0以及非法运算符进行判断

二、截图本周题目集的PTA最后排名

三、本周学习总结

1.你学会了什么?

1.1 一维数组如何定义、初始化?

定义 : 类型名 变量名 [数组长度]
初始化:

  • 定义时直接初始化,如:int n[1]={0};
  • 通过循环结构实现,如:
int n[10];
	for(i=0;i<10;i++){
		scanf("%d",n[i]);
	}

1.2 一维数组在内存中结构?可画图说明。数组名表示什么?

1.3 为什么用数组?

数组是把相同类型的一系列数据统一编制到某一个组别中,这样就可以通过数组名+索引号简单快捷的操作大量数据。

1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.

选择法:

冒泡法:

直接插入排序:

1.5 介绍什么是二分查找法?它和顺序查找法区别?

二分查找法:取中间元素与查找元素进行比较,如果查找元素比中间元素大,则在中间元素右边查找,如果查找元素比中间元素小,则在中间元素的左边查找。
与顺序查找法的区别:二分查找法的效率更高

1.6 二维数组如何定义、初始化?

二维数组定义:类型名 变量名 [行长度] [列长度]
初始化:

  • 分行赋初值:
    一般形式为: 类型名 变量名 [行长度] [列长度]{{初值表0},...{初值表k},...}
    例如:int a[2][3] = {{1,2,3},{4,5.6}}

  • 顺序赋初值:
    一般形式为: 类型名 变量名 [行长度] [列长度]{ 初值表 }
    例如:int [2][3]

1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。

矩阵转置过程:对角线上元素不变,其余元素两个下标互换,如:n[0][1] 转置后变为 n[1][0]
下三角:i>=j
上三角:i<=j
对称矩阵:i=j

1.8 二维数组一般应用在哪里?

应用在数组为矩阵形式的时候

2.本周的内容,你还不会什么?

  • 对于本周数组的内容,定义函数时,对于数组的传参还不是很熟悉
  • 对于数据类型的位运算也还不太会
  • 本周PTA主要问题及错误点:7-8 判断合法标识符:对于本题我最开始的思路是循环输入一串字符,分开判断第一个字符以及之后每个字符,如果出现非法的字符就输出NO,但运行过程中发现这样输出No之后,如果字符还没输入完,后面剩余的字符就会被当做另一个新的字符串,导致答案错误;于是改变思路定义一个 flag=0,循环输入每一个字符,同样进行判断,出现非法字符就 flag=1,循环结束后再通过判断 flag 的值输出Yes或No。
posted @ 2017-11-25 23:05  嘿嘿渣  阅读(416)  评论(5编辑  收藏  举报