C语言第六周博客作业--数据类型
2017-11-26 22:59
288 查看
一.PTA实验作业
题目1: 7-6 掉入陷阱的数字
1. 本题PTA提交列表
2.设计思路
定义变量N,i,g=1表示位数,a表示各位数字相加的和,b=0,j,N1,c,d用于储存N do{ for(i=0;i<N1;i++){ 算出N的位数g } for(j=g;j>0;j--){ 各位数字相加求和a } N1=3*a+1; 按格式输出printf("%d:%d",b,N1);其中b由1开始增加 直到N1等于N结束循环
3.代码截图
4.本题调试过程中碰到的问题以及解决方案
题目2: 7-4 打印菱形图案
1. 本题PTA提交列表
2.设计思路
int n,a,i,l,j,k,g,h,count=0,count1=0; 输入n if((n-1)%2==0)则继续 由规律可以看出, 上半部分(大三角型)有 (n+1)/2行 for(i=(n+1)/2;i>0;i--){ 行数count加1 输入*的数量=2*count-1 for(j=2*count-1;j>0;j--) 在输入完每一行的*后输出换行 for(k=(n-1)/2;k>0;k--){ 下半部分有 (n-1)/2行 思路同上
3.代码截图
4.本题调试过程中碰到的问题以及解决方案
1.思路错误:漏掉了空格的步骤.解决方案:如上代码。根据空格数与行数的规律输出空格
2.部分正确:if((n-1)%2==0)在判断奇数时,求余写成除法
.
解决方案:改为求余的%
题目3:7-8 判断合法标识符
1. 本题PTA提交列表
2.设计思路
定义一个数组 line[80],整型n(表示做n次下列运算 ) 输入n 令j=1,k=0 给数组赋值直到line[k]='\n',期间k++ 判断第一个字符是否为下标号和字母,如果是则进行下面,不是则输出NO k=1 从line[1]开始判断每个字符是否是下标号或字母或数字 k++; continue;跳过后面语句 直到line[k]!='\0' 若有不是的 printf(NO,换行) break; 若每个都是,即line[k]==0 printf(合格,换行) j++,再次赋值数组 直到j=n
3.代码截图
4.本题调试过程中碰到的问题以及解决方案
1.对数组赋值后进行判断时line[k]=02.错误:进行判断的下标符输入错误
解决方案:从题目复制
3.错误:判断错误后没有结束循环导致输出两个结果
解决方案:加break;
二.截图本周题目集的PTA提交列表及最后排名
三、本周学习总结(3分)
1.你学会了什么?
1.1 一维数组如何定义、初始化?
类型名 数组名 [数组长度]; 如:int a[10];
1.2 一维数组在内存中结构?可画图说明。数组名表示什么?
一维数组再内存中结构是连续的,线性的;
数组名指定数组内每个元素的类型
1.3 为什么用数组?
使用数组可以让一批相同类型的变量使用同一个数组变量名,用下标来相互区分表达简洁,可读性好,便于使用循环结构
1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.
1.选择法
考虑n个数的数组A:首先找出A中的最小元素并将其与A[0]中的元素进行交换,然后找出A中次最小元素并将其与A[1]中的元素进行交换,对A中的前n-1个元素进行该操作。定义数组a[具体数n]={数组赋值} 定义i,j,temp; int b=n; for(i=0;i<n-1;i++) { for(j=i+1;j<b;j++) { 如果a[i]>a[j]{ 把两个记录的相反次序进行交换 } } } for(i=0;i<n;i++){ printf("%d",a[i]); }
2.冒泡法
冒泡排序法:即两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。定义i=0,j,t; for(i=0;i<len;i++) { for(j=0;j<len-i-1;j++) { if(a[j]>a[j+1]) { 将a[j]和a[j+1]交换 } } } 按顺序输出数组 }
3.直接插入排序
指每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。具体方法是第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程1.5 介绍什么是二分查找法?它和顺序查找法区别?
二分查找法就是先寻找数组中间位置的数,判断其是否为要寻找的数,不是的话,大于要找的数,则往左继续二分,小于要找的数,则往右二分。二分查找法适用于排序过的数组,速度快,顺序查找法要遍历数组,在数组很大时效率低,但对数组本身没有要求,适用于短数组
1.6 二维数组如何定义、初始化?
二维数组定义格式为 类型名 数组名 [行长度][列长度]初始化格式为类型名 数组名 [行长度][列长度] = { {初值表0}, ... ,{初值表k}, ...} 如果初始化了全部行,则可以忽略行长度
1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。
#include<stdio.h> int main(void) { int n1,m1,n2,m2,i,j; printf("输入一个矩阵的行和列:"); scanf("%d%d",&n1,&m1); m2=n1; n2=m1; /*将行和列交换定义*/ int a1[n1][m1],a2[n2][m2]; printf("输入%d*%d的矩阵\n",n1,m1); for(i=0;i<n1;i++) for(j=0;j<m1;j++) scanf("%d",&a1[i][j]); for(i=0;i<n1;i++) for(j=0;j<m1;j++) a2[j][i]=a1[i][j]; for(i=0;i<n2;i++) { for(j=0;j<m2;j++) printf("%d ",a2[i][j]); printf("\n"); } return 0; }
下三角qi>=j 上三角i<=j 对称矩阵 a[i][j]=a[j][i]
1.8 二维数组一般应用在哪里?
当数组中的数表示的不止一种含义时,比如我们要表示不同的人不同科目的成绩时,这里有两个变量,不同的人和不同科目,所以要用二维矩阵,在或者是矩阵时,就要用到二维数组2.本周的内容,你还不会什么?
(1)对直接插入排序不是很理解(2)其他的还没有遇到