铜陵学院c语言实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《C语言程序设计》
实验报告
2016~2017学年第二学期
班级 2016级
学号
姓名
指导教师黄永青
实验一 Visual C++ 6.0编程环境与C语言程序的调试过程
一、实验学时
2 学时。

二、实验目的
1.了解在Visual C++ 6.0环境下如何编辑、编译、连接和运行一个C程序;
2.通过运行简单的C程序,初步了解C源程序的特点。

三、预习内容
教材《C语言程序设计》第1章。

四、实验内容
1.请调试、运行下面的程序一。

#include <stdio.h>
int main( )
{
printf("Hello,World!\n");
return 0;
}
给出以上程序的运行结果(或其截图):
2.请调试、运行下面的程序二。

#include <stdio.h>
int main( )
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf("%1d*%1d=%2d ",j,i,j*i);
printf("\n");
}
return 0;
}
给出以上程序运行结果的截图:
3.请改正下面程序三中的语法错误,然后调试、运行该程序,观察分析运行结果。

#include <stdio.h>
int main( )
{
int a,b,sum;
a=3
b=4;
sun=a+b;
printf("%d+%d=%d\n",a,b,sum);
return 0;
}
(1)改正后的程序
#include <stdio.h>
int main( )
{
int a,b,sum;
a=3;
b=4;
sum=a+b;
printf("%d+%d=%d\n",a,b,sum);
return 0;
}
(2)以上程序的运行结果(或其截图):
五、思考题
1.调试C语言程序的步骤有哪些?
答:1. 编辑2. 编译3. 连接4. 运行
2.程序的基本结构有哪三种?
答:顺序结构,选择结构,循环结构
指导教师成绩
年月日
实验二数据类型、运算符和表达式
一、实验学时
2 学时。

二、实验目的
1.掌握整型、实型与字符型这三种基本类型的概念;
2.掌握常量及变量的使用方法;
3. 掌握基本算术运算符及其表达式的使用方法;
4. 掌握++、--运算符、赋值运算符及其表达式的使用方法。

三、预习内容
教材《C语言程序设计》第2章。

四、实验内容
1.下面的程序一有语法错误,请调试、运行该程序。

#include <stdio.h>
int main( )
{
int 2cd=3;
float yzl=3.14;
char for='A';
printf("%d\n%f\n%c\n",2cd,yzl,for);
return 0;
}
程序一为什么出错?
答: 1. yzl=3.14不能用float类型,改为double
2. 变量命名不能以数字为首位2cd=3;改为cd=3;
3.for为循环结构不能作为变量名,改为f=’A’2.观察分析下面程序二的运行结果:
#include <stdio.h>
int main( )
{
int a=3,b=4,c=8;
float x,y=4.0,z;
x=a+b/c;
z=a+y/c;
printf("x=%f\nz=%f\n",x,z);
return 0;
}
以上程序的运行结果(或其截图):
3.观察分析下面程序三的运行结果:
#include <stdio.h>
int main( )
{
int a,b,c,d,i,j,m,n;
a=b=c=d=3;
i=a++;
j=++b;
m=c--;
n=--d;
printf("a=%d,b=%d,c=%d,d=%d\ni=%d,j=%d,m=%d,n=%d\n",a,b,c,d,i,j,m,n);
return 0;
}
以上程序的运行结果(或其截图):
4.观察分析下面程序四的运行结果:
#include <stdio.h>
int main( )
{
int a=4;
a+=a-=a*a+a;
printf("a=%d\n",a);
return 0;
}
以上程序的运行结果(或其截图):
五、思考题
1.给变量命名应该注意哪些?
答:1.变量名可由字母数字,下划线组成,但首位只能是字母,下划线不能为数字。

2.变量名区分大小写
3.变量名不能与系统标识符同名
4.变量名的长度是有限的,视编译而定
5.变量命名时尽量简单易记,见名之意
2.程序二的运行结果中,x和z的值为什么不同?
答:x为int类型,x的值为整型小数点部分都为0;即x=3.000000
z为float类型,z的值为浮点型数据,即z=3.500000
3.程序三的运行结果中,i和j的值为什么不同?m和n的值为什么不同?
答:i为a直接赋予i=3
j是先b+1=4再将4赋给j
m为c直接赋予
n是先d-1=3再将3赋给n
4.请分析程序四中表达式a+=a-=a*a+a的运算顺序。

答:1.a*a=16
2.16+a=20
3.a-=16=-16
4.a+=(-16)=-32
成绩指导教师
年月日
实验三顺序结构程序设计
一、实验学时
2 学时。

二、实验目的
1.掌握整型、实型与字符型数据输入函数scanf( )的使用;
2.掌握整型、实型与字符型数据输出函数printf( )的使用;
3.掌握顺序程序的设计方法。

三、预习内容
教材《C语言程序设计》第3章。

四、实验内容
1.下面程序一的功能是:从键盘输入两个整数,输出它们的和。

请在横线上填写一条合适的语句,调试、运行该程序。

#include <stdio.h>
int main( )
{
int a,b,sum;
scanf("%d%d",&a,&b);
printf("%d+%d=%d\n",a,b,sum);
return 0;
}
给出以上程序的运行结果(或其截图):2.观察分析下面程序二的运行结果。

#include <stdio.h>
int main( )
{
int a,b,sum;
printf("请输入第一个整数:");
scanf("%d",&a);
printf("请输入第二个整数:");
scanf("%d",&b);
sum=a+b;
printf("%d+%d=%d\n",a,b,sum);
}
给出以上程序的运行结果(或其截图):
3.下面程序三的功能是:输出三个变量a,b,c的值。

请在横线上填写一条合适的语句,使该程序的运行结果为:a=35,b=43.66,c='A'
#include <stdio.h>
int main( )
{
int a=35;
double b=43.6578;
char c='A';
printf("a=%d,b=%6.2f,c=%c\n",a,b,c);
return 0;
}
给出以上程序的运行结果(或其截图):
4.设圆柱底面圆半径r=1.5m,高h=3m,编写程序,求底面圆的周长和面积、圆柱的表面积和体积。

要求用函数scanf()输入r和h,输出时有文字说明,取小数点后两位。

⑴给出以上问题的求解算法(用N-S图描述)
⑵给出问题的源代码
#include<stdio.h>
#define PI 3.14159
void main()
{
double r,h,c,s,S,V;
scanf("%lf,%lf",&r,&h);
c=2*PI*r;
s=PI*r*r;
S=2*PI*r*r+2*PI*r*h;
V=PI*r*r*h;
printf("底面圆的周长:c=%6.2f,圆的面积:s=%6.2f,圆柱的表面积:S=%6.2f,圆柱的体积:V=%6.2f\n",c,s,S,V);
}
⑶该程序的运行结果(或其截图)
五、思考题
程序一和程序二中输入数据的方式有什么区别?您认为哪种方式较好,为什么?
答:
程序一中a,b同时定义;
程序二中在输出时可以明确区分a,b,并在编程过程中将其分别定义;
我认为程序二更好;
因为相较于程序一,程序二编程过程不易出错,且便于输出。

成绩指导教师
年月日
实验四选择结构程序设计
一、实验学时
2 学时。

二、实验目的
1.正确使用关系运算符和关系表达式;
2.正确使用逻辑运算符和逻辑表达式;
3.熟练使用if语句实现选择结构程序设计;
4.熟练使用switch语句实现多分支选择结构程序设计。

三、预习内容
教材《C语言程序设计教程》第4章。

四、实验内容
1.下面程序一的功能是:输入学生成绩,若90分≤成绩≤100分,输出“Excellent!”;若60分≤成绩≤89分,输出“Pass!”;若成绩<60分,输出“Fail!”;若成绩<0分或成绩>100分,输出“Input Error!”。

请在横线上填写合适的语句,调试、运行该程序。

#include <stdio.h>
int main( )
{
int score;
printf("请输入分数(0--100):");
scanf("%d", &score );
if(score>100||score<0)
printf("Input Error!\n");
else if(score>=90&&score<=100 ) printf("Excellent!\n");
else if (60<=score&&score<=89 ) printf("Pass!\n");
else printf("Fail!\n");
return 0;
}
程序一运行结果(执行程序4次,分别输入4个不同的成绩,对应4种不同的情况):
2.已知下面的分段函数:
请编写程序二,求出并显示y的值,x的值在程序运行时输入。

代码如下:
#include <stdio.h>
void main( )
{
float x,y;
scanf("%f",&x);
if(x<1)
y=x;
else if(x<10)
y=2*x-1;
else
y=3*x-11;
printf("%7.2f\n",y);
}
程序二运行结果(执行程序3次,分别输入3个不同的x值,对应3种不同的y值):
3.设计一个简单的计算器程序三。

程序运行时输入两个实数和一个四则运算符:+、-、*、/(例如,输入:45.6,2.4/),输出计算结果(保留两位小数)。

代码如下:
#include<stdio.h>
void main()
{
float a,b;
char ch;
scanf("%f,%f%c",&a,&b,&ch);
if(ch=='+')
printf("%.2f+%.2f=%.2f\n",a,b,a+b);
else if(ch=='-')
printf("%.2f-%.2f=%.2f\n",a,b,a-b);
else if(ch=='*')
printf("%.2f*%.2f=%.2f\n",a,b,a*b);
else if(ch=='/')
printf("%.2f/%.2f=%.2f\n",a,b,a/b);
}
程序三运行结果(执行程序4次,分别输入4组不同的数据,对应+、-、*、/四种不同的运算):
成绩指导教师
年月日
实验五循环结构程序设计
一、实验学时
2 学时。

二、实验目的
1.熟悉循环结构语句while、do…while及for的执行流程;
2.熟练掌握用while、do…while及for语句编写循环结构程序。

三、预习内容
教材《C语言程序设计》第5章。

四、实验内容
1.下面程序一的功能是:求和式12-22+32-42+…-142+152的值。

请在横线上填写合适的语句,调试、运行该程序。

#include "stdio.h"
void main( )
{
int sum=0,n=1,sign=1;
do
{
sum=sum+sign*n*n;
n+=1;
sign=sign*(-1);
} while (n<=15);
printf("1^2-2^2+3^2-4^2+…-14^2+15^2=%d\n", sum );
}
程序一运行结果(或其截图):
2.编写程序二。

输入一个5位正整数,输出该整数的倒序。

例如:若输入是12345,则输出为54321。

代码如下:
#include<stdio.h>
void main()
{
int n;
scanf("%d",&n);
while(n)
{
printf("%d",n%10);
n/=10;
}
}
程序二运行结果(或其截图):
3.编写程序三。

求数列311⨯,532⨯,7
53⨯,…,)12)(12(+-n n n 的前20项和。

代码如下:
#include<stdio.h>
int main()
{
float a=1,b=1,c=3,sum=0;
int i;
for(i=1;i<=20;i++)
{
sum+=a/(b*c);
a+=1;
b+=2;
c+=2;
}
printf("%3f\n",sum);
return 0;
}
程序三运行结果(或其截图):
成绩指导教师
年月日
实验六嵌套结构程序设计
一、实验学时
2 学时。

二、实验目的
1.掌握一个结构里面嵌套一个结构的程序执行过程及设计方法;
2.掌握break语句在多选一结构程序中的使用方法;
3.掌握break及continue语句在循环结构程序中的使用方法。

三、预习内容
教材《C语言程序设计》第3-5章。

四、实验内容
1.编写程序一,在屏幕上显示九九乘法表:代码如下:
#include<stdio.h>
void main()
{
int i,j;
printf("九九乘法口诀表:\n");
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf("%d*%d=%-4d",j,i,i*j);
printf("\n");
}
}
2.编写程序二,在屏幕上显示图形:
代码如下:
#include<stdio.h>
void main()
{
int i,j,k;
for(i=1;i<=4;i++)
{
for(j=1;j<=11-i;j++)
printf(" ");
for(k=1;k<=2*i-1;k++)
printf("*");
printf("\n");
}
for(i=1;i<=4;i++)
{
for(j=1;j<=i+7;j++)
printf(" ");
for(k=1;k<=7-2*i;k++)
printf("*");
printf("\n");
}
}
3.编写程序三,输出100以内的所有素数。

所谓素数,是指仅能被1和该数本身整除的大于1的整数。

代码如下:
#include<stdio.h>
void main()
{
int i,j;
for(i=2;i<=100;i++)
{
for(j=2;j<=(i/2);j++)
{if(i%j==0)
break;
}
if(i%j!=0)
printf("%d\n",i);
}
}
程序三运行结果(或其截图):
成绩指导教师
年月日
实验七数组
一、实验学时
2 学时。

二、实验目的
1.掌握一维数组的定义、赋值、输入输出及其应用;
2.掌握二维数组的定义、赋值、输入输出及其应用;
3.掌握字符数组的定义、赋值、输入输出及其应用。

三、预习内容
教材《C语言程序设计》第6章。

四、实验内容
1.编写程序一。

在一个已按从小到大排好序的数列中插入一个数,要求插入该数后的数列仍按小到大排列。

例如:原数列是1,3,5,7,9,11,13,15,17,插入数8后变成
1,3,5,7,8,9,11,13,15,17。

代码如下:
#include <stdio.h>
#define N 10
void main()
{
int i, data, a[N] = { 1, 3, 5, 7, 9, 11, 13, 15, 17 };
printf("原数组a中的数据是:\n");
for(i = 0; i < N-1; i++)
printf ( "%3d", a[i] );
printf ("\n请输入要插入的数(data):");
scanf ( "%d", &data );
for(i = N-2; a[i] > data && i>=0 ; i--)
a[i+1] = a[i];
a[i+1] = data;
printf("插入%d后,数组a中的数据是:\n", data);
for(i = 0; i < N; i++)
printf ( "%3d", a[i] );
printf ("\n");
}
程序的运行结果(或其截图):
2.编写程序二。

输出3行4列矩阵中的最大元素值及其行标和列标。

要求:矩阵中的每个元素值由键盘输入。

代码如下:
#include<stdio.h>
void main()
{
int i,j;
int row,col,max,a[3][4]={{7,9,12,5},{39,54,21,6},{17,26,64,1}}; printf("原二维数组a:\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%4d",a[i][j]);
printf("\n");
}
row=col=0;
max=a[0][0];
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
if(a[i][j]>max)
{
max=a[i][j];
row=i;
col=j;
}
}
printf("二维数组中最大数值是:%d,位于第%d行,第%d列。

\n",max,row+1,col+1);
}
程序的运行结果(或其截图):
3.编写程序三。

将一个字符串中的所有英文字母按从小到大排列,重新组成一个字符串。

例如:原字符串是:"How do you do?",重新排列后的字符串为:
"└┘└┘└┘?Hddoooouwy"。

代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char s[100],t;
int i,j,sum;
printf("Input:\n");
gets(s);
sum=strlen(s);
for(i=0;i<sum-1;i++)
for(j=0;j<sum-1;j++)
if(s[j+1]<=s[j]){t=s[j];s[j]=s[j+1];s[j+1]=t;}
printf("Output:\n");
puts(s);
return 0;
}
程序的运行结果(或其截图):
成绩指导教师
年月日
实验八函数
一、实验学时
2 学时。

二、实验目的
1.熟悉函数的定义方法;
2.掌握函数的调用方式及主调函数与被调函数间的数据传递方法;
3.掌握递归算法,会用函数来实现递归算法。

三、预习内容
教材《C语言程序设计》第7章。

四、实验内容
1.下面程序一的功能是求三个整数中的最大值。

请在横线上填写合适的语句,调试、运行该程序。

#include <stdio.h>
int max(int a,int b,int c)
{
int m;
m=a;
if(b>m)
m=b;
if(c>m)
m=c;
return(m) ;
}
void main( )
{
int x,y,z,maxi;
scanf("%d,%d,%d",&x,&y,&z);
maxi= max(x,y,z) ;
printf("Max of %d,%d and %d is %d.\n",x,y,z,maxi);
}
程序的运行结果(或其截图):
2.编写程序二。

在主函数中输入两个正整数,调用函数求它们的最小公倍数,结果在主函数中输出。

代码如下:
#include<stdio.h>
int min(int m,int n)
{
int s;
s=m;
while(s%n!=0)
s+=m;
return(s);
}
void main()
{
int m,n;
printf("请输入两个正整数\n");
scanf("%d,%d",&m,&n);
min(m,n);
printf("这两个正整数的最小公倍数为:%d\n",min(m,n));
}
程序的运行结果(或其截图):
3.编写程序三。

用递归方法求解猴子吃桃问题。

猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。

第2天又将剩下的桃子吃掉一半,又多吃了一个。

以后每天早上都吃了前一天剩下的一半零一个。

到第10天早上想再吃时,就只剩一个桃
子了。

求第1天共摘了多少个桃子。

代码如下:
#include"stdio.h"
int f(int a)
{
int y;
if(a==10)
y=1;
else
y=f(a+1)*2+2;
return y;
}
void main()
{
int n,y;
printf("请输入天数:");
scanf("%d",&n);
y=f(n);
printf("第一天小猴共摘了%d个桃子。

",y);
}
程序的运行结果(或其截图):
成绩指导教师
年月日
实验九变量的作用域与存储方式
一、实验学时
2 学时。

二、实验目的
1.掌握数组名作函数参数时形参与实参的定义方法;
2.会使用数组名作函数参数在主调函数与被调函数间传递多个数据;
3.掌握变量的作用域(局部变量与全局变量);
4.掌握变量的存储方式(动态存储与静态存储)。

三、预习内容
教材《C语言程序设计》第7章。

四、实验内容
1.运行下面的程序一,并分析结果。

#include <stdio.h>
int x=8,y=3;
int max(int a,int b)
{
int c;
if(a>b)
c=a;
else
c=b;
return c;
}
void main( )
{
int x=4,maxi;
maxi=max(x,y);
printf("%d\n",maxi);
}
程序的运行结果(或其截图):
2.运行下面的程序二,并分析结果。

#include <stdio.h>
int f(int a)
{
static int b=0;
b=b+a;
return b;
}
void main( )
{
int y1,y2;
y1=f(1);
y2=f(1);
printf("y1=%d,y2=%d\n",y1,y2);
}
程序的运行结果(或其截图):
3.编写程序三。

在主函数中输入10个整数,调用函数sort将它们从小到大排序,
排序结果在主函数中输出。

代码如下:
#include<stdio.h>
#define M 10
void sort(int a[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
void main()
{
int data[M];
int i;
for (i=0;i<M;i++)
{
scanf("%d",&data[i]);
}
sort(data,M);
for(i=0;i<M;i++)
printf("%d",data[i]);
printf("\n");
}
程序的运行结果(或其截图):
成绩指导教师
年月日
实验十编译预处理
一、实验学时
2 学时。

二、实验目的
1.理解宏的概念,掌握宏的定义;
2.掌握带参数的宏定义、条件编译的使用;
3.了解文件包含的概念,掌握其应用方法。

三、预习内容
教材《C语言程序设计》第8章。

四、实验内容
1.编写程序一。

由键盘输入三个整数,用带参数的宏找出三个整数中的最大者。

代码如下:
#include<stdio.h>
#define max(x,y,z) x>(y>z?y:z)?x:(y>z?y:z)
void main()
{
int o,p,q;
printf("请输入三个整数:\n");
scanf("%d,%d,%d",&o,&p,&q);
printf("%d%d%d,这三个数中最大的是:%d",o,p,q,max(o,p,q));
printf("\n");
}
程序的运行结果(或其截图):
2.编写程序二。

定义一个带参数的宏,使得两个参数的值互换,在主函数main( )中输入两个整数作为宏的参数,输出交换后的两个值。

代码如下:
#include<stdio.h>
#define swap(a,b) {int t;t=a;a=b;b=t;}
void main()
{
int a,b;
printf("请输入两个整数:\n");
scanf("%d%d",&a,&b);
printf("交换前数字为:a=%d,b=%d\n",a,b);
swap(a,b)
printf("交换后数字为:a=%d,b=%d\n",a,b);
}
程序的运行结果(或其截图):
3.编写程序三。

由键盘输入三个实数,用带参数的宏设计输出这三个实数的格式:
①第一行输出第一个实数;
②第二行输出前两个实数;
③第三行输出这三个实数。

代码如下:
#include "stdio.h"
#define N1 printf("%f\n",a)
#define N2 printf("%f %f\n",a,b)
#define N3 printf("%f %f %f\n",a,b,c)
void main()
{
float a,b,c;
printf("请输入三个实数:");
scanf("%f%f%f",&a,&b,&c);
N1;N2;N3;
printf("\n");
}
程序的运行结果(或其截图):
成绩指导教师
年月日
实验十一指针
一、实验学时
2 学时。

二、实验目的
1.掌握指针和间接访问的概念,会定义和使用指针变量;
2.能利用指针变量作函数参数得到多个要改变的值;
3.能正确定义指向数组的指针变量,并能用其对数组进行访问;
4.能正确定义指向字符串的指针变量,并能用其对字符串进行访问。

三、预习内容
教材《C语言程序设计》第9章。

四、实验内容
1.在主函数中输入2个整数,调用swap函数将它们的值交换,结果在主函数中输出。

代码如下:
#include<stdio.h>
void swap(int *p1,int *p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
void main()
{
int m,n;
printf("输入两个整数:");
scanf("%d%d",&m,&n);
swap(&m,&n);
printf("%d %d\n",m,n);
}
程序的运行结果(或其截图):
2.在主函数中输入10个整数,调用函数sum求它们的和,结果在主函数中输出(要求:实参用数组名,形参用指针变量)。

代码如下:
#include"stdio.h"
int sum(int *p)
{
int i,sum=0;
for(i=0;i<10;i++)
sum+=*(p+i);
return(sum);
}
void main()
{
int b[10],s,j;
printf("请输入10个整数:");
for(j=0;j<10;j++)
scanf("%d",&b[j]);
s=sum(b);
printf("以上10个数的和为:%d\n",s);
}
程序的运行结果(或其截图):
3.在主函数中输入一个字符串,调用converse函数将该字符串逆序(例如,若原序是:abcdefgh,则逆序后是:hgfedcba),结果在主函数中输出。

(要求:实参用字符数组名,形参用指针变量)。

代码如下:
#include<stdio.h>
#include<string.h> void converse(char *s) {
int i,j;
char c;
j=strlen(s);
for(i=0;i<j/2;i++)
{
c=s[i];
s[i]=s[j-i-1];
s[j-i-1]=c;
}
}
void main()
{
char s[100];
printf("请输入字符串:");
gets(s);
converse(s);
printf("该字符串倒序后为:%s\n",s);
}
程序的运行结果(或其截图):
成绩指导教师
年月日。

相关文档
最新文档