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

总言

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

文章目录

  • 总言
  • BC7 缩短二进制
  • BC9 printf的返回值
  • BC28 大小写转换
  • BC35 判断字母
  • BC26 计算三角形的周长和面积
  • BC27 计算球体的体积
  • BC39 争夺前五名
  • BC40 竞选社长
  • BC45 最高分数

  

BC7 缩短二进制

  链接
【ONE·C || 牛客C语言基础训练部分题集】_第1张图片

#include 
int main()
{
	printf("0%#0o 0X%0X", 1234, 1234);
    printf("%#0o %#0X", 1234, 1234);
    return 0;
}

  需要掌握修饰符"#"的使用
  【ONE·C || 牛客C语言基础训练部分题集】_第2张图片

  
  

BC9 printf的返回值

【ONE·C || 牛客C语言基础训练部分题集】_第3张图片

#include
 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返回值,返回的是对应字符的总数。

【ONE·C || 牛客C语言基础训练部分题集】_第4张图片

  
  

BC28 大小写转换

  链接
【ONE·C || 牛客C语言基础训练部分题集】_第5张图片

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

  1、需要掌握上述两种大小写转换的方法。
  2、需要注意多组输入中getchar读取换行符的细节:getchar并非直接读取键盘输入的字符,其与键盘输入中间还有一个输入缓冲区。多组输入时敲入了“\n”,其也在输入缓冲区中。
【ONE·C || 牛客C语言基础训练部分题集】_第6张图片
  ‘\n’的ASCLL码值为
  【ONE·C || 牛客C语言基础训练部分题集】_第7张图片

  
  

BC35 判断字母

【ONE·C || 牛客C语言基础训练部分题集】_第8张图片

 #include
 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
#include//isalpha函数头文件
int main(void)
{
    int ch;
    while (~(ch = getchar()))
    {
        if (isalpha(ch))//关于判断是否为字母该函数的学习与应用
            printf("YES\n");
        else printf("NO\n");
        getchar();
    }
    return 0;
}

【ONE·C || 牛客C语言基础训练部分题集】_第9张图片

  
  
#BC25 计算体重指数
题源
【ONE·C || 牛客C语言基础训练部分题集】_第10张图片

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

#include
#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
#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 计算三角形的周长和面积

【ONE·C || 牛客C语言基础训练部分题集】_第11张图片

#include
#include
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;
}

【ONE·C || 牛客C语言基础训练部分题集】_第12张图片
  
  

BC27 计算球体的体积

【ONE·C || 牛客C语言基础训练部分题集】_第13张图片

#include
#include
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 争夺前五名

【ONE·C || 牛客C语言基础训练部分题集】_第14张图片
【ONE·C || 牛客C语言基础训练部分题集】_第15张图片

#include
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
#include

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;
}

【ONE·C || 牛客C语言基础训练部分题集】_第16张图片
【ONE·C || 牛客C语言基础训练部分题集】_第17张图片
  
  

BC40 竞选社长

【ONE·C || 牛客C语言基础训练部分题集】_第18张图片
  单字符获取版:

#include 
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 
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
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 最高分数

【ONE·C || 牛客C语言基础训练部分题集】_第19张图片

#include
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
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;
}

你可能感兴趣的:(【ONE·训练集】,c语言)