//A 时间转换
#include
int main()
{ int t;
while(scanf("%d",&t)!=EOF)
{ int H,M,S;
H=t/3600;
M=(t-3600*H)/60;
S=t-3600*H-60*M;
printf("%d:%d:%d\n",H,M,S);
}
return 0;
}
B题目比较简单,主要考察了对字符串数组的理解,长度的计算等知识点。
//B 奇数序列
#include
int main()
{
long long int n,i,x,sum=0;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
scanf("%d",&x);
sum+=x;
}
if(sum==0)
{
printf("NO\n");
}
if(n%2!=0&&sum%2!=0)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
sum=0;
}
return 0;
}
C题目比较简单,主要考察了字符串数组的逆序输出问题。
//C 加密算法
#include
#include
int main()
{
char arr[1000];
while(scanf("%s",arr)!=EOF)
{ int n;
n=strlen(arr);
char brr[n-1];
int i,j;
for(i=0,j=n-1;i
D题目难度中等,涉及问题包括26个字母的数组创建、每行代码涉及“空格——字母——空格”三次循环、对于26字母数组的调用。其中创建字母数组采用ASCII码值的方法构建。
//D 字母图形
#include
int main()
{ char arr[26];
for(int A=0;A<26;A++)
{
arr[A]='a'+A;
}
int T;
while(scanf("%d",&T)!=EOF)
{
int j;//j是第几行
for(j=1;j<=T;j++)
{
for(int k1=1;k1<=T-j;k1++)//k1是第几个字符位,打印前半部分空格
{
printf(" ");
}
for(int k2=j-1;k2>=0;k2--)//打印前半部分字母(含中间值)
{
printf("%c",arr[k2]);
}
for(int k4=1;k4<=j-1;k4++)//打印后半部分字母(不含中间值)
{
printf("%c",arr[k4]);
}
printf("\n");
}
}
return 0;
}
E题目比较简单。我称其为不进位加法,采用枚举的形式定义出每一位的数字,两组数a、b中对应位相加,大于10就减去10,取剩余的部分存入c中。当然,本题也可以构建arr、brr、crr三个数组,对应a、b、c,配合一组for循环使代码更简洁。
//E 按位相加
#include
int main()
{int a,b;
int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10;
int b1,b2,b3,b4,b5,b6,b7,b8,b9,b10;
int c1,c2,c3,c4,c5,c6,c7,c8,c9,c10;
while(scanf("%d %d",&a,&b)!=EOF)
{
int i,j;
a1=a%10;
a2=(a/10)%10;
a3=(a/100)%10;
a4=(a/1000)%10;
a5=(a/10000)%10;
a6=(a/100000)%10;
a7=(a/1000000)%10;
a8=(a/10000000)%10;
a9=(a/100000000)%10;
a10=(a/1000000000)%10;
b1=b%10;
b2=(b/10)%10;
b3=(b/100)%10;
b4=(b/1000)%10;
b5=(b/10000)%10;
b6=(b/100000)%10;
b7=(b/1000000)%10;
b8=(b/10000000)%10;
b9=(b/100000000)%10;
b10=(b/1000000000)%10;
c10=a10+b10;
if(c10>=10)
{c10=c10-10;}
c9=a9+b9;
if(c9>=10)
{c9=c9-10;}
c8=a8+b8;
if(c8>=10)
{c8=c8-10;}
c7=a7+b7;
if(c7>=10)
{c7=c7-10;}
c6=a6+b6;
if(c6>=10)
{c6=c6-10;}
c5=a5+b5;
if(c5>=10)
{c5=c5-10;}
c4=a4+b4;
if(c4>=10)
{c4=c4-10;}
c3=a3+b3;
if(c3>=10)
{c3=c3-10;}
c2=a2+b2;
if(c2>=10)
{c2=c2-10;}
c1=a1+b1;
if(c1>=10)
{c1=c1-10;}
int arr[10]={c10,c9,c8,c7,c6,c5,c4,c3,c2,c1};
if(c1==0&&c2==0&&c3==0&&c4==0&&c5==0&&c6==0&&c7==0&&c8==0&&c9==0&&c10==0)
{
printf("0");
}
for(i=0;i<10;i++)
{
if(arr[i]==0)
continue;
else
{
for(j=i;j<10;j++)
{
printf("%d",arr[j]);
}
goto correct;
}
}
correct:
printf("\n");
}
return 0;
}
F题目难度较大,属于选拔性质的题目。主要考察了结构体语句的掌握,在熟悉此知识点的基础上,解题将容易许多。
//F 考试测评
#include
struct{
int x;
int ma;
int en;
int cc;
int sum;
}st[1001];
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
int i,j;
for(i=0;ist[j].sum){
st[1000]=st[i];st[i]=st[j];st[j]=st[1000];
}
if(st[i].sum==st[j].sum){
if(st[i].x
好啦,以上就是中南大学21级期末C语言oj机试补考的全部内容,答案以及知识点分析,如果大家觉得有用,就请点个赞吧。