一。知识点:
字符串和字符指针:如果定义一个字符指针接收字符串常量的值,该指针就指向字符串的首字符。这样,字符数组和字符指针都可以用来处理字符串。
字符数组与字符指针都可以处理字符串,但两者之间有重要区别。
char sa[]=''this is a ttring";
char *sp="this is astring";
定义自古指针后,如果没有对它赋值,指针的值是不确定的,不能明确它指向的内存单元。因此,如果引用未赋值的指针,可能会出现难以预料的结果。例如:
char *;
scanf(“%s“,s);
为尽量避免引用为赋值的指针所造成的危害,在定义指针时,可先将它的初值为空,如char *s=NULL;
二。常用的字符串处理函数
字符串的输入和输出:函数scanf()和gets()可用来输入字符串,而printf()和puts()输出字符串。它们在系统文件stdio.h中定义。
1.scanf:格式控制字符串中使用格式控制说明%s,输入参数必须是字符型组名。该函数遇回车或空格输入结束,并自动将输入的数据和字符串结束符‘ ’送入数组中.
2.printf:格式控制字符串中相应的格式控制说明用%s,输出参数可以是字符数组名或字符串常量。输出‘ ’结束。例如:printf(“%s”,s);
3.字符串输入函数gets(s):参数s是字符数组名。函数从输入得到一个字符串,遇回车输入结束,自动将输入的数据和‘ ’送入数组中。采用函数gets()输入的字符串允许带空格。实际上函数gets()有返回值,如果输入成功则返回值是字符串第一个字符的地址,如果输入失败则返回NULL。但一般情况下使用gets()主要是为了输入字符串,而不关心它的返回值.
4.字符串输出函数puts(s):参数s可以是字符数组名或字符串常量。输出时遇‘ ’自动将其转换为‘ ’,即输出字符串后换行。同样函数puts()也有返回值,如果成功执行了输出字符串的操作,则返回换行符号‘ ’,否则返回EOF.
字符串比较函数strcmp(s1,s2)
和函数strcpy()中对参数的要求不同,函数strcmp()中的参数s1和s2可以是字符数组名或字符串常量。函数strcmp()返回一个整数,给出字符串s1和s2的比较结果:
若s1和s2相等,返回0。
若s1大于s2,返回一个正数。
若s1小于s2,则返回一个负数。
三。结构的概念与定义:
结构是C语言中一种新的构造数据类型,它能够把有内在联系的不同类型的数据汇聚成一个整体,使它们相互关联;同时,结构又是一个变量的集合,可以按照对基本数据类型的操作方法单独使用其成员变量。
结构的嵌套定义:
在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。
结构变量的定义和初始化:
1)单独定义:先定义结构类型,再定义具有这种结构类型的变量;
2)混合定义:在定义结构类型的同时定义结构体变量;
struct 结构名{
类型名 结构成员名1;
类型名 结构成员2;
}结构变量名表;
3)无类型名定义:在定义结构体变量时省略结构体名;
struct{
类型名 结构成员1;
类型名 结构成员2;
结构变量名表;
1.找出最长的字符串:输入5个字符串,输出其中最长的字符串。
#include<stdio.h> #include<string.h> int main() { int i; printf("输入五个字符串:"); char sx[80],smax[80]; scanf("%s",sx); strcpy(smax,sx); for(i=1;i<5;i++){ scanf("%s",sx); if(strcmp(smax,sx)<0) strcpy(smax,sx); } printf("max is %s ",smax); return 0; }
2.分类统计字符个数:输入一行文字,统计其中的大写字母、小写字母、空格、数字以及其他字符各有多少。
#include"stdio.h" int main() { int a,dx=0,xx=0,kg=0,sz=0,qt=0; while((a=getchar())!=' ') { if(a>='A'&&a<='Z') dx++; else if(a>='a'&&a<='z') xx++; else if(a==' ') kg++; else if(a>='0'&&a<='9') sz++; else qt++; } printf("大写字母有:%d ",dx); printf("小写字母有:%d ",xx); printf("空格有:%d ",kg); printf("数字有:%d ",sz); printf("其他字符有:%d ",qt); return 0; }
3. 学生信息管理系统。
假设学生的基本信息包括学号、姓名,三门课程成绩以及个人平均成绩,且最多需要处理50名学生的数据,实现如下功能。
(1)输入学生基本信息
(2)输出学生基本信息
(3)计算每个学生的平均成绩
(4)按姓名查找学生基本信息
#include"stdio.h" #include"string.h" struct student_list{ int num; char name[50]; int computer,english,math; double average; }; int count = 0; void new_student(struct student_list students[] ); void search_student(struct student_list students[],char *name); void print_student(struct student_list students[]); int main() { int choice; char name[50]; struct student_list students[50]; do{ printf("******学生的基本信息****** "); printf(" 1:新建 "); printf(" 2:查询 "); printf(" 3:输出 "); printf(" 0:退出 "); printf("请选择功能:"); scanf("%d",&choice); switch(choice){ case 1: new_student(students); break; case 2: printf("请输入要查找的学生姓名:"); scanf("%s",name); search_student(students,name); break; case 3:print_student(students); break; case 0: break; } }while(choice !=0); printf("谢谢! "); return 0; } void print_student(struct student_list students[]) { printf("学生信息列表的学生信息如下: "); int i; for(i=0;i<count;i++) { printf("%s %d %d %d %.2lf %d ",students[i].name,students[i].computer,students[i].english,students[i].math,students[i].average,students[i].num); } } void new_student(struct student_list students[]) { struct student_list f; if(count ==50){ printf("信息表已满! "); return; } printf("请输入新学生的姓名:"); scanf("%s",f.name); printf("请输入新学生的学号:"); scanf("%d",&f.num); printf("请输入新新学生的计算机成绩:"); scanf("%d",&f.computer); printf("请输入新新学生的英语成绩:"); scanf("%d",&f.math); printf("请输入新新学生的数学成绩:"); scanf("%d",&f.english); students[count]=f; count++; } void search_student(struct student_list students[],char*name) { int i,flag=0; if(count ==0){ printf("学生信息列表是空的 "); return; } for(i=0;i<count;i++) if(strcmp(name,students[i].name)==0){ flag=1; break; } if(flag){ printf("姓名:%s ",students[i].name); printf("计算机成绩:%d ",students[i].computer); printf("数学成绩:%d ",students[i].math); printf("英语成绩:%d ",students[i].english); printf("平均成绩:%.2lf ",students[i].average=(students[i].computer+students[i].math+students[i].english)/3.0); printf("学号:%d ",students[i].num); } else printf("无此学生信息"); }
二。实验心得
这次作业真的好难,应用了许许多多的知识点。在应用的同时,也出现了不少的错误,经过同学的帮助,解决了问题。