c语言实验指导 (一)_第1页
c语言实验指导 (一)_第2页
c语言实验指导 (一)_第3页
c语言实验指导 (一)_第4页
c语言实验指导 (一)_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言实验

一、课程性质和任务

本课程的主要任务:通过对该课程的学习,使学生掌握C语言程序设计的基

本知识,程序结构,基本算法及程序设计思想,井培养使用C语言进行程序设计

基本能力。

本课程的目的:使学生掌握程序设计的基本方法及逐步形成正确的程序设计

思想,能够熟练地使用c语言进行程序设计并具备调试程序的能力,为后继课程

及其他程序设计课程的学习和应用打下基础。

二、课程教学目标

1、掌握C语言的基本词法,熟练掌握C语言程序的基本结构。

2、掌握常量和变量的存储类型及应用;运算符和表达式的应用

3、掌握C语言的基本语句;形成正确的程序设计思想,对顺序结构程序要

重点掌握,熟练掌握输入输出函数。

4、掌握关系、逻辑表达式的形式和应用;熟练掌握选择结构的思想;掌握

IF语句的各种形式和应用;掌握SWITCH语句和BREAK语句的使用,选

择结构的嵌套语句。

5、掌握循环结构的思想、流程和执行过程;掌握While循环、Do…While、

FOR循环及其应用;掌握循环嵌套的使用;掌握BREAK、CONTINUE及使

用。

6、掌握一维数组的定义、引用和应用;掌握二维数组的定义、引用和应用;

掌握字符数组及其应用。

7、掌握函数的定义、参数、类型、返回值及参数传递;掌握变量的作用域

(局部变量和全局变量)、存储类型;了解内部函数和外部困数及主困数

和命令行参数。

9、掌握直接存取和间接存取;掌握指针变量的概念和应用;掌握数组与指

针、函数与指针之间的关系;了解指向指针的指针。

10、掌握结构体、共用体的概念、存储特点,及应用;了解结构体数组的使

用;掌握结构体与数组、指针、函数之间的操作;掌握链表的概念和基

本操作。了解共用体、自定义类型、枚举类型的概念和应用。

三、实验内容安排

试验序号实验内容

实验1顺序结构

实验2分支结构

实验3循环结构

实验4一维数组

实验5二维数组

实验6函数

实验7指针

实验8结构体

实验1:熟悉上机环境和顺序结构编程练习

[实验目的]

I.熟练地利用文不编辑程序输入、修改C程序。

2.掌握和理解C程序的基本结构。

3.掌握C程序的编译连接与运行。

4.掌握和理解本实验中出现的一些最基本的语句。

[实验内容]

1.键盘输入与屏幕输出练习

问题1要使下面程序的输出语句在屏幕上显示1,2,34,则从键盘输入的数据格

式应为以下备选答案中的0

#include<stdio.h>

main()

(

chara,b;

intc;

scanf(H%c%c%d",&a,&b,&c);

printf%cz%d\n",a,bzc);

)

A)1234B)1,2,34

C)'1,,2,34D)1234

问题2在与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏

幕上显示1234,则应修改程序中的哪条语句?怎样修改?

问题3要使上面程序的犍盘输入数据格式为1234,输出语句在屏幕上显示的

结果也为1,2,34,则应修改程序中的哪条语句?怎样修改?

问题4要使上面程序的键盘输入数据格式为1234,而输出语句在屏幕上显示

的结果为T,2,34,则应修改程序中的哪条语句?怎样修改?

[提示:利用转义字符输出字符单引号字符。]

2.计算定期存款本利之和

设银行定期存款的年利率rate为2.25%,并已知存款期为〃年,存款本金为capital

元,试编程计算〃年后的本利之和deposit。要求定期存款的年利率rate、存款期

n和存款本金capital均由键盘输入。

公式:deposit=capilal*(l+rate*n)

dcposit=capitcd*(1Irate)11

实验2:选择结构程序设计

[实验目的]

1.进一步掌握各种表达式的使用。

2.利用if语句实现选择结构。

3.利用switch语句实现多分支选择结构。

4.练习调试与修改程序,

[实验内容]

1.计算下列分段函数值:

-X(X<1)

y=.2x-1(IWXWIO)

3x-ll(x三10)

具体要求如下:

(1)用if语句实现分支。自变量x与函数值均用双精度类型。

(2)自变量x用scanf函数输入,且输入前要有提示。结果的输出采用以下

形式:

x=具体值,f(x)=具体值

2、身高预测

每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统

计分析表明,影响小孩成人后的身高的因素包括遗传、饮食习惯与体育锻炼等。

小孩成人后的身高与其父母的身高和自身的性别密切相关。

设faHeight为其父身高,moHeight为其母身高,身高预测公式为

男性成人时身高=(faHeight+moHeight)x0.54cm

女性成人时身高二(faHeightx0.923+moHeight)/2cm

此外,如果喜爱体育锻炼,那么可增加身高2%;如果有良好的卫生饮食习惯,

那么可增加身高1.5%。

编程从键盘输入用户的性别(用字符型变量sex存储,输入字符F表示女性,输

入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight

为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示

喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量

diel存储,输入字符Y表示良好,输入字符N表示不好),利用给定公式和身高

预测方法对身高进行预测。

3、简单的计算器

用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表

达式:

操作数1运算符op操作数2

计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。

本实验程序是在例4.8的基础上,增加如下要求:

(1)如果要求程序能进行浮点数的算术运算,程序应该如何修改?如何比较

实型变量data2和常数()是否相等?

(2)如果要求输入的算术表达式中的操作数和运算符之间可以加入任意多个

空白符,那么程序如何修改?

(3)(选作题)如果要求连续做多次算术运算,每次运算结束后,程序都给

出提示:

Doyouwanttocontinue(Y/Nory/n)?

用户输入Y或y时,程序继续进行其他算术运算;否则程序退出运行状态,那

么,程序如何修改?

实验三:循环结构的程序设计

[实验目的]

1.进一步练习选择结构的程序设计。

2.练习并掌握实现循环结构的三种方法。

3.练习并掌握选择结构与循环结构的嵌套。

4.练习调试与修改程序。

[实验内容]

1.求1-2+3-4+5……+99-100的值。

2.计算下列级数和

s=l-(l/3)+(l/5)-(l/7)+…+(T)n(l/(2n+D)直到最后一项的绝对值小

于IO』为止。

要求输出s和总的项数n。输出形式为n=具体值,s=具体值

3.猜数游戏

在这个实验中,我们将尝试编写一个猜数游戏程序,这个程序看上去有些难度,

但是如果按下列要求循序渐进地编程实现,会发现其实这个程序是很容易实现

的。那么,现在就开始吧,先编写第1个程序,然后试着在第1个程序的基础上

编写第2个程序,...

程序1编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,

则计算机给出提示“Right!”,否则提示“Wrong!”,并告诉人所猜的数是大(Toohigh)

还是小(To。low),然后结束游戏。要求每次运行程序时机器所“想”的数不能

都一样。

程序2编程先由计算机“想”一个1〜1()0之间的数请人猜,如果人猜对了,

则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”

的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为

止。

程序3编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,

则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”

的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜

10次,如果猜了10次仍未猜中的话,结束游戏。

程序4编程先由计算机“想”一个1〜100之间的数请人猜,如果人猜对了,

在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结

束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜

1()次,如果猜了1()次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。

每次运行程序可以反复猜多个数,直到操作者想停止时才结束。

实验四:一维数组

[实验目的]

1.清楚一维数组定义格式及下标范围。

2.学习利用数组解决简单应用问题。

3.进一步熟悉条件控制和循环控制。

4.通过二维数组的应用学会二重循环的程序设计。

[实验内容]

1.下面的程序重新安排数组a中的元素,请读懂这个程序:

Sinclude<stdio.h>

mainO

(

inta[]={2,3,-3,-5,6,-1,9,8,7,-7,-6,11};

intsize=12;

inti=-l,j=size,d,k;

while(++i<-j)

while(i<j&&a[i]>0)i++;

while(i<j&&a[j]<0)j—;

if(i<j)

d=a[i];

a[i]=a[j];

a[j]=d;

)

}

for(k=0;k<size;k++)printf(w%dw,a[k]);

}

2.编写一个程序,从键盘输入10个学生的成绩,统计最高分'最低分和平均

分。

[要求]

输入的数据首先存入一个数组中,程序中不得改变数组中这些数据的排列顺

序;

运行时输入下列数据并记录程序的输出结果:

82908878637594869971

3.思考题

已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入

数组中。

实验五:二维数组

1.检验并打印魔方矩阵

在下面的5x5阶魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相

等的,试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中,然后检验

其是否为魔方矩阵,并将其按如下格式显示到屏幕上。

17241815

23571416

46132022

1()1219213

11182529

2.餐饮服务质量调查打分

在商业和科学研究中,人们经常需要对数据进行分析并将结果以直方图的形式显

示出来。例如,一个公司的主管可能需要了解一年来公司的营业状况,比较一下

各月份的销售收入状况。如果仅给出一大堆数据,这显然太不直观了,如果能将

这些数据以条形图(直方图)的形式表示,将会大大增加这些数据的直观性,也

便于数据的分析与对比。下面以顾客对餐饮服务打分为例,练习这方面的程序编

写方法。假设有40个学生被邀请来给自助餐厅的食品和服务质量打分,分数划

分为1〜10这1()个等级(1表示最低分,1()表示最高分),试统计调查结果,并

用*打印出如下形式的统计结果直方图。

GradeCountHistogram

15*****

210**********

37木小小小小小小

3.通过赋初值按行顺序给2*3的二维数组赋予2,4,6等偶数,然后按列的顺序

输出该数组,即输出其转置矩阵。

实验六:使用函数的程序设计

[实验目的]

1.掌握函数定义和调用方法。

2.掌握函数递归调用的方法。

3.理解变量的作月域和生存期。

[实验内容与要求]

1.分析程序运行结果

(1)#include<stdio.h>

intn;

intf(intx);

main()

(

inia,b;

a=5;

b=f(a);/*判断输出实际输出*/

printf("\n局部a=%d,\a);/*()()*/

printf(,,\n局部b=%d,,,b);/*()()*/

printf("\n全局n=%d\n,,,n);/*()(产/

a++;

b=f(a);

printf(,,\n局部a=%d,\a);/*()()*/

printff'n局部b=%d”,b);/*()()*/

primf("\n全局n=%d\n,,,n);/*()()*/

)

intf(intx)

{

inta=l;

staticintb;/*判断输出实际输出*/

a++;b++;x++;n++;/*第一次第二次第一次第二次*/

printf("\n局部fa=%d,5,a);/*()()()(//

printf("\n局部fb=%d",b);/*()()()()*/

printf("\n叁数x=%d\n5,,x);/*()()()(产/

returnx;

[要求]

a.读程序,判断程序的输出并填入相应行行尾的“判断输出”栏目下;

b.实际运行程序,记录程序的输出,并填入相应行行尾的“实际输出”栏目下;

c.对比判断输出和实际输此如有不符,分析产生错误判断的原因。

(2)#include<stdio.h>

main()

voidfun(intn);

fun⑶;

)

voidfun(intn)

(

if(n<=l)printf("a”);

else{

fun(n-l);

printfCb");

fun(n-2):

printf("c”);

I

)

[要求]

a.读程序,判断程序的输出;

b.实际运行程序,记录程序的输出;

c.对比判断输出和实际输出,如有不符,分析产生错误判断的原因。

2.写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。

3.计算并输出

ml

(m-n)!n!

[具体要求]

1.编制一个函数p(n),返回n!值.

2.编制主函数,由键盘输入m与n(m^n&0).调用(1)中的函数计算的值。

m!

(m-n)!n!

实验七使用指针的程序设计

[实验S的]

1.进一步练习模块化设计的方法。

2.掌握使用指针变量的程序设计。

3.掌握字符串的指针表示方法。

[实验内容]

1.下面是一个涉及到一系列指针操作的程序:

#include<stdio.h>

main()

(

intm[]={0,1,2,3,456,7,8,9);/*判断输出实际输出*/

intp=m+3;

printf(“%d\n”,*p);/*()()*/

printf(M%d\n,,,-H-*p);/*()()*/

printf(u%d\nw,*p);/*()()*/

printf(w%d\n,,,*++p);/*()()*/

printf("%d\n”,*p);/*()()*/

printf(u%d\n,,,*p++);/*()()*/

printf("%d\n",*p);/*()()*/

printf(w%d\n,,,(*p)++);/*()()*/

printf(w%d\nw,*p);/*()()*/

printf(“%d\n”,H*p++);/*()()*/

printf("%d\n",*p);/*()()*/

printf(w%d\n,,,-H-*p++);/*()()*/

printf("%d\n",*p);/*()()*/

[要求]

(1)读程序,判断程序的输出并填入相应行行尾的“判断输出”栏n卜;

(2)实际运行程序,记录程序的输出,并填入相应行行尾的“实际输出”栏目

下;

(3)对比判断输出和实际输出,如有不符,分析产生错误判断的原因。

2.打印最高分和学号

假设每班人数最多不超过40人,具体人数由键盘输入,试编程打印最高分及其

学号。

程序1用一维数组和指针变量作为函数参数,编程打印某班一门课成绩的最高分

及其学号。

程序2用二维数组和指针变量作为函数参数,编程打印3个班学生(假设每班

4个学生)的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班

的第几个学生。

程序3用指向二维数组第。行第0列元素的指针作为函数参数,编写一个计算

任意m行〃列二维数组中元素的最大值,并指出其所在的行列下标值的函数,

利用该函数计算3个班学生(假设每班4个学生)的某门课成绩的最高分,并指

出具有该最高分成绩的学生是第几个班的第几个学生。

程序4编写一个计算任意m行〃列二维数组中元素的最大值,并指出其所在的

行列下标值的函数,利用该函数和动态内存分配方法,计算任意加个班、每班〃

个学生的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第

儿个学生。

【思考题】请读者思考:

编写一个能计算任意加行〃列的二维数组中的最大值,并指出其所在的行列

下标值的函数,能否使用二维数组或者指向二维数组的行指针作为函数参数

进行编程实现呢?为什么?

实验八结构应用程序设计

[实验目的]

1.掌握定义结构类型的方法。

2.掌握结构变量的定义和初始化方法。

3.掌握直接访问(通过.)和间接访问(通过->)结构成员的方法。

4.熟悉结构数据处理的一些基本技巧.

[实验内容]

1.函数sortbyage对一个staff(职工)数组按年龄由小到大的顺序进行排序,

排序采用插入法,排序结果记录在另一个数组中.下面给出了结构类型和主函数

及一个输出函数。请完成sortbyage。函数的设计。

structstaff{

charstaffno[5];

charname[10J;

charsex[3];

iniage;

);

voidsortbyage(staffa[],staffn)

{

/*函数体请自己完成*/

)

voidshowstaff(staffa)

(

printf(4t\n%5c%9c%3c%4d\n,,,a.staffno,,a.sex.a.age);

}

main()

{staffa[]={

{“0751”,“陈洁“,“女”,34},

{“0682”,“赵仙”「男”,28},

{“0853”,“郑玲”「女”,22},

{“0852”,“屈进“,“男”,56},

{“0781”,“赵宁男”,47},

{“0752”,”张建"「男'23},

{“0691”,“李芬“,“女”,25},

{“0934”,“花季“,“女”,19},

{“0931”,“金全“,“男”,44},

{“0932”「王利,丁男”,37},

I;

staff*b[10];

inti;

sortbyage(a,b,IO);

for(i=0;i<l0;i++)showstaff(*b[ij);

}

2.在屏幕上模拟显示一个数字式时钟

按如下方法定义一个时钟结构体类型:

structclock

inthour;

intminute;

intsecond;

};

typedefstructclockCLOCK;

然后,将下列用全局变量编写的时钟模拟显示程序改成用CLOCK结构体变量类

型重新编写。已知用全局变量编写的时钟模拟显示程序如下:

#include<stdio.h>

#include<stdio.h>

inthour,minute,second;/*全局变量定义*/

/*

函数功能:时、分、秒时间的更新

函数参数:无

函数返回值:无

*/

voidUpdate(void)

(

second++;

if(second==60)/*若second值为60,表示已过1分钟,贝I」minutefil加

1*/

(

second=0;

minute++;

}

if(minute==60)/*若minute值为60,表示已过1小时,则hour值力DI*/

(

minute=0;

hour++;

}

if(hour==24)/*若hour值为24,则hour的值从0开始计时*/

(

hour=0;

}

)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论