大学一年级下学期C语言程序设计实验报告答案完整版.docx
《大学一年级下学期C语言程序设计实验报告答案完整版.docx》由会员分享,可在线阅读,更多相关《大学一年级下学期C语言程序设计实验报告答案完整版.docx(59页珍藏版)》请在冰豆网上搜索。
大学一年级下学期C语言程序设计实验报告答案完整版
《C语言程序设计》实验教学大纲
学时课程总:
64 学分:
4
实验学时:
24 实验个数:
9实验学分:
1.5
课程性质:
必做适用专业:
计算机科学技术、网络工程、软件工程、电子商务、教育技术
教材及参考书:
《C语言程序设计与实践实验指导》,谢满得邵俊编著,机械工业出版社,2014年1月
大纲执笔人:
廖雪花 大纲审定人:
一、实验课的性质与任务
C语言程序设计实验是面向计算机相关专业学生开设的《C语言程序设计》实验课,是配合《C语言程序设计》课程而开设的实践性教育环节。
本课程的主要任务是让学生充分掌握C语言程序设计的基本概念、各种数据类型的使用技巧、模块化程序设计的方法等。
C语言程序设计实验对课程中所涉及的知识进行验证,同时也是学生很好地学习课程的辅助手段。
通过C语言上机实验的教学活动,使学生真正全面掌握C语言的基础知识,培养和提高学生的程序开发能力。
二、实验课程目的与要求
1.实验目的
通过实验课程的学习实践,加深学生对所学的基本概念、基础理论和知识的理解,熟悉使用VisualC++6.0集成环境进行C语言的编写、编译与调试。
同时,通过项目开发全过程的全方位指导,从需求分析、算法设计到程序编写和过程调试,以项目实训的形式引导和帮助学生解决实际问题,提高学生解决具体问题的能力,以及培养学生用多函数、多文件组织程序的思维习惯,为今后的后继课程学习和实际工作打下良好基础。
2.实验要求
(1)掌握C语言程序的基本格式,了解C程序的开发过程和C语言中的一些常用概念。
(2)掌握常量和五种基本数据类型变量的使用。
(3)掌握C表达式和运算符的正确使用,熟练掌握数据输入、输出函数。
(4)掌握条件转移语句if-else和选择分支语句switch;掌握三种程序跳转的方法,即break语句、continue语句、return语句。
(5)掌握循环语句(for语句;do-while语句;while语句)的正确使用,认真体会应该如何组织循环。
(6)掌握数组的定义、赋值,一维数组与二维数组的使用。
(7)掌握函数的定义、函数的调用以及函数的类型说明。
(8)掌握局部变量、全局变量的定义和使用。
(9)掌握指针的基本概念以及数组与指针、指向指针的指针的基本用法。
(10)掌握结构体变量的定义,引用结构体中成员的方法,应用结构数组解决实际问题;共用体的概念,引用共用体中成员的方法。
(11)掌握链表的类型定义及其基本操作。
(12)掌握文件的打开、读写及关闭,并能运用文件提高编程的效率。
(13)理解项目式程序开发的过程。
三、实验项目及内容提要
《C语言程序设计》实验课程(1107142019)
序号
实验项目编号
实验名称
学时
必做
选做
学分数
实验类型
内容提要
基本操作
验证
综合
设计
1
实验一
数据类型和表达式
2
√
1
√
1、了解C语言中数据类型的意义。
2、理解常用运算符的意义。
3、掌握C语言表达式的运行规则
2
实验二
分支结构程序设计
2
√
1
√
了解和掌握分支语句的使用,包括if语句的各种形式以及switch语句
3
实验三
循环结构程序设计
2
√
2
√
√
1、使用循环语句完成累乘、图像输出的程序编写。
2、掌握较复杂结构程序的编写。
3、掌握程序调试的方法
4
实验四
数组程序设计
4
√
2
√
√
掌握一维和二维数组的使用技巧
5
实验五
函数
5
√
2
√
√
1、学习函数的编程思想,编写一个包括3~4个函数的程序。
2、掌握函数中参数传递的两种方式和函数的相互调用
6
实验六
指针
3
√
2
√
√
1、用指针作为函数参数完成字符串的传递。
2、掌握函数中参数传递的两种方式
7
实验七
字符串与指针
2
√
1
√
√
1、掌握用指针进行函数参数传递的方法。
2、掌握指针数组和二维数组间的关系以及进行参数传递时的写法
8
实验八
结构体
2
√
1
√
√
1、掌握结构体的定义、数据输入方法。
2、掌握结构体成员变量的两种访问方法。
3、掌握编写程序完成单链表的建立和查询方法
9
实验九
文件操作
2
√
1
√
√
1、掌握文件的打开和关闭。
2、精通文件的读写操作。
3、了解文件的定位操作及文件的检测函数。
4、掌握文件的应用
四、实验内容安排:
实验一数据类型和表达式实验
(验证性实验2学时)
1、目的要求:
(1)了解C语言中数据类型的意义。
(2)理解常用运算符的意义。
(3)掌握C语言表达式的运行规则。
(4)编写实验报告。
2、实验内容(参考实验指导书):
(1)计算由键盘输入的任何两个双精度数据的平均值。
#include
main()
{
doublea,b;
printf("pleaseinputtworealnumbers:
\n");
scanf("%lf%lf",&a,&b);
printf("thetwo`saverageis:
%.4lf\n",(a+b)/2);
}
(2)写一个输入7个数据的程序,把输入的数据代入a+b*(c–d)/e*f–g表达式进行运算。
#include
main()
{
floata,b,c,d,e,f,g,x;
scanf("%f%f%f%f%f%f%f",&a,&b,&c,&d,&e,&f,&g);
x=a+b*(c-d)/e*f-g;
printf("x=%.4f\n",x);
}
(3)编写一个C语言程序,测试下列各表达式:
i,j
i+1,j+1
i++,j++
++i,++j
i+++++j
#include
main()
{
inti=1,j=1;
printf("%d%d\n",i+1,j+1);
printf("%d%d\n",i++,j++);
printf("%d%d\n",++i,++j);
printf("%d\n",(i++)+(++j));
}
(4)输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前),输出时保留2位小数。
interest=money(1+rate)year–money
#include
#include
main()
{
intyear=2;
floatrate=0.1,money=1000;
floatinterest;
interest=money*pow((1+rate),year);
printf("%10.2f",interest);
}
(5)输入华氏温度,输出对应的摄氏温度。
计算公式如下:
c=5*(f-32)/9
其中,c表示摄氏温度,f表示华氏温度。
#include
main()
{
intc,f;
scanf("%d",&f);
c=5*(f-32)/9;
printf("%d",c);
}
实验二分支结构程序设计实验
(验证性实验2学时)
1、目的要求:
(1)了解和掌握分支语句的使用,包括if语句的各种形式以及switch语句。
(2)编写实验报告。
2、实验内容(参考实验指导书):
(1)编写一个程序完成输入一个整数,输出它的符号。
#include
main()
{
inti;
scanf("%d",&i);
if(i>0)
printf("+");
else
printf("-");
}
(2)请编写居民应交水费,并提供各种测试数据。
居民应交水费y(元)与月用水量x(吨)的函数关系式如下:
0x<0
y=f(x)=4x/30≤x≤15
2.5x–10.5x>15
#include
main()
{
floatx,y;
scanf("%f",&x);
if(x<0)
printf("0");
elseif(x>=0&&x<=15)
{
y=4*x/3;
printf("%f",y);
}
elseif(x>15)
{
y=2.5*x-10.5;
printf("%f",y);
}
}
(3)请根据输入的学生成绩给出成绩等级的判断,判断规则如下:
如果输入的成绩大于等于90,则输出优秀;
如果输入的成绩小于90、大于等于80,则输出良好;
如果输入的成绩小于80、大于等于70,则输出中等;
如果输入的成绩小于70、大于等于60,则输出及格;
其他输出不及格。
#include
main()
{
intx;
scanf("%d",&x);
if(x>=90)
printf("优秀\n");
elseif(x>=80&&x<90)
printf("良好\n");
elseif(x>=70&&x<80)
printf("中等\n");
if(x>=60&x<70)
printf("及格\n");
if(x>=0&x<60)
printf("不及格\n");
}
(4)运输公司对用户计算运费。
路程(s)越远,每公里运费越低。
标准如下:
s=250km没有折扣
250km≤s<500km2%折扣
500km≤s<1000km5%折扣
1000km≤s<2000km8%折扣
2000km≤s<3000km10%折扣
3000km≤s15%折扣
设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费的计算公式为:
f=p*w*s*(1–d)
请编程实现:
从键盘输入基本运费p,货物重w,距离s,计算输出用户最终需要支付的运费。
#include
main()
{
intc,s;
floatp,w,d,f;
scanf("%f,%f,%d",&p,&w,&s);
if(s>=3000)
c=12;
else
c=s/250;
switch(c)
{
case0:
d=0;break;
case1:
d=2;break;
case2:
case3:
d=5;break;
case4:
case5:
case6:
case7:
d=8;break;
case8:
case9:
case10:
case11:
d=10;break;
case12:
d=15;break;
}
f=p*w*s*(1-d/100.0);
printf("freight=%15.4f\n",f);
}
实验三循环结构程序设计实验
(验证性综合性实验2学时)
1、目的要求:
(1)使用循环语句完成累乘、图像输出的程序编写。
(2)掌握较复杂结构程序的编写。
(3)掌握程序调试的方法。
(4)编写实验报告。
2、实验内容(参考实验指导书):
(1)已知xyz+yzz=532,其中x、y、z都是数字(0~9),编写一个程序求出x、y、z分别代表什么数字。
#include
main()
{
intx,y,z;
for(x=1;x<=9;x++)
for(y=1;y<=9;y++)
for(z=1;z<=9;z++)
if(100*x+10*y+z+100*y+10*z+z==532)
printf("%d%d%d",x,y,z);
getchar();
}
(2)编写一个程序打印如下对称图形(行数由键盘输入1~9范围的值),例如下面是输入的数字4时的情形:
4444444
33333
222
1
222
33333
4444444
#include
main()
{
inti,j,k,n;
printf("请输入一个数字\n");
scanf("%d",&n);
i=n;
for(i=0;i<2*n-1;i++)
{
k=i;
if(i>=n)
k=2*n-2-i;
for(j=0;jprintf("");
for(j=0;j<2*(n-k)-1;j++)
printf("%d",n-k);
printf("\n");
}
getchar();
}
(3)学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校的学生人数。
#include
main()
{
inti;
for(i=900;i<=1100;i++)
{
if(i%5==2&&i%7==3&&i%3==1)
{
printf("%d\n",i);
break;
}
}
getchar();
}
(4)学校某班A、B、C、D四位同学中的一位做了好事不留名,表扬信来了之后,班主任问这四位是谁做了好事,四位回答如下:
A说:
不是我。
B说:
是C。
C说:
是D。
D说:
他胡说。
已知三个人说的是真话,一个人说的是假话。
请根据这些信息,找出做了好事的人。
#include
main()
{
inti,j,a,b,c,d;
for(i=0;i<=4;i++)
{
for(j=0;j<=4;j++)
if(j==i)
switch(j)
{
case0:
a=1;b=0;c=0;d=0;
break;
case1:
a=0;b=1;c=0;d=0;
break;
case2:
a=0;b=0;c=1;d=0;
break;
case3:
a=0;b=0;c=0;d=1;
break;
default:
break;
}
if(a+b+c==1&&b+c==1&&c+d==1&&b+c+d==1)
printf("做好事的人是%c\n",i+'a');
}
getchar();
}
实验四数组程序设计实验
(验证性综合性实验4学时)
1、目的要求:
(1)掌握一维和二维数组的使用技巧。
(2)编写实验报告。
2、实验内容(参考实验指导书):
(1)从键盘输入一个长度为N(比如10)的整型数组,而后将数组中小于零的元素移动到数组的前端,大于零的元素移到数组的后端,等于零的元素留在数组中间。
比如原来数组为:
2-5-89750-89093480,经过处理后的数组为:
-5-89-890007593482。
由于不要求数组有序,所以不允许用排序方法。
提示:
1)输入N个数据,构建数组。
2)按照要求确定数据的位置,需要注意循环条件的确定、0数据元素往中间推的实现过程以及数组处理的方向。
#include
#include
#defineN10
main()
{
inta[N]={2,-5,-89,75,0,-89,0,93,48,0};
inti,t,j;
for(i=0;iprintf("%4d",a[i]);
printf("\n");
for(i=0;i{
for(j=i+1;j{
if(a[i]>0&&a[j]<0)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
elseif(a[i]>0&&a[j]==0)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
elseif(a[i]==0&&a[j]<0)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0;iprintf("%4d",a[i]);
printf("\n");
}
(2)设数组a的定义如下:
inta[20]={2,4,6,8,10,12,14,16};已存入数组中的数据值已经按由小到大的顺序存放,现从键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。
请编写一个程序实现上述功能。
提示:
1)定义整型数组并初始化。
2)从键盘输入一个数据。
3)将该数据插入到数组中,由于要保证插入的数组仍然有序,所以需要查找插入的位置。
4)输出插入数据以后的数组。
#include
main()
{
inta[9]={2,4,6,8,10,12,14,16};
inti,j,number;
printf("原数组\n");
for(i=0;i<=8;i++)//输出数组原有的元素
printf("%d",a[i]);
printf("\n");
printf("请输入一个数据\n");
scanf("%d",&number);
i=0;//以下三行找到插入位置
while(a[i]i++;
for(j=7;j>=i;j--)//将插入点以后的元素顺序往后移一位
a[j+1]=a[j];
a[i]=number;//插入数据
printf("输出改变后的数组\n");
for(i=0;i<=8;i++)//输出插入后仍有序的数组
printf("%d",a[i]);
}
(3)写一个3x5矩阵的转置程序,输出其原矩阵的值和转置以后的结果。
提示:
1)定义一个二维数组及相关变量。
2)对二维数组赋值,可以由键盘输入,也可以通过其他方式赋值。
3)输出转置前的二维数组。
4)对二维数组中的值进行转置。
5)输出转置后的二维数组中的值。
#include
#include
main()
{
inti,j;
inta[3][5]={1,2,3,4,5,6,7,8,9,1,2,3,4,5,0};
for(i=0;i<3;i++){
for(j=0;j<5;j++)
printf("%d\t",a[i][j]);
printf("\n\n");
}
printf("转置后的矩阵为\n");
for(i=0;i<5;i++){
for(j=0;j<3;j++)
printf("%d\t",a[j][i]);
printf("\n\n");
}
}
(4)编程实现随机产生10个位于区间[100200]互不相等的整数,并将其按降序排序和输出。
#include
#include
#include
#definerandom(x)(rand()%101+100)
main()
{
inti,j,k,n;//产生随机数
inta[10];
srand((int)time(0));
for(i=0;i<=9;i++){
a[i]=random(200);
printf("%d",a[i]);
}
printf("\n");
for(i=0;i<=9;i++){//排序
k=i;
for(j=i;j<10;j++)
if(a[k]n=a[i];
a[i]=a[k];
a[k]=n;
}
printf("排序后的数组为\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n\n");
}
实验五函数实验
(验证性综合性实验5学时)
1、目的要求:
(1)学习函数的编程思想,编写一个包括3~4个函数的程序。
(2)掌握函数中参数传递的两种方式和函数的相互调用。
(3)编写实验报告。
2、实验内容(参考实验指导书):
(1)写一个函数intdigit(intn,intk),它返回数n的从右向左的第k个十进数字值。
例如,函数调用digit(1234,2)将返回值3。
#include
voiddigit(intn,intk);
main()
{
intx,y;
printf("请输入一个数据\n");
scanf("%d%d",&x,&y);
digit(x,y);
}
voiddigit(intn,intk)
{
inti,j,a,b;
b=n%10;
a=(n/10)%10;
j=(n/100)%10;
i=(n/1000)%10;
n=1000*i+100*j+10*a+b;
if(k==1)
printf("%d\n",b);
elseif(k==2)
printf("%d\n",a);
elseif(k==3)
printf("%d\n",j);
elseif(k==4)
printf("%d\n",i);
}
(2)写一个函数intisprime(intn),当n是质数时,函数返回非零值;当n是合数时,函数返回零值。
#include
#include
intisprime(intn);
main()
{
intx;
printf("请输入一个整
数\n");
scanf("%d",&x);
printf("%d\n",isprime(x));
}
intisprime(intn)
{
inti=2;
while(i{
if(n%i==0)
return0;
i++;
}
return1;
}
(3)写一个函数reverse(chars[]),将字符串s[]中的字符串倒序输出。
试分别用递归和非递归两种形