《C语言程序设计》实验指导书答案要点.docx
《《C语言程序设计》实验指导书答案要点.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》实验指导书答案要点.docx(63页珍藏版)》请在冰豆网上搜索。
![《C语言程序设计》实验指导书答案要点.docx](https://file1.bdocx.com/fileroot1/2023-1/27/9ba38b4c-e635-4292-94f5-9c3549e391ec/9ba38b4c-e635-4292-94f5-9c3549e391ec1.gif)
《C语言程序设计》实验指导书答案要点
实验一(第1章实验)
实验目的:
1.掌握运行C语言程序的全过程。
2.熟悉编译环境VisualC++或者DevC++或者TurboC2.0//3.0。
3.初步熟悉C语言程序的语法规定。
4.了解简单函数的使用方法。
实验内容:
1.编程且上机运行:
求3个整数的和。
2.编程且上机运行:
求2个数的和、差、积和商。
3.编程且上机运行:
输入3个数,求最大值。
4.编程且上机运行:
输入圆的半径,求圆的面积和周长。
5.在屏幕上输出:
“helloworld!
”
6.输入并编辑本章中给出的C程序例子,在自己用的环境中形成一个C语言源程序文件;对这个源程序进行加工,得到对应的可执行程序,看一看它的效果。
实验结果:
1.
#include
#include
main()
{inti,j,k;
printf("inputi,j,k:
");//输入整数数据,以半角逗号间隔,比如:
1,2,3
scanf("%d,%d,%d",&i,&j,&k);//不能缺少地址符号“&”
printf("%d+%d+%d=%d\n",i,j,k,i+j+k);
system("Pause");
}
2.
#include
#include
main()
{inti,j;
printf("inputi,j(not0):
");//输入整数数据,以半角逗号间隔,j不为0,因为做除数
scanf("%d,%d,%d",&i,&j);//不能缺少地址符号“&”
printf("%d+%d=%d\n",i,j,i+j);
printf("%d-%d=%d\n",i,j,i-j);
printf("%d*%d=%d\n",i,j,i*j);
printf("%d/%d=%d\n",i,j,i/j);
system("Pause");
}
3.#include
#include
main()
{inti,j,k;
printf("inputi,j,k:
");//输入整数数据,以半角逗号间隔
scanf("%d,%d,%d",&i,&j,&k);//不能缺少地址符号“&”
if(i>j)
{
if(j>k)
printf("max:
%d",i);
elseif(i>k)
printf("max:
%d",i);
else
printf("max:
%d",k);
}
else
{
if(jprintf("max:
%d",k);
else
printf("max:
%d",j);
}
system("Pause");
}
4.#include
#include
#definepi3.14
main()
{floatr;
printf("inputr:
");
scanf("%f",&r);//不能缺少地址符号“&”
printf("circleareais:
%6.2f",pi*r*r);
system("Pause");
}
5.
#include
#include
#definepi3.14
main()
{
printf("helloworld!
");
system("Pause");
}
6.略
实验二(第3章实验一)
实验目的:
理解C语言的类型系统。
实验内容:
写程序测试数据-2在类型char,int,unsignedint,longint,unsignedlongint中存储情况。
实验过程:
实验结果:
参见各种类型的存储实现描述。
#include
#include
#include
main()
{charc='-2';//1
inti=-2;//4
unsignedintui=-2;//4
longintli=-2;//4
unsignedlongintuli=-2;//4
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(unsignedint));
printf("%d\n",sizeof(longint));
printf("%d\n",sizeof(unsignedlongint));
printf("%c,%d,%u,%ld,%lu",i,i,i,i,i);
system("Pause");
}
实验二(第3章实验二)
实验目的:
了解混合类型计算中类型的转换规则。
实验内容:
写程序测试多种类型数据一起运算时类型的转换及表达式结果的类型。
注意unsignedint和int数据运算时类型转换的方向。
实验过程:
/*
*类型转换问题
*试问下面两个表达式等价吗?
*/
#include
#include
intmain(){
unsignedintui,uj;
ui=1;
uj=2;
if(uiprintf("\n%u<%uistrue!
\n",ui,uj);
else
printf("\n%u<%uisfalse!
\n",ui,uj);
if(ui-uj<0)
printf("\n%u-%u<0istrue!
\n",ui,uj);
else
printf("\n%u-%u<0isfalse!
\n",ui,uj);
system("pause");
return0;
}
实验结果:
不等价。
结果如下:
1<2istrue!
1-2<0isfalse!
原因是1-2=-1,-1在unsignedint中的表示为
31
23
15
7
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
实验二(第3章实验三)
实验目的:
理解数据溢出现象。
实验内容:
写程序测试数据溢出,注意分别在16环境和32环境中测试。
实验过程:
实验结果:
参见【例3.3】。
实验三(第3章实验四)
实验目的:
char的符号问题。
实验内容:
写程序测试你所用的C语言编译器char符号问题的处理方案。
实验过程:
/*
*这个程序验证编译器对char的解决方案,是有符号,还是无符号
*/
#include
#include
intmain()
{
charc=-1;
intk;
k=c;/*k=?
*/
if(k==255)
printf("Thecharisunsignedchar.\n");
else
printf("Thecharissignedchar.\n");
printf("k=%d,%x",k,k);
system("pause");
return0;
}
实验结果:
TC2.0和DevC++中char是有符号的
实验三(第3章实验五)
实验目的:
自增和自减运算符。
实验内容:
写程序测试++、--运算符。
实验过程:
main()
{
inti=3;
printf("i=%d\n",i++);
printf("i=%d\n",i);
printf("i=%d\n",++i);
printf("i=%d\n",i);
}
实验结果:
i=3
i=4
i=5
i=5
实验三(第3章实验六)
实验目的:
理解输入输出函数。
1.掌握输入输出函数的使用方法。
2.掌握格式字符的使用方法。
3.掌握不同数制间使用格式字符转换数据的方法。
实验内容:
用getchar、putchar、printf、scanf函数实现各种数据的输入和输出。
实验过程:
实验结果:
例如:
//用getchar、putchar、printf、scanf函数实现各种数据的输入和输出。
#include
#include
main()
{
printf("inputacharc:
");
charc=getchar();
putchar(c);
inti;
printf("\ninputainteger:
");
scanf("%d",&i);
printf("i=%d\n",i);
printf("c=%c\n",c);
printf("typechar'ssizeis%d\n",sizeof(char));//1
printf("typeint'ssizeis%d\n",sizeof(int));//4
system("Pause");
}
实验四(第4章实验)
实验目的:
1.学会使用逻辑运算符和逻辑表达式;
2.熟练掌握if语句和switch语句。
实验内容:
1.从键盘输入三个整数a,b,c,输出其中最大的数。
2.求方程ax2+bx+c=0的根,其中a,b,c由键盘输入。
有以下几种情况:
①a=0,不是二次方程;
②b2-4ac=0,有两个相等的实根;
③b2-4ac>0,有两个不等的实根;
④b2-4ac<0,有两个共轭复根。
3.
有一函数X(X<1)
Y=2X-1(1≤X<10)
3X-11(X>≥10)
写一程序,输入整数X,输出Y的值。
4.给一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。
90分以上为‘A’,80-89分为‘B’,70-79分为‘C’,60-69分为‘D’,60分以下为‘E’。
5.企业发放的奖金根据利润提成。
利润(B)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分可提成7.5%;200000<B≤400000时,高于20万元的部分按5%提成;400000<B≤600000时,高于40万元的部分按3%提成;600000<B≤1000000时,高于60万元的部分按1.5%提成;B>1000000时,高于100万元的部分按1%提成。
从键盘输入当月利润B,求应发放奖金总额。
6.从键盘任意输入一个不多于五位的正整数,
①求它是几位数;
②分别输出每一个数字;
③按逆序输出各位数字,例如原数为135,应输出531。
实验过程:
实验结果:
1.见第三版第五章作业5.4
2.见第三版教材108页
3.见第三版第五章作业5.5
4.见第三版第五章作业5.6
5.见第三版第五章作业5.8
6.见第三版第五章作业5.7
实验五(第5章实验一)
实验目的:
1.掌握循环的概念,学习用循环的思想来思考实际问题。
2.掌握单循环的使用方法。
实验内容:
1.计算
,输出其结果。
2.使用循环结构输出下列图形。
3.计算下列公式的和,要求最后一项小于10-5。
。
提示:
通项公式为:
。
4.输入30个字符,分别统计其中数字、字母及字符的个数。
5.求出Fibonacci(斐波那契)数列的前20项。
Fibonacci(斐波那契)数列的规律是:
前2项为0和1,其余各项为该项前2项之和,即0,1,1,2,3,5,8,13……。
实验过程:
实验结果:
1.
#include
#include
main()
{
ints=0;//试一下s不赋初值
inti;//循环变量
for(i=1;i<=100;i++)
{
s+=i;
}
printf("1+2+...+100=%d\n",s);
system("Pause");
}
2.
#include
#include
main()
{
inti,j,k;
for(i=0;i<=9;i++)
{
for(j=0;j<=9-i;j++)
printf("");//画空格
for(k=0;k<2*i+1;k++)
printf("%d",i);//输出2i+1个数字
printf("\n");
}
system("Pause");
}
3.
#include
#include
#include
main()
{
inti=0;
floatsum=0.0,t;
intf=1;
t=1.0/(i*i+1);
while(t>=pow(10,-5))
{
sum=sum+f*t;
f=-f;//符号
i++;
t=1.0/(i*i+1);//项
}
printf("sum=%9.6f\n",sum);
system("Pause");
}
4.
#include
#include
main()
{
intnum=0;
intalph=0;
intch=0;
inti;
charc;
for(i=1;i<=10;i++)
{
c=getchar();
if(c>='0'&&c<='9')
num++;
elseif(c>='a'&&c<='z'||c>='A'&&c<='Z')
alph++;
else
ch++;
}
printf("numberhas%d,alphhas%d,charhas%d",num,alph,ch);
system("Pause");
}
5.
#include
#include
main()
{
longfib[20]={0,1};
inti;
for(i=2;i<20;i++)
{
fib[i]=fib[i-1]+fib[i-2];
}
for(i=0;i<20;i++)
{
printf("F%d==%d\n",i,fib[i]);
}
system("Pause");
}
实验五(第5章实验二)
实验目的:
1.进一步学习循环的使用方法,用循环解决复杂问题。
2.掌握多重循环的使用方法及其他。
实验内容:
1.分别使用双循环和单循环结构计算
,并输出其结果。
2.编制程序,输出如下所示的九九乘法表。
3.输出下列所示菱形字符图形。
4.古代数学家在编写《算经》时,提出了一个不定方程问题,即著名的“百鸡问题”:
鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。
百钱买百鸡,问鸡翁、母、雏各几何?
5.求s=1+(1+2)+(1+2+3)+……,并输出其结果。
实验过程:
实验结果:
1.参见第三版第6章作业6.4
2.
#include
#include
main()
{
inti,j,k;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf("%d*%d=%d",j,i,i*j);
printf("\n");
}
system("Pause");
}
3.
#include
#include
main()
{
inti,j,k;
for(i=0;i<=9;i++)
{
for(j=0;j<=8-i;j++)
printf("");
for(k=0;k<=2*i;k++)
printf("*");
printf("\n");
}
for(i=0;i<=9;i++)
{
for(j=0;j<=i;j++)
printf("");
for(k=0;k<=16-2*i;k++)
printf("*");
printf("\n");
}
system("Pause");
}
4.
#include
#include
main()
{
inti,j,k;
for(i=0;i<=14;i+=4)
{j=(100-7*i)/4;
k=100-i-j;
printf("%d,%d,%d\n",i,j,k);
}
system("Pause");
}
输出结果:
0,25,75
4,18,78
8,11,81
12,4,84
5.
#include
#include
main()
{
inti,j,t,s=0;
for(i=1;i<=5;i++)
{
for(t=1;t<=i;t++)
s=s+t;
}
printf("s=%d",s);
system("Pause");
}
实验六(第6章实验一)
实验目的:
1.掌握数组的定义方法。
2.掌握一维数组的使用方法。
实验内容:
1.用随机函数产生15个100以内的随机整数存入一维数组,然后分三行输出,每行5个数。
2.求出n个学生一门课程中的最高成绩和最低成绩及高于平均成绩的人数。
3.使用数组,求出下列数列的前20项。
1,1,2,4,7,13,……
4.将一个一维数组反序放置。
例如:
a=(67,89,76,98,66),反序放置后,a=(66,98,76,89,67)
5.有10个学生一门课程成绩,使用选择排序法将成绩从高向低排序。
实验过程:
实验结果:
1.//用随机函数产生15个100以内的随机整数存入一维数组,然后分三行输出,每行5个数。
#include
#include
#include
intmain(void)
{
inti;
time_tt;
inta[15];
srand((unsigned)time(&t));
printf("Tenrandomnumbersfrom0to99\n\n");
for(i=1;i<=15;i++)
{
a[i]=rand()%100;
printf("%d,",a[i]);
if(i%5==0)
printf("\n");
}
system("Pause");
return0;
}
2.求出n个学生一门课程中的最高成绩和最低成绩及高于平均成绩的人数。
#include
#include
#definen10//注意,宏定义define后不带分号结束符。
main()
{
inta[n]={60,100,70,67,90,99,89,40,77,56};
intavg=0,num=0,sum=0,max,min;
inti;
for(i=0;i<10;i++)
{
sum+=a[i];
}
avg=sum/n;
min=a[0];
max=a[0];
for(i=0;i<10;i++)
{
if(a[i]min=a[i];
if(a[i]>max)
max=a[i];
if(a[i]>avg)
num++;
}
printf("average=%d\n",avg);
printf("max=%d,min=%d,numberofmorethanavg=%d\n",max,min,num);
system("Pause");
}
3.//方法1:
使用数组,求出下列数列的前20项。
1,1,2,4,7,13,……
#include
#include
main()
{
longa[20]={1,1};
longsum=0;
inti;
for(i=3;i<20;i++)
{
a[i]=a[i-1]+a[i-2]+a[i-3];
}
for(i=0;i<20;i++)
{
sum+=a[i];
}
printf("1+1+2+4+7+13+......+=%d\n",sum);
system("Pause");
}
//方法2:
使用数组,求出下列数列的前20项。
1,1,2,4,7,13,……
#include
#include
main()
{
longa[20]={1,1};
longsum=2;
inti;
for(i=3;i<20;i++)
{
a[i]=a[i-1]+a[i-2]+a[i-3];
sum+=a[i]
}
printf("1+1+2+4+7+13+......+=%d\n",sum);
system("Pause");
}
4.
#include
#include
#definen6
main()
{
inti,temp;
inta[n]={0,1,2,3,4,5};
for(i=0;i<=(n-1)/2;i++)
{
temp=a[i];
a[i]=a[n-1-i];
a[n-1-i]=temp;
}
for(i=0;iprintf("%d",a[i]);
system("Pause");
}
5.//有10个学生一门课程成绩,使用选择排序法将成绩从高向低排序。
#include
#include
intm