《C语言程序设计》实验题

更新时间:2024-05-02 05:51:01 阅读量: 综合文库 文档下载

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

《C语言程序设计》

实验指导

1

目录

实验一 C程序的运行环境和运行一个C程序的方法 ................ 1 实验二 实验三 实验四 实验五 实验六 实验七 实验八 实验九 实验十 实验十一实验十二 数据类型、运算符和表达式 ............................... 2 最简单的C程序设计..................................... 4 选择结构程序设计 ...................................... 6 循环控制 .............................................. 8 数组 ................................................. 10 函数 ................................................. 12 预处理命令 ........................................... 13 指针 ................................................. 15 结构体和共用体 ....................................... 17 位运算 ............................................... 20 文件 ................................................. 21

2

实验一:C程序的运行环境和运行一个C程序的方法(2学时) 实验性质:验证性实验 一、 实验目的

1.了解所用的计算机系统的基本操作方法,学会独立使用该系统。 2.了解在该系统上如何编辑、编译、连接和运行一个C程序。 3.通过运行简单的C程序,初步了解C源程序的特点。 二、实验内容

1.调用编辑程序,输入教材第一章例1.1程序,并进行编译和运行。应了解所用的系统是用什么命令进行编译和连接运行的。编译和连接后所得到的目标程序的后缀是什么形式的?

2.输入并运行教材第一章中例1.2。

3.输入并运行教材第一章中例1.3,了解如何在运行时向程序变量输入数据。

1

实验二 数据类型、运算符和表达式(2学时) 实验性质:验证性实验 一、实验目的

1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用格式转换符。

2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。

3.进一步熟悉C程序的编辑、编译、连接和运行的过程。 二、实验内容

1.输入并运行教材第三章例3.6.即:

#include main() {char c1,c2; c1=97; c2=98;

printf(?%c %c\\n?,c1,c2); printf(?%d %d\\n?,c1,c2); }

在此基础上 ①将第二行改为: int c1,c2;

再使之运行,分析结果。 ②再将第三行、第四行改为: c1=300;c2=400;

再使之运行,分析其运行结果。

2.输入并运行教材第三章习题3.6,在上机前先用人工分析程序写出应得结果,上机后将二者对照。

3.输入并运行习题3.10。即:

2

main( )

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

printf(?%d,%d,%d,%d?,i,j,m,n); }

分别作以下改动并运行: ①将第4行改为: m=i++;n=++j; ②程序改为: main( ) {int i,j; i=8;j=10;

printf(?%d,%d?,i++,j++); }

③在②的基础上,将printf语句改为: printf(?%d,%d?,++i,++j); ④再将printf语句改为:

printf(?%d,%d,%d,%d?,i,j, i++,j++); ⑤程序改为: main( )

{int i,j,m=0,n=0; i=8;j=10; m+=i++;n- = - -j;

printf(?i=%d,j=%d,m=%d,n=%d?,i,j,m,n); }

3

实验三 最简单的C程序设计(2学时) 实验性质:验证性实验 一、实验目的

1.掌握C语言中使用最多的一种语句——赋值语句的使用。 2.掌握数据的输入输出的方法,能正确使用各种格式转换符。 二、实验内容

1.输入并运行以下程序: main( ) {int a,b; float d,e; char c1,c2; double f,g; long m,n; unsigned int p,q; a=61;b=62; c1=’a’;c2=’b’; d=3.56;e=-6.87;

f=3157.890121;g=0.123456789; m=50000;n=-60000; p=32768;q=40000;

printf(?a=%d,b=%d\\n c1=%c,c2=%c\\nd=%6.2f,e=%6.2f\\n?,a,b,c1,c2,d,e); printf(?f=.6f,g=.12f\\nm=%ld,n=%ld\\np=%u,q=%u\\n?,f,g,m,m,p,q); }

在此基础上,做以下改动: ① 将程序第8-13行改为: a=61;b=62; c1=a;c2=b;

f=3157.890121;g=0.123456789; d=f;e=g;

4

p=a=m=50000;q=b=n=-60000; 运行程序,分析结果。

② 在①的基础上将printf语句改为:

printf(?a=%d,b=%d\\n c1=%c,c2=%c\\nd=.6f,e=.12f\\n?,a,b,c1,c2,d,e);

printf(?f=%f,g=%f\\n m=%ld,n=%ld\\n p=%d,q=%d\\n?,f,g,m,n,p,q); 运行程序。

2.编写程序,用getchar函数读入两个字符c1、c2,然后分别用putchar函数和printf函数输出这两个字符。

上机运行程序,比较用printf和putchar函数输出字符的特点。

5

实验四 选择结构程序设计(2学时) 实验性质:验证性实验 一、实验目的

1.了解C语言表示逻辑量的方法(以0代表?假?,以1代表?真?); 2.学会正确使用逻辑运算符和逻辑表达式; 3.熟练掌握if语句和switch语句。 二、实验内容

1、运行程序,并分析程序的功能。

main( )

{ int a,b,c;

scanf(?%d,%d,%d?,&a,&b,&c); if(a

printf(?max=%d\\n?,c); else

printf(?max=%d\\n?,b); else if (a

printf(?max=%d\\n?,c); else

printf(?max=%d\\n?,a); }

将上述程序改为以下形式,请分析两者有什么不同,实现的功能是否相同? main( )

{int a,b,c,temp,max;

scanf(?%d,%d,%d?,&a,&b,&c); temp=(a>b)?a:b; max=(temp>c)?temp:c; printf(?%d\\n?,max); }

6

2、运行程序,并分析程序完成的功能。 main( ) { int x,y;

scanf(?%d?,&x); if(x<1) {y=x;

printf(?x==,y=x=%d\\n?x,y); else if(x<10) {y=2*x-1;

printf(?x==,y=2*x-1=%d\\n?x,y); } else {y=3*x-11;

printf(?x==,y=3*x-11=%d\\n?x,y); } }

7

实验五 循环控制(2学时) 实验性质:验证性实验 一、实验目的

1、熟悉用while语句,do-while语句和for语句实现循环的方法。

2、掌握在程序设计中用循环的方法实现各种算法(如穷举、迭代、递推等)。 二、实验内容

1、下面程序完成的功能是:输入两个正整数,求其最大公约数和最小公倍数。请将程序补充完整,并调试运行,分析结果是否正确。

main( )

{ int p,r,n,m,temp; scanf(?%d,%d?,&n,&m); if(n

{ temp=n;n=m ;m=temp;} ; while( ) {r=n%m ; n=m ; m=r;} printf(?%d\\n?,n); printf(?%d\\n?,p/n); }

2、下面程序完成的功能是:用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。请将程序补充完整,并调试运行,分析结果是否正确。

#include main( )

{float x,x0,f,f1; ; do

{ ;

f=((2 * x0-4) * x0+3) * x0-6; f1=(6 * x0-8) * x0+3;

8

x=x0-f/f1; }

while(fabs(x-x0)>=1e-5);

printf(?the root of equation is %5.2f\\n?,x); }

9

实验六 数组(2学时) 实验性质:验证性实验 一、实验目的

1.掌握一维数组和二维数组的定义、赋值和输入输出的方法; 2.掌握字符数组和字符串函数的使用。 3.掌握与数组有关的算法(特别是排序算法)。 二、实验内容

1、下面程序完成的功能是:用选择法对10个整数按从小到大进行排序。请将程序补充完整,并调试运行,分析结果是否正确。 main( )

{int i,j ,min, temp ,a[11]; printf(?enter data:\\n?); for(i=1 ;i<=10 ;i++) { printf(?a[%d]=?,i); scanf(?%d?,&a[i]);} printf(?\\n?); for(i=1; i<=10; i++) printf(?]?,a[i]); printf(?\\n?); for(i=1; i<=9; i++) { ;

for(j=i+1; j<=10; j++) if( ) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp;}

printf(?\\nthe sorted numbers:\\n?); for(i=1; i<=10 ;i++)

10

printf(?]?,a[i]); }

2、运行程序,并分析下面程序所完成的功能。

main( )

{char s1[80] ,s2[40]; int i=0 ,j=0;

printf(?\\ninput string1:?); scanf(?%s?,s1); printf(?\\ninput string2:?); scanf(?%s?,s2); while(s2[j]!=’\\0’) s1[i++]=s2[j++]; s1[i]=’\\0’;

printf(?the new string is:%s?,s1); }

11

实验七 函数(2学时) 实验性质:设计性实验 一、实验目的

1.掌握定义函数的方法;

2.掌握函数实参与形参的对应关系,以及?值传递?的方式; 3.掌握函数的嵌套调用和递归调用的方法;

4.掌握全局变量和局部变量,动态变量和静态变量的概念和使用方法。 二、实验内容

编程序并上机调试运行。

1、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。

2、写一函数,用?起泡法?对输入的10个整数按由小到大进行排序。

12

实验八 预处理命令(1学时) 实验性质:验证性实验 一、实验目的 1.掌握宏定义的方法; 2.掌握文件包含处理方法; 3.掌握条件编译的方法。 二、实验内容

1、运行程序,并分析程序完成的功能。 #define SWAP(a,b) t=b;b=a;a=t main( ) { int a,b,t;

print(?input two integers:a,b?); scanf(?%d,%d?,&a,&b); SWAP(a,b);

printf(?now ,a=%d,b=%d\\n?,a,b); }

2、下面程序完成的功能是:输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下字母(如‘a’变成‘b’,…,‘z’变成‘a’。其它字符不变)。将程序补充完整,并运行,分析结果是否正确。 #include #define MAX 80 #define CHANGE 1 main( )

{ char str[MAX]; int i;

printf(?input text:\\n?); gets(str); #if( ) { for(i=0;i

13

if( ) if(str[i]>=’a’&&str[i]=’A’&&str[i]<’Z’) ;

else if(str[i]==’z’||str[i]==’Z’) str[i]-=25; } } #end if

printf(?output:\\n%s?,str); }

14

实验九 指针(2学时) 实验性质:验证性实验 一、实验目的

1.掌握指针的概念,会定义和使用指针变量; 2.学会使用数组的指针和指向数组的指针变量; 3.学会使用字符串的指针和指向字符串的指针变量; 4.学会使用指向函数的指针变量; 二、实验内容

1、运行程序,并分析程序完成的功能。

main( )

{ char *str1[20],*str2[20],*str3[20]; char swap( );

printf(?input three lines:\\n?); gets(str1); gets(str2); gets(str3);

if(strcmp(str1,str2)>0) swap(str1,str2); if(strcmp(str1,str3)>0) swap(str1,str3); if(strcmp(str2,str3)>0) swap(str2,str3); printf(?now,the order is:\\n?);

pritnf(?%s\\n%s\\n%s\\n?,str1,str2,str3) ;} char swap(char *p1,char *p2) { char *p[20]; strcpy(p,p1); strcpy(p1,p2); strcpy(p2,p); }

2、运行程序,并分析程序完成的功能。

#include

15

main( )

{ void sort(char s[ ] [ ]); int i;

char str[10][6];

printf(?input 10 strings:\\n?); for(i=0;i<10;i++) scanf(?%s?,str[i ]); sort(str);

printf(?now ,the sequence is:\\n?); for(i=0;i<10;i++) printf(?%s\\n?,str[i]);} void sort(char s[10][6]) { int i,j;

char *p ,temp[10]; p=temp; for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(strcmp(s[j],s[j+1])>0) {strcpy(p,s[j]); strcpy(s[j],s[j+1]); strcpy(s[j+1],p); } }

16

实验十 结构体和共用体(2学时) 实验性质:验证性实验 一、实验目的

1.掌握结构体类型变量的定义和使用; 2.掌握结构体类型数组的概念和应用; 3.掌握共用体的概念与使用。 二、实验内容

编程序,然后上机调试运行。

1、运行程序,并分析程序所完成的功能。 #define N 10 struct student { char num[6];

char name[8]; int score[4]; float avr; } stu[10]; main( )

{ int i ,j ,max ,maxi ,sum; float average; for(i=0;i

{ printf(?\\n input scores of student:%d\\n?, printf(?No:?);

scanf(?%s?,str[i].num); printf(?name:?); scanf(?%s?,stu[i].name); for(j=0;j<3;j++)

{ printf(?score%d:?,j+1); scanf(?%d?,&str[i].score[j]); }

17

i+1);

}

average=0; max=0; maxi=0; for(i=0;imax) {max=sum; maxi=i ;} } average/=N;

printf(?No. name score1 score2 score3 average\\n?); for(i=0;i

{ printf(?%5ss?,stu[i].num ,stu[i].name); for(j=0;j<3;j++)

printf(???,stu[i].score[j]); printf(?%8.2f\\n?,stu[i].avr); }

printf(?average=%6.2f\\n?,average);

printf(?the highest score is:%s,score total:%d?,stu[maxi].name,}

2、输入和运行以下程序: union data {int i[2]; float a; long b;

18

max);

char c[4]; }; main( )

{union data u;

scanf(“%d,%d”,&u.i[0],&u.i[1]);

printf(“i[0]=%d,i[1]=%d\\na=%f\\nb=%ld\\nc[0]=%c,c[1]=%c,c[2]=%c,c[3]=%c\\n”,u.i[0],u.i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]); }

输入两个整数10000、20000给u.i[0]和u.i[1]。 分析运行结果。 然后将scanf语句改为: scanf(“%ld”,&u.b);

输入60000给b。分析运行结果。

19

实验十一 位运算(2学时) 实验性质:验证性实验 一、实验目的

1.掌握位运算的概念和方法,学会使用位运算符; 2.学会通过位运算实现对某些位的操作。 二、实验内容

1、运行程序,并分析程序实现的功能。

main( )

{ unsigned int a;

unsigned int getbits(unsigned); printf(?\\ninput an octal number:?); scanf(?%o?,&a);

printf(?result:%o\\n?getbits(a)); }

unsigned int getbits(unsigned value) { unsigned int z; z=value&0100000; if(z==0100000) z=~value+1; else z=value; return(z); }

20

实验十二 文件(2学时) 实验性质:验证性实验 一、实验目的

1.掌握文件以及缓冲文件系统、文件指针的概念; 2.学会使用文件打开、关闭、读、写等文件操作函数。 3.学会用缓冲文件系统对文件进行简单的操作。 二、实验内容

1、下面的程序实现的功能是:从键盘输入一个字符,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件?test?中保存。输入的字符以?!?结束。 请运行程序,并分析结果,验证程序是否正确。 #include main( ) { FILE *fp; char str[100]; int i=0;

if(!fp=fopen(?test?,?w?))==null) { prinf(?can not open the file\\n?); exit(0); }

printf(?input a string:\\n?); gets(str); while(str[i]!=‘!‘)

{ if(str[i]>=‘a‘&&str[i]<=‘z’) str[i]=str[i]-32; fputc(str[i],fp); i++; }

fclose(fp);

fp=fopen(?test?,?r?);

21

fgets(str,strlen(str)+1,fp); printf(?%s\\n?,str); fclose(fp); }

22

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

Top