C语言实验题

更新时间:2024-03-20 05:27:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《C语言程序设计》

实 验 手 册

2010年2月

年级:

专业:

班级:

姓名:

学号:

指导教师:

1

《C语言程序设计》实验课程简介

课程名称:C语言程序设计实验 课程性质:专业必修课 课程属性:专业必修课 学时学分:学时32 学分1 开课实验室:软件实验室

面向专业:网络工程、软件工程、计算机科学与技术

一、课程的任务和基本要求

C语言程序设计实验是面向计算机相关专业学生开设的《C语言程序设计》实验课,是配合《C语言程序设计》课程而开设的实验性教育环节。本课程的主要任务是让学生充分掌握C语言程序设计的基本概念、各种数据类型的使用技巧、模块化程序设计的方法等。C语言程序设计实验对课程中所涉及的知识进行验证,同时也是学生很好地学习课程的辅助手段。通过C语言上机实验的教学活动,使学生真正全面掌握C语言的基础知识,培养和提高学生的程序开发能力。

二、实验项目

【实验一】最简单的C程序---顺序程序设计 【实验二】逻辑运算和判断选取控制 【实验三】循环结构程序设计(一) 【实验四】循环结构程序设计(二) 【实验五】函数 【实验六】数组(一) 【实验七】数组(二) 【实验八】指针

【实验九】结构体、共用体和文件 【实验十】C程序综合性实验

三、有关说明

1、与其它课程和教学环节的联系: 先修课程:计算机文化

后续课程:面向对象程序设计、Java程序设计、数据结构、软件工程 2、教材和主要参考书目: (1)教材:

《C程序设计习题解答与上机指导》,谭浩强 吴伟民著,北京:清华大学出版社,2003年。 (2)主要参考书目:

《C语言程序设计》 谭浩强主编,清华大学出版社,2003年。

2

三、实验内容

实验一 最简单的C程序---顺序程序设计

(验证性实验 2学时)

(一)、实验目的

1.熟悉win-tc程序运行环境

2.掌握运行一个C程序的步骤,理解并学会C程序的编辑、编译、链接方法 3.掌握C语言中使用最多的一种语句——赋值语句 4.掌握数据的输入输出方法,能正确使用各种格式控制符

(二)、实验内容

1.写出下列程序的运行结果 (1)#include

void main() {

printf(“*****************\\n”); printf(“This is a c program. \\n”); printf(“****************\\n”); }

运行结果及分析:

(2)#include

void main() {

int a=100,b=20,sum,sb;

sum=a+b; sb=a/b;

printf(\

}

运行结果及分析:

(3)#include

void main( ) {

char c1,c2;

c1=97;c2=98;

printf(\,%c\\n\printf(\printf(\}

运行结果及分析:

(4)#include

void main () {

int i=8,j=10,m,n; m=++i;n=j++;

3

}

printf(\

运行结果及分析:

再将本程序的第3行改为m=i++;n=++j; 运行结果及分析: 2.程序填空

任意输入一个有五位数字的正整数x,分别输出每一数位上的数字(由高到低分别用b5,b4,b3,b2,b1表示),请将程序补充完整。

#include main() {

int b1,b2,b3,b4,b5;

① x;

Scanf( “ %ld ”,&x); b5= ② ; b4=(x/1000); b3= ③ ; b2=(x/10); b1= ④ ;

} 程序分析:

3.程序改错(注意:题中的编号为行序号,并非程序本身) 计算任意一个半径为r的圆的面积和周长(结果保留两位小数) (1)#include (2)main()

{ (3)

float r; p=3.14,c,area;

printf(“the number is ⑤ \\n”,x);

printf(“its bit is:%d,%d,%d,%d,%d\\n”,b5,b4,b3,b2,b1);

(4) printf(“input r:”); (5) scanf(“%f ”, r); (6) c=2p*r; (7) area=p*r*r

(8) printf(“c=%-7.2f,area=%-7.2f”,c,area); (9)}

错误语句的行号: 改正后的语句全行: 错误语句的行号: 改正后的语句全行:; 错误语句的行号: 改正后的语句全行: 错误语句的行号: 改正后的语句全行:

4

改错分析:

5

实验二 逻辑运算和判断选取控制

(验证性实验 2学时)

(一)、实验目的

1.了解逻辑量在C语言中的表示方法 2.学会使用逻辑运算符和逻辑表达式 3.熟练掌握if语句和switch语句

(二)、实验内容

1.写出下列程序的运行结果 (1)#include

void main( ) {

int a,b,x=10,y=9;

a=(--x == y++)? --x : ++y; b= y;

printf(“%d,%d\\n”,a,b); }

运行结果及分析:

(2)#include

void main() {

int a=2,b=-1,c=2; If(a

if(b<0)c=0; else c+=1;

printf(“%d\\n”,c); }

运行结果及分析:

(3)#include

void main( ) {

int a=0,b=0,c=0;

if(++a > 0 || ++b > 0) ++c; printf(“\\na=%d,b=%d,c=%d”,a,b,c); }

运行结果及分析:

(4)#include

void main() {

int x=-1; switch (x) {

default: printf(“a”);

6

case 1: printf(“b”); case 2: printf(“c”);

} }

运行结果及分析:

在case 1:printf(“b”);后加上break;语句,结果如何?修改程序并上机调试。 运行结果及分析: 2.程序填空

输入两个整数,从用户处获取这两个整数,显示其中较大的数,在其后跟随“is larger”。如果这两个数相等,显示“These numbers are equal.”。请在_____内填入正确内容。 #include void main( ) {

int a,b;

printf(“please input two numbers, a, b! “); scanf(“%d%d”,&a,&b);

if( ① ) printf(“%d is larger”, a );

else if(_______②____________) printf(“These numbers are equal”); else ___________ ③_____________________; } 填空①: 填空②: 填空③: 结果分析:

3.编写程序

(1)编写一个程序,读入5个整数,然后确定并显示这组数中的最大整数和最小整数。 程序清单:

程序编写注意事项:

(2)编写程序,读取一个整数,判断并显示出这个整数是奇数还是偶数。(提示:使用求模运算符。偶数是2的倍数。任何2的倍数除以2时,余数均为零。) 程序清单:

程序编写注意事项:

(3)编写一个程序,从键盘中输入3个不同的整数,然后显示这3个整数的和、平均数、积、最小数和最大数。(用if语句)屏幕中的对话内容如下所示:

Input three different integers: 13 27 14 Sum is 54 Average is 18 Product is 4914 Smallest is 13 Largest is 27 7

程序清单:

程序编写注意事项:

8

实验三 循环结构程序设计(一)

(验证性实验 2学时)

(一)、实验目的

1.熟悉用while语句、do-wile语句和for语句实现循环的方法 2.掌握在程序设计中用循环方法实现的算法

(二)、实验内容

1.写出下列程序的运行结果 (1)#include

void main() {

int count=1; while(count<=10) { } }

运行结果及分析: 。

(2)#include

void main() {

int row=10,Column;

while(row>=1) {

}

运行结果及分析:

(3)#include

void main() {

int y=9;

for( ; y>0 ; y--)

if(y%3==0) printf(\

}

}

Column=1;

while(Column <=10) { } row--;

printf(“\\n”);

printf(“%s”,row%2 ? “<”: “>”); Column++; count++;

printf(“%s\\n”,count%2? “****”: “++++++++++”);

9

运行结果及分析: 2.编写程序

(1)利用循环语句来显示如下所示的数值表:

程序清单如下: 程序编写注意事项:

(2)编写一程序,能够输入一组10个数字,判断并显示出这些数字中的最大数。提示:程序中应该使用如下的3个变量:

Counter:能够记数到10的记数器。 Number:当前输入到程序中的数字。 Largest:迄今为止所发现的最大数字。 程序编写注意事项:

(3)请开发一个程序来输入每油箱的行程里程和所用的汽油。能够计算并显示出对于每个油箱每加仑汽油的行驶里程。处理输入信息后,计算并显示所有油箱每加仑汽油的行驶里程。以下是一个事例的输入/输出:

程序清单:

程序编写注意事项:

(4)编写一个程序读入一个5位数,并判断该整数是否是回文。(回文指顺读和倒读都一样的数字和文字语句,例:12321,55555。)提示:使用除法运算符和求模运算符把该数分解成单位个数。 程序清单:

程序编写注意事项:

10

实验四 循环结构程序设计(二)

(验证性实验 2学时)

(一)、实验目的 1.熟练掌握循环语句。

2.较灵活地运用三种不同循环语句实现循环程序设计。 3.熟练掌握break语句、continue语句及循环的嵌套使用。

(二)、实验内容

1. 写出下列程序的运行结果 (1)#include

void main() {

int i,j,k,x=0; for(i=0;i<2;i++) {

x++;

for(j=0;j<3;j++) {

if(j%2) continue;

} x++; } k=i+j;

printf(\,x=%d\\n\}

运行结果及分析:

(2)#include

void main() {

int x,y;

for(y=1,x=1;y<=50;y++)

{

if(x>=10) break;

if(x%2==1) { x+=5; continue;} x-=3; }

printf(“x=%d,y=%d\\n”,x,y); }

运行结果及分析:

(3)#include

void main() {

int i , j , sum;

x++;

11

for(i=1;i<6;i++) {

sum=0;

for(j=1;j<=4;j++) sum+=j; }

printf(“sum=%d\\n”, sum); }

运行结果及结果:

(4) #include

void main ( )

{

int k = 0 , m = 0 , i , j;

for( i = 0 ; i < 2 ; i++) {

for ( j = 0 ; j < 3 ; j++)

k++; k -= j;

}

m = i + j;

printf(\}

运行结果及结果:程序填空

(1)下面程序的功能是:输出100以内同时能被3和7整除的所有整数,请填空。 #include void main() {

int i, j;

for ( i=1;___①_____; i++ ) {

if (___②______) continue; printf ( \,i ); } } 填空①: 填空②: 程序分析:。

(2)判断m是否素数 #include void main() {

int m,i,k; scanf(“%d”,&m);

for(i=2;i

12

if(i>=m)printf(“%d是一个素数\\n”,m); else printf(“%d不是一个素数\\n”,m); }

填空并运行分析 编写程序

(1)编写一个程序,能够找出几个整数中最小的整数。假定程序读取的第一个值是余下数值的数目。 程序清单:

程序编写注意事项:

(2)编写一个程序显示出如下菱形图案。可以使用printf语句来显示一个(*)和一个空格,尽量多使用循环语句(嵌套的for语句),尽量少用printf语句。

程序清单:

程序编写注意事项:

(3)输入从1994~1999这个范围内的年份,并使用for循环语句来生成一个简洁的日历。注意闰年的情形。 程序清单:

}程序编写注意事项:

13

实验五 函数

(验证性实验、综合性实验 2学时)

(一)、实验目的 1.掌握定义函数的方法

2.学会利用函数的相关概念解决问题 3.学会使用函数的方法设计程序

(二)、实验内容

1.写出下列程序的运行结果 (1)#include “stdio.h”

f(int x, int y); void main() {

int a=1,b=2; f(a,b);

printf(“%d,%d\\n”,a,b); }

f(int x,int y) {

x=x+1; y=y+1; }

运行结果及分析:

(2) #include fun(int a); void main() { int a=3;

fun(a);

printf(\}

fun(int a) { a=a+3;

printf(\}

运行结果及分析:

(3)#include

int fun(int x) {

static int a=3;

a=a+x;

return a;

14

实验七 数组(二) (验证性实验 2学时)

(一)、实验目的

1. 掌握字符数组的定义、赋值和引用 2. 字符串函数的使用。

(二)、预习内容

1.预习数组的定义、赋值及输入输出方法,以及典型的算法。 2.熟练循环语句与数组处理语句结合的方法。

(三)、实验内容

1. 写出下列程序的运行结果 (1)#include

void main() {

char a[10]= \a[3]=’\\0’; b[3]=0;

printf(\printf(\}

运行结果及分析: (2)#include

void main() {

char ch[2][5]={\int i,j,s=0; for(i=0;i<2;i++)

for(j=0;ch[i][j]>'\\0'&&ch[i][j]<='9';j+=2)

s=10*s+ch[i][j]-'0';

printf(\}

运行结果及分析:

(3)下列程序的输出结果是: #include void main( ) {

char p1[20]=\strcpy(str+2,strcat(p1+2,p2+1)); printf(\}

运行结果及分析: 2. 程序填空

(1)将一个字符串按逆序重新存放,并输出。

20

#include void main() {

char a[20]; int n,i,t; gets(a);

① ; for(i=0;i

程序分析:(2)以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串:yes!,否则函数返回字符串:no!,并在主函数中输出.(所谓回文即正向与反向的拼写都一样,例如:adgda).请填空. #include \#include int huiwen(charstr[]) {

int p,i,j; p=strlen(str);

for(i=0,j=p-1;i

if( ① ) return 0; return 1; }

void main() {

char str[50]; printf(\scanf(\

if( ② ) printf(\else printf(\} 填空①: 填空②:

程序分析:程序改错

写出有错误语句的行号,及改正后的语句全行。(每行语句前的序号只标注行号,非程序本身的内容)

(1)以下scpy( )函数实现字符串复制,即将t所指字符串复制到s所指向内存空间中,形成一个新的字符串s。请填空。

① #include

21

② void scpy(char s[ ],char t[ ])

{

int i; while(t[i])

s[i++]=t[i++]; t[i]=‘\\0’;

③ ④ ⑤ ⑥

} {

char str1[ ],str2[ ]=\scpy(str1,str2); printf(\

⑦ void main( ) ⑧ ⑨ ⑩

}

错误语句的行号: 改正后的语句全行: 错误分析:

(2)比较两个字符串的大小,如果相等输出equal,如果不相等输出unequal. ① #include ② void main()

{ ③ ④ ⑤ ⑥

}

错误语句的行号: 改正后的语句全行: 错误分析: 3. 编写程序

(1)将一个字符串首尾倒置,重新存放。 程序清单:

程序编写注意事项:

(2)(飞机定票系统)一家小型航空公司刚刚购买了计算机,用于新的自动化定票系统。总裁要求您为新系统编制程序。需要分配该航空公司的唯一一架飞机每个航班的座位(容量:10个座位)。

程序应该轮流显示下列菜单: Please type 1 for “first class” Please type 2 for “economy”

如果输入1, 则程序应该分配头等舱内的座位(座位1 ~ 5)。如果输入2 ,则程序应该分配经济舱的座位(座位 6 ~ 10)。然后,程序输出登机证,说明座位号,以及它位于飞机的头等舱,还是经济舱内。

使用一个数组来代表飞机的座位安排。将数组的所有元素初始化为0,以说明所有座位都是空的。当分配每个座位时,将数组的对应元素设置为1,以说明不能再次使用那个座位号。当然,程序不应该分配已经分配过的座位。当头等舱满员时,程序应询问是否可以安排在经济舱内(等等)。

char s1[10],s2[10]; gets(s1);get2(s2);

if(s1=s2) printf(“equal”); else printf(“unequal”);

22

如果可以,则进行适当的座位分配。如果不可以,则输出信息“Next Flight leaves in 3 hours”. 程序清单:

程序编写注意事项:

(3)(输出数组)编写一个递归函数printArray,它以数组和数组大小作为参数,并且不返回任何值。当数组大小为0时,函数应该停止处理并返回。 程序清单:

程序编写注意事项:

23

实验八 指针

(验证性实验、综合性实验 2学时)

(一)、实验目的

1.掌握指针的概念、会定义和使用指针变量

2.掌握指针与一维数组、二维数组、字符数组的关系

(二)、实验内容

1.写出下列程序的运行结果 (1)#include

void fun(int * a,int * b) {

int k;

k=*a;*a=*b;*b=k; }

void main( ) {

int a=3,b=6; fun(&a,&b);

printf(“%d,%d”,a,b); }

运行结果及分析: (2)#include

void fun(int * a,int * b) {

int *k; k=a;a=b;b=k; }

void main( ) {

int a=3,b=6,*x=&a,*y=&b; fun(x,y);

printf(“%d,%d”,a,b); }

运行结果及分析: (3)#include

void main( ) {

int a[ ]={1,2,3,4,5,6,7,8,9,0},*p; p=a;

printf(“\\n%d”,*p+9); }

运行结果及分析: (4)#include

fun(int *s,int n1,int n2)

24

{ int i,j,t;

i=n1;j=n2; while(i

t=*(s+i);*(s+i)=*(s+j);*(s+j)=t; i++;j--; } }

void main() {

int a[10]={1,2,3,4,5,6,7,8,9,0},i,*p=a; fun(p,0,3);fun(p,4,9);fun(p,0,9); for(i=0;i<10;i++) printf(\}

运行结果及分析:

2.程序填空

(1)下面函数用来求出两个整数之和,并通过形参传回两数相加之和值,填空。 #include

int add(int x,int y,_②_____z); void main() {

int a=3,b=4,c;

add(_____①_________); printf(“%d\\n”,c); }

int add(int x,int y,_②_____z) {

_③_____=x+y; }

填空①:int *z 填空②:a,b,&c 填空③:*z 程序分析:

(2)下面的程序通过函数average计算数组中各元素的平均值,请填空。 #include

float average(int *pa,int n) { int i;

float avg=0.0; for(i=0;i

avg=avg+_¢ù______; avg=__¢ú_____; return avg;

25

}

void main() {

int i,a[5]={2,4,6,8,10}; float m; m=average(a,5); printf(\} 填空①: 填空②: 程序分析: 3.程序改错

写出有错误语句的行号,及改正后的语句全行。(每行语句前的序号只标注行号,非程序本身的内容)

(1)将两个整数值进行交换。 ① #include ② swap(int *p,*q);

{ ③ ④ ⑤ ⑥ ⑦ }

⑧ void main()

{

int a =10,b=20; swap(&a,&b);

printf(“%d%d\\n”,a,b);

⑨ ⑩ ⑾

}

错误语句的行号: 改正后的语句全行: 错误分析:

(2)写出程序运行结果: ① #include ″stdio.h″ ② main()

{

int a[]={1,2,3,4,5,6,7,8,9,10,11,12}; int *p=a+5; int *q=null; q=p+5;

printf(“%d %d”,*p,*q);

③ ④ ⑤ ⑥ ⑦

}

int *t,a; t=&a; *t = *p; *p = *q; *q = *t;

错误语句的行号:

26

改正后的语句全行: 错误分析:

4、编程题(选做题)

利用函数把字符数组b,连接到字符数组a的后面,并返回字符数组a中新的长度。 程序清单: }编程注意事项:

实验九 结构体、共用体和文件 (验证性实验、设计性实验(一)、实验目的:

1.掌握结构体类型和共用体类型变量 2.结构体类型数组和结构体类型指针的定义 3.掌握链表的定义及操作

4.掌握文件的打开、关闭和文件的读写操作

(二)、实验内容 1.写出程序的运行结果 (1)以下程序的输出结果是: #include union {

int num; struct

{char c1,c2;} sc; }un; void main() {

un.sc.cl=65;un.sc.c2=97; un.num=0; printf(\; }

运行结果及分析:

(2)以下程序的输出结果是: #include typedef union {

long i; int k[5]; char c; }DATE; struct date {

int cat; DATE cow;

27

学时)

2

double dog; }too; DATE max: void main() {

printf(″%d\\n″,sizeof(struct date)+sizeof(max)); }

运行结果及分析: 2.填空题

(1)下面程序建立一个单向链表。 #include void main() {

struct stud {

long num;

float score;

struct stud _______; }stud1,stud2,stud3,*head;

stud1.num = 1;stud1.score = 89.5; stud2.num = 2;stud2.score = 90.5; stud3.num = 3;stud3.score = 94.5; head = &stud1; stud1.next = &stud2; stud2.next = &stud3; stud3.next = NULL; }

填空并运行分析:*next

(2)以下程序把a数组中的数据输出到fp所指的二进制文件中。 #include #define N 10 void main() {

float a[N]; int i; FILE *fp; for(i=0;i

scanf(“%f”,a+i);

fp=fopen(“file.dat”,“wb”); fwrite(a,4*N,1,fp); ______________________; }

填空并运行分析:

(3)下面程序把一个名为f1.doc的文件拷贝到一个名为f2.doc的文件中,请在__处添入适

28

当命令行,使之正确运行。 #include void main( ) {

char c;

FILE *fp1, *fp2;

fp1=fopen(“f1.doc”,“r”); fp2= c=fgetc(fp1); while(c!=EOF) {

fputc(c,fp2);

c=fgetc(fp1); }

fclose(fp1); fclose(fp2); }

填空并运行分析: 3.改错题

(1)定义一个结构体变量a,输出a变量中每一个成员的值。 ① #include ② void main()

{

struct {

char flag; float t;

④ ⑤ ⑥ ⑦ ⑧ ⑨ }

错误语句的行号: 改正后的语句全行:

错误分析:(2)从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个“#”号为止。 ① #include ② void main() { ③

file *fp;

④ char ch,filename[10]; ⑤ scanf(“%s”,filename);

⑥ if((fp=fopen(filename,”w”))==NULL) ⑦

{

printf(“cannot open file\\n”); exit(0);

} STC; STC a={‘a’,46};

printf(“%c,%f\\n”,a.flag,a.t);

29

⑨ } ⑩ ⑾ ⑿

ch = getchar(); while(ch!=’#’) { }

fputc(ch,fp); putchar(ch); ch=getchar();

⒀ ⒁ ⒂

}

⒃ fclose(fp); 错误语句的行号: 改正后的语句全行: 错误分析:

4.编程题(选做)

(1)有10名学生,每名学生有语文、数学、外语三门课程的成绩,计算每名学生的总成绩,然后按总成绩由高到低排序,若总成绩相同,再按外语成绩由高到低排序。 要求:① 利用结构体数组存放数据。 ② 通过函数调用方式。 编写程序注意事项:

(2)编写一个程序,它使用sizeof运算符来确定计算机系统上不同数据类型的字节数。将结果写入到文件“datasize.dat”中,这样您可以稍后输出结果。文件中的结果格式如下:

Data type Size Char 1 Unsigned char 1 Short int 2 Unsigned short int 2 Int 4 Unsigned int 4 Long int 4 Unsigned long int 4 Float 4 Double 8 Long double 16 程序清单:

编写程序注意事项:

30

实验十 C程序综合性实验 (综合性实验、设计性实验 4学时)

(一)、目的要求:

1.巩固三种不同循环语句,实现循环程序设计。 2.巩固C语言函数定义及调用规则。

3.掌握结构体类型的概念及定义方法;结构体变量的定义和引用。 4.掌握文件的读写、定义、输入输出。

(二)、实验内容:(可以任选其一)

1.将5名学生的数据从键盘输入,然后送入磁盘文件student1.c中保存,最后从磁盘调入这些数据,依次打印出来(用fread和fwrite函数)。设学生数据包括:学号、姓名、成绩。

2.对存放在student1.c中的各学生数据按成绩高低顺序排序,将排好序的各记录存放在student2.c文件中,并打印出student2.c文件中所有学生记录。

3.在student1.c的基础上,增加一个新学生的数据,要求按成绩高低顺序插入到原有文件中,然后存放到student3.c中,并打印出student3.c中顺序号为奇数的学生记录(即第1、3、5学生的数据)。

4.在student1.c的基础上,删除一个学生的数据,然后存放到student4.c中,并打印出student4.c中顺序号为偶数的学生记录(即第2、4学生的数据)。

学号 1 2 3 4 5 程序清单:

编写程序注意事项:

姓名 zhao tian sun Li zhou 成绩 98 79 77 96 89 31

本文来源:https://www.bwwdw.com/article/wzx8.html

Top