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

一.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]='
',期间k++
判断第一个字符是否为下标号和字母,如果是则进行下面,不是则输出NO
k=1
从line[1]开始判断每个字符是否是下标号或字母或数字
k++;
continue;跳过后面语句
直到line[k]!=''
若有不是的
printf(NO,换行)
break;
若每个都是,即line[k]==0
printf(合格,换行) 

j++,再次赋值数组 
直到j=n

3.代码截图

4.本题调试过程中碰到的问题以及解决方案

1.对数组赋值后进行判断时line[k]=0

2.错误:进行判断的下标符输入错误
解决方案:从题目复制

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的矩阵
",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("
");  
 }     
  return 0; 
}

下三角qi>=j 上三角i<=j 对称矩阵 a[i][j]=a[j][i]

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

当数组中的数表示的不止一种含义时,比如我们要表示不同的人不同科目的成绩时,这里有两个变量,不同的人和不同科目,所以要用二维矩阵,在或者是矩阵时,就要用到二维数组

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

  • (1)对直接插入排序不是很理解
  • (2)其他的还没有遇到
原文地址:https://www.cnblogs.com/Zeng99/p/7899711.html