实验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 ",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个 ",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个学生的信息: ",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 ",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) 输入参数:字符数组名,不加地址符,遇回车或空格输入结束,并自动将输入的一串字符串和' '送入数组中
字符串的输出:puts(str) 输出字符串后自动换行,输出参数可以是字符数组名或字符串常量,输出遇' '结束
puts("hello")
(2)字符串的复制、连接、比较、求字符串长度
字符串复制:strcpy(str1,str2) 将字符串str2复制到str1中
字符串连接:strcat(str1,str2) 连接两个字符串str1和str2,并将结果放入str1中
字符串比较:strcmp(str1,str2) 比较两个字符串str1和str2的大小
求字符串长度:strlen(str) 计算字符串的有效长度,不包括' '
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语言画上一个圆满的句号,这三道题和老师上课讲的例题差不多,但是自己做起来还是会出现一些小的问题,所以还需要多看书做一些练习,把问题及时解决掉,这样才能真正的掌握。