C语言题目+答案大全.docx
《C语言题目+答案大全.docx》由会员分享,可在线阅读,更多相关《C语言题目+答案大全.docx(13页珍藏版)》请在冰豆网上搜索。
![C语言题目+答案大全.docx](https://file1.bdocx.com/fileroot1/2023-4/20/d7a78106-f3e6-45b3-9f6f-e4bfd27fe855/d7a78106-f3e6-45b3-9f6f-e4bfd27fe8551.gif)
C语言题目+答案大全
2009
题目如下:
编写成绩排序,按学生(学生的总数可变)的序号输入学生的成绩,按照分数由高到低的顺序输出学生的名次、该名次的分数、相同名次的人数和学号(1000+学号);同名次的学号输出在同一行中,一行最多输出5个学号。
# include
# include
struct Student
{
int num;
float score;
};
int main(void)
{
int len,no,count,cnt;
struct Student * pArr;
int i, j,k;
struct Student t;
//动态的构造一维数组
printf("请输入学生的个数:
\n");
printf("len = ");
scanf("%d", &len);
pArr = (struct Student *)malloc(len * sizeof(struct Student));
//输入
for (i=0; i{
printf("请输入序号为%d的学生成绩:
\n", i+1);
pArr[i].num=i+1;
printf("score = ");
scanf("%f", &pArr[i].score);
}
//按学生成绩排序 冒泡算法
for (i=0; i{
for (j=0; j{
if (pArr[j].score < pArr[j+1].score)
{
t = pArr[j];
pArr[j] = pArr[j+1];
pArr[j+1] = t;
}
}
}
printf("\n\n学生的成绩排序为:
\n");
//输出
no=1;
cnt=1;
for(i=0;i {
if(pArr[i].score > pArr[i+1].score)
{
printf("\n%d %f %d",no,pArr[i].score,cnt);
for(j=0;j printf(" 1000%d ",pArr[i-j].num);
if(cnt%5==0)
printf("\n");
cnt=1;
no++;
}
else
{
cnt++;
}
}
printf("\n");
return 0;
}
2010
题目是根据公式编写计算三角形面积的程序,首先要判断三条边长能否构成三角形,不能构成,需要重新输入,其次将三条边长按着从大到小排序输出,
第三,利用函数计算三角形的面积,最后,所有的输入、输出,都在一个函数中实现。
#include
#include
floatff(floata,floatb,floatc);//对函数ff的声明
floatarea(floata,floatb,floatc);//对函数area的声明
main()
{
floata,b,c;
printf("请输入三个数,用逗号隔开:
\n");
scanf("%f,%f,%f",&a,&b,&c);
while((a+b>c&&a+c>b&&b+c>a)!
=1)//判断是否可以构成三角形
{
printf("不能构成三角形,请重新输入:
\n");
scanf("%f,%f,%f",&a,&b,&c);
}
printf("可以构成三角形,边长从大到小为:
\n");
ff(a,b,c);//调用函数ff,使abc按从大到小排序输出
area(a,b,c);//调用求面积函数
}
//******判断三个数,并从大到小输出***********
floatff(floatx,floaty,floatz)//三个数大小排序函数
{
floatt;
if(x{
t=x;
x=y;
y=t;
}
if(x{
t=x;
x=z;
z=t;
}
if(y{
t=y;
y=z;
z=t;
}
printf("%f,%f,%f\n",x,y,z);
}
//*********求三角形的面积函数***********
floatarea(floata,floatb,floatc)//求面积函数
{
floats,area;
s=1.0/2*(a+b+c);//s=(a+b+c)/2
area=sqrt(s*(s-a)*(s-b)*(s-c));//三角形面积公式:
area=√s(s-a)(s-b)(s-c);
printf("三角形面积=%f\n",area);
}
2011
求一个二元方程的根,输入方程的系数A,B,C;
(1)
采用子函数判定方程根的个数;
(2)
若方程有根时,求出相应的根;
(3)
若方程无根时,则继续改变方程的系数,直到有解输出为止;
#include
#include
voidmain()
{
floata,b,c,x1,x2;
intd;
intsort(floata,floatb,floatc);//子函数的声明
printf("请输入三个实数abc:
\n");
scanf("%f%f%f",&a,&b,&c);
d=sort(a,b,c);
while(d==0)
{
printf("方程无实根,请重新输入a,b,c:
\n");
scanf("%f%f%f",&a,&b,&c);
d=sort(a,b,c);//调用子函数
}
if(d==1)
{
printf("方程有两个相等的根\n");
x1=(-b+sqrt(b*b-4*a*c))/2*a;
printf("x1=x2=%f\n",x1);
}
if(d==2)
{
printf("方程有两个不同的根\n");
x1=(-b+sqrt(b*b-4*a*c))/2*a;
x2=(-b-sqrt(b*b-4*a*c))/2*a;
printf("x1=%fx2=%f\n",x1,x2);
}
}
intsort(floata,floatb,floatc)//子函数的定义
{
intflag;
if(b*b-4*a*c>0)
flag=2;
elseif(b*b-4*a*c==0)
flag=1;
elseflag=0;
return(flag);
}
2012
编写一程序,找出并显示100-200间的所有素数,要求如下:
程序要有主函数和用户自定义函数;
自定义函数用于判断一个数是否是素数,是返回1,不是返回0;
主函数完成自定义函数的调用,素数个数的统计,素数个数和所有素数的输出显示
2014
编写一程序,找出并显示100-200间的所有素数,要求如下:
程序要有主函数和用户自定义函数;自定义函数用于判断一个数是否是素数,是返回1,不是返回0;
主函数完成自定义函数的调用,素数个数的统计,素数个数和所有素数的输出显示。
#include
intmain()
{
inti,k=0;
intfun(intn);//素数函数声明
for(i=100;i<=200;i++)//循环判断
{
if(fun(i))
{
printf("%d\n",i);
k++;
}
}
printf("共有%d个素数\n",k);
}
intfun(intn)//判断n是否是素数函数
{inti;
for(i=2;iif(n%i==0)return0;
return1;
}
2015
//在函数形参表中,允许不给出形参数组的长度,或用一个变量来表示数组元素
的个数。
//例如,可以写为:
voidnzp(inta[])
//或写为voidnzp(inta[],intn)
//其中形参数组a没有给出长度,而由n值动态地表示数组的长度。
n的值由主调函数的实参进行传送。
#include
#defineb10//定义一个数作为数组的下标
main()
{
inti;
floata[b];
printf("请输入10个实型数:
\n");
for(i=0;i
{
scanf("%f",&a[i]);//输入十个数保存到数组中
}
floatcal_mean(floata[],intn);//求十个实型数的平均值
floatcal_variance(floata[],intn);//求实型数的方差
printf("平均值=%.2f\n",cal_mean(a,b));//调用函数直接输出十个实型数的平均值和方差
printf("方差=%.2f\n",cal_variance(a,b));
}
floatcal_mean(floata[],intn)//均值函数的定义
{
inti;
floatsum=0,average=0;
for(i=0;i{
sum=sum+a[i];
}
average=sum/n;
returnaverage;
}
floatcal_variance(floata[],intn)//方差函数的定义
{
floatsum=0,average=0,sum2=0;
floatvariance;
inti;
for(i=0;i{
sum=sum+a[i];
}
average=sum/n;
for(i=0;i{
a[i]=a[i]-average;//每个元素与均值之差
sum2=sum2+a[i]*a[i];//方差和的结果保存在sum2变量中
}
variance=sum2/n;//求出方差
returnvariance;//返回方差
}
矩阵
(1).矩阵A的两对角线元素之和;
(2).矩阵A的元素中负数的平均值;
(3).矩阵A的转置;
(4).从键盘输入另一个4*4的矩阵B,计算矩阵A和B的乘积。
(30分钟,满分40分)
以上四个问题要求用函数编写.
#include
voidf1(floata[][4]);//矩阵A的两对角线元素之和
voidf2(floata[][4]);//矩阵A的元素中负数的平均值;
voidf3(floata[][4]);//矩阵A的转置;
voidf4(floata[][4]);//从键盘输入另一个4*4的矩阵B,计算矩阵A和B的乘积。
voidmain()
{
inti,j;
floata[4][4];
printf("请输入二维数组(4行4列):
\n");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%f",&a[i][j]);
f1(a);
f2(a);
f3(a);//矩阵A的转置
f3(a);//为了得到A矩阵(矩阵A的转置的转置)
f4(a);
}
voidf1(floata[][4])
{
inti,j;
floatsum1=0.0;
floatsum2=0;
i=0;
for(i=0;i<4;i++)
sum1+=a[i][i];
for(i=0;i<4;i++)
sum2+=a[i][3-i];
printf("%f%f\n",sum1,sum2);
}
voidf2(floata[][4])
{
inti,j,n=0;
floatsum=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
if(a[i][j]<0)
{
n++;
sum+=a[i][j];
}
}
if(!
n)
printf("平均值为0!
\n");
else
printf("平均值为%f!
\n",sum/n);
}
voidf3(floata[][4])
{
inti,j;
floatt;
for(i=0;i<4;i++)
for(j=0;j<=i;j++)
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
voidf4(floata[][4])
{
inti,j,l,m;
floatb[4][4],c[4][4];
printf("请输入又一个二维数组(4行4列):
\n");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%f",&b[i][j]);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
c[i][j]=0;
for(l=0;l<4;l++)
c[i][j]+=a[i][l]*b[l][j];//矩阵Am*s*Bs*n=Cm*n
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%4f",c[i][j]);
printf("\n");
}
}