【ONE·C || 牛客C语言基础训练部分题集】

总言

  牛客编程初学者入门训练题。
  关于一些零碎暂时未掌握的知识点以及编程思路汇总,会慢慢补充。
  


  

BC7 缩短二进制

  链接
在这里插入图片描述

#include <stdio.h>
int main()
{
	printf("0%#0o 0X%0X", 1234, 1234);
    printf("%#0o %#0X", 1234, 1234);
    return 0;
}

  需要掌握修饰符"#"的使用
  这里是引用

  
  

BC9 printf的返回值

在这里插入图片描述

#include<stdio.h>
 int main()
 {
 	int n=printf("Hello world!");
 	printf("\n%d\n", n);
 	return 0;
 }
 //printf返回值,返回的是对应字符的总数,此处不能在求返回值时加\n,
 //\n会被计入返回值中
int main()
{
    
    printf("\n%d\n", printf("Hello world!"));
    //思考问题:为什么“hello world”先打印?

    //重要测试!!!
    //printf("%d\n", printf("%d", printf("%d", 43)));///4321

    return 0;
}

  关于上述代码结果显示:注意理解重要测试中的内容。
  printf返回值,返回的是对应字符的总数。

在这里插入图片描述

  
  

BC28 大小写转换

  链接
在这里插入图片描述

#include<stdio.h>
int main(void)
{
    char ch;
    while(~(ch=getchar()))//多组输入、getchar的使用方法
    {
        printf("%c\n",ch-'A'+'a');
        getchar();
    }
    return 0;
}
#include<stdio.h>
#include<ctype.h>
int main(void)
{
    char c;
    while (~scanf("%c", &c))
    {
        printf("%c\n", tolower(c));
        getchar( );
    }
    return 0;
}

  1、需要掌握上述两种大小写转换的方法。
  2、需要注意多组输入中getchar读取换行符的细节:getchar并非直接读取键盘输入的字符,其与键盘输入中间还有一个输入缓冲区。多组输入时敲入了“\n”,其也在输入缓冲区中。
在这里插入图片描述
  ‘\n’的ASCLL码值为
  在这里插入图片描述

  
  

BC35 判断字母

在这里插入图片描述

 #include<stdio.h>
 int main(void)
 {
     int ch;
     while(~(ch=getchar()))
     {
         if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
             printf("YES\n");
         else printf("NO\n");
         getchar();//注意此处getchar存在的意义
 	return 0;
 }
#include<stdio.h>
#include<ctype.h>//isalpha函数头文件
int main(void)
{
    int ch;
    while (~(ch = getchar()))
    {
        if (isalpha(ch))//关于判断是否为字母该函数的学习与应用
            printf("YES\n");
        else printf("NO\n");
        getchar();
    }
    return 0;
}

在这里插入图片描述

  
  
#BC25 计算体重指数
题源
在这里插入图片描述

  需要掌握平方的数学公式
  这里是引用

#include<stdio.h>
#incldue<math.h>
int main(void)
{
    int weight=0,hight=0;
    scanf("%d %d",&weight,&hight);
    float bmi=weight/pow((float)hight/100,2);
    printf("%.2f\n",bmi);
    return 0;
}
#include<stdio.h>
#define sq(x) ((x)*(x))
int main(void)
{
    int m,h;
    scanf("%d %d",&m,&h);
    float bmi=m/sq((float)h/100);//此处尤其要注意身高的单位,且要注意整数除法
    printf("%.2f\n",bmi);
	return 0;
}

  
  

BC26 计算三角形的周长和面积

在这里插入图片描述

#include<stdio.h>
#include<math.h>
int main(void)
{
    double a,b,c;
    scanf("%lf %lf %lf",&a,&b,&c);
    
    double circumference,area;
    circumference=a+b+c;//周长
    double p=circumference/2;//半周长
    area=p*(p-a)*(p-b)*(p-c);//面积平方
    
    printf("circumference=%.2lf area=%.2lf\n",circumference,sqrt(area));
    return 0;
}

在这里插入图片描述
  
  

BC27 计算球体的体积

在这里插入图片描述

#include<stdio.h>
#include<math.h>
int main(void)
{
    double r;//float、double精度问题
    scanf("%lf",&r);
    
    double Π=3.1415926;
    double v=(4/3.0) * Π * pow(r,3.0);//此处需要注意浮点数除法
    
    printf("%.3lf\n",v);
    
    return 0;
}

  
  

BC39 争夺前五名

在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
int main(void)
{
	int arr[50] = { 0 };
	int n = 0;
	int i = 0;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
		scanf("%d", &arr[i]);

	//冒泡排序
	for (i = 0; i < n - 1; i++)//总轮数
	{
		int j = 0;
		for (j = 0; j < n - 1 - i; j++)//单次排序
		{
			if (arr[j] < arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
	//输出前五人
	for (i = 0; i < 5; i++)
		printf("%d ", arr[i]);
	return 0;
}

  
  下述为qsort函数的使用。衍生学习:仿照qsort函数下的冒泡排序改进版——可线性排序不同类型的数据。

#include<stdio.h>
#include<stdlib.h>

int cmp_score(void * e1,void *e2)
{
    return (*(int *)e2-*(int *)e1);
}
int main(void)
{
	int arr[50] = { 0 };
	int n = 0;
	int i = 0;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
		scanf("%d", &arr[i]);

    //qsort函数使用
    qsort(arr,n,sizeof(arr[1]),cmp_score);
    
    
	//输出前五人
	for (i = 0; i < 5; i++)
		printf("%d ", arr[i]);
	return 0;
}

在这里插入图片描述
在这里插入图片描述
  
  

BC40 竞选社长

在这里插入图片描述
  单字符获取版:

#include <stdio.h>
int main()
{
    char arr[100] = {0};
    int ch = 0;
    int flag = 0;
    //如果getchar获取了
    while(((ch=getchar()) != '0') && ch != EOF)
   {
        if(ch == 'A')
       {
            flag++;
       }
        else if(ch == 'B')
       {
            flag--;
       }
   }
    if(flag>0)
        printf("A");
    else if(flag<0)
        printf("B");
    else
        printf("E");
    return 0;
}

  多字符获取版:注意gets函数的使用

#include <stdio.h>
int main()
{
    char arr[100] = {0};
    gets(arr);
    int i = 0;
    int count_a = 0;
    int count_b = 0;
    while(arr[i] != '0')
   {
        if(arr[i] == 'A')
       {
            count_a ++;
       }
        else if(arr[i] == 'B')
       {
            count_b ++;
       }
        i++;
   }
    if(count_a > count_b)
        printf("A");
    else if(count_a < count_b)
        printf("B");
    else
        printf("E");
    return 0;
}

  返回输出改动:注意三目运算符连续使用的方式

#include<stdio.h>
int main(void)
{
    char arr[50];
    scanf("%s", arr);
    char* p = arr;
    int a = 0, b = 0, i = 0;
    while (*(p+i))
    {
        if (*(p + i) == 'A')
            a++;
        else if (*(p + i) == 'B')
            b++;
        i++;
    }
    printf("%c\n", a > b ? 'A' : (a < b ? 'B' : 'E'));
    return 0;
}

  
  

BC45 最高分数

在这里插入图片描述

#include<stdio.h>
int main(void)
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    int max=(a>b?a:b);
    printf("%d",max>c?max:c);
    
	return 0;
}

  可以学习一下这种用数组形式表示,最大最小值初始条件取反差值的写法。这种大小值判断取反差值的使用条件是题设数字有界。比如,此题中成绩不会小于零,因此假设最大值max=0,然后依次更新数据。

#include<stdio.h>
int main(void)
{
    int score[3];
    int i,max=0;
    for(i=0;i<3;i++)
    {
        scanf("%d",&score[i]);
        max=( max < score[i] ? score[i] : max);
    }
    printf("%d\n",max);
	return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值