牛客编程初学者入门训练题。
关于一些零碎暂时未掌握的知识点以及编程思路汇总,会慢慢补充。
#include
int main()
{
printf("0%#0o 0X%0X", 1234, 1234);
printf("%#0o %#0X", 1234, 1234);
return 0;
}
#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返回值,返回的是对应字符的总数。
#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”,其也在输入缓冲区中。
‘\n’的ASCLL码值为
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}