阿坝师专计科系《C语言程序设计》实验手册
《C语言程序设计》实验简介
课程名称:C语言程序设计
课程性质:专业必修课
课程属性:专业必修课
课程学时学分:学时78 实验学时32 学分6
面向专业:软件技术、网络系统管理、计算机应用技术、楼宇智能化工程技术、现代教育技术
一、课程的任务和基本要求
C语言程序设计实验是面向计算机相关专业学生开设的《C语言程序设计》实验课,是配合《C语言程序设计》课程而开设的实验性教育环节。本课程的主要任务是让学生充分掌握C语言程序设计的基本概念、各种数据类型的使用技巧、模块化程序设计的方法等。C语言程序设计实验对课程中所涉及的知识进行验证,同时也是学生很好地学习课程的辅助手段。通过C语言上机实验的教学活动,使学生真正全面掌握C语言的基础知识,培养和提高学生的程序开发能力。
二、实验项目
【实验一】最简单的C程序---顺序程序设计
【实验二】逻辑运算和判断选取控制
【实验三】循环结构程序设计(一)
【实验四】循环结构程序设计(二)
【实验五】函数
【实验六】数组(一)
【实验七】数组(二)
【实验八】指针
【实验九】结构体、共用体和文件
【实验十】C程序综合性实验
三、有关说明
1、与其它课程和教学环节的联系:
先修课程:计算机导论
后续课程:面向对象程序设计、Java程序设计、php、数据结构、软件工程
2、教材和主要参考书目:
(1)教材:
《C程序设计题解与上机指导(第三版)》,谭浩强 编著,北京:清华大学出版社,20xx年。
(2)主要参考书目:
《C语言程序设计(第三版)》 谭浩强 著,清华大学出版社,20xx年。
阿坝师专计科系《C语言程序设计》实验报告
三、实验内容
实验一 最简单的C程序---顺序程序设计
(验证性实验 2学时)
实验时间: 2012, 10,16 实验地点: 公共机房 3 实验成绩:
(一)、实验目的
1.熟悉win-tc程序运行环境
2.掌握运行一个C程序的步骤,理解并学会C程序的编辑、编译、链接方法
3.掌握C语言中使用最多的一种语句——赋值语句
4.掌握数据的输入输出方法,能正确使用各种格式控制符
(二)、实验内容
1.写出下列程序的运行结果
(1)#include <stdio.h>
void main()
{
printf(“*****************\n”);
printf(“This is a c program. \n”);
printf(“****************\n”);
}
运行结果为: *****************
This is a c program.
**************** 分析: printf函数表示输入字符,\n表示换行 将程序中的\n去掉后,运行结果及分析:
运行结果为:**************** This is a c program. **************** 分析: 无 “\n”不能自动换行
(2)#include <stdio.h>
void main()
{
int a=100,b=20,sum,sb;
sum=a+b;
sb=a/b;
printf("sum=%d,sb=%d",sum,sb);
}
阿坝师专计科系《C语言程序设计》实验报告
运行结果为: sum=120 sb=5
分析: sum=100+20=120,sb=100/20=5 输出时一一对应
(3)#include <stdio.h>
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 97,98
b,d
分析: 定义字符c1,c2。第一行以字符型输出(a,b),换行, 第二行将字符型以十进制输出得
(97,98),换行,第三行以字符型输出 (c1+1,c2+2)得(b,d)
(4)#include <stdio.h>
void main ()
{
int i=8,j=10,m,n;
m=++i;n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
阿坝师专计科系《C语言程序设计》实验报告
}
运行结果为: 9, 11, 9
10
分析: “++” 在前先i自身加再赋值给m,”++”在后面j先赋值给n再自身加 再将本程序的第3行改为m=i++;n=++j;
运行结果及分析:
运行结果为: 8,11,8,11 分析:
2.程序填空
任意输入一个有五位数字的正整数x,分别输出每一数位上的数字(由高到低分别用
b5,b4,b3,b2,b1表示),请将程序补充完整。
#include <stdio.h>
main()
{
int b1,b2,b3,b4,b5;
①printf(“b1,b2,b3,b4,b5:” x;
Scanf( “ %ld ”,&x);
b5= ②(x/10000)%10 ;
b4=(x/1000)%10;
b3= ③(x/100)%10 ;
b2=(x/10)%10;
b1= ④ x%10 ;
printf(“the number is ⑤ %d \n”,x);
printf(“its bit is:%d,%d,%d,%d,%d\n”,b5,b4,b3,b2,b1);
阿坝师专计科系《C语言程序设计》实验报告
}
程序分析:① long int ② x/10000 ③ (x/100)%10 ④ x%10 ⑤ %1d
3.程序改错(注意:题中的编号为行序号,并非程序本身)
计算任意一个半径为r的圆的面积和周长(结果保留两位小数)
(1)#include <stdio.h>
(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,c,area; 错误语句的行号: (5)
改正后的语句全行: scanf(“%f”,r)
错误语句的行号: 6
改正后的语句全行: c=2*p*r
错误语句的行号: (7)
改正后的语句全行: area=p*r*r
教师评语:
阿坝师专计科系《C语言程序设计》实验报告
实验二 逻辑运算和判断选取控制
实验时间: 2012 10,25 实验地点:公共机房3 实验成绩:
(验证性实验 2学时)
(一)、实验目的
1.了解逻辑量在C语言中的表示方法
2.学会使用逻辑运算符和逻辑表达式
3.熟练掌握if语句和switch语句
(二)、实验内容
1.写出下列程序的运行结果
(1)#include <stdio.h>
void main( )
{
int a,b,x=10,y=9;
a=(--x == y++)? --x : ++y;
b= y;
printf(“%d,%d\n”,a,b);
}
运行结果为: 8,11
分析: --x先自减x=9=y,所以计算结果为1,故取值—x=8,y只进行了一次自增,所以y=9.
(2)#include <stdio.h>
void main()
{
int a=2,b=-1,c=2;
If(a<b)
if(b<0)c=0;
else c+=1;
printf(“%d\n”,c);
}
运行结果为: 3
分析:
(3)#include <stdio.h>
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);
阿坝师专计科系《C语言程序设计》实验报告
}
运行结果为: a=1,b=0,c=1
分析: 先判断++a>0,故++b不再运算,条件成立,计算++c,故a=1,b=0,c=1.
(4)#include <stdio.h>
void main()
{
int x=-1;
switch (x)
{
default: printf(“a”);
case 1: printf(“b”);
case 2: printf(“c”);
}
}
运行结果为: abc
分析:由于x=-1,所以运行default后面的句子,由于没有break语句,所以继续运行,所以
三个语句都运行了。 在case 1:printf(“b”);后加上break;语句,结果如何?修改程序并上机调试。
运行结果为: ab
分析:
2.程序填空
输入两个整数,从用户处获取这两个整数,显示其中较大的数,在其后跟随“is larger”。如果
这两个数相等,显示“These numbers are equal.”。请在_____内填入正确内容。
#include <stdio.h>
void main( )
{
int a,b;
printf(“please input two numbers, a, b! “);
scanf(“%d%d”,&a,&b);
if( a>b ① ) printf(“%d is larger”, a );
else if(_______②____________) printf(“These numbers are equal”);
else ___________ ③_____________________;
}
填空①: a>b
填空②: a=b
阿坝师专计科系《C语言程序设计》实验报告
填空③: printf(“%d is larger”,b)
结果分析: 显示较大数字
3.编写程序
(1)编写一个程序,读入5个整数,然后确定并显示这组数中的最大整数和最小整数。 程序清单:
#include <stdio.h>
{viod main()
Int a,b,c,d,e,max1,min1;
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(“max=%d min=%d”,max1,min1);
getch();
}
程序编写注意事项:
(2)编写程序,读取一个整数,判断并显示出这个整数是奇数还是偶数。(提示:使用求模运算符。偶数是2的倍数。任何2的倍数除以2时,余数均为零。)
程序清单:
#include <stdio.h>
Viod main()
{long int a;
Printf(“Enter a num:\n”);
Scanf(“%1d”,&n);
If(a%2==0)
Printf(“A\n”);
else
printf(“B\n”);
getch();
}
程序编写注意事项:
阿坝师专计科系《C语言程序设计》实验报告
(3)编写一个程序,从键盘中输入3个不同的整数,然后显示这3个整数的和、平均数、积、最小数和最大数。(用if语句)屏幕中的对话内容如下所示:
程序清单:
#include <stdio.h>
viod main()
{int a,b,c,max1,min1;
long int sum,product;
float average;
printf(“Enter three different integer:”);
scanf(“%d%d%d”,&a,&b,&c);
sum=a+b+c;
average=sum/3;
product=a*b*c;
max1=max(a,b,c);
min1=min(a,b,c);
printf(“sum is %1d\n average is %f\n product is %1d\n smallest is %d\n largest is %d\n”,sum,average,pro,minl,max1);
getch();
}
程序编写注意事项:
教师评语:
阿坝师专计科系《C语言程序设计》实验报告
实验三 循环结构程序设计(一)
实验时间: 2012, 11,01 实验地点: 公共机房 3 实验成绩:
(验证性实验 2学时)
(一)、实验目的
1.熟悉用while语句、do-wile语句和for语句实现循环的方法
2.掌握在程序设计中用循环方法实现的算法
(二)、实验内容
1.写出下列程序的运行结果
(1)#include <stdio.h>
void main()
{
int count=1;
while(count<=10)
{
}
}
运行结果为:
++++++++++
**** ++++++++++ **** ++++++++++ **** ++++++++++ **** ++++++++++ **** count++; printf(“%s\n”,count%2? “****”: “++++++++++”);
分析:count%2?整除 奇数时显示++++++++++++++,偶数时显示****
(2)#include <stdio.h>
void main()
阿坝师专计科系《C语言程序设计》实验报告
{
int row=10,Column;
while(row>=1) {
} } Column=1; while(Column <=10) { } row--; printf(“\n”); printf(“%s”,row%2 ? “<”: “>”); Column++;
运行结果为:
>>>>>>>>>>
<<<<<<<<<<
>>>>>>>>>>
<<<<<<<<<<
>>>>>>>>>>>
<<<<<<<<<<<
>>>>>>>>>>>
<<<<<<<<<<<
>>>>>>>>>>> <<<<<<<<<<<
分析: 奇数时显示> 偶数时显示<, Column <=10 循环十次
(3)#include <stdio.h>
void main()
{
int y=9;
for( ; y>0 ; y--)
if(y%3==0) printf("%d\n" , --y);
}
}
运行结果为:8
阿坝师专计科系《C语言程序设计》实验报告
5 2
分析: y能被三整除时,显示--y
2.编写程序
(1)利用循环语句来显示如下所示的数值表:
程序清单如下:
#include <stdio.h>
viod main()
{int n,n1,n2,n3;
frintf(“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 <stdio.h>
viod main()
{
long int num,l=0;
int i;
for(i=1;i<11;i++)
{printf(“Enter a num:”,i);
Scanf(“%d”,&num);
If(num>l) l=num;
,largest);
阿坝师专计科系《C语言程序设计》实验报告
}
Printf(“the largest num is %1d”
getch();
}
程序编写注意事项:
(3)请开发一个程序来输入每油箱的行程里程和所用的汽油。能够计算并显示出对于每个油箱每加仑汽油的行驶里程。处理输入信息后,计算并显示所有油箱每加仑汽油的行驶里程。以下是一个事例的输入/输出:
程序清单:
#include < stdio.h>
viod main()
{float gallons=0,miles,average[100],sum=0,average;
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 driver:”);
scanf(“%f”,&miles);
averrge[i]=miles/gallons;
Sum+=average[i];
printf(“The Miles\Gallon for this tank was %f\n\n”,average[i]);i++;
阿坝师专计科系《C语言程序设计》实验报告
average=sum/i;
}
printf(“the overall average miles/gallon was %f”,aveerrage);
getch();
}
程序编写注意事项:
(4)编写一个程序读入一个5位数,并判断该整数是否是回文。(回文指顺读和倒读都一样的数字和文字语句,例:12321,55555。)提示:使用除法运算符和求模运算符把该数分解成单位个数。
程序清单:
#include <stdio.h>
viod main()
{long int a,b,a1,a2,a3,a4,a5;
printf(“Enter a num:”);
scanf(“%1d”,&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%1d is A”,a);
else
printf(“\n%1d is notA”,a);
getch();
}
程序编写注意事项:
教师评语:
阿坝师专计科系《C语言程序设计》实验报告
实验四 循环结构程序设计(二)
实验时间: 2012, 11.18 实验地点: 公共机房 3 实验成绩:
(验证性实验 2学时)
(一)、实验目的
1.熟练掌握循环语句。
2.较灵活地运用三种不同循环语句实现循环程序设计。
3.熟练掌握break语句、continue语句及循环的嵌套使用。
(二)、实验内容
1. 写出下列程序的运行结果
(1)#include <stdio.h>
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("k=%d,x=%d\n" , k , x);
}
运行结果为: K=5,x=8 x++;
分析: 循环结束时i=2,j=3,故k=i+j;
(2)#include <stdio.h>
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;
阿坝师专计科系《C语言程序设计》实验报告
}
printf(“x=%d,y=%d\n”,x,y);
}
运行结果为: X=10,y=6
分析:X的变化过程为:6,3,8,5,10,循环执行了五次,故y=6
(3)#include <stdio.h>
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
分析:在j的循环后,sum=10,由于每次i的循环时都使sum=0,故循环6次后的10
(4) #include <stdio.h>
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 分析:j的循环中,K的变化值为1,1,2,1,2,0.循环两次结果不变,循环结束,i=2,j =3,
故m=5.
阿坝师专计科系《C语言程序设计》实验报告
2. 程序填空
(1)下面程序的功能是:输出100以内同时能被3和7整除的所有整数,请填空。
#include <stdio.h>
void main()
{
int i, j;
for ( i=1;___①_____; i++ )
{
if (___②______) continue;
printf ( "%d\t",i );
}
}
填空①: i<=100
填空②: (i%3==0)&&(i%7==0)
程序分析:这个数要同时被3和7整除,并且continue语句要执行 ,同时满足
(2)判断m是否素数
#include <stdio.h>
void main()
{
int m,i,k;
scanf(“%d”,&m);
for(i=2;i<m;i++) if(_m%i==0) break;
if(i>=m)printf(“%d是一个素数\n”,m);
else printf(“%d不是一个素数\n”,m);
}
运行结果为:
阿坝师专计科系《C语言程序设计》实验报告
分析:
3. 编写程序
(1)编写一个程序,能够找出几个整数中最小的整数。假定程序读取的第一个值是余下数值的数目。
程序清单:
#include <stdio.h>
viod main()
{long int a[100],min;
int i,n;
printf(“Enter a num:”);
scanf(“%d”,&n);
for(i=0;i<=n-1;i++)
{scanf(“%1d”,&n[i]);
if(a[i]<min)
min=a[i];}
printf(“The smallest number is %d”,min);
getch();
}
程序编写注意事项:
(2)编写一个程序显示出如下菱形图案。可以使用printf语句来显示一个(*)和一个空格,尽量多使用循环语句(嵌套的for语句),尽量少用printf语句。
程序清单:
#include "stdio.h"
#include "conio.h"
main()
{ int i,j,k;
for(i=1;i<=5;i++)
{for(j=1;j<=5-i;j++)
printf(" ");
for(k=1;k<=2*i-1;k++)
printf("*");
printf("\n");
}
for(i=1;i<=4;i++)
阿坝师专计科系《C语言程序设计》实验报告
{for(j=1;j<=i;j++)
printf(" ");
for(k=1;k<=9-2*i;k++)
printf("*");
printf("\n");}
getch();
}
程序编写注意事项:
(3)输入从1994~1999这个范围内的年份,并使用for循环语句来生成一个简洁的日历。注意闰年的情形。
程序清单:
#include <stdio.h>
viod main()
程序编写注意事项:
教师评语:
阿坝师专计科系《C语言程序设计》实验报告
实验五 函数
实验时间: 实验地点: 实验成绩:
(验证性实验、综合性实验 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 <stdio.h>
fun(int a);
void main()
{
int a=3;
fun(a);
printf("%d\n",a);
}
fun(int a)
{
a=a+3;
printf("%d,",a);
阿坝师专计科系《C语言程序设计》实验报告
}
运行结果为: 分析:
(3)#include <stdio.h>
int fun(int x)
{
static int a=3;
}
void main()
{
int k=2,m=1,n;
n=fun(k);
n=fun(m);
printf(“%d\n”,n);
}
运行结果为: 分析:
(4) #include <stdio.h>
float fac(int n)
{
float f;
}
void main()
{
int n=4;
float y;
y=fac(n);
printf(“%d!=%f\n”,n,y);
}
运行结果为: 分析:
2. 程序填空 if(n<0)printf(“error!”); else if(n==0||n==1) f=1; else f=fac(n-1)*n; return(f); a=a+x; return a;
阿坝师专计科系《C语言程序设计》实验报告
(1) 通过调用函数求a+b的和。
#include <stdio.h>
float add(float x,float y);
void main()
{
float add(float x,float y);
float a,b,c;
scanf(“%f,%f”,&a,&b);
c=______________;
printf(“%f”,c);
}
float add(float x,float y)
{
float z;
z=x+y;
return z;
}
填空并运行分析:
(2)从键盘输入任意一个数,用函数计算它的阶乘
#include <stdio.h>
long int f(int a)
{
long int i,t=1;
for(i=1;i<=a;i++)
t=t*i; return ;
}
void main()
{
long int x;
scanf(“%ld”,&x);
printf(“%ld”,f(x));
}
填空并运行分析:
3.编写程序
(1) 编写函数floor,把值四舍五入为最近的整数。语句:y = floor + ( x + .5) ;将把x 四舍五入为最近的整数,并存如 y 。要求读取几个整数,并使用前面的语句把每个数字四舍五入为最近的整数。对于程序中处理的每个整数,显示出原始数字和四舍五入后的数字。 程序清单:
阿坝师专计科系《C语言程序设计》实验报告
程序编写注意事项:
(2) 实现下列每个整型函数。
a)函数 Celsius 返回与华氏温度等价的摄氏温度。
b)函数 Fahrenheit 返回与摄氏温度等价的华氏温度。
c)使用这两个函数编写程序,使其显示一些图表,图表中显示从0度 ~ 100度之间的所有摄氏温度的华氏温度等价值,以及从32度 ~ 212 度之间的所有华氏温度的摄氏温度等价值。按照见解的表格形式来显示输出结果,在保留可读性的同时使输出的行数最小。
程序清单:
阿坝师专计科系《C语言程序设计》实验报告
程序编写注意事项:
教师评语:
阿坝师专计科系《C语言程序设计》实验报告
实验六 数组(一)
实验时间: 实验地点: 实验成绩:
(验证性实验 2学时)
(一)、实验目的
1.掌握一维数组的定义,赋值和输入输出的方法。
2.掌握二维数组有关的定义,赋值和输入输出的方法。
3.掌握与数组有关的非数值计算方法。
(二)、实验内容
1.写出下列程序的运行结果。
(1) #include <stdio.h>
void main()
{
int a[3]={1,2};
int i,j;
for(i=0;i<3;i++)
}
运行结果:
分析:初始化:a0= ,a1= ,a2= ;
第一次i循环:i= ,a0= ;a0= ;a0= ;
第二次i循环:i= ,a1= ;a1= ;a1= ;
第三次i循环:i= ,a2= ;a2= ;a2= .
(2)#include <stdio.h>
#define N 20
fun(int a[],int n,int m)
{
int i,j;
for(i=m;i>=n;i--)
a[i+1]=a[i];
第 24 页 共 50 页 for(j=0;j<3;j++) { } a[i]=a[j]+1; printf("\n%d",a[i]);
阿坝师专计科系《C语言程序设计》实验报告
}
void main()
{
int i,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,9);
for(i=0;i<5;i++)
printf("%d,",a[i]);
}
运行结果:
分析:在进入函数之前:a0= ,a1= ,a2= ,a3= ,a4= ; 进入函数后:a4= ,a3= ,a3= ,a2= ,其余不变。
(3)#include <stdio.h>
void swap1(int c[])
{
int t;
t=c[0];c[0]=c[1];c[1]=t;
}
void swap2(int c0,int c1)
{
int t;
t=c0;c0=c1;c1=t;
}
void main( )
{
int a[2]={3,5},b[2]={3,5};
swap1(a) ;
swap2(b[0],b[1]);
printf("%5d %5d %5d %5d ",a[0],a[1],b[0],b[1]);
}
运行结果为:
分析:两个函数的作用, 。
2.程序填空
(1)将Fibonacci数列前15项放入一个一维数组中(fib[0]=1,fib[1]=1),并计算其中奇数之和。
#include <stdio.h>
void main()
{
int fib[15],i,s=0;
fib[0]=1;
fib[1]=1;
for(i=2;i<15;i++)
阿坝师专计科系《C语言程序设计》实验报告
① ;
for(i=0;i<15;i++)
if( ② )s=s+fib[i];
printf("%d\n",s);
}
填空①:
填空②:
程序分析:
(2)给出以下形式数据,计算各行之和,并存入一个一维数组中。
124
615
800
#include <stdio.h>
void main()
{int a[3][3]={{1,2,4},{6,1,5},{8,0,0}},b[3]={0};
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
① ;
for(i=0;i<3;i++)
printf("%6d", ② );
}
填空①:
填空②:
程序分析:
3. 编写程序
(1)已知数组a[10]={3,7,6,5,4,1,2,9,9,7},计算数组下标为奇数的元素之和。
程序清单:
程序编写注意事项:
(2)使用数组解决下列问题。公司在对销售人员支付佣金。销售人员每个星期收到$200,以及那个星期他们总销售额的9%。例如,在某个星期中销售额为$3000的销售人员收到$200以及$3000
阿坝师专计科系《C语言程序设计》实验报告
的9%,也就是$470。编写一个程序(使用计数器数组),确定销售人员在下列范围内可以赚取的收入(假定每个销售人员的工资将截断为整数):
a) $200 -$299
b) $300 -$399
c) $400 -$499
d) $500 -$599
e) $600 -$699
f) $700 -$799
g) $800 -$899
h) $900 -$999
i) $1000 以及$1000以上
程序清单:
程序编写注意事项:
(3)使用二维数组来解决下列问题。公司与4个销售人员(1 ~ 4),他们销售5种不同的产品 (1~
5)。每天,每个销售人员为销售的每种不同产品上交报告。每份报告包括:
a) 销售人员编号。
b) 产品编号。
c) 当天每种产品的总销售额。
因此,每个销售人员每天上交0~5份销售报告。假设已经知道上个月所有报告的信息。编写一个程序读取所有这些信息,以得到上个月的销售额,并对销售人员按产品来计算总销售额。所有总和必须存储在二维数组sales中。在处理了上个月的所有信息之后,以列表形式输出结果,其中列代表特定的销售人员,而行代表特定的产品。计算每行的总和,以得到上个月每个销售人员的销售总额。输出结果应该在每行的右边显示产品销售总和,在每列的底部显示个人销售总和。 程序清单:
阿坝师专计科系《C语言程序设计》实验报告
程序编写注意事项:
教师评语:
阿坝师专计科系《C语言程序设计》实验报告
实验七 数组(二)
实验时间: 实验地点: 实验成绩:
(验证性实验 2学时)
(一)、实验目的
1. 掌握字符数组的定义、赋值和引用
2. 字符串函数的使用。
(二)、预习内容
1.预习数组的定义、赋值及输入输出方法,以及典型的算法。
2.熟练循环语句与数组处理语句结合的方法。
(三)、实验内容
1. 写出下列程序的运行结果
(1)#include <stdio.h>
void main()
{
char a[10]= "abcdefg",b[ ]="abcdefg";
a[3]=’\0’;
b[3]=0;
printf("%d,%d",sizeof(a),strlen(a));
printf("%d,%d",sizeof(b),strlen(b));
}
运行结果:
结果分析:
(2)#include <stdio.h>
void main()
{
char ch[2][5]={"6937","8254"};
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("%d\n",s);
}
运行结果:
结果分析:
(3)下列程序的输出结果是:
阿坝师专计科系《C语言程序设计》实验报告
#include <stdio.h>
void main( )
{
char p1[20]="abcd",p2[20]="ABCD",str[50]="xyz";
strcpy(str+2,strcat(p1+2,p2+1));
printf("%s",str);
}
运行结果:
结果分析:
2. 程序填空
(1)将一个字符串按逆序重新存放,并输出。
#include <stdio.h>
void main()
{
char a[20];
int n,i,t;
gets(a);
① ;
for(i=0;i<n/2;i++)
{_ ②_ _____}
puts(a);
}
填空①:
填空②: 程序分析:
(2)以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串:yes!,否则函数返回字符串:no!,并在主函数中输出.(所谓回文即正向与反向的拼写都一样,例如:adgda).请填空.
#include "string.h"
#include <stdio.h>
int huiwen(charstr[])
{
int p,i,j;
p=strlen(str);
for(i=0,j=p-1;i<j; i++,j--)
if( ① ) return 0;
return 1;
}
阿坝师专计科系《C语言程序设计》实验报告
void main()
{
char str[50];
printf("Input:");
scanf("%s",str);
if( ② )
printf("yes!");
else printf("no!");
}
填空①:
填空②:
程序分析:
3. 程序改错
写出有错误语句的行号,及改正后的语句全行。(每行语句前的序号只标注行号,非程序本身的内容)
(1)以下scpy( )函数实现字符串复制,即将t所指字符串复制到s所指向内存空间中,形成一个新的字符串s。请填空。
① #include <stdio.h>
② void scpy(char s[ ],char t[ ])
{
int i;
while(t[i])
s[i++]=t[i++];
t[i]=‘\0’; ③ ④ ⑤ ⑥
} {
char str1[ ],str2[ ]="abcdefgh";
scpy(str1,str2);
printf("%s ",str1); ⑦ void main( ) ⑧ ⑨ ⑩
}
错误语句的行号:
改正后的语句全行: 错误分析:
(2)比较两个字符串的大小,如果相等输出equal,如果不相等输出unequal.
① #include <stdio.h>
② void main()
{
阿坝师专计科系《C语言程序设计》实验报告
③
④
⑤
⑥
} char s1[10],s2[10]; gets(s1);get2(s2); if(s1=s2) printf(“equal”); else printf(“unequal”);
错误语句的行号:
改正后的语句全行: 错误分析:
4. 编写程序
(1)将一个字符串首尾倒置,重新存放。
程序清单:
程序编写注意事项:
(2)(飞机定票系统)一家小型航空公司刚刚购买了计算机,用于新的自动化定票系统。总裁要求您为新系统编制程序。需要分配该航空公司的唯一一架飞机每个航班的座位(容量:10个座位)。
程序应该轮流显示下列菜单:
Please type 1 for “first class”
Please type 2 for “economy”
如果输入1, 则程序应该分配头等舱内的座位(座位1 ~ 5)。如果输入2 ,则程序应该分配经济舱的座位(座位 6 ~ 10)。然后,程序输出登机证,说明座位号,以及它位于飞机的头等舱,还是经济舱内。
使用一个数组来代表飞机的座位安排。将数组的所有元素初始化为0,以说明所有座位都是空的。当分配每个座位时,将数组的对应元素设置为1,以说明不能再次使用那个座位号。当然,程序不应该分配已经分配过的座位。当头等舱满员时,程序应询问是否可以安排在经济舱内(等等)。如果可以,则进行适当的座位分配。如果不可以,则输出信息“Next Flight leaves in 3 hours”.
阿坝师专计科系《C语言程序设计》实验报告
程序清单:
阿坝师专计科系《C语言程序设计》实验报告
程序编写注意事项:
(3)(输出数组)编写一个递归函数printArray,它以数组和数组大小作为参数,并且不返回任何值。当数组大小为0时,函数应该停止处理并返回。
程序清单:
程序编写注意事项:
教师评语:
阿坝师专计科系《C语言程序设计》实验报告
实验八 指针
实验时间: 实验地点: 实验成绩:
(验证性实验、综合性实验 2学时)
(一)、实验目的
1.掌握指针的概念、会定义和使用指针变量
2.掌握指针与一维数组、二维数组、字符数组的关系
(二)、实验内容
1.写出下列程序的运行结果
(1)#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
void main( )
阿坝师专计科系《C语言程序设计》实验报告
{
int a[ ]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;
printf(“\n%d”,*p+9);
}
运行结果为:
程序功能分析:
(4)#include <stdio.h>
fun(int *s,int n1,int n2)
{
int i,j,t;
i=n1;j=n2;
while(i<j)
{
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("%d",*(a+i));
}
运行结果为:
程序功能分析:
2.程序填空
(1)下面函数用来求出两个整数之和,并通过形参传回两数相加之和值,填空。
#include <stdio.h>
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;
}
阿坝师专计科系《C语言程序设计》实验报告
填空①:
填空②:
填空③:
程序分析:
(2)下面的程序通过函数average计算数组中各元素的平均值,请填空。
#include <stdio.h>
float average(int *pa,int n)
{ int i;
float avg=0.0;
for(i=0;i<n;i++)
avg=avg+_??______;
avg=__??_____;
return avg;
}
void main()
{
int i,a[5]={2,4,6,8,10};
float m;
m=average(a,5);
printf("m=%f\n",m);
}
填空①:
填空②:
程序分析:
3.程序改错
写出有错误语句的行号,及改正后的语句全行。(每行语句前的序号只标注行号,非程序本身的内容)
(1)将两个整数值进行交换。
① #include <stdio.h>
② swap(int *p,*q);
{
③
④
⑤
⑥
⑦
}
⑧ void main()
{
第 37 页 共 50 页 int *t,a; t=&a; *t = *p; *p = *q; *q = *t;
阿坝师专计科系《C语言程序设计》实验报告
⑨
⑩
⑾
} int a =10,b=20; swap(&a,&b); printf(“%d%d\n”,a,b);
错误语句的行号:
改正后的语句全行: 错误分析:
(2)写出程序运行结果:2010
① #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); ③ ④ ⑤ ⑥ ⑦
}
错误语句的行号:
改正后的语句全行: 错误分析:
4、编程题(选做题)
利用函数把字符数组b,连接到字符数组a的后面,并返回字符数组a中新的长度。
程序清单:
阿坝师专计科系《C语言程序设计》实验报告
编程注意事项:
教师评语:
阿坝师专计科系《C语言程序设计》实验报告
实验九 结构体、共用体和文件
实验时间: 实验地点: 实验成绩:
(验证性实验、设计性实验 2学时)
(一)、实验目的:
1.掌握结构体类型和共用体类型变量
2.结构体类型数组和结构体类型指针的定义
3.掌握链表的定义及操作
4.掌握文件的打开、关闭和文件的读写操作
(二)、实验内容
1.写出程序的运行结果
(1)以下程序的输出结果是:
#include <stdio.h>
union
{
int num;
struct
{char c1,c2;} sc;
}un;
void main()
{
un.sc.cl=65;un.sc.c2=97; un.num=0;
printf("%d\n",un.sc.c2);
}
运行结果为:
程序分析:
(2)以下程序的输出结果是:
#include <stdio.h>
typedef union
{
long i;
int k[5];
char c;
}DATE;
struct date
{
int cat;
DATE cow;
double dog;
}too;
DATE max:
阿坝师专计科系《C语言程序设计》实验报告
void main()
{
printf(″%d\n″,sizeof(struct date)+sizeof(max));
}
运行结果为:
程序分析:
2.填空题
(1)下面程序建立一个单向链表。
#include <stdio.h>
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;
}
填空并运行分析:
(2)以下程序把a数组中的数据输出到fp所指的二进制文件中。
#include <stdio.h>
#define N 10
void main()
{
float a[N];
int i;
FILE *fp;
for(i=0;i<N;i++)
scanf(“%f”,a+i);
fp=fopen(“file.dat”,“wb”);
fwrite(a,4*N,1,fp);
______________________;
}
阿坝师专计科系《C语言程序设计》实验报告
填空并运行分析: 分析:
(3)下面程序把一个名为f1.doc的文件拷贝到一个名为f2.doc的文件中,请在__处添入适当命令行,使之正确运行。
#include <stdio.h>
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 <stdio.h>
② void main()
{
struct
{
char flag; float t; ④ ⑤
⑥
⑦
⑧
⑨ } ③ } STC; STC a={‘a’,46}; printf(“%c,%f\n”,a.flag,a.t);
错误语句的行号:
改正后的语句全行: 错误原因分析:
阿坝师专计科系《C语言程序设计》实验报告
(2)从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个“#”号为止。
① #include <stdio.h>
② void main()
{
③ file *fp;
④ char ch,filename[10];
⑤ scanf(“%s”,filename);
⑥ if((fp=fopen(filename,”w”))==NULL)
⑦ { printf(“cannot open file\n”);
exit(0);
ch = getchar();
while(ch!=’#’)
{
} fputc(ch,fp); putchar(ch); ch=getchar(); ⑧ ⑨ } ⑩ ⑾ ⑿ ⒀ ⒁ ⒂
⒃ fclose(fp);
}
错误语句的行号:
改正后的语句全行:
错误原因分析:
4.编程题(选做)
(1)有10名学生,每名学生有语文、数学、外语三门课程的成绩,计算每名学生的总成绩,然后按总成绩由高到低排序,若总成绩相同,再按外语成绩由高到低排序。
要求:① 利用结构体数组存放数据。
② 通过函数调用方式。
程序清单:
阿坝师专计科系《C语言程序设计》实验报告
阿坝师专计科系《C语言程序设计》实验报告
编写程序注意事项:
(2)编写一个程序,它使用sizeof运算符来确定计算机系统上不同数据类型的字节数。将结果写入到文件“datasize.dat”中,这样您可以稍后输出结果。文件中的结果格式如下:
阿坝师专计科系《C语言程序设计》实验报告
编写程序注意事项:
教师评语:
阿坝师专计科系《C语言程序设计》实验报告
实验十 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学生的数据)。
阿坝师专计科系《C语言程序设计》实验报告
阿坝师专计科系《C语言程序设计》实验报告
编写程序注意事项:
教师评语: