当前位置:文档之家› C语言实验-第七章-第九章2

C语言实验-第七章-第九章2

实验七:指针的应用【实验目的】1.掌握指针和指针变量,内存单元和地址、变量与地址、数组与地址的关系;2.掌握指针变量的定义和初始化,指针变量的引用方式;3.能正确使用数组的指针和指向数组的指针变量;【实验内容】1.填空题输入一个字符串,将其中的大写字母转换成小写字母,然后输出本程序主要是比较scanf()输入和gets()输入的区别#include <stdio.h>void main(){ char s[20];char *p=s;scanf(“%s”,p); /*注意用scanf()输入和gets()输入的区别*/while( 1 ){if( 2 ) *p=*p+ (‘a’-‘A’);p++ ;}puts ( 3 );}答案:1、*p!=’\0’2、(*p>='A')&&(*p<='Z')3、s运行结果:输入:Program输出:program输入:This is Program输出:this提示:scanf ()输入时遇到空格认为字符串结束,用gets()输入时只有遇到回车才认为字符串结束。

如键入any boy并回车,则2。

补充程序题输入15个整数存入一维数组,再按逆序重新调整该数组中元素的顺序然后再输出。

下面给出部分程序的内容,请将程序补充完整,然后上机调试。

部分程序清单如下:#include <stdio.h>void main(){ int a[15],*p1,*p2,x;for(p1=a;p1<a+15;p1++)scanf("%d",p1);for(p1=a,p2=a+14;p1<a+7;p1++,p2--){ x=*p1;*p1=*p2;*p2=x;}……}答案:for(p1=a;p1!=a+15;p1++)printf("%d ",*p1); // %d后面有一个空格运行结果:输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15输出:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1提示:(1)在整型数组中,没有结束标志,必须依靠数组中数据元素的个数控制循环次数。

(2)在for(p1=a;p1<a+15;p1++)中不可将a来当做指针变量进行++,因为a为常量。

(3)数组是顺序存储,因此可以用p1++后的值与a+15的比较来控制循环次数,需要注意的是,p1++不意味着p1的值加1。

3.改错题:下面程序是用指针法将一个字符串a复制到字符串b中,void main(){char a[]="I am a boy.",b[20], *p1,*p2;int i;p1=a;p2=b;for( ; *p1!=’\0’;p1++,p2++)*p2=*p1;p2=’\0’;printf("string a is:%s\n",a);printf("string b is:");for(i=0;b[i]!=’\0’;i++)printf("%c",b[i]);}答案:1.将第一个for循环改为while循环;2.将第二个for循环改用一条语句完成;第八章结构体与共同体的应用【实验目的】1.掌握结构体类型变量的定义、初始化和使用;2.掌握结构体类型数组的概念和使用;3.了解共用体的概念与使用。

【实验内容】1.填空题(1)结构体变量案例。

编程输出两个小孩的记录信息。

1 个男孩和1 个女孩,其姓名首字母分别为“R”和“H”;男孩15岁,女孩比男孩小1岁子;男孩的成绩为75,女孩的成绩为82。

该案例涉及结构体变量的定义和结构体变量成员的引用。

# include <stdio.h>void main(){struct childrec /*定义结构体类型*/{char initial; /*姓名首字母*/int age; /*年龄*/int grade; /*成绩*/}boy,girl;boy.initial=’R’;girl. initial=’H’;12girl.age=boy.age-1;girl.grade=82;printf(“boy:%c is %d years old and got a grade of %d\n”, 3 );printf(“girl:%c is %d years old and got a grade of%d\n”, 4 );}答案:1、boy.age=15;2、boy.grade=75;3、boy.initial,boy.age,boy.grade4、girl.initial,girl.age,girl.grade运行结果:boy:R is 15 years old and got a grade of 75girl:H is 14 years old and got a grade of 82提示:(1)结构体变量的定义:struct 结构体名{成员变量定义}结构体变量列表;即在定义结构体的同时定义结构体变量。

(2)结构体成员变量的引用:结构体变量名.成员变量名(2)结构体数组案例。

设有三个候选人,Zhang,Wang和Li,设有10个人参加投票,每次输入一个得票的候选人的名字,要求最后输出各候选人的得票结果,请设计程序对候选人的得票数进行统计。

该案例涉及结构体变量的定义、初始化和结构体变量成员的引用。

# include <stdio.h># include <string.h>struct person /*候选人信息结构体,这是一个全局的结构体数组*/{char name[20]; /*姓名*/int count; /*得票数*/}stu[3]={“Zhang”,0,”Wang”,0,”Li”,0};void main(){int i,j;char leader_name[20];for(i=1;i<=5;i++) /*设有5个人参加投票*/{scanf(“%s”, leader_name); /*输入得票人姓名*/for(j=0;j<3;j++)if(strcmp(leader_name,stu[j].name)==0)1 ;}printf(“\n”);for(i=0; 2 ; 3 )p rintf(“%5s: %d\n”, stu[i].name , 4 );}答案:1、stu[j].count++2、i<33、i++输入:ZhangWangLiZhangWang运行结果:Zhang:2Wang:2Li:1提示:(1)结构体变量还可以是数组。

如stu[3],表示创建了3个结构体变量stu[0]、stu[1]、stu[2](2)结构体变量可以在定义的同时赋初值,即初始化。

如:stu[3]={“Zhang”,0,”Wang”,0,”Li”,0};大括号内分别为stu[0]的成员变量值、stu[1]的成员变量值、stu[2]的成员变量值,与二维数组的初始化类似。

(3)结构体指针案例。

有一个结构体变量stu,内含学生学号、姓名和三门课成绩。

要求在mian()中赋以值,在函数print中打印输出。

本题涉及结构体指针作为函数参数的使用。

#include <stdio.h>#include <string.h>#define FORMAT “%d\n %s\n %.1f\n %.1f\n %.1f\n”struct student{int num;char name[20];float score[3];};void print(struct student *p);void main(){struct student stu;stu.num=12345;strcpy(,”Li Min”);stu.score[0]=68;stu.score[1]=87;stu.score[2]=98.5f;print(&stu);}void print(struct student *p){printf(FORMAT,p->num, );printf(“\n”) ;}答案:p->name ,p->score[0], p->score[1], p->score[2]运行结果:12345Li Min68.087.098.5提示:(1)结构体变量的定义还可以通过如下形式定义:struct 结构体名结构体变量名;如:struct student stu;(2)结构体除了使用结构体变量引用以外,还可以使用结构体指针引用。

结构体指针定义:struct 结构体名*指针变量名如:struct student *p;结构体指针存放结构体在内存的初始地址。

(3)使用结构体指针引用结构体成员变量:结构体指针变量名—>成员变量名如:p->name2.读程题共用体案例。

现需要输入学生成绩,学生分为小学生和初中生,小学生成绩为整型,初中生成绩为浮点型。

其他信息一致,使用共用体来处理(将小学生与初中生的成绩放在同一段内存中)。

本题涉及共用体的应用。

#include <stdio.h>#include <string.h>struct student{char cate[15];char name[15];union{int grade_xiao;float grade_chu;}grade;}stu[2];void main(){int i;char *p,*q;for(i=0;i<2;i++){scanf("%s %s",stu[i].cate,stu[i].name);if(strcmp(stu[i].cate,"xiaoxue")==0)scanf("%d",&stu[i].grade.grade_xiao);if(strcmp(stu[i].cate,"chuzhong")==0)scanf("%f",&stu[i].grade.grade_chu);}for(i=0;i<2;i++){if(strcmp(stu[i].cate,"xiaoxue")==0)printf("%s,%s,%d\n",stu[i].cate,stu[i].name,stu[i].grade.grade_xiao);elseprintf("%s,%s,%.1f\n",stu[i].cate,stu[i].name,stu[i].grade.grade_chu);}}输入:xiaoxuezhangli85chuzhongwangming84.5运行结果:xiaoxue,zhangli,85chuzhong,wangming,84.5提示:(1)共用体变量多占的内存长度等于最长的成员变量的长度。

相关主题