中南大学21级期末C语言oj机试补考题代码

 A题目比较简单,主要涉及了数据的输入与输出。

//A 时间转换
#include<stdio.h>
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 <stdio.h>
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<stdio.h>
#include<string.h>
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<n;i++,j--)
            {
            brr[j]=arr[i];
            }
        for(j=0;j<n;j++)
            {
                printf("%c",brr[j]);
            }
        printf("\n");
    }
    return 0;
}

 D题目难度中等,涉及问题包括26个字母的数组创建、每行代码涉及“空格——字母——空格”三次循环、对于26字母数组的调用。其中创建字母数组采用ASCII码值的方法构建。

//D 字母图形
#include<stdio.h>
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<stdio.h>
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<stdio.h>
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;i<n;i++){
			scanf("%d %d %d %d",&st[i].x,&st[i].ma,&st[i].en,&st[i].cc);
			st[i].sum=st[i].cc+st[i].en+st[i].ma;
		}
		for(i=0;i<n;i++){
			for(j=i+1;j<n;j++){
				if(st[i].sum>st[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<st[j].x){
						st[1000]=st[i];st[i]=st[j];st[j]=st[1000];
					}
				}
			}
		}
		printf("BEST\n");
		i=n-1;
		do{
			printf("%d %d %d %d %d\n",st[i].x,st[i].sum,st[i].ma,st[i].en,st[i].cc);
			i--;
		}while(st[i].sum==st[n-1].sum);
		printf("WORST\n");
		i=0;
		do{
			printf("%d %d %d %d %d\n",st[i].x,st[i].sum,st[i].ma,st[i].en,st[i].cc);
			i++;
		}while(st[i].sum==st[0].sum);
		putchar('\n');
	}
	return 0;
}

 好啦,以上就是中南大学21级期末C语言oj机试补考的全部内容,答案以及知识点分析,如果大家觉得有用,就请点个赞吧。

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值