C语言实验报告书da1.docx
《C语言实验报告书da1.docx》由会员分享,可在线阅读,更多相关《C语言实验报告书da1.docx(35页珍藏版)》请在冰豆网上搜索。
C语言实验报告书da1
《C及C++语言程序设计》
实验报告书
姓名______________________
班级______________________
学号______________________
实验时间_________学年第___学期
扬州大学计算机中心
实验一程序的建立、调试执行的方法与步骤…………………………………1
实验二程序控制…………………………………………………………………5
实验三函数的定义、调用和声明………………………………………………9
实验四数组及其应用……………………………………………………………13
实验五字符串处理………………………………………………………………17
实验六函数的应用………………………………………………………………21
实验七链表………………………………………………………………………25
实验八算法设计与简单分析……………………………………………………27
实验名称:
程序的建立、调试执行的方法与步骤
实验时间:
年月日第周星期
实验属性:
实践性
一、实验目的
1.理解典型的C程序开发环境的要素;
2.学会使用WIN-TC集成环境编辑、编译、连接和运行C语言的源程序;
3.掌握程序编辑的基本方法,了解编译、连接的原理以及运行程序的方法;
4.通过运行简单的C程序,初步了解C程序的特点;
5.学习使用scanf和printf这两个常用的I/O函数。
二、实验预备工作
1.复习第1章程序设计基础和第2章C语言入门,掌握C语言源程序的基本构成;
2.了解C语言程序的编辑、编译、运行过程;
3.预习第11章C语言上机引导,了解Win-TC集成开发环境的组成。
三、实验内容
1.填空题
(1)
(1)下列程序运行的结果为_________0_______________。
#include
main()
{inta=9;
floatx=6.3,y=3.5;
printf(“%d\n”,a%5*(int)(x+y)%7/4);
getch();
}
(2)以下是一个完整的C程序,其功能为求a、b的和____。
#include
voidmain()
{inta,b,c;
printf(“enterfirstinteger:
”);
scanf(“%d”,&a);
printf(“entersecondinteger:
”);
scanf(“%d”,&b);
c=a+b;
printf(“\na+b=%d\n”,c);
}
2.改错题
(1)[题目]下列程序将助你熟悉由编译器产生的错误信息。
请尝试改正其中的错误,直到程序经编译后没有错误信息,最后得到正确的输出结果:
Someoutput:
1,2,3
[程序]
#include
voidmain()
{
inta=1;b=1,c=1,
prinf(“Someoutput:
%d,%d,%d\n”a,b,c)
修改后的源程序为:
#iinclude
voidmain()
{inta=1,b=2,c=3;
printf(“Someoutput:
%d,%d,%d\n”,a,b,c);
}
(2)[题目]下列程序将助你熟悉由编译器产生的错误信息。
请尝试改正其中的错误。
[程序]
#include
voidmain()
{
integerI;
longj;
prinf(“Enteraninteger:
);
scanf(“%d”,&i);
j=I*I;
printf(“I=%dj=%d\n,j);
}
修改后的源程序为:
voidmain()
{
inti;
longj;
prinf(“Enteraninteger:
);
scanf(“%d”,&i);
j=i*i;
printf(“i=%dj=%d\n”,i,j);
}
3.通过调试程序回答问题
(1)[题目]用一个main函数实现:
从键盘上输入三个正整数,求最大值。
请完善程序。
[源程序清单]
main()
{
inta,b,c,d,max;
printf(“Enterthreeintegers:
”);
___scanf__________(“%d%d%d”,&a,&b,&c);
if(a>b)max=_____a__________;
elsemax=______b_________;
if(___c>max____________)max=c;
_____printf__________(“maxofthethreenumbersis%d”,max);
}
[测试数据及结果]
(2)[题目]编写main函数,其功能是实现从键盘上输入两个变量a、b,交换它们的值并输出。
[源程序清单]
main()
{inta,b,c;
scanf(“%d%d”,&a,&b);
c=a;a=b;b=c;
printf(“a=%d\tb=%d\n”,a,b);
}
[测试数据及结果]
(3)[题目]编写一个main函数实现:
输入变量a、b的值,并将b的值加入到a中,输出a
[源程序清单]
main()
{inta,b;
scanf(“%d%d”,&a,&b);
a+=b;
printf(“a=%d\n”,a);
}
[测试数据及结果]
四、实验总结
实验名称:
程序控制
实验时间:
年月日第周星期
实验属性:
实践性
一、实验目的
1.掌握顺序结构、分支结构和循环结构的编程方法;
2.进一步学会正确使用逻辑运算符和逻辑表达式;
3.掌握break语句和continue语句的功能及应用;
4.熟练掌握级数的近似计算、阶乘的计算、素数的判断;
5.熟练掌握利用枚举法来找出符合条件的数或验证定理与猜想;
6.熟练掌握二重循环的应用。
二、实验预备工作
1.复习if语句、switch语句的用法;
2.复习for语句、while语句、do-while语句的用法;
3.复习break语句和continue语句的功能。
三、实验内容
1、填空题
2、
(1)下列程序的功能是___判断x是否为素数,是就输出TRUE,否则输出FALSE___。
#include
main()
{intx,k,i;
scanf(“%d”,&x);
for(i=2;i<=(k=sqrt(x));i++)
if(x%i==0)break;
if(i>k)printf(“TRUE”);
elseprintf(“FALSE”);
}
3、
(2)下列程序的运行结果是________a=2,b=1____________________。
#include
main()
{
intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:
a++;break;
case1:
b++;break;
}
case2:
a++,b++;break;
}
printf(“a=%d,b=%d\n”,a,b);
}
(3)下面程序的功能是计算100到1000之间有多少个数其各位数字之和是5。
main()
{inti,s,k,count=0;
for(i=100;i<=1000;i++)
{
s=0;k=i;
while(k)
{
s=s+k%10;
k=___k/10________;}
if(s!
=5)__continue_________;
count++;
}
printf(“%d\n”,count);
}
4、改错题
[题目]求满足下列条件的三位数n,它除以11(整数相除)所得到的商等于n的各位数字的平方和,且其中至少有二位数字相同的数。
如:
131,它除以11的商为11,各位数字的平方和为11,又如550,也是满足条件的三位数。
[含有错误的源程序]
main()
{intn,a,b,c;
for(n=1;n<1000;n++)/*for(n=100;n<1000;n++)*/
{a=n/100;
b=n/10%10;
c=n/10;/*c=n%10;*/
if(n/11=a*a+b*b+c*c||(a==b+a==c+b==c)>=2)/*if(n/11==a*a+b*b+c*c&&(a==b)+(a==c)+(b==c)>=1)*/
printf(“%5d”,n);
}
}
3、程序设计题
(1)[题目]请编程序:
根据以下函数关系,对输入的每个x值,计算出相应的y值。
x
y
x<0
0
0x
1010
20-0.5x+20
[源程序清单]
[运行结果]
(2)[题目]编程题:
求π的近似值:
要求:
先求出前2n项的π值,再求出2n+2项的π值,直至二者之差小于10-5为止。
[源程序清单]
[运行结果]
(3)[题目]编程计算1!
+2!
+3!
+…+n!
的前10项之和。
[源程序清单]
main()
{intn,i;
longs=0,t=1;
printf(“inputn=”);
scanf(“%d”,&n);
for(i=1;i<=n;i++)
{t*=i;
s+=t;
}
printf(“sum=%ld\n”,s);
}
[运行结果]
(4)编程求出两个整数a和b的最小公倍数。
[程序清单]
[运行结果]
四、实验总结
实验名称:
函数的定义、调用和声明
实验时间:
年月日第周星期
实验属性:
实践性
一、实验目的
1.掌握函数的一般调用和递归调用;
2.掌握函数调用时虚实参数结合的方式;
3.掌握变量的作用域与存储类别的基本概念。
二、实验预备工作
1.复习函数定义的一般形式、函数调用的一般形式;
2.复习函数实际参数和形式参数的基本概念及在函数调用时形参与实参的结合方法;
3.复习变量的作用域及存储类别等基本知识。
三、实验内容
1.填空题
(1)下列程序执行时的输出结果是___i=7,j=6,x=7
i=2,j=7,x=5____________。
main()
{
inti=2,x=5,j=7;
fun(j,6);
printf(“i=%d,j=%d,x=%d\n”,i,j,x);
}
fun(inti,intj)
{
intx=7;
printf(“i=%d,j=%d,x=%d\n”,i,j,x);
}
(2)下列程序执行时的输出结果是_____468__________。
main()
{inta=2,i;
for(i=0;i<3;i++)
{printf(“%d”,fun(a));
a++;
}
}
f(inta)
{intb=0;
staticintc=0;
b++,c++;
returna+b+c;
}
(3)下面程序的运行结果是___Theresultis:
365__________。
longfunc(longx)
{
if(x<100)returnx%10;
elsereturnfunc(x/100)*10+x%10;
}
main()
{
printf(“Theresultis:
%ld\n”,func(132645));
}
(4)下面程序的运行结果是_____3600________。
#include
intfun(intk);
intw=3;
main()
{
intw=10;
printf(“%d\n”,fun(5)*w);
}
intfun(intk)
{
if(k==0)returnw;
return(fun(k-1)*k);
}
2.改错题
[题目]以下程序从键盘输入一个较大的整数n(n>=6),然后验证6到n之间的所有偶数都可以分解为两个素数之和。
[程序]
#include"stdio.h"
#include”math.h”
voidmain()
{intk,j,n,limit;
do
{printf("Inputanumber>=6:
");
scanf("%d",&limit);}
while(limit<6);
for(n=6;n<=limit;n+=2)
for(k=3;k<=n/2;k+=2)
if(prime(k))
{j=n-k;
if(prime(j))
{printf("%d=%d+%d\n",n,k,j);
continue;/*break*/
}
}
}
intprime(intm)
{intg,h;h=sqrt(m);
for(g=2;g<=h;g++)
if(m%g==0)return0;
return1;
}
3、程序设计题
(1)[题目]设n0是一个给定的正整数。
对于i=0,1,2,…,定义:
若ni是偶数,则ni+1=ni/2;若ni是奇数,则ni+1=3ni+1;若ni是1,则序列结束。
用这种方法产生的数称为冰雹数(hailstone)。
请编写一个函数voidhailstones(intn),其功能是显示由n产生的序列,并按如下形式输出。
Hailstonesgeneratedby77:
77232116582988
442211341752
26134020105
168421
Numberofhailstonesgenerated:
23
[源程序]
voidhailstones(intn)
{intt=1;
printf("%5d",n);
while(n!
=1)
{t++;
if(n%2)n=3*n+1;
elsen=n/2;
printf("%5d",n);
if(t%6==0)printf("\n");
}
printf("\nNumberofhailstonesgenerated:
%d\n",t);
}
main()
{intn;
printf("hailstonesgeneratedby:
");
scanf("%d",&n);
hailstones(n);
}
[测试数据及结果]
四、实验总结
实验名称:
数组及其应用
实验时间:
年月日第周星期
实验属性:
实践性
一、实验目的
1.掌握数组元素的输入和输出的方法;
2.掌握与数组有关的算法(排序、查找、插入、删除等)。
二、实验预备工作
1.复习一维、二维数组的定义及数组元素的引用方法;
2.复习一维、二维数组的输入和输出的方法;
3.理解冒泡排序算法和选择排序算法。
三、实验内容
1.填空题
(1)以下程序在a数组中查找与x值相同的元素的所在位置。
main()
{inta[11],x,i;
printf(“Enter10Integers:
\n”);
for(i=1;i<=10;i++)scanf(“%d”,a+i);
printf(“Enterx:
”);scanf(“%d”,&x);
a[0]=___x_______;i=10;
while(x!
=a[i])____i--_______;
if(__i!
=0(或i>0)_________)printf(“%5d’spositionis%4d\n”,x,i);
elseprintf(“%disnotfound!
\n”,x);
}
(2)以下程序分别在a数组和b数组中放入an+1和bn+1个由小到大的有序数,程序把两个数组中的数按由小到大的顺序归并到c数组中。
#include
main()
{inta[10]={1,2,5,8,9,10},an=5;
intb[10]={1,3,4,8,12,18},bn=5;
inti,j,k,c[20],max=9999;
a[an+1]=b[bn+1]=max;
i=j=k=0;
while((a[i]!
=max)||(b[j]!
=max))
if(a[i]
{c[k]=a[i];
k++;
i++
}
else{c[k]=b[j];
k++;
j++
}
for(i=0;iprintf("%4d",c[i]);
printf("\n");
}
2.改错题
(1)[题目]以下程序的功能是从键盘上最多输入10个整数,并检测整数3是否包含在这些数据中,若包含3,则显示出第一个3出现的位置,程序有些错误,试改正之。
main()
{intdata[10];
j=0;/*intj=0*/
while(j<10)
{scanf(“%d”,data[j]);/*scanf(“%d”,&data[j])*/
j++;
}
for(j=0;j<10;j++)
if(data[j]=3)/*data[j]==3*/
{printf(“3isinthepositionof%d\n”,j);
continue;
}
}
(2)[题目]在m行n列的二维数组中找出最大值的元素,然后将该元素所在行与最后一行交换,将该元素所在列与最后一列交换。
请按功能要求改正程序中的错误,并调试程序。
#defineM3
#defineN4
#include“math.h”
main()
{intx,k,j,com,col,t;
inta[M][N]={12,4,56,-34,0,-2,-45,3,9,-7,4,-65};
for(k=0;k{for(j=0;jprintf("\n");
}
putchar('\n');
x=0;com=0;col=0;/*x=a[0][0]*/
for(k=0;kfor(j=k+1;jif(xfor(k=0;k{t=a[k][col];a[k][col]=a[k][N];a[k][N]=t;}/*a[k][col]=a[k][N-1];a[k][N-1]=t;*/
for(k=0;k{t=a[com][k];a[com][k]=a[M][k];a[M][k]=t;}/*a[com][k]=a[M-1][k];a[M-1][k]=t;*/
for(k=0;k{for(j=0;jprintf("\n");
}
putchar('\n');
}
3.程序设计题
⑴下面程序是利用插入排序法将n个数从大到小进行排序,插入排序的算法思想如下:
从一个空表开始,将待排序的数一个接一个插入到已排好序的有序表中(空表视为有序),从而得到一个新的、记录数增1的有序表。
例如:
当n=7时,待排序的数及每一趟有序表的变化情况如下:
趟数
有序表
剩余待排序数
初始状态
空
49 38 65 97 76 13 27
第1趟
49
38 65 97 76 13 27
第2趟
49 38
65 97 76 13 27
第3趟
65 49 38
97 76 13 27
第4趟
97 65 49 38
76 13 27
第5趟
97 76 65 49 38
13 27
第6趟
97 76 65 49 38 13
27
第7趟
97 76 65 49 38 27 13
空
请完善下列程序并进行调试。
#include<stdio.h>
main()
{inta[10];inti,j,t;
printf(”\nEnter10number:
”);
for(i=0;i<=9;i++)
scanf(“%d”,&a[i]);
for(i=1;i<=9;i++)
{t=a[i];
j=i-1;
while((j>=0)&&(t>a[j]))
{a[j+1]=a[j];
j--;
}
a[j+1]=t;
}
}
printf(“\nthereis10number:
”);
for(i=0;i<=9;i++)printff(“%4d”,a[i]);
}
(2)[题目]打印以下形式的杨辉三角形。
1
11
121
1331
14641
15101051
[源程序清单]
运行结果:
四、实验总结
实验名称:
字符串处理
实验时间:
年月日第周星期
实验属性:
实践性
一、实验目的
1.掌握字符串处理函数的模拟;
2.掌握字符串的压缩与还原、查找子串、插入子串等操作。
二、实验预备工作
1.掌握字符串的初始化方法及字符串的结束标记;
2.复习字符串的输入输出方法;
3.复习字符串处理函数,掌握其功能及使用方法。
三、实验内容
1.填空题
(1)下面程序是模拟字符串复制函数,将字符串b复制到字符串a。
#include
#include
main()
{inti;
chara[20],b[10];
gets(b);i=0
while(____a[i]=b[j](或(a[i]=b[j])!