C语言实验指导.docx
《C语言实验指导.docx》由会员分享,可在线阅读,更多相关《C语言实验指导.docx(84页珍藏版)》请在冰点文库上搜索。
![C语言实验指导.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/11d5fc3b-f0a6-4e6d-ae9d-da8519fd875b/11d5fc3b-f0a6-4e6d-ae9d-da8519fd875b1.gif)
C语言实验指导
实验2数据类型、运算符和表达式
一、实验目的
1、掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。
2、掌握不同类型数据之间赋值的规律。
3、学会使用C语言的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
4、进一步熟悉C程序的编辑、编译、连接和运行的过程。
二、实验内容和步骤
1、输入并运行下面的程序
#include
voidmain()
{
charc1,c2;
c1='a';
c2=‘b’;
printf(“%c%c\n”,c1,c2);
}
(1)运行此程序。
(2)再此基础上增加一个语句:
printf(“%d%d\n”,c1,c2);
再运行,并分析结果。
(3)再将第2行改为:
intc1,c2;
再使之运行,并观察结果。
(4)再将第3、4行改为:
c1=a;/*不用单撇号*/
c2=b;
再使之运行,分析其运行结果。
(5)再将第3、4行改为:
c1=”a”;/*用双撇号*/
c2=”b”;
再使之运行,分析其运行结果。
(6)再将第3、4行改为:
c1=300;/*用大于255的整数*/
c2=400;
再使之运行,分析其运行结果。
2、输入并运行以下程序
#include
voidmain()
{
charc1=‘a’,c2=‘b’,c3=‘c’,c4=‘\101’,c5=‘\116’;
printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3);
printf(“\t\b%c%c”,c4,c5);
}
在上机前先用人工分析程序,写出应得结果,上机后将二者对照。
3、输入并运行下面的程序
#include
voidmain()
{
inta,b;
unsignedc,d;
longe,f;
a=100;
b=-100;
e=50000;
f=32767;
c=a;
d=b;
printf(“%d,%d\n”,a,b);
printf(“%u,%u\n”,a,b);
printf(“%u,%u\n”,c,b);
c=a=e;
d=b=f;
printf(“%d,%d\n”,a,b);
printf(“%u,%u\n”,c,d);
}
请对照程序和运行结果分析:
(1)将一个负整数赋给一个无符号的变量,会得到什么结果。
(2)将一个大于32767的长整数赋给整型变量,会得到什么结果。
(3)将一个长整数赋给无符号变量,会得到什么结果(分别考虑该长整数的值大于或等于65535以及小于65535的情况)。
同学们可以改变程序中各变量的值,以便比较。
例如:
a=65580,b=-40000,e=65535,f=65580。
4、输入以下程序
#include
voidmain()
{
inti,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
}
(1)运行程序,注意i、j、m、n各变量的值,分别作以下改动并运行。
(2)将第4、5行改为:
m=i++;
n=++j;
再运行。
(3)将程序改为:
#include
voidmain()
{
inti,j;
i=8;
j=10;
printf(“%d,%d”,i++,j++);
}
(4)在(3)的基础上,将printf语句改为:
printf(“%d,%d”,++i,++j);
(5)再将printf语句改为:
printf(“%d,%d,%d,%d”,i,j,i++,j++);
(6)将程序改为:
#include
voidmain()
{
inti,j,m=0,n=0;
i=8;
j=10;
m+=i++;n-=--j;
printf(“i=%d,j=%d,m=%d,n=%d”,i,j,m,n);
}
5、按要求编写程序并上机运行
要将”China”译成密码,译码规律是:
用原来字母后面的第4个字母代替原来的字母。
例如,字母”A”后面第4个字母是”E”,用”E”代替”A”。
因此,”China”应译为”Glmre”。
请编一程序,用赋初值的方法使c1、c2、c3、c4、c5五个变量的值分别为’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’、,并输出。
(课后3.7,p67)
(1)输入事先已编好的程序,并运行该程序。
分析是否符合要求。
(2)改变c1、c2、c3、c4、c5的初值为:
’T’、’o’、’d’、’a’、’y’,对译码规律作如下补充:
’W’用’A’代替,’X’用’B’代替,’Y’用’C’代替,’Z’用’D’代替。
修改程序并运行。
(3)将译码规律修改为:
将字母用它前面的第4个字母代替,例如:
’E’用’A’代替,’Z’用’U’代替,’D’用’Z’代替,’C’用’Y’代替,’B’用’X’代替,’A’用’V’代替。
修改程序并运行。
实验3最简单的C程序设计
一、实验目的
1、掌握C语言中使用最多的一种语句——赋值语句的使用方法。
2、掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。
3.掌握C语言的顺序结构程序设计
二、实验内容和步骤
1、掌握各种格式转换符的正确使用方法
(1)输入程序
#include
voidmain()
{
inta,b;
floatd,e;
charc1,c2;
doublef,g;
longm,n;
unsignedintp,q;
a=61;b=62;
c1=’a’;c2=’b’;
d=3.56;e=-6.87;
f=3157.890121;g=0.123456789;
m=50000;n=-60000;
p=32768;q=40000;
printf(“a=%d,b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n”,a,b,c1,c2,d,e);
printf(“f=%15.6f,g=%15.12f\nm=%ld,n=%ld\np=%u,q=%u\n”,f,g,m,n,p,q);
}
(2)运行此程序并分析结果。
(3)在此基础上,修改程序的第8-13行:
a=61;b=62;
c1=’a’;c2=’b’;
f=3157.890121;g=0.123456789;
d=f;e=g;
p=a=m=50000;q=b=n=-60000;
运行程序,分析结果。
(4)改用scanf函数输入数据而不用赋值语句,scanf函数如下:
scanf(“%d,%d,%c,%c,%f,%f,%lf,%lf,%ld,%ld,%u,%u”,
&a,&b,&c1,&c2,&d,&e,&f,&g,&m,&n,&p,&q);
输入的数据如下:
61,62,a,b,3.56,-6.87,3157,890121,0.123456789,50000,-60000,37678,40000↙
请分析运行结果(说明:
lf和ld格式符分别用于输入double型和long型数据)。
(5)在(4)的基础上将printf语句改为:
printf(“a=%d,b=%d\nc1=%c,c2=%c\nd=%15.6f,e=%15.12f\n”,a,b,c1,c2,d,e);
printf(“f=%f,g=%f\nm=%d,n=%d\np=%d,q=%d\n”,f,g,m,n,p,q);
运行程序。
(6)将p、q改用%o格式符输出。
(7)将scanf函数中的%lf和%ld改为%f和%d,运行程序并观察分析结果。
2、按要求编写程序
(1)设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf输入数据,输出计算结果。
输出时要有文字说明,取小数点后两位数字。
注意:
要根据需要定义数据类型
(2)编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf函数输出这两个字符。
上机运行程序,比较用printf和putchar函数输出字符的特点。
(3)输入一个华氏温度,要求输出摄氏温度。
公式为:
c=5/9*(f-32)
注意:
将表达式转换为c语言中合法的表达式时,加减乘除运算有所不同
(4)求平面上任意两点之间的距离。
提示:
点(x1,y1)到点(x2,y2)的距离公式为:
d=
(5)输入两个数为两个变量赋值,然后将两个变量的值互相交换。
实验4逻辑结构程序设计
一、实验目的
1、了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。
2、学会正确使用逻辑运算符和逻辑表达式。
3、熟练掌握if语句和switch语句。
4、结合程序掌握一些简单的算法。
5、学习调试程序。
二、实验内容和步骤
本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。
1、改错题。
给定程序MODI1.C的功能是:
对于如下函数:
用scanf函数输入x的值,求y值。
/*MODI1.C*/
#include
voidmain()
{
intx,y;
/***********found***********/
scanf("%d",x);
if(x<1)
y=x;
/***********found***********/
elseif(1<=x<10)
y=2*x-1;
else
y=3*x-11;
printf("y=%d\n",y);
}
程序中有两处错误,错误都在提示行:
/***********found***********/的下面一行。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要随意改动程序,不得增行或删行,也不得更改程序的结构!
修改程序后,运行程序,输入x的值(分别为x<1、1≤x<10、x≥10三种情况,如0.5、8、15),检查输出的y值是否正确。
2、从键盘输入某学生的考试成绩,要求输出成绩等级A、B、C、D、E。
学生的成绩可分成5个等级,90-100分为A级,80-89分为B级,70-79分为C级,60-69分为D级,0-59分为E级。
要求在输入负数时,给出错误提示。
①事先编好程序,要求分别用if语句和switch语句实现。
运行程序,并检查结果是否正确。
②再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级。
修改程序,使之能正确处理任何数据。
当输入数据大于100或小于0时,通知用户“输入数据错”,程序结束。
3、给一个不多于5位的正整数,要求:
①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字,例如:
原数据为321,应输出123。
(BX4.6)
分别用1位正整数、2位正整数、3位正整数、4位正整数、5位正整数作为测试数据进行测试。
除此之外,程序还应当对不合法的输入作必要的处理。
例如:
当输入负数时或输入的数超过5位(如123456)数时。
4、输入3个整数,要求按由小到大的顺序输出。
5、根据输入的三角形的三边判断是否能组成三角形,若可以则输出它的面积和三角形的类型(等边、等腰、直角、一般三角形)。
6、输入某职工的工资,根据不同档次扣除工资所得税,然后计算实发工资。
扣税标准如下:
(1)若工资低于850元,则不扣税。
(2)若工资在850元至1500之间,则扣税比例为1%。
(3)若工资在1500元至2000之间,则扣税比例为1.5%。
(4)若工资高于2000元,则扣税比例为2%。
7、编写一个菜单显示程序,界面如下:
---------------------------------------------------
主菜单
1.添加记录2.显示记录
3.读取记录4.保存记录
----------------------------------------------------
请选择1-4,0退出:
输入1-4可以进行相应的显示,如输入1则显示“你选择了1”,输入2则显示“你选择了2”等,当输入0-4之外的数据时,显示“选择错误!
”。
8、以下给定程序MODI1.C的功能是:
输入一个年份,判断该年是否为闰年。
程序中有两处错误,错误都在提示行:
/***********found***********/的下面一行。
请改正程序中的错误,使它能得出正确的结果。
注意:
程序中的其它地方不要随意改动,不得增行或删行,也不得更改程序的结构!
#include
voidmain()
{intyear,leap;
printf("Pleaseenterayear:
");
scanf("%d",&year);
/*************found**************/
if(year%4==0)leap=0;
elseif(year%100!
=0)leap=1;
elseif(year%400!
=0)leap=0;
elseleap=1;
if(leap)
/*************found**************/
printf("%disaleapyear\n",year)
else
printf("%disnotaleapyear\n",year);
}
9、以下给定程序FILL1.C的功能是:
实现2个浮点数的四则运算,如输入:
4.0*5.2,则打印出:
4.0*5.2=20.8
程序有两个空
(1)、
(2)需要补充完整。
请将程序中的____
(1)____和____
(2)____删除后,在相应的位置填入正确答案并调试直到得到正确结果为止。
注意:
不要随意改动程序,不得增行或删行,也不得更改程序的结构!
/*FILL1.C*/
#include
voidmain()
{
floatd1,d2;
charop;
printf(“输入d1opd2”);
scanf(“%f%c%f”,&d1,&op,&d2);
switch(op)
{
floattemp;
case‘+’:
/**************found************/
temp=
(1);
printf(“%f%c%f=%f”,d1,op,d2,temp);
break;
case‘-’:
temp=d1-d2;
printf(“%f%c%f=%f”,d1,op,d2,temp);
break;
case‘*’:
temp=d1*d2;
/************found************/
(2);
break;
case‘/’:
temp=d1/d2;
printf(“%f%c%f=%f”,d1,op,d2,temp);
break;
default:
printf(“错误!
\n”);
}
}
实验5循环控制
(一)
一、实验目的
1、掌握用while语句,do-while语句和for语句实现循环的方法。
2、掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。
3、进一步学习调试程序的技巧。
二、实验内容和步骤
编程序并上机调试运行。
1、以下程序PROG1.C的功能是:
求[1,100]之间所有不能被3整除的整数之和。
部分源程序存在文件PROG1.C中,请将运算结果存入变量s中。
请在/*******begin********/与/********end*********/之间填入你编写的若干语句,存盘并运行,直到得出正确结果。
请勿改动其它位置的任何内容。
/*PROG1.C*/
#include"stdio.h"
#include"math.h"
#include"conio.h"
#include"stdlib.h"
voidmain()
{inti,s;
/***********begin***********/
/************end************/
printf("s=%d\n",s);
}
2、以下给定程序FILL1.C的功能是:
从键盘输入整数,分别计算所输入的正整数的和、负整数的和。
当输入0时,结束输入并输出计算结果。
程序有两个空
(1)、
(2)需要补充完整。
请将程序中的____
(1)____和____
(2)____删除后,在相应的位置填入正确答案并调试直到得到正确结果为止。
注意:
不要随意改动程序,不得增行或删行,也不得更改程序的结构!
/*FILL1.C*/
#include
voidmain()
{intx,sum1,sum2;
/**************found************/
(1)
scanf("%d",&x);
while(x!
=0)
{/**************found************/
(2)
sum1+=x;
else
sum2+=x;
scanf("%d",&x);
}
printf("sumof>0is%d\n",sum1);
printf("sumof<0is%d\n",sum2);
}
3、输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其它字符的个数。
4、以下给定程序MODI1.C的功能是:
猴子吃桃问题。
猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃一个;第二天早上将剩下的桃子吃掉一半又多吃一个,到第10天的早上,只剩下一个桃子,求第一天共摘了多少桃子。
程序中有两处错误,错误都在提示行:
/***********found***********/的下面一行。
请改正程序中的错误,使它能得出正确的结果。
注意:
程序中的其它地方不要随意改动,不得增行或删行,也不得更改程序的结构!
voidmain()
{inti,j,x,p;
x=1;
/************found************/
j=10;
while(j>=1)
{p=(x+1)*2;
/************found************/
p=x;
j--;
}
printf("totalis%d\n",p);
}
在得到正确结果后,修改题目,改为猴子每天吃了前一天剩下的一半后,再吃两个。
请修改程序,并运行,检查结果是否正确。
5、将实验四第7题的菜单程序改成可循环选择,直到输入0结束程序。
6、以下给定程序MODI1.C的功能,是打印一个如下的九九乘法表的一部分:
1*1=1
2*1=22*2=4
3*1=33*2=63*3=9
4*1=44*2=84*3=124*4=16
程序中有两处错误,错误都在提示行:
/***********found***********/的下面一行。
请改正程序中的错误,使它能得出正确的结果。
注意:
程序中的其它地方请不要随意改动,不得增行或删行,也不得更改程序的结构!
/*MODI1.C*/
#include
voidmain()
{inti,j,k;
for(i=1;i<=4;i++)
/************found************/
{for(j=1;j<=4;j++)
printf("%3d*%3d=%3d",i,j,i*j);
/************found************/
printf("n");
}
}
7、以下给定程序MODI1.C的功能是:
已知一元以下的硬币中有一角、二角、五角三种面值,列举出将一元兑换成硬币的所有兑换方法。
程序中有两处错误,错误都在提示行:
/***********found***********/的下面一行。
程序中变量i,j,k分别存放五角、二角、一角面值硬币的数量。
请改正程序中的错误,使它能得出正确的结果。
注意:
程序中的其它地方请不要随意改动,不得增行或删行,也不得更改程序的结构!
/*MODI1.C*/
#include
#include
voidmain()
{floati,j,k;
/************found************/
for(i=1;i<=2;i++)
for(j=0;j<=5;j++)
for(k=0;k<=10;k++)
/************found************/
{if(i*0.5+j*0.2+k*0.1==1)
printf("%.0f,%.0f,%.0f\n",i,j,k);
}
}
8、以下给定程序MODI1.C的功能是:
女儿今年12岁,父亲比女儿大30岁,计算出父亲在多少年后比女儿年龄
大一倍,那时他们的年龄各是多少?
程序中有两处错误,错误都在提示行:
/***********found***********/的下面一行。
请改正程序中的错误,使它能得出正确的结果。
注意:
程序中的其它地方请不要随意改动,不得增行或删行,也不得更改程序的结构!
#include
voidmain()
{intfather,daughter;
inti;
daughter=12;
/************found************/
father=30;
/************found************/