四川师范大学计算机科学学院《C语言程序设计》
实
验
手
册
2010年2月
年级: 2009级
专业:计算机科学与技术
班级:一班
姓名:谢丹
学号: 2009110156 指导教师:廖雪花
《C语言程序设计》实验课程简介
课程名称:C语言程序设计实验
课程性质:专业必修课
课程属性:专业必修课
学时学分:学时32 学分1
开课实验室:软件实验室
面向专业:网络工程、软件工程、计算机科学与技术
一、课程的任务和基本要求
C语言程序设计实验是面向计算机相关专业学生开设的《C语言程序设计》实验课,是配合《C 语言程序设计》课程而开设的实验性教育环节。本课程的主要任务是让学生充分掌握C语言程序设计的基本概念、各种数据类型的使用技巧、模块化程序设计的方法等。C语言程序设计实验对课程中所涉及的知识进行验证,同时也是学生很好地学习课程的辅助手段。通过C语言上机实验的教学活动,使学生真正全面掌握C语言的基础知识,培养和提高学生的程序开发能力。
二、实验项目
【实验一】最简单的C程序---顺序程序设计
【实验二】逻辑运算和判断选取控制
【实验三】循环结构程序设计(一)
【实验四】循环结构程序设计(二)
【实验五】函数
【实验六】数组(一)
【实验七】数组(二)
【实验八】指针
【实验九】结构体、共用体和文件
【实验十】C程序综合性实验
三、有关说明
1、与其它课程和教学环节的联系:
先修课程:计算机文化
后续课程:面向对象程序设计、Java程序设计、数据结构、软件工程
2、教材和主要参考书目:
(1)教材:
《C程序设计习题解答与上机指导》,谭浩强吴伟民著,北京:清华大学出版社,2003年。(2)主要参考书目:
《C语言程序设计》谭浩强主编,清华大学出版社,2003年。
三、实验内容
实验一最简单的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”);
}
运行结果及分析:
结果:****************** 分析:在C语言中,\n表示换行,因此运行结果为三行。 This is a c program. Printf 是预定义的标准的C函数,用于显示输出。 ******************
将程序中的\n去掉后,运行结果及分析:
结果:****************This is a c program.****************
分析:去掉\n后,运行结果将不换行,因此只有一行。
(2)#include
void main()
{
int a=100,b=20,sum,sb;
sum=a+b;
sb=a/b;
printf("sum=%d,sb=%d",sum,sb);
}
运行结果及分析:
结果:sum=120,sb=5
分析:变量声明语句int·····告诉编译器a b sum sb均为整数型,可执行语句中的%d表示输出的结果为整数。
(3)#include
void main( )
{
char c1,c2;
c1=97;c2=98;
printf("%c ,%c\n",c1,c2);
printf("%d,%d\n",c1,c2);
printf("%c %c\n",c1+1,c2+2);
}
运行结果及分析:
结果:a,b 分析:C语言中,%c表示字符输出,在ASCⅡ中,97、98、100 97,98 分别为a b d。
b,d
(4)#include
void main ()
{
int i=8,j=10,m,n;
m=++i;n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
}
运行结果及分析:
结果:9,11,9,10
分析:m=++i表示i加1再赋值给m,而n=j++表示先将j赋值给n,再加1.
再将本程序的第3行改为m=i++;n=++j;
运行结果及分析:
结果:9,11,8,11
2.程序填空
任意输入一个有五位数字的正整数x,分别输出每一数位上的数字(由高到低分别用b5,b4,b3,b2,b1表示),请将程序补充完整。
#include
main()
{
int b1,b2,b3,b4,b5;
①long int x;
Scanf( “ %ld ”,&x);
b5= ②(x/10000)%10 ;
b4=(x/1000)%10;
b3= ③(x/100)%10 ;
b2=(x/10)%10;
b1= ④(x/1)%10 ;
printf(“the number is ⑤ %ld \n”,x);
printf(“its bit is:%d,%d,%d,%d,%d\n”,b5,b4,b3,b2,b1);
}
程序分析:int的表示范围只有-32768~32767,并没有包含所有的五位数,而long int的表示范围则比int的范围大了很多,包含了所有的五位数。而算术运算符%为取模运算,该运算的结
果是整数除的余数。
3.程序改错(注意:题中的编号为行序号,并非程序本身)
计算任意一个半径为r的圆的面积和周长(结果保留两位小数)(1)#include
(2)main()
{
(3)float r; p=3.14,c,area;
(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)}
错误语句的行号:(3)
改正后的语句全行:float r,p,c,area;
错误语句的行号:(4)
改正后的语句全行:p=3.14;
错误语句的行号:(7)
改正后的语句全行:area=p*r*r;
错误语句的行号:(6)
改正后的语句全行:c=2*p*r;
改错分析:
实验二逻辑运算和判断选取控制
(验证性实验 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);
}
运行结果及分析:
结果:8,10
分析:a=(--x == y++)? --x : ++y;所表示的是:若--x==y++,则将—x的值赋给a,反之就将++y 的值赋给a.而--x的意思为x先减1再用变量x的新值进行表达式计算;而y++的意思为y先进行表达式计算,再加1.
(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);
}
运行结果及分析:
结果:2
分析:c+=1相当于c=c+1
(3)#include
void main( )
{
int a=0,b=0,c=0;
if(++a > 0 || ++b > 0) ++c;
printf(“\n a=%d,b=%d,c=%d”,a,b,c);
}
运行结果及分析:
结果:
a=1,b=0,c=1
分析:(++a > 0 || ++b > 0)语句中,||是逻辑或运算符,该运算符的关联性为从左到右,因此当||左边的表达式满足要求时,右边的表达式将不再进行计算。
?(4)#include
void main()
{
int x=-1;
switch (x)
{
default: printf(“a”);
case 1: printf(“b”);
case 2: printf(“c”);
}
}
运行结果及分析:
结果:abc
在case 1:printf(“b”);后加上break;语句,结果如何?修改程序并上机调试。
运行结果及分析:
结果:ab
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 ___________ ③_____________________;
}
填空①:a>b
填空②:a=b
填空③:printf(“%d is larger”, b)
结果分析:
如果输入的两个数a和b中,a>b,则输出结果为:a is larger;如果a=b,则输出结果为:These numbers are equal;如果a
3.编写程序
?(1)编写一个程序,读入5个整数,然后确定并显示这组数中的最大整数和最小整数。程序清单:
#include
main()
{
int a, b, c, d, e;
printf ("Input five different integers:");
scanf ("%d %d %d %d %d", &a, &b, &c, &d, &e);
getch();
}
程序编写注意事项:
(2)编写程序,读取一个整数,判断并显示出这个整数是奇数还是偶数。(提示:使用求模运算符。偶数是2的倍数。任何2的倍数除以2时,余数均为零。)
程序清单:
#include
main()
{
int number;
printf ("Enter an integer number\n");
scanf ("%d", &number);
if (number % 2==0)
printf ("The number is odd number.\n");
else
printf ("The number is even number.\n");
getch();
}
程序编写注意事项:
?(3)编写一个程序,从键盘中输入3个不同的整数,然后显示这3个整数的和、平均数、积、最小数和最大数。(用if语句)屏幕中的对话内容如下所示:
程序清单:
#include
main()
{
int a,b,c;
int sum, average, product, smallest, largest;
printf ("Input three different integers:");
scanf ("%d %d %d", &a, &b, &c);
if (sum=a+b+c)
printf ("Sum is %d\n", sum);
if (average=sum/3)
printf ("Average is %d\n", average);
if (product=a*b*c)
printf ("Product is %d\n", product);
getch();
}
程序编写注意事项:
实验三循环结构程序设计(一)
(验证性实验 2学时)
(一)、实验目的
1.熟悉用while语句、do-wile语句和for语句实现循环的方法
2.掌握在程序设计中用循环方法实现的算法
(二)、实验内容
1.写出下列程序的运行结果
(1)#include
void main()
{
int count=1;
while(count<=10)
{
count++;
printf(“%s\n”,count%2? “****”: “++++++++++”);
}
}
运行结果及分析:
结果:++++++++ 分析:程序中的语句:count%2? “****”:”++++++++”表示如果 **** count%2为真,则输出****,若count%2为假,则输出++++++++ ++++++++ 而count++表示每循环一次就增加1,直到count的值为10 **** 为止。
++++++++
****
++++++++
****
++++++++
****
(2)#include
void main()
{
int row=10,Column;
while(row>=1)
{
Column=1;
while(Column <=10)
{
printf(“%s”,row%2 ? “<”: “>”);
Column++;
}
row--;
printf(“\n”);
}
}
运行结果及分析:
结果:>>>>>>>>>> 分析:当row=10时,Column=1,因此row%2为假,则输出 <<<<<<<<<< 一个>;然后Column增加1,继续进行while(Column<=10) >>>>>>>>>> 循环,直到Column=10为止。然后运行到row--,继续进 <<<<<<<<<< while(row>=1)的循环,当运行到第二个while循环时, >>>>>>>>>> 又将进行十次循环过后再继续运行。
<<<<<<<<<<
>>>>>>>>>>
<<<<<<<<<<
>>>>>>>>>>
<<<<<<<<<<
(3)#include
void main()
{
int y=9;
for( ; y>0 ; y--)
if(y%3==0) printf("%d\n" , --y);
}
运行结果及分析:
结果: 8 分析:
5
2
2.编写程序
(1)利用循环语句来显示如下所示的数值表:
程序清单如下:
#include
main()
{
int n=0,number1,number2,number3;
printf ("N 10*N 100*N 1000*N\n\n");
while(n<10)
{
n++;
number1=10*n;
number2=100*n;
number3=1000*n;
printf ("%d %d %d %d\n",n,number1,number2,number3);
}
getch();
}
程序编写注意事项:
(2)编写一程序,能够输入一组10个数字,判断并显示出这些数字中的最大数。提示:程序中应该使用如下的3个变量:
Counter:能够记数到10的记数器。
Number:当前输入到程序中的数字。
Largest:迄今为止所发现的最大数字。
程序清单:
#include
main()
{
long int a, b, number, counter=2,largest;
printf("Enter one integert:");
scanf ("%ld", &a);
b=a;
printf ("The largest one is %ld\n",b);
while (counter<=10)
{
printf("Enter an integer:");
scanf("%ld", &number);
if(number >b)
{
largest= number;
printf ("The largest one is %ld\n", largest);
}
else
{
largest= b;
printf ("The largest one is %ld\n", largest);
}
b=largest;
counter++;
}
getch();
}
程序编写注意事项:
(3)请开发一个程序来输入每油箱的行程里程和所用的汽油。能够计算并显示出对于每个油箱每加仑汽油的行驶里程。处理输入信息后,计算并显示所有油箱每加仑汽油的行驶里程。以下是一个事例的输入/输出:
程序清单:
程序编写注意事项:
(4)编写一个程序读入一个5位数,并判断该整数是否是回文。(回文指顺读和倒读都一样的数字和文字语句,例:12321,55555。)提示:使用除法运算符和求模运算符把该数分解成单位个数。
程序清单:
#include
main()
{
int a, b, c, d;
long int n;
scanf("%ld", &n);
a=n/10000;
b=(n%10000)/1000;
c=(n%100)/10;
d=n%10;
if(a==d && b==c)
printf("this %ld is a hui wen\n",n);
else
printf ("this %ld is not a hui wen\n",n);
getch();
}
程序编写注意事项:
实验四循环结构程序设计(二)
(验证性实验 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++;
}
x++;
}
k=i+j;
printf("k=%d,x=%d\n" , k , x);
}
运行结果及分析:
结果为:。
分析:程序中continue语句表示控制权直接跳转到测试条件,使循环继续下一次循环,跳过其后的全部语句。
(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);
}
运行结果及分析:
结果为:x=10,y=6
分析:程序中,语句if(x>=10) break;表示当x>=10时,跳出循环,语句if(x%2==1) { x+=5; continue;},表示当x%2为真时,继续循环。
(3)#include
void main()
{
int i , j , sum;
for(i=1;i<6;i++)
{
sum=0;
for(j=1;j<=4;j++)
sum+=j;
}
printf(“sum=%d\n”, sum);
}
运行结果及结果:
结果为:sum=10
分析:程序中,有两个循环,外循环和内循环。外循环循环一次,内循环就循环四次,每次循环结束,sum的值为10。
(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("k=%d,m=%d\n",k,m);
}
运行结果及结果:
结果为:k=0,m=5
2.程序填空
(1)下面程序的功能是:输出100以内同时能被3和7整除的所有整数,请填空。
#include
void main()
{
int i, j;
for ( i=1;___①_____; i++ )
{
if (___②______) continue;
printf ( "%d\t",i );
}
}
填空①:i<100
填空②:i/3 && i/7
程序分析:程序中的for循环限制数的范围,if语句中表示条件。Continue表示结束if语句,继续for循环。
(2)判断m是否素数
#include
void main()
{
int m,i,k;
scanf(“%d”,&m);
for(i=2;i if(i>=m)printf(“%d是一个素数\n”,m); else printf(“%d不是一个素数\n”,m); } 填空并运行分析: 3.编写程序 (1)编写一个程序,能够找出几个整数中最小的整数。假定程序读取的第一个值是余下数值的数目。 程序清单: 程序编写注意事项: ?(2)编写一个程序显示出如下菱形图案。可以使用printf语句来显示一个(*)和一个空格,尽量多使用循环语句(嵌套的for语句),尽量少用printf语句。 程序清单: #include void main() { int i,j,k; for (i=1;i<=4;i++) { for(j=1;j<=4-i;j++) printf(" "); for(k=1;k<=2*i-1;k++) printf("*"); printf("\n"); } for(i=1;i<=3;i++) { for(j=1;j<=i;j++) printf(" "); for(k=1;k<=7-2*i;k++) printf("*"); printf("\n"); } getch(); } 程序编写注意事项: