当前位置:文档之家› C语言实验报告参考答案

C语言实验报告参考答案

(此文档为word格式,下载后您可任意编辑修改!)

四川师范大学计算机科学学院《C语言程序设计》

2010年2月

年级:

专业:

班级:

姓名:

学号:指导教师:

《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”);

}

运行结果及分析:运行结果为:

Printf函数语句表示输出引号内的字符串,最后的\n表示换行,

将程序中的\n去掉后,运行结果及分析:运行结果为:

去掉\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=100+20=120;sb=100/20=5.

(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);

}

运行结果及分析:运行结果为:

声明c1,c2是字符型常量,第一个输出函数以字符格式输出c1,c2,97,98对应的是a,b的ASCII代码,所以输出的是“a,b”之后换行,第二个输出函数表示已十进制数形式输出c1,c2,故输出结果就是97.98,换行,第三个输出函数中表示以字符函数形式输出c1+1,c2+2,是b,d 的ASCII代码值。

(4)#include

void main ()

{

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

m=++i;n=j++;

printf("%d,%d,%d,%d",i,j,m,n);

}

运行结果及分析:运行结果为:

m=++i,当++运算符在前面时,先自增再将值赋给了m。而++在后面时是先将值赋给了n再自增。再将本程序的第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)%10;

b3= ③ ;

b2=(x/10)%10;

b1= ④ ;

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

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

}

程序分析:①long int

②x/10000

③(x/100)%10

④ x%10

⑤ %ld

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=3.14,area;

错误语句的行号: (5)

改正后的语句全行: scanf(“%f”,&r);错误语句的行号: (6)

改正后的语句全行:c=2*p*r;

错误语句的行号: (7)

改正后的语句全行: area=p*r*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);

}

运行结果及分析:运行结果为

--x先自减=9=y,所以逻辑运算结果为1,故取值取--x=8,y只进行了一次自增运算,所以y=9. (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);

}

运行结果及分析:运行结果为:

由于第一个if选择的a

(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>0,故++b不再运算,条件成立,计算++c。故a=1,b=0,c=1。

(4)#include

void main()

{

int x=-1;

switch (x)

{

default: printf(“a”);

case 1: printf(“b”);

case 2: printf(“c”);

}

}

运行结果及分析:运行结果为:

由于x=-1,所以运行default后面的语句,由于没有break语句,所以继续运行,所以三个语句都运行了。

在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 ___________ ③_____________________;

}

填空①:a>b

填空②:a==b

填空③:printf(“%d is larger”, b);

结果分析:显示较大的数字

3.编写程序

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

程序清单:#include

int max(int x,int y,int z);

int min(int x,int y,int z);

main()

{

int a,b,c,d,e,max1,min1;

printf("Please input five intergers:\n");

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

max1=max(a,b,c);

max1=max(max1,d,e);

min1=min(a,b,c);

min1=min(min1,d,e);

printf("These five numbers are:%d,%d,%d,%d,%d\n",a,b,c,d,e);

printf("max=%d\nmin=%d",max1,min1);

getch();

}

int max(int x,int y,int z)

{

int p;

p=x>y?x:y;

p=p>z?p:z;

return(p);

}

int min(int x,int y,int z)

{

int p;

p=x

p=p

return(p);

}

程序编写注意事项:

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

程序清单:#include

main()

{

long int a;

printf("Please input a integer:\n");

scanf("%ld",&a);

if(a%2==0)

printf("\n\n%ld:This is an even number\n");

else

printf("\n\n%ld:This is a odd number\n");

getch();

}

程序编写注意事项:

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

程序清单:#include

int max (int x,int y,int z);

int min (int x,int y,int z);

main()

{

int a,b,c,max1,min1

long int sum,pro;

float average;

printf("Please input three diffrent integers:");

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

sum=a+b+c;

average=sum/3;

pro=a*b*c;

max1=max (a,b,c);

min1=min (a,b,c);

printf("Sum is %ld\nAverage is %f\nProduct is %ld\nSmallest is %d\nLargest is %d\n",sum,average,pro,min1,max1);

getch();

}

int max (int x,int y,int z)

{

int p;

p=x>y?x:y;

p=p>z?p:z;

return(p);

}

int min (int x,int y,int z)

{

int p;

p=x

p=p

return(p);

}

程序编写注意事项:

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

(验证性实验 2学时)

(一)、实验目的

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

2.掌握在程序设计中用循环方法实现的算法

(二)、实验内容

1.写出下列程序的运行结果

(1)#include

void main()

{

int count=1;

while(count<=10)

{

count++;

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

}

}

运行结果及分析:运行结果为:

奇数时显示+,偶数显示*。

(2)#include

void main()

{

int row=10,Column;

while(row>=1)

{

Column=1;

while(Column <=10)

{

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

Column++;

}

row--;

printf(“\n”);

}

}

运行结果及分析:运行结果为:

奇数时显示>并循环十次,偶数时显示<并循环十次。然后共循环十次。

(3)#include

void main()

{

int y=9;

for( ; y>0 ; y--)

if(y%3==0) printf("%d\n" , --y);

}

运行结果及分析:运行结果为:

当y能被三整除时,显示--y。

2.编写程序

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

程序清单如下:

#include

main()

{

int n,n1,n2,n3;

printf("N\t\tN*10\t\tN*100\t\tN*1000\n");

for(n=1;n<11;n++)

printf("%-16d%-16d%-16d%-16d\n",n,n*10,n*100,n*1000);

getch();

}

程序编写注意事项:

(2)编写一程序,能够输入一组10个数字,判断并显示出这些数字中的最大数。提示:程序

中应该使用如下的3个变量:

Counter:能够记数到10的记数器。

Number:当前输入到程序中的数字。

Largest:迄今为止所发现的最大数字。

程序清单:

#include

main()

{

long int Number,Largest=0;

int Counter;

for(Counter=1;Counter<11;Counter++)

{

printf("Please input a number(%dof10):",Counter);

scanf("%d",&Number);

if(Number>Largest)

Largest=Number;

}

printf("The largest number is %ld",Largest);

getch();

}

程序编写注意事项:

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

程序清单:

#include

main()

{

float gallons=0,miles,average[100],sum=0,aaverage;

int i=0;

while(gallons!=-1)

{

printf("Enter the gallons used <-1 to end>:");

scanf("%f",&gallons);

if(gallons==-1)

break;

printf("Enter the miles driven:");

scanf("%f",&miles);

average[i]=miles/gallons;

sum+=average[i];

printf("The Miles/Gallon for this tank was %f\n\n",average[i]);

i++;

}

aaverage=sum/i;

printf("The overall average Miles/Gallon was %f",aaverage);

getch();

}

程序编写注意事项:

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

程序清单:

#include

main()

{

long int a,b,a1,a2,a3,a4,a5;

printf("Please input a 5-digit number:");

scanf("%ld",&a);

a5=a/10000;

a4=(a/1000)%10;

a3=(a/100)%10;

a2=(a/10)%10;

a1=a%10;

b=a1*10000+a2*1000+a3*100+a4*10+a5;

if(a==b)

printf("\n%ld is a palindrome number.",a);

else

printf("\n%ld is not a palindrome number",a);

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);

}

运行结果及分析:运行结果为:

最后循环结束时i=2,j=3,故k=i+j;在循环过程中x++共执行了8次,故x=8;(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的变化过程为:6,3,8,5,10,循环执行了5次,故y=6。

(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);

}

运行结果及结果:运行结果为:

在j的循环后,sum=10,由于每次i循环时都使sum=0,故循环6次后仍然是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);

}

运行结果及结果:运行结果为:

j循环中:k的值变化为:1,1,2,1,2,0.循环两次结果不变。循环结束时,i=2,j=3,故m=5. 2.程序填空

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

#include

void main()

{

int i, j;

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

{

if (___②______) continue;

printf ( "%d\t",i );

}

}

填空①:i<101;

填空②:(i%3!=0) || (i%7!=0)

程序分析:当不能被3或7整除时返回i++,否则输出i。

(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);

}

填空并运行分析:m%i==0

可以把i

3.编写程序

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

程序清单:

#include

main()

{

long int a[100],min;

int i,n;

printf("Please input several numbers:");

scanf("%d",&n);

for(i=0;i<=n-1;i++)

{

scanf("%ld",&a[i]);

if(a[i]

min=a[i];

}

printf("The smallest numbers is %ld",min);

getch();

}

程序编写注意事项:

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

程序清单:

#include

main()

{

int i,j,n;

for(i=1;i<=5;i++)

{

for(n=5;n>i;n--)

printf(" ");

for(j=1;j<=(2*i-1);j++)

printf("*");

printf("\n");

}

for(i=4;i>=0;i--)

{

for(n=5;n>i;n--)

printf(" ");

for(j=1;j<=(2*i-1);j++)

printf("*");

printf("\n");

}

getch();

}

程序编写注意事项:

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

程序清单:

#include

int main()

{

int month,day,leap,max,n,m,k,j;

float year,k1,m1;

printf("Please input the year:");

scanf("%f",&year);

n=(int)((year-1)/3324);

m1=(int)((year-1)/100);

m=(int)(m1*3/4+0.85);

k1=(int)(year/4*5-0.15)-m-n;

k=(int)((k1/7-(int)(k1/7))*7+0.5);

if(year<=0)

{

printf("Input error.");

exit(0);

}

if((int)year%400==0||((int)year%4==0&&(int)year%100!=0))

leap=1;

else

leap=0;

for(month=1; month<=12; month++)

{

printf("NO.%d\n",month);

printf("---\n");

printf("Sun.\tMon.\tTue.\tWed.\tThu.\tFri.\tSat.\n");

if(month==2)

max=28+leap;

else if(month==4||month==6||month==9||month==11)

max=30;

else max=31;

for(j=1; j<=k; j++)

printf("\t");

for(day=1; day<=max; day++)

{

printf("%3d\t",day);

k++;

if(k>6)

{

printf("\n");

k=0;

}

}

printf("\n---\n");

printf("\nPress anykey to show next month.\n"); getch();

}

getch();

}程序编写注意事项:

实验五函数

(验证性实验、综合性实验 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("%d\n",a);

}

fun(int a)

{

a=a+3;

printf("%d,",a);

}

运行结果及分析:运行结果为:

自定义函数中的a是局部变量,只在该函数中有效。

(3)#include

int fun(int x)

{

static int a=3;

a=a+x;

return a;

相关主题
文本预览
相关文档 最新文档