C语言试题答案
程序员文章站
2022-06-07 14:58:42
...
原创试题答案
第一题答案(满分40分):
#include<stdio.h>
int main()
{
int n,temp;
printf("请输入所需排序数的总个数:\n");
scanf("%d",&n);
int a[n];
printf("请输入需要比较大小的正整数:\n");//人性化
/*把需要排序的数字存入数组****************8分***********/
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
/*冒泡排序或者选择排序按从小到大或从大到小排序*/
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(int j=0;j<n;j++)
{
printf("%d ",a[j]);
}
printf("\n"); /********************8分***************/
/*输出结果*/
if(n%2==0)//
{
for(int i=0;i<n;i+=2)
{
printf("%d ",a[i]);
}
for(int i=n-1;i>0;i-=2)
{
printf("%d ",a[i]);
}
}
else
{
for(int i=0;i<n;i+=2)
{
printf("%d ",a[i]);
}
for(int i=n-2;i>0;i-=2)
{
printf("%d ",a[i]);
}
}/*************************20分*******/
return 0;
}/****4分***/
这里是我编的参考代码,并且增加了一些细节
算法:
1.输入任意长度的一组正整数。8分
2.利用冒泡排序或者选择排序排列大小。8分
3.按照格式输出答案。20分
4.代码可读性强。4分
测试多组数据答案完全正确,但算法不一样可以满分。
第二题答案(满分24分):
#include<stdio.h>
int main()
{
int n,temp;
printf("输入方阵维数:\n");
scanf("%d",&n);
int a[n][n];
printf("输入方阵:\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
//行排列
//对二维数字进行排序,学长才疏学浅,只会这样子,复杂度较高O(n^3)。
for(int i=0;i<n;i++)
{
for(int j=0;j<n-1;j++)
{
for(int k=j+1;k<n;k++)
{
temp=a[i][j];
a[i][j]=a[i][k];
a[i][k]=temp;
}
}
}/*****************12分***********************/
printf("******************************\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
//转置
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(j>i)
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
}
}
printf("************************************\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}/******************12分********************/
}
算法:
1、对输入的n维方阵进行行排列(从小到大排列)。12分
2、对方阵进行转置。12分
补充:格式需要严格一致,不一致,但结果正确扣一分。
第三题答案(满分36分):
#include<stdio.h>
int main()
{
int n;
printf("请输入需要进行运算的数的个数;\n");
scanf("%d",&n);
int a[n+2][n+2];
//初始化数组
for(int i=0;i<n+2;i++)
{
for(int j=0;j<n+2;j++)
{
a[i][j]=0;
}
}/**********************************8分*****************/
for(int i=0;i<n;i++)
{
scanf("%d",&a[0][i]);
}
for(int i=0;i<n;i++)
{
printf("%d ",a[0][i]);
}
printf("\n");
printf("************************************\n");
//求和
int k=0,j=0;
for(int i=1;i<n;i++)
{
k=0;j=0;
while(1)//注意跳出循环条件
{
if(a[i-1][j]!=0&&a[i-1][j+1]!=0)
{
a[i][k]=a[i-1][j]+a[i-1][j+1];
printf("%d ",a[i][k]);
j=j+2;k++;
}
else if(a[i-1][j]!=0&&a[i-1][j+1]==0)
{
a[i][k]=a[i-1][j];
printf("%d ",a[i][k]);
break;
}
else if(a[i-1][j]==0&&a[i-1][j+1]==0)
{
printf("\n");
break;
}
}/*******************************15分**********************/
printf("\n");
//终止条件
if(a[i][0]!=0&&a[i][1]==0&&a[i][2]==0)
{
break;
}/******************3分*******************/
}
}
1.算法实例:
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 |
1 | 3 | 7 | 5 | ||
2 | 10 | 5 | |||
3 | 15 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
1 | 3 | 7 | 11 | 15 | 19 | |||||
2 | 10 | 26 | 19 | |||||||
3 | 36 | 19 | ||||||||
4 | 55 |
2.实例:
####################END######################
学弟学妹们不难吧0.0