C语言第10贰回作业

壹、实验作业

1.一 PTA标题:递归法对自由十三个数据按降序排序

设计思路

定义整型循环变量i,最小值下标min,中间变量t
若n==1,直接返回
否则
    min=10-n 最小值下标赋初值
    for  i= 10-n   to   10
         若a[i]小于a[min]
             交换下标min=i
    利用中间变量
    t=a[min]
    a[min]=a[10-n]
    a[10-n]=t 
 再次进入递归 sort(a,n-1)

代码截图

bifa365必发 1

调剂难题

bifa365必发 2

刚开首自个儿料定n时,直接if(n),提交后答案错误,才得到dev里运营,发现他一贯回到了。
那些荒唐是因为常常flag思维习惯了,以为if(n)等于于if(n==一)。但骨子里假诺n为整型,if(n)剖断n是还是不是为0,借使是0施行else后语句,不然试行if后言语。也正是说只要n不为0,就举办if后的语句。所以会一向回到。

bifa365必发 3

一.二 学生战绩管理种类

一.贰.一 画函数模块图,简介函数功效

bifa365必发 4

一.二.二 截图展现你的工程文件

bifa365必发 5

1.2.三 函数代码部分截图

本系统代码总行数:22二

  • 头文件
    bifa365必发 6

  • 主函数
    bifa365必发 7

  • 安排学生消息
    bifa365必发 8

  • 学生战绩消息代码
    bifa365必发 9

  • 剔除学生战绩音信代码
    bifa365必发 10

  • 总分排序代码
    bifa365必发 11

一.二.四 调节和测试结果呈现

未增添学生就张开操作的荒唐指令

bifa365必发 12

主菜单及充裕上学的小孩子新闻

bifa365必发 13

出口消息表

bifa365必发 14

修改某位同学某课程的大成

bifa365必发 15

删除某位同学有些学科的成就

bifa365必发 16

一.2.伍 调节和测试境遇难题及消除办法

  • 一.建筑工程程的经过中,错误太多了,但未曾记录下来,在那之中影像最深的是头文件里加不加函数声称,笔者记得此前没加时它主函数哪儿会唤起各类函数没注明的失实,不过恰恰又试了下来掉函数证明,竟然编写翻译通过了,疑惑人生ing。

bifa365必发 17

  • 2.[Linker error] main.o:main.cpp:(.text+0x4九): undefined reference
    to
    xxxx,笔者屡屡并发的那么些编写翻译错误越发没水平:是本人的工程尚未把持有的有关文书放在三个工程里面,纵然都放在了一个文书夹下,可是是上下一心强行放在了合伙,而不是建筑工程程时一齐建的文书夹,后来再度建筑工程程就一下子就解决了了。

  • 三.还有1个困扰很久的的标题是:头文件里的变量被另行定义,后来问了同桌,才搞精晓每种文件里都要拉长头文件。依旧对于建筑工程程的底细不够清楚。

总结:

  • 头文件:头文件中不能够有可实行代码,也不可能有多少的概念,只好有宏、类型(typedef,struct,union,menu,class)数据和函数的宣示。
  • 头文件加#ifndef #endif能够堤防它在同一编写翻译单元被再一次引用。
  • 全局变量重复定义难题:写程序时,最佳不用在头文件中定义全局变量。因为那时该头文件被多个源文件包蕴时,就会见世重复定义难点。全局变量的概念就应有放
    有个别源文件中,然后在其他源文件中动用前进行extern注解。
  • 在用<>时,编写翻译器查找顺序是:先在系统区域寻觅,再寻找自定义区域。用”“时,编写翻译器查找顺序相反。

2、截图本周题目集的PTA最终排名

bifa365必发 18

三、阅读代码

斐波那契数列

#include <stdio.h>  
int fib1(int n)  
int fib2(int n);  

int main()  
{  
    int n=0;  
    printf("fibonacci数列下标:\n");  
    scanf("%d",&n);  
    printf("第n=%d的数列值是:%d\n",n, fib1(n));  
    return 0;  
}  
//非递归  
int fib2(int n)  
{  
    int a = 1;  
    int b = 1;  
    int c = a = b;  
    int i = 0;  
    for (i = 3; i <= n; i++)  
    {  
        c = a + b;  
        a = b;  
        b = c;  
    }  
    return c;  
}  
//递归  
int fib1(int n)  
{  
    if (n <= 2)  
        return 1;  
    else  
        return fib1(n - 2) + fib1(n - 1);  
}  

那道题是从前刚上学函数知识时的1道题,学了递归后就把它用递归思路简化了下。即使递归思路不太好想,然而它代码更简洁清晰,可读性越来越好。不过递归它也有弱点:空间消耗要比非递归代码要大过多。所以递归空间和岁月消耗都大。

四、本周求学计算

1.介绍本周学习内容

链表相关内容总括:

动态内部存款和储蓄器的分配:

  • malloc函数

void* malloc ( unsigned int size )

char * a;
a=( char *)malloc( 10*( sizeof( char ) );
//申请一块10*( sizeof( char )这么大的动态内存,并返回这块内存的地址。

函数通晓:在内部存款和储蓄器的动态存款和储蓄区中分红一个尺寸为size的连年空间,其参数应该是一个无符号整数,再次回到值是1个系统所分配的,延续内部存款和储蓄器空间的苗头地址。
若分配内部存款和储蓄器退步,则赶回NULL。
PS:该函数仅针对指针使用。

  • free函数

void * free( void * p)

char *a,*b;
a=( char *)malloc( 10*( sizeof( char ) );
b=a;
...
free(a);//释放其指向的动态内存

链表:

bifa365必发 19

  • 概念精通:链表这种数据结构是为着落到实处动态保存1串数据,那里的动态是指不须要事先分配内部存款和储蓄器空间,而是在必要时动态申请内部存款和储蓄器。整个数据串保存所需的空间能够根据须求扩充或收缩。它由若干个1律结构类型的“结点”依次串接而成。而且那各类结点在内部存款和储蓄器中得以使不总是存放的。
    PS:数组是线性结构,链表时链性结构。

  • 链表的节点结构:
    bifa365必发 20
    一.数据域:用来存款和储蓄数据。
    二.指针域:存款和储蓄下1个节点成分的地方 。

  • 用链表取代数组的独到之处:
    一.不必要事先定义存款和储蓄空间大小,能够兑现动态分配内部存款和储蓄器,内存使用频率高。
    二.插入删除新结点方便,操作成效高。

1.1易错点

  • 编写翻译预处理不是C语言的一有的,不占运营时刻,不要加分号

  • 函数的递归调用一定要记得有停止的尺码

  • static int x;暗中认可值为0。 int x;暗中同意值为不定值

1.2宏定义

  • 无参宏定义 #define 标志符 值 定义后,出现所定义的标志符的地方都
    将以定义时钦赐的值来替代。

  • 带参宏定义 #define 标识符(参数表) 值

#define  S(x,y)  x*y
int main( ) 
{  
      int a=3,b=4,c=5,d=6;
        printf("a+b*c+d=%d\n" , S(a+b,c+d));
}

带参宏定义试行时是将a+b那样贰个表达式代替x,c+d那样三个表明式替代y,所以S(a+b,c+d)实行的是a+bc+d的运算,而不是将a+b的值给x,c+d的值给y然后再做xy,那跟函数调用传递参数是不相同的。

  • 常用预处理指令:
    #include 包括叁个源代码文件
    #define 定义宏
    #undef 撤废定义宏
    #if 若是基准为真,则编写翻译下边的代码
    #endif 截至一个#if…#elif条件编写翻译块
    #ifdef 如果已经定义了有个别宏,则编写翻译上面包车型地铁代码
    #ifndef 借使未有概念有些宏,则编译下边的代码

一.三指针数组

  • 概念指针数组:类型名 * 变量名[数总监度];

int * p[10]; 
  • bifa365必发,指南针数组的数组成分都是指针变量,是用来存放在变量的地方的

1.4行指针

  • 概念行指针变量: 类型名 (*变量名)[数首席实行官度];

 int (*p)[4],a[3][4]; 
 p=a;

那儿就可把p当成a来用。

壹.五指向指针的指针:

  • 定义: 类型名 ** 变量名;

 int *p1;
 int **p2;
 int a=3;
  • 指南针变量也是1种变量,故在内部存储器中也有对应的八个地方,
    而要存放指针变量的地址,将需要助于用来存放在指针变量的地点的指针变量

2.读书体会

本周两项内容:递归和大程序。个人以为递归是比大程序难,递归很难想出来,恐怕因为刚刚发轫接触,思路也很有局限性。而大程序相比较来说难在怎么样将品种建好以及项目中逐条文件的涉嫌处理,而函数内容难度十分的小。课上在项目文件涉及那一点上没听透顶,回来再做时出现了过多荒唐,建项目费用了相当短的年华。而且很频仍都是编译通可是,错误多道程序崩溃。只可以将代码搬到新类型里再试。很费精力。

发表评论

电子邮件地址不会被公开。 必填项已用*标注