C语言实验.docx
《C语言实验.docx》由会员分享,可在线阅读,更多相关《C语言实验.docx(45页珍藏版)》请在冰点文库上搜索。
![C语言实验.docx](https://file1.bingdoc.com/fileroot1/2023-5/12/368e5150-566d-468c-b79b-e833aa9bd2db/368e5150-566d-468c-b79b-e833aa9bd2db1.gif)
C语言实验
《C语言程序设计》
实验指导书
安徽工业职业技术学院
信息工程系应用教研室
实验一C语言基础与顺序结构程序设计
一.实验目的:
1.初步了解C程序的基本结构。
2.逐步熟悉VC++6.0的编译环境。
3.掌握一个简单C程序的编辑、编译过程;能够处理编译过程中的一些简单错误。
4.掌握基本类型变量的定义和各类常量的表示形式。
5.掌握基本类型数据的输入与输出的实现。
6.理解并掌握顺序结构程序设计的方法。
二.实验内容:
1.编写程序,计算一个长方形的周长与面积。
编写程序,计算数学#include
intmain()
{
intl,w,c,s;
printf("请输入长和宽");
scanf("%d%d",&l,&w);
c=(l+w)*2;
s=l*w;
printf("周长:
%d,面积:
%d",c,s);
}
2.表达式
的值,其中民n和m的值由键盘输入。
#include
intmain()
{
floatm,n,y;
printf("请输入两个数:
");
scanf("%f%f",&m,&n);
y=2*n/(m+n);
printf("表达式的值为:
%f",y);
}
3.编写程序,实现从键盘输入一个小写字母,输出该字母及对应的ASCII值,然后将该字母转换成大写字母,并输出大写字母及对应的ASCII值。
#include
intmain()
{
charch;
printf("请输入一个小写字母:
");
scanf("%c",&ch);
printf("该字母为:
%c,\n该字母的ASCLL值为:
%d",ch,ch);
ch=ch-32;
printf("对应的大写字母为:
%c,\n该大写字母的ASCLL值为:
%d",ch,ch);
}
4.编写程序,实现输入一个三位数,依次求出该数的百位、十位、个位数字并输出。
#include
intmain()
{
intx,a,b,c,d;
printf("请输入一个三位数:
");
scanf("%d",&x);
a=x%10;b=x/10;c=b/10;d=b%10;
printf("这个数的个位、十位、百位数字分别为%d、%d、%d\n",a,d,c);
}
实验二分支(选择)结构程序设计
(一)
一.实验目的:
1.掌握运用if语句实现单分支的算法;
2.掌握运用if_else语句实现双分支的算法
3.学习调试程序的方法与步骤。
二.实验内容:
1.编程实现,判断用户输入的一个整数是奇数还是偶数,输出判断结果。
#include
intmain()
{
intx;
printf("请输入一个整数:
");
scanf("%d",&x);
if(x%2==0)
printf("这个数是偶数!
");
else
printf("这个数是奇数!
");
}
2.根据销售员一个月的销售额提成。
如果销售额为两万元以上,则提成销售额的3%,否则,仅提成500元。
假设某销售员的基础工资为1500元,输入该销售员一个月的销售额,输出他的实际工资。
#include
intmain()
{
floatgz,xse;
printf("请输入销售员一个月的销售额:
");
scanf("%f",&xse);
if(xse>=20000)
gz=1500+xse*0.03;
else
gz=1500+500;
printf("该销售员的实际工资为:
%.2f",gz);
}
3.输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换。
然后输出最后得到的字符。
#include
intmain()
{
charch;
printf("请输入一个字符:
");
ch=getchar();
if(ch>='A'&&ch<='B')
ch=ch+32;
printf("%c",ch);
}
实验三分支(选择)结构程序设计
(二)
三.实验目的:
1.熟练掌握if语句的用法;
2.会用switch语句处理多分支选择结构的问题;
3.学习调试程序的方法与步骤。
四.实验内容:
1.编写程序,实现用户输入一个年份,判断其是否是闰年并输出判断结果。
闰年的条件:
1)能被4整除,但不能被100整除的年份;
能被100整除,又能被400整除的年份;
#include
intmain()
{
inty=0;
printf("请输入一个年份:
");
scanf("%d",&y);
if(y%400==0||y%4==0&&y%100!
=0)
printf("是闰年!
");
else
printf("是平年!
");
}
2.设计程序计算下列分段函数的函数值。
其中变量x由键盘输入,计算y的值并输出。
#include
intmain()
{
floatx;inty;
printf("请输入x的值:
");
scanf("%f",&x);
if(x<-1)
y=0;
elseif(x<=1)
y=1;
else
y=10;
printf("y=%d",y);
}
3.某银行的存款利率如下:
1年期利率是1.2%,2年期利率是1.75%,3年期利率是2.5%,5年期利率是3.17%。
编写程序,实现从键盘输入存款数及存款时间,计算到期存款利息。
#include
intmain()
{
floatbj,lx;intx;
printf("请输入存款数:
");
scanf("%f",&bj);
printf("请输入存款时间:
");
scanf("%d",&x);
switch(x)
{case1:
lx=bj*0.012*x;break;
case2:
lx=bj*0.0175*x;break;
case3:
lx=bj*0.025*x;break;
case5:
lx=bj*0.0317*x;break;
default:
printf("输入错误!
");break;
}
printf("利息为:
%.2f",lx);
}
4.用条件运算符求三个整数中的最大数。
#include
intmain()
{
inta,b,c,m;
printf("请输入三个整数:
");
scanf("%d%d%d",&a,&b,&c);
m=a>b?
a:
b;
m=m>c?
m:
c;
printf("这三个整数中的最大数是%d",m);
}
实验五循环结构程序设计
一.实验目的:
1.学会设计循环结构的程序。
2.通过实验加深对while语句、do-while语句、for语句的理解。
3.能根据循环要求选择while语句、do-while语句、for语句来实现循环。
二.实验内容:
1.分别用三种循环结构实现求1到20的平方和。
#include
intmain()
{
inti,sum=0;
for(i=1;i<=20;i++)
sum=sum+i*i;
printf("1~20的平方和为%d",sum);
}
#include
intmain()
{
inti=1,sum=0;
while(i<=20)
{sum=sum+i*i;
i++;
}
printf("1~20的平方和为%d",sum);
}
#include
intmain()
{
inti=0,sum=0;
do{i++;
sum=sum+i*i;
}while(i<20);
printf("1~20的平方和为%d",sum);
}
2.
编写程序,输入一组字符(以#号结尾)对该组字符做一个统计,统计字母、数字和其他字符的个数,输出统计结果。
#include
intmain()
{
charch;
intzm=0,sz=0,qt=0;
for(ch=getchar();ch!
='#';ch=getchar())
{if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')
zm++;
elseif(ch>='0'&&ch<='9')
sz++;
else
qt++;
}
printf("字母%d个,数字%d个,其他字符%d个",zm,sz,qt);
}
3.编写程序:
用
公式求π的近似值,直到最后一项的绝对值小于10-6为止(该项不累计加)。
#include
intmain()
{
floatsum=0,PI;
inti,m=1;
for(i=1;1.0/(2*i-1)>10e-6;i++)
{sum=sum+m*1.0/(2*i-1);
m=-m;
}
PI=4*sum;
printf("圆周率的近似值为:
%f",PI);
}
4.编程实现,将100~200间的全部素数输出到屏幕上。
#include
intmain()
{
inti,n;
for(n=100;n<=200;n++)
{
for(i=2;iif(n%i==0)
break;
if(i>=sqrt(n))
printf("%5d",n);
}
}
5.请为“百鸡问题”编写程序。
百鸡问题:
“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。
百钱买百鸡,问鸡翁、母、雏各几只”。
#include
intmain()
{
intx=0,y=0,z=0;
printf("百元买百鸡可行的方案有:
\n");
for(x=0;x<=20;x++)
{
for(y=0;y<=33;y++)
{z=100-x-y;
if(15*x+9*y+z==300)
printf("公鸡:
%-4d,母鸡:
%-4d,小鸡:
%-4d\n",x,y,z);
}
}
}
实验六数组
一.实验目的:
1.掌握一维和二维数组的定义、赋值和输入输出的方法。
2.掌握与数组有关的算法(特别是排序算法)。
3.掌握字符串和字符串函数的使用。
二.实验内容:
1.程序修改题
1)该程序的功能是输入N个学生成绩,然后将平均成绩计算出来。
请改正程序中的错误(以注释的形式给出正确的语句),使它能统计出正确的结果。
#include#
#defineN10
voidmain()
{
inti,num;去掉
floatscore[N],sum=0.0,ave;
for(i=0;i<=N;i++)i{
printf(“Inputscore:
”);
scanf(“%f”,score);&score[i]
sum+=score[i];
}
ave=sum/N;
printf(“theaveragescoreofthestudentsis%6.2f\n”,ave);
}
2)该程序的功能是将字符串str中的小写字母都改写为对应的大写字母,其他字符不变。
例如,输入“aB&cD”,则输出“AB&CD”。
请改正程序中的错误(以注释的形式给出正确的语句),使它能得到正确结果。
#include
voidmain()
{
inti;
charstr[81];
printf(“\nPleaseenterastring:
”);
scanf(“%s”,str);
for(i=0;str[i];i++)
if((‘a’<=str[i])||(str[i]<=’z’))
str[i]+=32;
printf(“\nTheresultif%s\n”,str);
}
2.程序设计题
1)编写程序,找出一个整型数组(长度为10)中的最大值输出,并指出它第一次出现时的下标。
2)假设数组a中已经存放20个整数,编写程序,将其中所有偶数存放在数组b中,将所有奇数存放在数组c中。
3)2008年,某地区5月份中某10天的最高气温依次是(0C):
27、28、26、26、28、28、27、28、27、26。
编程程序,分别统计出260C和280C各占多少天。
4)编程实现:
将一个一维数组中的值按逆序重新存放。
例如,原来的顺序为8,6,5,4,1。
要求改为1,4,,5,6,8。
5)编写程序,用数组记录掷骰子的点数,假设掷了100次,显示记录的结果。
提示:
设定数组的长度为7,下标0元素不使用,骰子的点数i(由随机函数模拟产生)记录在下标i的数组元素中。
6)编程实现,将存放在字符数组str[20]中的字符串中的小写字母都改写为对应的大写字母,其他字符不变。
例如,输入“aB&cD”,则输出“AB&CD”。
7)编程实现:
求一个3×3的整形矩陈对角线元素之和。
8)编写连接两个字符串的程序。
9)使用起泡法对10个整数进行排序(升序)。
实验七函数
一.实验目的:
1.掌握定义函数的方法。
2.掌握函数实参与形参的对应关系,以及“值传递”的方式。
3.掌握函数的嵌套调用和递归调用的方法。
二.实验内容:
1.定义函数返回两个数中较大的数,在主函数中通过调用该函数求三个数之中较大的数并输出。
2.编写名为isprime的函数,函数的功能是判断一个数是否为素数,如是素数,返回1,否则返回0。
在主函数中输入一个整数n,调用判断isprime函数判断n是否为素数并输出相关信息。
3.函数fun的功能是求1+2+3+……+n的和,编写程序在主函数中调用fun函数计算
(n在主函数中输入)的值并输出。
4.编程计算3!
+7!
+8!
并输出结果,要求用自定义函数来求阶乘。
5.编写一个函数找出一维数组中的最小值及其下标,最小值用函数返回值带回主调函数,下标可通过全局变量传给主调函数,在主函数中调用该函数进行验证。
实验八指针*
一.实验目的:
1.理解指针的概念。
2.掌握指针变量的定义和引用方法。
3.掌握指针与数组、字符串之间的联系。
4.掌握指针类型参数和返回指针函数的定义和用法。
二.实验内容:
1.分析并运行指针变量的定义和引用演示和程序
1)输入下列程序
main()
{
inti=1,*pi;
floatu=1.5,*pu;
charx=’a’,*px;
pi=&i;
printf(“i=%d\n”,*pi);
}
2)运行程序,结果为:
3)把程序第六行改为:
pi=&x;
运行程序,结果为:
分析原因:
4)把程序第六行改为:
pi=&u;
运行程序,结果为:
分析原因:
5)把程序第6行、第七行改为:
pu=&i;
printf(“u=%f\n”,*pu);
运行程序,结果为:
分析原因:
6)把程序第6行、第七行改为:
px=&i;
printf(“u=%c\n”,*px);
运行程序,结果为:
分析原因:
以上操作说明:
2.分析并运行指针变量作为函数参数的演示程序
1)输入下列程序
swap(int*p1,int*p2)
{
intp;
p=*p1;
*p1=*p2;
*p2=p;
}
main()
{
int*pa,*pb,a=1,b=2;
pa=&a;
pb=&b;
if(*pb>*pa)
swap(pa,pb);
printf(“max=%d,min=%d\n”,*pa,*pb);
}
2)运行程序,结果为:
本程序中swap函数的功能是:
3)把程序中swap函数的函数体改为:
int*p;
p=p1;
p1=p2;
p2=p;
运行程序,结果为:
程序是否能实现交换变量a与b的值的功能?
为什么?
4)把程序中swap函数的函数体改为:
int*p;
*p=*p1;
*p1=*p2;
*p2=*p;
运行程序,结果为:
程序是否能实现交换变量a与b的值的功能?
为什么?
3.程序改错
1)下述C程序实现:
利用指向字符数组的指针变量,逐个比较两个组a、b中所存放字符串的相应字符,若相等则输出该字符。
程序中有4处错误,请指出并改正它们。
#include
#include
main()
{
chara[]=“ABCDEFGH”,b[]=“abCDefGH”;
char*p1,*p2;
intk;
p1=&a;p2=&b;
for(k=0;k<=length(a);k++)
if(*p1+k==*p2+k)
printf(“%c”,*p1+k);
printf(“\n”);
}
2)下述C程序实现:
求已给一维数组a中最小的数组元素值并输出结果。
请指出错误并改正。
#include
#defineN10
voidfindmin(int*s,intn,int*k)
{
intp;
for(p=0,*k=p;pif(s[p]
*k=p;
return(*k);
}
main()
{
inta[N],i,*k=i;
printf(“Enter%dintegers:
\n”,N);
for(i=0;iscanf(“%d”,&a[i]);
findmin(a,N,*k);
printf(“Minimum:
a[%d]=%d.\n”,k,a[k]);
}
4.编写程序
1)编写程序,使数组10个元素的值分别为0~9,然后输出。
(要求采用五种不同的方法引用数组元素)
方法一:
用下标法引用数组元素。
方法二:
用数组名法引用数组元素。
方法三:
用指针变量法引用数组元素。
方法四:
通过指针变量的自增运算引用数组元素。
方法五:
用指针的下标表示法引用数组元素。
2)下述C程序实现:
从键盘输入一批成绩(以百分制计,0~100分,不超过15个,以-1为输入结束标志),统计并输出平均成绩(取两位小数),总人数及成绩高于平均成绩的人数。
使用函数定义,并以整型指针变量作为函数参数。
请完善程序代码,并调试通过该程序。
#include
#defineMAX15
main()
{
inti,score,n=0;
intsco[MAX],*ps=sco;
floatav;
inttotal=0,higher=0;
floataver(int*pa,intn);
printf(“Enterscore(0~100),-1tostop:
)”);
scanf(“%d”,&score);
while()/*写一表达式,表示输入未结束且所输入成绩的个数小于MAX*/
{
sco[n++]=score;
printf(“Enterscore(0—100,-1tostop:
)”);
scanf(“%d”,&score);
}
/*调用函数aver,计算n名学生的平均成绩,并将函数的返回值赋予av*/
for(i=0;i{
total++;
if(sco[i]>av)
higher++;
}
printf(“\n”);
printf(“Total:
%2d.\n”,total);
printf(“Average:
%5.2f.\n”,av);
printf(“Higher:
%2d.\n”,higher);
}
floataver(int*pa,intn)
{
inti,sum=0;
floatav;
/*写一循环语句,利用指变量pa计算n个学生的成绩之和,赋予sum*/
/*写一赋值语句,计算n名学生的平均成绩(带小数),赋予av*/
return(av);
}
实验九结构体、联合体与枚举*
一.实验目的:
1.掌握结构体变量的定义和使用;
2.掌握链表的概念、初步学会对链表进行操作;
3.掌握联合体的要领和使用;
4.掌握枚举类型数据的说明、定义和使用;
二.实验内容:
编写程序题,然后上机高调试运行。
1.有4个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入4个学生数据,要求打印出三门课总平成绩,以及最高分的学生的数据(包括学号、姓名、三门课的平均成绩、平均分数)
要求用一个input函数输入4个学生数据;用一个average函数求总平均分;用max函数找了最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出。
2.建立一个链表,每个结点包括:
学号、姓名、性别、年龄。
输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删除。
实验十文件*
一.实验目的:
1.掌握文件以及缓冲文件系统、文件指针等要概念;
2.学会使用打开文件、关闭文件、读、写等文件操作函数;
3.学会用缓冲文件系统对文件进行简单的操作;
二.实验内容:
1.程序运行题
运行教材中[例10.1][例10.2][例10.3][例10.4][例10.5][例10.6][例10.9][例10.10]。
2.程序修改题
下面程序的功能是将一个磁盘文件中的信息复制到另一个磁盘文件中,请改正程序中的错误,使它能正确地运行。
#include“stdio.h”
main()
{
FILE*in,*out;
charch,infile[10],outfile[10];
printf(“Entertheinfilename:
\n”);
scanf(“%s”,infile);
printf(“Entertheoutfilename:
\n”);
scanf(“%s”,outfile);
if((in=fopen(infile,”w”))==NULL)
{printf(“cannotopeninfile.\n”);
exit(0);
}
if((in=fopen(outfile,”r”)