实验1 顺序程序设计
时间:20##年10月16日(周三)2:30-4:30 PM
地点:网络中心楼201机房(数学教室楼南面)
实验目的: 初步掌握VC编辑、编译、连接和运行C程序。
实验内容:
1)输入并运行P37习题3.1和3.2的程序。
2)输入并运行P55习题3.3的程序。
3)输入并运行P59习题3.4的程序。
4)输入并运行P65习题3.5的程序。
实验2 最简单的C程序设计
时间:20##年10月23日(周三)2:30-4:30 PM
地点:网络中心楼201机房(数学教室楼南面)
实验目的:掌握最简单C程序的设计
实验内容:编写程序
1) P84:习题6 。
2) P84:习题7。
实验3 逻辑结构程序设计
时间: 20##年10月30日添加到日历(周三)2:30-4:30 PM
地点:网络中心楼201机房
实验目的: 学会正确使用if语句和switch语句
实验内容:编程
1、实现函数: y=x+1 x>0
y=x x=0
y=x-1 x<0
2、由键盘输入a,b,c三个整数,求较大数(用if …else)
3、从键盘输入一个百分制成绩,输出相应成绩等级 ,90分以上为‘excellent’,70~89分为‘good’,60~69分为‘pass’,60分以下为‘failure’。(用switch,if …else两种语句)
4、求整数1~100所有偶数和(用for,while,do…while三种循环编程)
实验4 循环结构
时间: 20##年11月6日添加到日历(周三)2:30-4:30 PM
地点:网络中心楼201机房
实验目的:熟悉while、do-while和for循环语句
编程实验内容:
1、输出3到500间所有素数。
2、P140 习题4
3. 键盘输入n,求
P140 习题6
实验5 数组
时间: 20##年11月13日(周三)2:30-4:30 PM
地点:网络中心楼201机房
实验目的: 掌握一维数组定义、赋值和输入输出方法
编程实验内容:
1.P140 习题7
2、用数组求序列前20项 :2/1,3/2,5/3,8/5,13/8,21/13,...
3.分别用起泡法、选择法对{1,0,4,8,12,65,-76,100,-45,123} 10个数排序(由小到大),给出每趟比较的结果。
实验6 数组
时间: 20##年11月20日(周三)2:30-4:30 PM
地点:网络中心楼201机房
实验目的:
编程实验内容:
1. P168 习题3
2. P168 习题4
3. P169 习题12
实验7 函数
时间: 20##年11月27日添加到日历(周三)2:30-4:30 PM
地点:网络中心楼201机房
实验目的:掌握多文件函数程序的编译和运行。
编程实验内容:
1.用函数求3个数中较大者
2.用函数求闰年
实验8 函数
时间: 20##年12月4日(周三)2:30-4:30 PM
地点:网络中心楼201机房
实验目的: 掌握多文件函数程序的编译和运行。
编程实验内容:
1.用多文件函数键盘输入k,输出3到k间所有素数。
2.用多文件函数输入一个百分制成绩,输出相应成绩等级
第二篇:C语言程序设计上机实验指导
C语言程序设计 上机实验指导
i
目录
实验一 c语言程序的开发环境 ....................................................................... 1 实验二 数据类型描述 .............................................................................................. 3 实验三 顺序结构 .......................................................................................................... 6 实验四 选择结构 .......................................................................................................... 9 实验五 循环结构 ........................................................................................................ 12 实验六 函数与编译预处理 ................................................................................ 16 实验七 数组 .................................................................................................................... 19 实验八 指针 .................................................................................................................... 23 实验九 结构体数据类型与链表 .................................................................... 25 实验十 共用体与枚举类型 ................................................................................... 27 实验十一 文件 ................................................................................................................. 29
ii
实验一 c语言程序的开发环境
一、目的、要求
1、使学生了解c语言不同于其他语言的特点。
2、掌握在c语言的开发环境中如何实现简单程序的编辑、运行,熟悉c程序的开发环境及上机步骤。
3、通过简单的c程序,熟悉c语言程序的结构特点,掌握其基本结构框架。
4、通过实践,掌握c源程序的书写格式。
二、预习内容
1、熟悉Turbo c的集成开发环境,掌握启动、退出、编辑运行的操作。
2、了解基本命令及函数:include<stdio.h>,include<math.h>,main(),
printf(),scanf()等。
三、上机内容
1、输入下列程序,记录在Turbo c 下的操作方法。
#include <stdio.h>
main()
{
printf(“I am a student!”);
}
环境的启动操作:
程序的编译方法:快捷键是 ;菜单操作是
程序的保存方法:快捷键是 ;菜单操作是
程序的运行方法:快捷键是 ;菜单操作是
运行结构的查看:快捷键是 ;菜单操作是
环境的退出操作:快捷键是 ;菜单操作是
2、预测结果并上机验证
#include <stdio.h>
main()
{
printf(“************\n”);
printf(“I am a student!\n”);
printf(“************\n”);
}
预测的结果是: 上机验证的结果是:
1
3、预测结果并上机验证
#include<stdio.h>
#include<math.h>
main()
{
int a,b,sum;
scanf(“%d,%d”,&a,&b);
sum=a+abs(b);
printf(“a and b is %d”,sum);
}
程序运行后输入:5,-5
预测的结果是:
上机验证的结果是:
4、分析程序的功能,并上机验证
#include<stdio.h>
#include<math.h>
main()
{
int a,b,sum;
scanf(“%d,%d”,&a,&b);
sum=abs(a+b);
printf(“%d+%d = %d”,a,b,sum);
}
程序的功能是:
上机验证的结果是:
5、试编写程序实现下列输出
*
* *
* * *
* * * *
编写的程序为:
2
实验二 数据类型描述
一、目的、要求
1、了解c语言的数据类型的种类。
3、熟悉c语言的变量与常量的定义与使用;符号常量的使用及合法标识符的命 名原则。
3、掌握数据类型的定义与使用。
4、掌握相关的算术运算符及相应表达式
5、熟悉不同数据类型间的相互转换。
二、预习内容
1、继续熟悉Turbo c的集成开发环境,掌握启动、退出、编辑运行的操作。
2、了解各种变量及常量的定义,熟悉标识符的正确含义。
3、各种运算符的结合规则及优先级
三、上机内容
1、预测结果并上机验证
(1) main()
{
int a,b;
a=b=3;
printf(“a=%d,b=%d”,a,b);
}
预测的结果是:
上机验证的结果是:
若将以上程序进行改写,编辑如下:
main()
{
int a,b;
a=3;
b=3.1;
printf(“a=%d,b=%d”,a,b);
}
则程序运行的结果是:
由此知,若赋值号左右数据类型不一致时,c语言将
(2)现有程序如下:
1 main()
2 {
3 int a=1,b=2;
4 printf(“%d”,(a=a+b,b=b+a));
5 }
程序运行的结果是:
3
若将以上程序第四行进行改写,编辑如下:
printf(“%d”,a=a+b,b=b+a);
则程序运行的结果是:
对比以上两程序,结果不同的原因在于
(3) 若有以下程序段:
int c1=2,c2=4,c3;
c3=1.0/c2*c1;
则执行后,c3中的值是 ;
若将程序段改为:
int c1=1,c2=2,c3;
c3=1/c2*c1;
则执行后,c3中的值是
分析c3所得结果,其中的关键在于
2、填空题
(1) main()
{ int a=7, b=10;
a=a+b; b=a-b; a=a-b;
printf(“%d,%d\n”, a, b );
}
程序运行的功能是:
(2) main()
{ int a=0;
a+=(a=8);
printf("%d\n",a);
}
程序运行的结果是:
(3) main()
{
int a=2,b=5;
int m=3,n;
float c=2.1,d=4.5;
n=a/m+b*c-d/m;
printf(“%d”,n);
}
程序运行的结果是:
(4) main ()
{ int x=1;
printf(“%d %d\n”,++x,x++);
}
运行该程序的输出结果是
(5) main()
4
{int x,y,z;
x=y=1;
z+=x+=y;
x=z++;
y=++x;
z=x+++y;
printf(“x=%d,y=%d,z=%d”,x,y,z); }
运行该程序的输出结果是
3、改错题
#include <math.h>
#define STA 30
main()
{int a,b=3;
A=3*PI*SIN(b);
STA=3*STA;
printf(“%d\n”,2a);
printf(“%d”,STA);
}
正确的程序应改为:
5
实验三 顺序结构
一、目的、要求
1、了解c语言的基本语句的概念。
2、了解数据的输入输出在c语言中的实现方法。
3、掌握数据的输入输出函数的使用;熟练掌握格式输入输出函数。
4、设计简单的顺序结构程序。
二、预习内容
1、了解c语言的基本结构。
2、熟悉c语言输入输出函数的使用。
三、上机内容
1、写出以下程序的运行结果
(1) 以下程序的输出结果是 。
main()
{
unsigned int a=65536; int b;
printf(“%d\n”,b=a) ;
}
分析原因得知:
(2) 若有以下程序
main()
{ char a;
a='a'-'A'+‘B';
printf("%c\n",a);
}
执行后输出结果是 。
(3) main()
{
int a,b;
a=3;
b=3.1;
printf(“a=%d”,a,b);
}
执行后的输出结果是:
分析原因得知:
2、填空题
(1)若有程序
main()
{ int i,j;
scanf("i=%d,j=%d",&i,&j);
printf("i=%d,j=%d\n ",i,j);
6
}
要求给I赋5,给j赋10,则应该从键盘输入
(2) 输入并运行以下程序:
1 main( )
2 {int a,b;
3 float d,e;
4 char c1,c2;
5 double f,g;
6 long m,n;
7 unsigned int p,q;
8 a=61;b=62;
9 c1=’a’;c2=’b’;
10 d=3.56;e=-6.87;
11 f=3157.890121;g=0.123456789;
12 m=50000;n=-60000;
13 p=32768;q=40000;
14 printf(“a=%d,b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n”,
a,b,c1,c2,d,e);
15 printf(“f=%15.6f,g=%15.2f\n m=%ld,n=%ld\n
16 p=%u,q=%u\n”,f,g,m,n,p,q);}
(a)程序的输出结果是:
在以上基础上,做以下改动:
(b)将程序第8—13行改为
a=61;b=62;
c1=a;c2=b;
f=3157.890121;g=0.123456789;
d=f;e=g;
p=a=m=50000;q=b=n=-60000;
运行程序,所得结果是 。
(c)在(b)的基础上将printf语句改为:
printf(“a=%d,b=%d\nc1=%c,c2=%c\nd=%15.6f,e=%15.6f\n”, a,b,c1,c2,d,e);
printf(“f=%f,g=%f\n m=%d,n=%d\n p=%d,q=%d\n”,
f,g,m,n,p,q);}
运行程序,所得结果是 。
(d)将p,q改用%o格式符输出。
运行程序,所得结果是 。
(e)改用scanf函数输入数据而不用赋值语句,scanf函数如下: 7
scanf(“%d,%d,%c,%c,%f,%f,%lf,%lf,%ld,%ld,%u,%u”,
&a,&b,&c1,&c2,&d,&e,&f,&g,&m,&n,&p,&q);
输入的数据如下:
61,62,a,b,3.56,-6.87,3,157.890121,0.123456789,50000,-60000,37678,40000
(说明:lf和ld格式符分别用于double型和long型数据)分析运行结果。
三、编程题
编辑程序,输入学生的三个课程成绩(考虑数据类型)。
8
实验四 选择结构
一、目的、要求
1、掌握关系、逻辑运算符及其优先次序以及关系表达式的使用。
2、重点掌握if语句的使用形式(了解各种形式的使用)。
3、熟练掌握if语句的嵌套(清楚if??.else的配对关系)。
4、掌握选择结构的程序设计。
5、熟练掌握多分支switch语句的格式、功能及其使用。
二、预习内容
1、熟悉逻辑运算符、关系运算符的优先级,掌握表达式的书写。
2、熟悉各种分支语句。
3、掌握控制语句break的使用。
三、上机内容
1、写出以下程序的运行结果
(1)若有以下程序
main()
{
int a=4,b=3,c=5,t=0;
if(a<b)t=a;a=b;b=t;
if(a<c)t=a;a=c;c=t;
printf("%d %d %d\n",a,b,c);
}
执行后输出结果为 。
(2) 若有以下程序
main()
{ int p,a=5;
if(p=a!=0)
printf("%d\n",p);
else
printf("%d\n",p+2);
}
执行后输出结果是 。
(3) 以下程序输出的结果是 。
main()
{ int a=5,b=4,c=3,d;
d=(a>b>c);
printf("%d\n",d);
}
(4) 若从键盘输入58,则以下程序输出的结果是 。 main()
{ int a;
9
scanf("%d",&a);
if(a>50) printf("%d",a);
if(a>40) printf("%d ",a);
if(a>30) printf("%d ",a);
}
(5) 有如下程序
main()
{ int x=1,a=0,b=0;
switch(x)
{case 0: b++;
case 1: a++;
case 2: a++;b++;
}
printf(“a=%d,b=%d\n ”,a,b);
}
该程序的输出结果是 。
(6) 有以下程序
main()
{ inta=15,b=21,m= 0;
switch(a%3)
{ case0:m++;break;
case1:m++;
switch(b%2)
{ default:m++;
case0:m++;break;
}
}
printf(“%d\n”,m);
}
程序运行后的输出结果是 。
(7) 有以下程序
main()
{ int i=1,j=1,k=2;
if((j++||k++)&&i++);
printf("%d,%d,%d\n",i,j,k);
}
执行后输出的结果是 。
(8) 设 a、b、C、d、m、n均为 int型变量,且 a=5、b=6、c=7、d=8、m=2、
n=2,则逻辑表达式 (m=a>b)&&(n=c>d)运算后,n的值为 。
(9) 运行程序并回答问题
main( )
{ int a,b,max,min;
scanf("%d%d",&a,&b);
10
if(a>b)
{ max=a;min=b;}
else
{ min=a;max=b; }
printf("max=%d,min=%d\n",max,min);
}
问题:
a、此程序的功能是
b、请用条件表达式语句(?:)修改程序使之完成相同的功能,其语句
是 。
2、编程
(1) 有一函数 编程求当分别输入x的值为0.3,3.9,11时,y的值。
(2)有一个不多于3位的整数,要求:
a)判断其是正数还是负数,并求出它是几位数;
b)分别打印出每一位数字;
c)按逆序打印出各位数字,例如原数为-321,应输出-123。
(3) 编辑程序实现:当用户输入字母后,全部以大写格式输出,如果不是字母
则输出提示:error
(4) 随机输入5个整型数据作为学生的课程成绩,编程实现由小到大排序输出
(对比第三章编程题,比较他们的优缺点)。
11
实验五 循环结构
一、目的、要求
1、了解goto语句及利用goto语句构成的循环。
2、掌握while语句,do??while语句,及for语句实现循环的方法及过程。
3、掌握循环语句的嵌套使用,重点是for循环。
4、熟悉break语句及continue语句在循环中的使用,区分其不同。
二、预习内容
1、熟悉while语句,do??while语句,及for语句,掌握其运行过程。
三、上机内容
1、读程序,写出运行结果
(1)以下程序运行后的输出结果是 。
main()
{ int i=10, j=0 ;
do
{ j=j+i; i--;
while(i>2);
printf(“%d\n”,j);
}
(2) 设有以下程序:
main()
{ int a1,a2;
scanf(“%d”,&a2);
while(a2!=0)
{ a1=a2%10;
a2=a2/10;
printf(“%d”,a1);
}
}
程序运行后,如果从键盘上输入456;则输出结果为 。
(3) 以下程序运行后的输出结果是 。
main()
{ int x=15;
while(x>10&&x<50)
{ x++;
if(x/3){x++;break;}
else continue;
}
printf(“%d\n”,x);
}
(4) 有如下程序
12
main()
{ int i,sum=0;
for(i=1;i<=3;sum++) sum+=i;
printf(“%d\n”,sum);
}
该程序的执行结果是
(5) 若输入字符串:abcde<回车>, 则以下while循环体将执行 次。
while((ch=getchar()) = =’e’) printf(“*”);
(6) 以下程序的输出结果是
main()
{ int i=0,a=0;
while(i<20)
{ for(;;)
{ if((i%10)= =0) break;
else i--;
}
i+=11; a+=i;
}
printf("%d\n",a);
}
2、程序填空
(1) 请你在下面的函数中填空,完成求π的功能。其中函数pi的功能是根据
以下近似公式求π值:(π*π)/6=1+1/(2*2)+1/(3*3)+..+1/(n*n)
#include “math.h”
double pi(long n)
{ double s=0.0;
long i;
for(i=1;i<=n;i++) s=s +
return(sqrt(6*s));
}
(2) 以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位
学生的平均分并输出,补充实现该程序。
main()
{int n,k;
float score,sum,ave ;
sum=0.0;
for( )
{for(k=1;k<=4;k++)
{scanf(“%f”,&score);
;
13
}
ave=sum/4.0;
printf(“NO%d:%f\n” ,n,ave);
}
}
(3)下列程序的功能是计算表达式的值。该表达式如下所示。
1 1 1 1
—— + —— + ?? + ——— + ———
1*3 2*4 98*100 99*101
补充程序完成该功能。
#include “stiol.h”
main()
{flaot s;
int i;
for(________ ,________;________;_______) s+=_______;
printf(“s=________”,s);
}
(4) 利用以下程序,请填空完成如图所示的方阵输出。
13 14 15 16
9 10 11 12
5 6 7 8
1 2 3 4
main()
{int i,j,x;
for(j=4;________;j--)
{for(i=1;i<=4;i++)
{x=(j-1)*4+____________;
printf(“%4d”,x);
}
printf(“\n”);
}
}
(5) 以下程序的功能是输出100以内能被3整除且个位数为6的所有整数,请
填空补充完整。
main()
{int i,j;
for(i=0;_______________;i++)
{j=i*10+6;
if(_______________) continue;
printf(“%d”,j);
}
14
}
3、编程
(1) 百马百担。现有100匹马需驮100担货,其中大马驮3担,中马驮2担,
俩匹小马驮一担。编程计算需要如何安排。
(2) 利用循环嵌套实现如下图形输出。
A1
AB21
ABC321
ABCD4321
(3) 输入n个学生的成绩(n值由用户输入决定)。要求输出其中的最高分及最
低分(比较与前2章输入学生成绩题目的不同)。
(4) 输入一串字符串,以字符“#”表示输入结束。统计其中大写字母与小写
字母各出现了多少次。
15
实验六 函数与编译预处理
一、目的、要求
1、了解模块化程序设计思想。
2、熟悉函数的基本结构及定义方式。
3、重点掌握函数调用和参数传递。
4、掌握函数的嵌套调用,递归调用及递归函数设计。
5、了解变量的作用域与存储方式。
6、理解宏的概念,熟悉宏定义的方法,掌握其用法。
二、预习内容
1、熟悉函数的定义及使用。
2、重点掌握函数的调用及参数的传递。
3、了解变量的作用域。
4、掌握宏定义和文件包含等编译预处理命令
三、上机内容
1、预测结果,并验证
(1) 现有程序如下:
fun(int x, int y, int z)
{ z=x*x+y*y; }
main()
{ int a=31;
fun(5,2,a);
printf(“%d”,a);
}
程序的输出结果是 。
分析原因可知:_______________________________
(2) 有以下程序:
int a, b;
void fun()
{ a=100; b=200; }
main( )
{ int a=5, b=7;
fun();
printf(“%d%d \n”, a,b);
}
执行后的输出结果是 。
分析原因可知:___________________________________
(3) 有以下程序
int f(int n)
{ if(n==1) return 1;
16
else return f(n-1)+1;
}
main()
{ int i,j=0;
for(i=i;i<3;i++) j+=f(i);
printf(“%d\n”,j);
}
运行后的输出结果是 。
(4) 以下程序输出的最后一个值是 。
int ff(int n)
{ static int f=l;
f=f*n;
return f;
}
main()
{ int i;
for(i=1;i<=5;i++ ;printf(“%d\n”,ff(i));
}
(5) 设有以下函数:
1 f ( int a)
2 { int b=0;
3 static int c = 3;
4 b++; c++;
5 return(a+b+c);
6 }
如果在下面的程序中调用该函数,则输出结果是 。
main()
{ int a = 1, i;
for(i=0;i<3;i++) printf(“%d\n ”,f(a));
}
如果将f函数中的3句改写为 int c=3,结果输出为:_____________。
(6)下面程序的运行结果是 。
#define N 10
#define s(x) x*x
#definef (x) (x*x)
main()
{ int i1,i2;
i1=1000/s(N);i2=1000/f(N);
printf(“%d%d\n”,i1,i2);
}
(7) 读如下程序,输出结果是 。
long fib(int n)
17
{ if(n>2)
return(fib(n-1)+fib(n-2));
else return(2);
}
main()
{ printf(“%d\n”,fib(3));}
2、程序填空
(1) strcen函数把b字符串连接到a字符串的后面,并返回a中新字符串的长
度。请填空实现该函数功能。
strcen(char a[], char b[])
{ int num=0,n=0;
while(*(a+num)!= ) num++;
while(b[n]){*(a+num)=b[n]; num++; }
return(num);
}
(2) isprime函数的功能是判断形参a是否为素数。如果是素数,则返回1,否
则返回0。补充程序完成功能设计。
int isprime( )
{int I;
for(I=2;I<a/2;I++)
if (a%I==0) ____________________
_______________________________
}
3、编程
(1) 编辑函数,实现两数互换操作。
(2) 编辑函数求水仙花数。要求通过main函数控制数值范围(即求出某范围
内的水仙花数)。
(3) 输入两数,要求编辑函数求该数的最大公约数。
(4) 利用函数实现n!。
18
实验七 数组
一、目的、要求
1、熟练掌握一维数组、字符数组的定义、初始化、引用的方法。
2、掌握二维数组的定义、初始化、引用的方法。
3、掌握字符串函数的使用。
4、掌握数组作为函数的参数的使用。
5、了解与数组有关的非数值计算方法:气泡排序、选择排序、折半查找算法记
杨辉三角等。
二、预习内容
1、数组的定义方法。
三、上机内容
1、预计结果并上机验证
(1) 下列程序段的输出结果是 。
main()
{ char s[]="abcdef";
s[3]=‘\0';
printf("%s\n",s);
}
(2) 若有以下程序
main()
{ int a[4][4]={{1,2,-3,-4},{0,-12,-13,14} ,{-21,23,0,-24},{-31,
32,-33,0}};
int i,j,s=0;
for(i=0;i<4;i++)
{ for(j=0;j<4;j++)
{ if(a[i][j]<0) continue;
if(a[i][j]==0) break;
s+=a[i][j];
}
}
printf("%d\n",s);
}
执行后输出结果是 。
(3) 以下程序的输出结果是 。
main()
{ int a[3][3]={ {1, 2},{3,4},{5,6} },i,j,s=0;
for(i=1;i<3;i++)
for(j=0;j<=i;j++)s+=a[i][j];
printf(“%dn”,s);
}
19
(4) 以下程序段的输出结果是 。
main()
{ char ch[3][5]={"AAAA","BBB" ,"CC"};
char s[]="\\141\141abc\t";
printf ("%s\n",s);
printf("\"%s\"\n",ch [1]);
}
(5) 以下程序的输出结果是 。
main()
{ int b[3][3]={0,1,2,0,1,2,0,1 ,2},i,j,t=1;
for(i=0;i<3;i++)
for(j=i;j<=i;j++) t=t+b[i][b[j][ j]];
printf("%d\n",t);
}
(6) 有以下程序
main()
{ char a[]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘\0’}; int i,j;
i=sizeof(a);j=strlen(a);
printf(“%d,%d\b”i,j);
}
程序运行后的输出结果是 。
2、 程序填空
(1) 以下fun函数的功能是:在第一个循环中给前10个数组元素依次赋1、2、
3、4、5、6、7、8、9、10;在第二个循环中使a数组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1。请填空。
fun( int a[ ])
{ int i;
for(i=1; i<=10; i++) =i;
for(i=0; i<5; i++) =a[i];
}
(2) 函数YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形
式如下
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1.
其构成规律是:
(1) 第0列元素和主对角线元素均为1
(2) 其余元素为其左上方和正上方元素之和
(3) 数据的个数每行递增1
请将程序补充完整。
20
#define N 6
void yanghui(int x[N][N])
{ int i,j;
x[0][0]=1;
for(i=1;i<N;i++)
{ x[i][0]= =1;
for(j=1;j<i;j++)
x[i][j]= ;
}
}
(3) 函数f的功能是在数组x的n个数(n个数互不相同)中找出最大最小数,
将其中最小数与第一个数对调,把最大数与最后一个数对调。请填空。 #include “stdio.h”
void f(int x[],int n)
{int p0,p1,i,j,t,m;
i=j=x[0];p0=p1=0;
for(m=0;m<n;m++)
{if(x[m]>i){i=x[m]p0=m;}
else if(x[m]<j) {j=x[m];p1=m;}
}
t=x[p0];x[p0]=x[n-1];x[n-1]=t;
t=x[p1];x[p1]=____________;______________;
}
main()
{int a[10],u;
for(u=0;u<10;u++) scanf(“%d”,____________);
f(a,10);
for(u=0;u<10;u++) printf(“%d”,a[u]);
printf(“\n”);
}
(3) 函数rotate的功能是:将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第0列中,把a所指的二维数组中的第0行放到b所指的二维数组的最后一列。其他数据不变。请填空。
#define N 4
void rotate(int a[][N],int b[][N])
{int i,j;
for(I=0;;i<N;i++)
{b[I][N-1]=____________;}
___________________;
21
}
(4) 程序的功能是求出数组中各个相邻两个元素的和,依次存放到a数组中,然后输出。请填空。
mian ()
{
int x[10],a[9],i;
for(i=0;i<10;i++)
scanf(“%d”,&x[i]);
for(__________;I<10;I++)
a[i-1]=x[i]+_________;
for(i=0;i<9;i++)
printf(“%d”,a[i]);
printf(“\n”);
}
3、编程
(1) 编辑程序,将用户输入的任意字符串中的数字字符全部删除,形成新的字
符串输出。
(2) 有m行n列的整数矩阵,现由用户给其赋值。要求编程找出其中最大数及
其所在行列。
(3) 输入n个学生成绩,计算他们的平均值并输出所有高于平均成绩的学生成
绩(试与前各章节中输入学生成绩的题目比较,有和优点)。
22
实验八 指针
一、目的、要求
1、重点掌握指针与指针变量的概念,指针与地址运算符的关系及运算;
2、重点掌握指针常量的定义、初始化、与使用;
3、掌握指针与数组、函数以及字符串的关系,熟练掌握指向数组、函数与字符串的指针变量,并能够通过指针灵活引用该类型的数据;
4、了解指向指针变量的指针;
5、了解指针数组与多级指针变量。
二、预习内容
1、掌握指针常量的定义、初始化、与使用;
2、掌握指针运算符的使用。
三、上机内容
1、程序填空
(1) 以下函数fun的功能是返回str所指字符串中以形参c中字符开头的后继
字符串的首地址。例如:str所指字符串是“Hello!”,c中的字符为e,则函数返回字符串ello!的首地址。若str所指字符串为空串或不包含c中的字符,则函数返回NULL。请填空。
char *fun(char *str,char c)
{int n=0;
char *p=str;
if(p!=NULL)
while(p[n]!=c &&p[n]!=’\0’) n++
if(p[n]=’\0’)___________________;
return____________________;
}
(2) 以下程序的功能是利用指针指向三个整型变量,并通过指针找出其中最大
的值,输出到屏幕上。请填空。
main()
{int x,y,z,max,*px,*py,*pz,*pmax;
scanf(“%d%d%d”,&x,&y,&z);
px=&x;
py=&y;
pz=&z;
pmax=&max;
_________________;
if(*pmax<*py) *pmax= *py;
if(*pmax<*pz) *pmax= *pz;
printf(“max=%d\n”,max);
23
}
2、 编程
(1)由用户输入字符串。编辑程序将其中大写字符取出放入数组c中。
(2)编辑函数fun。利用函数实现数据从大到小的排序。在main函数中输入数
据,调用fun函数实现排序输出。
(3)已知一个从小到大顺序排列的数组int a[10]={2,6,8,11,14,17,20,21,
25},现输入一个数插入到数组a中,要求数组仍按从小到大顺序排列。 24
实验九 结构体数据类型与链表
一、目的、要求
1、了解自定义数据类型、结构体类型的概念;
2、了解链表的概念、建立及操作。
3、掌握结构体数据类型的变量的定义、初始化以及使用;
4、掌握结构体变量的基本使用方法及指向结构体类型的指针的用法。
二、预习内容
1、熟悉结构体变量的定义、成员的使用;
2、继续熟悉结构体变量的基本使用方法及指向结构体类型的指针;
3、了解链表的概念、建立及操作。
三、上机内容
1、程序填空
(1)函数min的功能是:在带头节点的单链表中查找数据域中值最小的节点。请填空。
#include“stdio.h”
struct node
{int data;
struct node *next;
}
int min(struct node first)
{struct node *p;
int m;
p=first ->next;m=p->data;p=p->next;
for(;p!=NULL;p=___________)
if(p->data<=m)____________;
retrun m;
}
(2) 已知fun函数的功能是用于构成带有头结点的单向链表,在结点的数据域
中放入了具有两个字符的字符串。函数disp的功能是显示输出该单链表中所有结点的字符串。请填空完成函数disp。
typedef struct node/*链表结点结构*/
{char sub[3];
struct node *next;
}Node;
void disp(Node *h)
{Nodde *p;
p=h->next;
while(________________)
25
{printf(“%s\n”,p->sub);___________________;}
}
main()
{Node *hd;
hd=fun();
disp(hd);
printf(“\n”);
}
2、编程
(1)利用结构体类型编写程序。要求记录3个学生的学号、姓名及课程成绩。找出其中最高分输出。
(2)已知链表节点信息为学号、姓名、课程成绩。现有两个链表均按学号升序排列。现在编程实现链表合并,要求仍按升序排列。
26
实验十 共用体与枚举类型
一、目的、要求
1、理解共用体类型和枚举类型的概念;
2、掌握共用体类型变量的定义与使用;
3、了解枚举类型变量的定义。
二、预习内容
1、了解内存的动态分配。
三、上机内容
1、程序填空
(1) 以下程序用已读入两个学生的情况存入结构数组。每个学生的情况包括:
姓名,学号,性别。若是男同学,则还登记视力正常与否(正常用Y,不 正常用N);对女学生则还登记身高和体重。请填空。
struct
{char name [10];
int number:
char sex;
union
{char eye;
struct
{ int heigth;
int weight;
} f;
}body;.
}per[2];
main ()
{ int i;
for (i=0;i<2;i++)
{ scanf (“%s %d %c”,&per[i].name,&per[i].number,&per[i].sex); if(per[i].sex==’m’)
scanf (“%c”,____________________ );
else if (per[i].sex==’f’)
scanf (“%d %d”,____________________, ___________________); else printf (“input error\n”);
}
(2) 写出下列程序的输出结果____________________。
enum coin {penny,nickel,dime,quarter,half_dollar,dollar }; char *name[ ]={“penny”,”nickel”,”dime”,”quarter”,
”hal_fdollar”,”dollar”};
main ()
{ enum coin money1,money2;
money1=dime;
27
money2=dollar;
printf(“%d %d\n”,money1,money2);
printf(“%s %s\n”,name[(int)money1],name[(int)money2]);
}
2、编程
利用共用体类型编辑程序。要求3组记录分别记录学生的学号(或教师工号)、姓名、某一门课程成绩(或教师所在院系)。
28
实验十一 文件
一、目的、要求
1、了解理解文件的基本概念;
2、熟悉文件类型指针;
3、了解文件的定义、打开、读、写及关闭等基本操作的实现。
二、预习内容
1、了解文件的基本概念及相关操作函数。
三、上机内容
1、读程序,写结果
(1) 下面的程序执行后,文件testt .t中的内容是 。 #include<stdio.h>
void fun(char *fname.,char * st)
{ FILE *myf; int i;
myf=fopen(fname,“w ” );
for(i=0;ibr> st[i],myf);
fclose(myf);
}
main()
{ fun(“test”,“new world”;
fun(“test”,“hello,”0;)
}
(2) 有以下程序
main()
{ unsigned char a,b,c;
a=0x3;b=a|0x8;c =b<<1;
printf(“%d%d\n”,b, c);
}
程序运行后的输出结果是 。
(3) 有以下程序
#include<stdio.h>
main()
{ FILE*fp;inti=20,j=30,k,n;
fp=fopen(“d1.dat”“w”);
fprintf(fp,“%d\n”,i);fprintf(f p,“%d\n”j); fclose(fp);
fp=fopen(“d1.dat”,“r”);
fp=fscanf(fp,“%d%d”,&k,&n);printf(“%d%d\n”,k,n); fclose(fp);
}
程序运行后的输出结果是 。
29
2、程序填空
(1) 以下程序用来统计文件中字符个数。请填空补充实现。
#include "stdio.h"
main()
{ FILE *fp; long num=0L;
if((fp=fopen("fname. dat","r"))==NULL)
{ pirntf("Open error\n"); exit(0);}
while( )
{ fgetc(fp); num++;}
printf("num=%1d\n",num-1);
fclose(fp);
}
(2) 以下程序段打开文件后,先利用 fseek函数将文件位置指针定位在文件
末尾,然后调用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。
FILE *myf; ling f1;
myf= (“test .t”,“rb”);
fseek(myf,0,SEEK_END); f1=ftel(myf);
fclose(myf);
printf(“%d\n”,f1);
(3) 下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为
bi.dat的新文件中。请填空。
#include “stdio.h ”
FILE *fp;
{ char ch;
if( (fp=fopen ( ) )= = NULL)exit(0);
while( (ch=getchar( )) !=’@’)
fputc (ch,fp);
fclose(fp);
}
3、编程。
1)从键盘输入文件内容,要求保存到c:\pra1.txt文件中。
2)从键盘输入字母,要求将所有字母以大写形式保存到c:\pra2.txt中。
3)将pra1.txt和pra2.txt文件的内容合并存入c:\pra3.txt中。
30