太原理工大学13级c语言实验指导书参考答案.docx
《太原理工大学13级c语言实验指导书参考答案.docx》由会员分享,可在线阅读,更多相关《太原理工大学13级c语言实验指导书参考答案.docx(56页珍藏版)》请在冰豆网上搜索。
![太原理工大学13级c语言实验指导书参考答案.docx](https://file1.bdocx.com/fileroot1/2023-7/17/746a666b-d42a-40dd-8886-acac9308f2fd/746a666b-d42a-40dd-8886-acac9308f2fd1.gif)
太原理工大学13级c语言实验指导书参考答案
理工大学13级c语言实验指导书参考答案
实验一顺序
1-3.温度*/编写程序,输入华氏温度(F),按下列公式计算并输出对应的摄氏温度(C)。
C=5/9(F–32)
#include
voidmain()
{
floatc,f;
scanf("%f",&f);
c=5.0/9.0*(f-32);
printf("%5.2f\n",c);
}
/*1-4.三角形面积*/编写程序,从键盘输入一个三角形的三条边长a、b、c(要求任何两条边的边长之和均大于第三条边的边长),求该三角形的面积。
求三角形的面积公式是:
其中:
#include"stdio.h"
#include"math.h"
voidmain()
{
floata,b,c,s,area;
scanf("%f,%f,%f",&a,&b,&c);
s=1.0/2.0*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%f\n",area);
}
/*1-5两数合并*/编写程序,将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的个位和百位上。
例如,当a=45,b=12,运行结果为:
c=5241。
#include
voidmain()
{
inta,b,c;
printf("Inputa,b:
");
scanf("%d,%d",&a,&b);
c=(b/10*1);
c+=(a/10*10);
c+=(b%10*100);
c+=(a%10*1000);
printf("Theresultis:
%d\n",c);
}
实验二选择
必做题
2.1编一程序,使用单分支的if语句形式,求a,b,c三个整数的中间值。
例如:
a、b、c的值分别为3、4、5,则输出4。
#include
voidmain()
{
inta,b,c,t;
printf("Inputa,b,c:
");
scanf("%d,%d,%d",&a,&b,&c);
if(a>b){t=a;a=b;b=t;}
if(a>c){t=a;a=c;c=t;}
if(b>c){t=b;b=c;c=t;}
printf("中间数=%d\n",b);
}
2.2有一函数
x (x<1)
y= 2x–1 (1≤x<10)
3x–11 (x≥10)
用 scanf函数输入x的值(分别取x<1、1~10、≥10三种情况),求y值。
#include
voidmain()
{
intx,y;
printf("Inputx:
");
scanf("%d",&x);
if(x<1)y=x;
elseif(x<10)y=2*x-1;
elsey=3*x-11;
printf("x=%d,y=%d\n",x,y);
}
2.3编写程序,输入一位学生的生日(年:
y0、月:
m0、日:
d0)数据,再输入当前的日期(年:
y1、月:
m1、日:
d1)数据,计算并输出该学生的实足年龄。
#include
voidmain()
{
inty0,m0,d0,y1,m1,d1,nl;
printf("Input生日(年,月,日):
");
scanf("%d,%d,%d",&y0,&m0,&d0);
printf("Input当前日期(年,月,日):
");
scanf("%d,%d,%d",&y1,&m1,&d1);
if(m1>m0||m1==m0&&d1>=d0)nl=y1-y0;
elsenl=y1-y0-1;
printf("年龄=%d\n",nl);
}
2.4编写程序,定义四个字符变量c1,c2,c3和c4,分别用getchar()函数任意输入四个字母,分别输出其中的最大值和最小值。
#include
voidmain()
{
charc1,c2,c3,c4,max,min;
printf("Input四个字符:
");
c1=getchar();c2=getchar();c3=getchar();c4=getchar();
max=min=c1;
if(c2>max)max=c2;
if(c3>max)max=c3;
if(c4>max)max=c4;
min=c2c2:
min;
min=c3c3:
min;
min=c4c4:
min;
printf("max=%c,min=%c\n",max,min);
}
2.5设整型变量a的值为正数,请将以下C源程序中的if语句形式改写成switch语句形式。
#include
main()
{ inta;
printf(”a=”);
scanf(”%d”,&a);
if(a<30) m=1;
elseif(a<40)m=2;
elseif(a<50)m=3;
elseif(a<60)m=4;
elsem=6;
printf(”m=%d\n”,m);
}
#include
voidmain()
{
inta,t,m;
printf("Inputa=");
scanf("%d",&a);
if(a>0)
{t=a/10;
switch(t)
{case0:
case1:
case2:
m=1;break;
case3:
m=2;break;
case4:
m=3;break;
case5:
m=4;break;
default:
m=6;}
printf("m=%d\n",m);
}
else
printf("a为非正数\n");
}
实验三 循环
必做题
3.1编写程序,计算并输出正整数n的所有因子(1和n除外)之和。
#include
voidmain()
{
intn,i,s=0,m=0;
printf("Inputn:
");
scanf("%d",&n);
for(i=2;i {if(n%i==0)
{printf("%5d",i);s+=i;m++;}
if(m%10==0)printf("\n");}
printf("\ns=%d\n",s);
}
3.2编写程序,利用以下所示的简单迭代方法求方程:
cos(x)-x=0的一个实根。
迭代步骤如下:
(1)取x1初值为0.0;
(2)x0=x1,把x1的值赋给x0;
(3)x1=cos(x0),求出一个新的x1;
(4)若x0-x1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2);
(5)所求x1就是方程cos(x)-x=0的一个实根。
#include
#include
voidmain()
{
doublex0,x1=0.0;
do
{x0=x1;
x1=cos(x0);
}
while(fabs(x1-x0)>=1e-6);
printf("\nx1=%.2f\n",x1);
}
3.3编写程序,输入一行字符,分别统计出其中的大写字母、小写字母、空格和数字的个数。
提示:
用以下循环格式处理输入的一行字符。
while((c=getchar())!
=’\n’) /*若输入的c不是回车符时继续*/
循环体
或者:
c=getchar();
while(c!
=’\n’) /*若c不是回车符时继续*/
{
循环体
c=getchar();
}
#include
#include
voidmain()
{
charc;
intn1,n2,n3,n4;
n1=n2=n3=n4=0;
printf("请输入一行字符,以换行结束:
");
while((c=getchar())!
='\n')
if(isupper(c))n1++;
elseif(islower(c))n2++;
elseif(isdigit(c))n3++;
elseif(c=='')n4++;
printf("\n大写=:
%d,小写:
%d,数字:
%d,空格:
%d,\n",n1,n2,n3,n4);
}
3.4编写程序,在屏幕上输出辉三角形。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 1
… … … … …
#include"stdio.h"
#defineN20
voidmain()
{inti,j,array[N][N]={0},n;
printf("请输入n行:
\n");
scanf("%d",&n);
for(i=0;i {array[i][0]=1;array[i][i]=1;}
for(i=2;i for(j=1;j
array[i][j]=array[i-1][j-1]+array[i-1][j];
printf("辉三角形:
\n");
for(i=0;i {for(j=0;j<=i;j++)
printf("%4d",array[i][j]);
printf("\n");}
printf("\n");
}
选做题
3.1
#include
#include
voidmain()
{
floatx,,t,sum=1.0,i=1.0,m=1.0;
ints=1;
printf("请输入x:
");
scanf("%f",&x);
t=x;
while(fabs(t)>1e-6)
{sum+=t;
s=-s;
i++;
m*=i;
t=s*1.0*pow(x,i)/m;
}
printf("\nx=%f,f(x)=%f\n",x,sum);
}
3.2
#include
#include
main()
{
inti,m,n,k=0,j;
doubles;
printf("请输入正整数m,n(m");
scanf("%d,%d",&m,&n);
for(i=m+1;i {s=sqrt(i);
for(j=2;j<=s;j++)
if(i%j==0)break;
if(j>s){printf("%6d",i);k++;}
if(k%8==0)printf("\n");
}
printf("\n");
}
3.3
#include
voidmain()
{
inti,m=2,j,n;
doubles=0.0,k=1.0,t;
printf("请输入正整数n:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{t=m/k;
s+=t;
j=m;
m=m+k;
k=j;
}
printf("\n和为:
%lf\n",s);
}
3.4
#include"stdio.h"
voidmain()
{inti;
doubleh=100.0,h1,s=100.0;
for(i=2;i<=10;i++)
{h1=h/2;
h=h1;
s+=2*h;
}
printf("s=%lf,h=%lf\n",s,h);
}
实验四数组
必做题
4.1编写程序,将3~n之间的所有非素数存入数组array中,然后输出该数组元素。
例如:
若n=20,则输出4,6,8,9,10,12,14,15,16,18,20。
#include
#include
#defineN20
voidmain()
{inti,array[N],j,m,k=0;
for(i=3;i<=N;i++)
{m=sqrt(i);
for(j=2;j<=m;j++)
if(i%j==0){array[k++]=i;break;}
}
for(i=0;i<=k-1;i++)
printf("%d",array[i]);
printf("\n");
}
4.2编写程序,将字符数组str中的字符串逆置后输出。
例如:
若str字符串为“ThisisaCprograme.”,则输出为“.emargorpCasisihT”。
#include
#include
#defineN80
voidmain()
{inti,k;
charstr[N],t;
gets(str);
k=strlen(str);
for(i=0;i {t=str[i];str[i]=str[k-1-i];str[k-1-i]=t;}
printf("\n%s\n",str);
}
4.3从键盘输入10个整数,选择一种排序算法,将这些数按从大到小的顺序排列输出。
#include
#defineN10
voidmain()
{inti,j,array[N],m,t;
printf("请输入10个整数:
");
for(i=0;i scanf("%d",&array[i]);
for(i=0;i {m=i;
for(j=i+1;j if(array[j]>array[m])m=j;
if(m!
=i)
{t=array[m];array[m]=array[i];array[i]=t;}
}
for(i=0;i printf("%d",array[i]);
printf("\n");
}
4.4计算5×5矩阵的主对角线元素和此对角线元素之和。
若有下列矩阵,则输出的值应该是130。
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
#include
#defineN5
voidmain()
{inti,j,array[N][N],s=0;
printf("请输入5×5个整数:
");
for(i=0;i for(j=0;j scanf("%d",&array[i][j]);
for(i=0;i for(j=0;j {if(i==j||i+j==N-1)s+=array[i][j];
if(i==j&&i+j==N-1)s+=array[i][j];}
for(i=0;i {for(j=0;j printf("%4d",array[i][j]);
printf("\n");}
printf("s=%d\n",s);
}
选做题
4.1
#include"stdio.h"
#include"string.h"
#defineM5
voidmain()
{inti,j,a[M],k,x;
charstr[M][80],t[M];
printf("请输入5个字符串:
");
for(i=0;i {gets(str[i]);a[i]=strlen(str[i]);}
for(i=0;i {k=i;
for(j=i+1;j if(a[j]>a[k])k=j;
if(k!
=i){strcpy(t,str[i]);strcpy(str[i],str[k]);strcpy(str[k],t);
x=a[k];a[k]=a[i];a[i]=x;}
}
for(i=0;i puts(str[i]);
printf("\n");
}
4.2
#include"stdio.h"
#include"string.h"
#defineM80
voidmain()
{inti,j=0,k=0,a;
chars[M],t[M],w[M];
printf("请输入1个字符串:
\n");
gets(s);a=strlen(s);
for(i=0;i if(!
(s[i]>='0'&&s[i]<='9'))t[j++]=s[i];
elsew[k++]=s[i];
t[j]='\0';w[k]='\0';
strcat(t,w);strcpy(s,t);
puts(s);
printf("\n");
}
4.3
#include"stdio.h"
#defineN6
voidmain()
{inti,array[N],t,k;
printf("请输入N个整数:
\n");
for(i=0;i scanf("%d",&array[i]);
k=N%2?
N/2+1:
N/2;
for(i=0;i {t=array[i];array[i]=array[k+i];array[k+i]=t;}
for(i=0;i printf("%d",array[i]);
printf("\n");
}
4.4
#include"stdio.h"
#defineN4
voidmain()
{inti,j,array[N][N],t;
printf("请输入4×4个整数:
\n");
for(i=0;i for(j=0;j scanf("%d",&array[i][j]);
printf("移动前矩阵:
\n");
for(i=0;i {for(j=0;j printf("%4d",array[i][j]);
printf("\n");}
printf("\n");
for(i=0;i for(j=0;j<2;j++)
if(j==0){t=array[i][j];array[i][j]=array[i][2-j];array[i][2-j]=t;}
else{t=array[i][j];array[i][j]=array[i][4-j];array[i][4-j]=t;}
printf("移动后矩阵:
\n");
for(i=0;i {for(j=0;j printf("%4d",array[i][j]);
printf("\n");}
printf("\n");
}
实验五 函数
必做题
5.1编写一个判断素数的函数intIsprime(intm)。
在主函数中输入一个整数n,然后调用Isprime,如果n是素数,则输出:
nisprime!
否则输出:
nisn’tprime!
#include
voidmain()
{
intn;
printf("请输入正整数n:
\n");
scanf("%d",&n);
if(Isprime(n))printf("%disprime!
\n",n);
elseprintf("%disn'tprime!
\n",n);
printf("\n");
}
intIsprime(intm)
{intj;
for(j=2;j<=m/2;j++)
if(m%j==0)break;
if(j>m/2)return1;
elsereturn0;}
5.2编写两个函数,分别求两个整数的最小公倍数和最大公约数并返回给主函数,两个整数由主函数输入。
#include
#include
intLowest_common_multiple(intm,intn,inth);
intGreatest_common_divisor(intm,intn);
voidmain()
{
intm,n,t,p,k;
prin