第十二次作业总结

实验1.找出最长的字符串

#include<stdio.h>
#include<string.h>
int main() 
{
    int i;
    char sx[80],max[80];
    scanf("%s",max);
    strcpy(max,sx);
    for(i=1;i<5;i++)
    {
        scanf("%s",&sx);
        if(strcmp(max,sx)>0)
        strcpy(max,sx);
    }
    printf("max is:%s\n",max);
    return 0;
}

实验2.分类统计字符个数

#include<stdio.h>
int main()
{
    int daxie=0,xiaoxie=0,kongge=0,shuzi=0,qita=0;
    char *p,a[80];
    gets(a);
    for(p=a;(*p)!='0';p++)
    {
        if((*p)>'A'&&(*p)<='Z')
            daxie++;
        else if((*p)>'a'&&(*p)<='z')
            xiaoxie++;
        else if((*p)==' ')
            kongge++;
        else if((*p)>='0'&&(*p)<='9')
            shuzi++;
        else 
            qita++;
    }
    printf("共有大写字母%d个,小写字母%d个,空格%d个,其他字符%d个\n",daxie,xiaoxie,kongge,shuzi,qita);
    return 0;
}

实验3.学生信息管理系统

#include<stdio.h>
struct student{
    int num;
    char name [10];
    int computer,english,math;
    double average;
};
int main()
{
    int i,n;
    struct student s1;
    printf("请输入学生人数n:");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {    
        printf("请输入第%d个学生的信息:\n",i);
        scanf("%d%s",&s1.num,s1.name);
        scanf("%f%f%f",&s1.math,&s1.english,&s1.computer);
        s1.average=(s1.math+s1.english+s1.computer)/3.0;
        printf("学号:%d,姓名:%s,平均成绩:%.2lf\n",s1.num,s1.name,s1.average);
    }
    return 0;
}

 

一.知识点总结:

1.字符串和字符指针:字符串常量“array” "point" ,用一对双引号括起来的字符序列,被看做一个特殊的一维字符数组,在内存中连续存放,实质上是一个指向该字符串首字符的指针常量

2.字符数组与字符指针的重要区别:char sa[]="This is a string";

                                             char *sp="This is a string";

如果要改变数组sa所代表的字符串,只能改变数组元素的内容

如果要改变指针sp所代表的字符串,通常直接改变指针的值,让它指向新的字符串

3.字符指针—先赋值,后引用

定义字符指针后,如果没有对它赋值,指针的值不确定,定义指针时,先将它的初值置为空

4.常用的字符串处理函数:

(1)字符串的输入和输出:输入字符串:scanf(),gets(),getchar()

                                输出字符串:printf(),puts(),putchar()

字符串的输入:scanf("%s",str)    输入参数:字符数组名,不加地址符,遇回车或空格输入结束,并自动将输入的一串字符串和'\0'送入数组中

字符串的输出:puts(str)  输出字符串后自动换行,输出参数可以是字符数组名或字符串常量,输出遇'\0'结束

                   puts("hello")

(2)字符串的复制、连接、比较、求字符串长度

字符串复制:strcpy(str1,str2)    将字符串str2复制到str1中

字符串连接:strcat(str1,str2)    连接两个字符串str1和str2,并将结果放入str1中

字符串比较:strcmp(str1,str2)   比较两个字符串str1和str2的大小

求字符串长度:strlen(str)    计算字符串的有效长度,不包括'\0'

5.结构的概念与定义:结构是C语言中一种新的构造数据类型,它能够把有内在联系的不同类型的数据汇聚成一个整体,使它们互相关联;同时,结构又是一个变量的合集,可以按照对基本数据类型的操作方法单独使用其成员变量

结构类型定义的一般形式为:struct 结构名 {

                                        类型名 结构成员名1:

                                        类型名 结构成员名2:

                                        ...

                                        类型名 结构成员名n:

                                       };  结构的定义以分号结束,被看作一条语句

6.结构的嵌套定义:在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型

 7.结构变量的定义和初始化:如同C语言中的基本数据类型一样,在定义了结构类型后,还需要定义结构类型的变量,然后才能通过结构变量来操作和访问结构的数据

在C语言中定义结构变量有如下3种方式

(1)单独定义:单独定义是指先定义一个结构类型,再定义这种结构类型的变量

(2)混合定义:混合定义是指在定义结构体类型的同时定义结构体变量,这种定义方法的一般形式为:struct 结构名 {

                                                                                                                                 类型名 结构成员名1;

                                                                                                                                 类型名 结构成员名2;

                                                                                                                                 ...

                                                                                                                                 类型名 结构成员名n;

                                                                                                                                 } 结构变量名表;

(3)无类型名定义:无类型是指在定义结构变量时省略结构名     struct {

                                                                                   类型名 结构成员名1;

                                                                                   类型名 结构成员名2;

                                                                                   ...

                                                                                   类型名 结构成员名n;

                                                                                   } 结构变量名表;

要注意的是,由于没有给出结构名,在此定义语句后无法再定义这个类型的其他结构变量,除非把定义过程再写一遍,一般情况下,除非变量不会再增加,还是建议采用前两种结构变量的定义形式

8.结构变量的使用:

(1)结构变量成员的引用:使用结构变量主要就是对其成员进行操作,在C语言中,使用结构成员操作符"."来引用结构成员,格式为:结构变量名.结构成员名

(2)结构变量的整体赋值:具有相同类型的结构变量可以直接赋值,将赋值符号右边结构变量的每一个成员的值都赋给了左边结构变量中相应的成员

(3)结构变量作为函数参数:当程序的规模较大,功能变量较多时,需要以函数的形式进行功能模块的划分和实现

如果在函数间传递结构数据,则需用结构变量作为函数的参数或返回值

结构变量作为函数参数的特点是:可以传递多个数据且参数形式较简单

9.结构数组:一个结构变量只能表示一个实体的信息,如果有许多相同类型的实体,就需要使用结构数组

结构数组是结构与数组的结合,与普通数组的不同之处在于每个数组元素都是一个结构类型的数据,包括各个成员项

二.实验过程中遇到的问题及解决方法:

1.第一题运行中输出的字符串不是最长的

2.第三题运行中学生的平均成绩出现了问题

三.实验心得体会:

    这次作业是C语言的最后一次作业,所以想尽力做到最后,为我的C语言画上一个圆满的句号,这三道题和老师上课讲的例题差不多,但是自己做起来还是会出现一些小的问题,所以还需要多看书做一些练习,把问题及时解决掉,这样才能真正的掌握。

转载于:https://www.cnblogs.com/yanmojie/p/6179389.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.对于二叉排序树,下面的说法( )是正确的。 A.二叉排序树是动态树表,查找不成功时插入新结点时,会引起树的重新分裂和组合 B.对二叉排序树进行层序遍历可得到有序序列 C.用逐点插入法构造二叉排序树时,若先后插入的关键字有序,二叉排序树的深度最大 D.在二叉排序树中进行查找,关键字的比较次数不超过结点数的1/2 2.在有n个结点且为完全二叉树的二叉排序树中查找一个键值,其平均比较次数的数量级为( )。 A.O(n) B.O(log2n) C.O(n*log2n) D.O(n2) 3.静态查找与动态查找的根本区别在于( )。 A. 它们的逻辑结构不一样 B. 施加在其上的操作不同 C. 所包含的数据元素类型不一样 D. 存储实现不一样 4.已知一个有序表为{12,18,24,35,47,50,62,83,90,115,134},当折半查找值为90的元素时,经过( )次比较后查找成功。 A.2 B.3 C.4 D.5 5.已知数据序列为(34,76,45,18,26,54,92,65),按照依次插入结点的方法生成一棵二叉排序树,则该树的深度为( )。 A. 4 B. 5 C. 6 D. 7 6.设散列表表长m=14,散列函数H(k)=k mod 11 。表中已有15,38,61,84四个元素,如果用线性探测法处理冲突,则元素49的存储地址是( )。 A. 8 B. 3 C. 5 D. 9 7. 平衡二叉树的查找效率呈( )数量级。 A. 常数阶 B. 线性阶 C. 对数阶 D. 平方阶 8. 设输入序列为{20,11,12,…},构造一棵平衡二叉树,当插入值为12的结点时发生了不平衡,则应该进行的平衡旋转是( )。 A. LL B. LR C. RL D. RR 二、填空题(每空3分,共24分)。 1.在有序表A[1..18]中,采用二分查找算法查找元素值等于A[7]的元素,所比较过的元素的下标依次为 。 2.利用逐点插入法建立序列(61,75,44,99,77,30,36,45)对应的二叉排序树以后,查找元素36要进行 次元素间的比较,查找序列为 。 3. 用顺序查找法在长度为n的线性表中进行查找,在等概率情况下,查找成功的平均比较次数是 。 4. 二分查找算法描述如下: intSearch_Bin(SST ST, KT key) { low=1 ; high=ST. length; while(low<=high) { mid=(low+high)/2; if(key==ST.elem[mid].key) return mid; else if(key<ST.elem[mid].key) ; else ; } return 0; } 5.链式二叉树的定义如下: typedef struct Btn{ TElemType data; ; }BTN ,*BT; 6.在有n个叶子结点的哈夫曼树中,总结点数是 。 三、综合题(共52分)。 1. (共12分)假定关键字输入序列19214732,8,23414540画出建立二叉平衡树过程。 2. (共15分)有关键字{13,28,31,15,49,36,22,50,35,18,48,20},Hash 函数为H=key mod 13,冲突解决策略为链地址法,请构造Hash表(12分),并计算平均查找长度(3分)。 ASL= 3. (共10分)设关键字序列{20,35,40,15,30,25},给出平衡二叉树的构造过程。 4. (共15分)设哈希表长为m=13,散列函数为H(k)=k mod 11,关键字序列为5,7,16,12,11,21,31,51,17,81;试求:散列后的表中关键字分布(假定解决冲突的方法为线性探测再散列法);求平均查找长度ASL;计算该表的装填因子。 (1)按要求求哈希表(10分): 0 1 2 3 4 5 6 7 8 9 10 11 12 (2)计算ASL(3分): ASL= (3)计算装填因子(2分):装填因子=

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值