资源描述
<p><span id="_baidu_bookmark_start_0" style="display: none; line-height: 0px;"></span>实验一、C语言回顾
复习C语言中关于函数、数组、指针、结构体等得知识,为数据结构实验做准备。
【实验学时】
2学时
【实验预习】
回答以下问题:
1、数组得定义与引用
数组定义
在定义数组时,应该说明数组得名字、类型、大小与维数。 数组定义形式
类型说明符 数组名[常量表达式] 数组元素得引用方法 数组名[下标]
2、函数得定义与调用
无参函数
类型说明符 函数名() { 函数体 };
有参函数
类型说明符 函数名(形式参数表列) { 函数体 };
函数调用 函数名([实参表列])
3、指针得基本概念
指针一般指向一个函数或一个变量。在使用一个指针时,一个程序既可以直接使用这个指针所储存得内存地址,又可以使用这个地址里储存得函数得值.在计算机语言中,由于通过地址能找到所需得变量单元,可以说,地址指向该变量单元。因此,将地址形象化得称为“指针”。意思就是通过它能找到以它为地址得内存单元。
4、结构体类型变量得定义方法
结构体类型定义得一般形式 struct结构体名
{ 成员表};
struct结构体名 { 成员表 }变量表;
5、结构体成员得访问方法
结构体变量名、成员名 (*指针变量名)、成员名 指针变量名—〉成员名
【实验内容与要求】
1、完成并调试程序:实现对一维数组元素得升序排序并输出结果(横线处仅能补充一条语句).
#include〈stdio、h>
void sort(int a[],int n);_________________________;
int main(){
int s[10]={1,—9,89,120,76,45,43,6,7,2},i;
________________________________;
for(i=0;i〈10;i++)
printf("%4d",s[i]);
printf("\n");
return 0;
}
void sort(int a[],int n) { /*补充完整排序函数,可用选择或冒泡排序*/
}
#include〈stdio、h>
void sort(int a[],int n);
int main()
{
int s[10]={1,—9,89,120,76,45,43,6,7,2},i;
sort(s,10);
for(i=0;i<10;i++)
printf(”%4d”,s[i]);
printf("\n");
return 0;
}
void sort(int a[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
ﻩﻩfor(j=0;j<n-i—1;j++)
ﻩ if(a[j]>a[j+1])
ﻩ {
ﻩﻩ t=a[j];
ﻩ a[j]=a[j+1];
ﻩﻩ a[j+1]=t;
}
}
}
2、完成并调试程序:字符串连接程序,不使用系统提供得字符串连接函数,将第二个字符串连接至第一个字符串后。(横线处仅能补充一条语句).
#include〈stdio、h>
#define M 80
int main(){
char sub1[M],sub2[M];
ﻩchar *ps1=sub1,*ps2=sub2;
ﻩprintf("please input strings:\n");
printf("string1:");
ﻩgets(ps1);
printf("string2:”);
ﻩgets(ps2);
ﻩwhile(*ps1!=’\0')
_________ps1++________________;
ﻩwhile(*ps2!=’\0’)
_*(ps1++)=*(sp2++)________________________;
*ps1='\0';
printf("new string:”);
puts(sub1);
ﻩreturn 0;
}
3、完成并调试程序:结构体与数组。实现学生数据得输入、输出与按成绩排序.(横线处仅能补充一条语句)。
#include<stdio、h〉 h="">struct student{
int sno;
char sname[10];
float grade;
};
void inputData(struct student s[],int n);
void printData(struct student s[],int n);
void sortData(struct student s[],int n);
int main(){
struct student a[100];
int n=3;
inputData(a,n);
sortData(a,n);
printData(a,n);
return 0;
}
void inputData(struct student s[],int n) {
int i;
for(i=0;i〈n;i++){
_ scanf(“%s%s%d”,s[i]、sno,s[i]、sname,s[i]、grade)___________________________________________________; /*读入数据*/
}
}
void printData(struct student s[],int n) {
int i;
printf(”\n======================\n");
for(i=0;i<n;i++){
__printf(“\n%s%s%4d”,s[i]、sno,s[i]、sname,s[i]、grade)_______________________________________; /*输出数据*/
}
}
void sortData(struct student s[],int n) {
int i,j;
struct student t;
for(i=0;i<n—1;i++){
for(j=i+1;j〈n;j++)
if(s[i]、grade<s[j]、grade) {
_______t=s[i]______; /*实现数据交换*/
_____s[i]=s[j]________;
_s[j]=t___________;
}
}
}
4、完成并调试程序:结构体与指针。实现学生数据得输入、输出。(横线处仅能补充一条语句).
#include<stdio、h〉
#include</p><stdlib、h〉 ypedef="" uct="" nt="" t="" ct="" tu="" void="" int="" h="inputData();" eturn="" stu="" q="NULL,*head=NULL;" char="" p="(STU">sno=sno;
strcpy(p->sname,sname);
p->grade=grade;
p->next=NULL;
if(head==NULL) head=p;
else q->next=p;
q=p;
scanf("%d%s%f",&sno,sname,&grade);
}
return head;
}
void printData( STU *list) {
STU *p=list;
printf(”\n======================\n");
while(p!=NULL) {
__printf(“%4d\n”)____________________________________________; /*输出数据*/
p=p—>next;
}
}
回答问题:此链表创建得就是有头结点链表还就是无头结点链表?_____有_________。
课后作业:完成下面三个程序
1、 在一组升序排列得整数数组中插入一数据,并使该数组仍保持升序,最后输出插入后得数组。
#include<stdio、h>int main()
{
ﻩint x[10+1];
int i;
ﻩint a;
ﻩint j,k;
for(i=0;i〈20;i+=2){
ﻩx[i/2]=i;
ﻩ}
for(i=0;i<10;i++){
printf("%3d",x[i]);
ﻩ}
scanf(”%d”,&a);
for(i=0;i〈10;i++){
if(a>x[i]){
ﻩ if(i==10—1){
ﻩ x[10]=a;
ﻩ}
}
ﻩ else{
ﻩﻩj=i;
ﻩ for(k=10—1;k>=j;k--){
ﻩx[k+1]=x[k];
ﻩﻩ }
ﻩﻩ x[j]=a;
ﻩﻩ break;
ﻩﻩ}
ﻩ}
for(i=0;i<11;i++){
ﻩ printf("%3d”,x[i]);
}
ﻩreturn 0;
}
2、 输入4*3列矩阵,并输出最大数与最小数所在得行与列。
#include <stdio、h>
int main()
{
int a[3][4]={0};
int i,j,max,max_i,max_j;
printf("Please input a 3X4 matrix:\n");
for(i=0;i〈3;i++)
for(j=0;j<4;j++)
scanf(”%d",&a[i][j]);
max=a[0][0];
max_i=max_j=0;
for(i=0;i〈3;i++)
for(j=0;j<4;j++)
if(a[i][j]〉max)
{
max=a[i][j];
max_i=i;
max_j=j;
}
printf(”The max is %d,row %,col %d\n",max,max_i,max_j);
}
3、 从键盘输入3名学生得学号、姓名与C语言成绩,输出最高分,最低分,平均分,并按由高到低得顺序输出学生得成绩.
#include<stdio、h〉
struct Stu
{
int num;
char name[20];
float score;
};
void Input(struct Stu s[])
{
int i;
for(i=0;i〈3;++i)
scanf("%d%s%f”,&s[i]、num,&s[i]、name,&s[i]、score);
}
void Sort(struct Stu *a[])
{
int i,j;
struct Stu *t,**p;
for(i=0;i<2;++i) p="a+i;">score<a[j]->score)p=a+j;
if(p!=a+j)
{
t=*p;
*p=a[i];
a[i]=t;
}
}
}
int main()
{
struct Stu s[3],*a[3];
int i;
Input(s);
for(i=0;i〈3;++i)
a[i]=&s[i];
Sort(a);
for(i=0;i<3;++i)
printf("%d %s %、2f\n",a[i]->num,a[i]—>name,a[i]—>score);
return 0;
}
<!--2;++i)--><!--stdio、h--></stdio、h></stdlib、h〉><!--stdio、h〉-->
展开阅读全文