中国地质大学江城学院
C语言课程设计报告
姓 名 彭大为
班 级 25101104
学 号 2510110424
指导教师 周斌
20##年6月19 日
目 录
一、实验题一………………………………………………………………………..2
二、实验题二…………………….………………………………………………….2
三、实验题三……………………….……………………………………………….3
四、实验题四…………………………..……………………………………………5
五、实验题五…………………………..……………………………………………6
六、实验题六…….………………………………………………………………….8
一、实验题一
1.求一元二次方程ax2+bx+c=0的根。要求根据输入的a,b,c的值,计算方程的根(只考虑2个不同实根、1个实根和复根的情况)
解题思路:该方程有以下几种可能:1.b*b-4*a*c=0,有2个相等实根。 2.b*b-4*a*c>0,有2个不等实根。3.b*b-4*a*c<0,有2个共轭复根。应以p+qi和p-qi形式输出复根。
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,disc,x1,x2,realpart,imagpart;
scanf("%lf,%lf,%lf",&a,&b,&c);
printf("The equation");
{
disc=b*b-4*a*c;
if(disc==0)
printf("has two equal roots:%8.4f\n",-b/(2*a));
else
if(disc>0)
{
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("has distinct real roots:%8.4fand%8.4f\n",x1,x2);
}
else
{
realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);
printf("has complex roots:\n");
printf("%8.4f+%8.4fi\n",realpart,imagpart);
printf("%8.4f-%8.4fi\n",realpart,imagpart);
}
}
return 0;
}
运行结果:
二、实验题二
2.输入杨辉三角形(要求输入10行)。
解题思路:观察杨辉三角的规律,并运用for循环的方式对每一行进行输出数据,最后输出结果。
#include<stdio.h>
int main()
{int a[10][10];
int i, j;
for(i=0;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<10;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
printf("%d",a[i][j]);
printf("\n");
}
return 0;
}
运行结果:
三、实验题三 3.已知银行整存整取存款不同期限的月息利率分别为:
0.63% 期限一年
0.66% 期限二年
月息利率= 0.69% 期限三年
0.75% 期限五年
0.84% 期限八年
要求输入存钱的本金和期限,求到期时能从银行的到的利息与本金的合计。
解题思路:因为根据期限的不同,月息利率不同,故用if语句判断不同期限,又期限有5种情况,故用if嵌套语句。
#include<stdio.h>
main()
{
int i,t;
float y;
scanf("%d %f",&i,&y);
if(i==1)
{
for(t=0;t<12*i;t++)
y=y+y*0.0063;
}
else if(i==2)
{
for(t=0;t<12*i;t++)
y=y+0.0066*y;
}
else if(i==3)
{
for(t=0;t<12*i;t++)
y=0.0069*y+y;
}
else if(i==5)
{
for(t=0;t<12*i;t++)
y=0.0075*y+y;
}
else
{
for(t=0;t<12*i;t++)
y=0.0084*y+y;
}
printf("y=%f\n",y);
}
运行结果:
四、实验题四
4.输入n值,打印边长为n的空心正六边形,其边由“*”组成。
解题思路:先画出一个平面空心正六边形,每行包括n个字符,其中有的是空白字符,有的是’*‘字符,记住每行中’*‘的位置,用for循环和if语句确定其位置后输出。
#include <stdio.h>
print(int n,char c)
{
int i;
for(i=0;i<n;i++)
{
printf("%c",c);
}
}
main()
{
int n ;
printf("请输入六边形的边长n:");
scanf("%d",&n);
int i;
int j=n;
for(i=n-1;i>=0;i--)
{
print(i,' ');
if(i==n-1)
{
print(n,'*');
printf("\n");
}
else
{
printf("*");
print(j,' ');
j=j+2;
printf("*\n");
}
}
j=j-4;
for(i=1;i<n;i++)
{
print(i,' ');
if(i==n-1)
{
print(n,'*');
printf("\n");
}
else
{
printf("*");}
print(j,' ');
j=j-2;
printf("*\n");
}
}
return 0;
}
运行结果:
五、实验题五
5.编写一个函数,这个函数同时求出n个学生成绩的最高分、最低分、平均分以及超过平均分的人数,并编写主函数完成:
(1) 输入n各学生的成绩;
(2) 调用此函数进行统计;
输出统计结果(要求使用动态分配)。 (* 专科生不作要求)
解题思路:先输出一组学生成绩,并对数据进行分析,然后设一个函数用于比较数据和求平均值,最后函数调用并输出。
#include <stdio.h>
#include <malloc.h>
void fun(float *score,int len,float *max,float *min,float *avg,int *num)
{
int i;
*avg=0,*min=score[0],*max=score[0],*num=0;
for(i=0;i<len;i++)
{
*avg+=score[i];
if(score[i]>*max)
*max=score[i];
if(score[i]<*min)
*min=score[i];
}
*avg/=len;
for(i=0;i<len;i++)
if(score[i]>*avg)
++*num;
}
main()
{
int len,num,i;
float *score,max,min,avg;
puts("输入学生人数:");
scanf("%d",&len);
score=(float*)malloc(len*sizeof(float));
puts("输入学生成绩");
for(i=0;i<len;i++)
scanf("%f",score+i);
fun(score,len,&max,&min,&avg,&num);
printf("最高分:%f 最低分:%f 平均分:%f 平均分以上人数:%d",max,min,avg,num);
free(score);
}
运行结果:
六、实验题六
6.约瑟夫问题:8个人站成一圈,他们的序号从1到8,从序号为1的人开始报数,报到5的人离开,请问如此进行下去,最后得到的出圈序列是怎样的?编程实现。
解题思路:根据约瑟夫问题的规律,可以输出一个数组,然后用for循环对需离开的数进行确定并输出并依此循环直到最后一个数输出。
#include <iostream>
using namespace std;
int main()
{
int i,j=0,k=0,n=8;
int a[8] = {1,2,3,4,5,6,7,8};
int b[8] = {0};
for(i = 0;i<8;++i)
{
k=k+4;
k=k%n;
b[i]=a[k];
for(j=k+1;j<n;++j)
{
a[j-1]=a[j];
}
--n;
}
for(k=0;k<8;++k)
cout<<b[k]<<" ";
return 0;
}
运行结果:
第二篇:C语言实验报告5模板
宁夏师范学院数学与计算机科学学院
《高级语言程序设计》实验报告
实验序号:5 实验项目名称:循环结构及其测试