C语言每日一练——day_2(快速上手C语言)
引言
针对初学者,每日练习几个题,快速上手C语言。第二天。(会连续更新)
采用在线OJ的形式
什么是在线OJ?
在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用来测试参赛程序的在线系统,也可以用于平时的练习。
详细内容可以看一下这篇博客:
关于C/C++语言的初学者在哪刷题,怎么刷题-CSDN博客https://blog.csdn.net/2401_88433210/article/details/146056171?spm=1011.2415.3001.10575&sharefrom=mp_manage_link
每个题保障你都会有一定的收获
1.小飞机
直接点进去做题
小飞机_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/5cd9598f28f74521805d2069ce4a108a?tpId=107&&tqId=33287&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include<stdio.h>
int main()
{
printf(" **\n");
printf(" **\n");
printf("************\n");
printf("************\n");
printf(" * *\n");
printf(" * *\n");
return 0;
}
解析:
换行使用转义字符‘\n’。
严格按照合适去打印就行了
注意*后边的空格可以不打印
2.十六进制转十进制
直接点进去做题
十六进制转十进制_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/33e148570d5c4e728116e2f861638c9c?tpId=107&&tqId=33289&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include <stdio.h>
int main()
{
printf("%15d", 0xABCDEF);
return 0;
}
解析:
本题考查的就是%d的格式控制域宽指定。
可以看这篇博客里面的printf的输出格式部分
速通C语言——03(printf()和scanf()的详细解析和计算机单位的速通)-CSDN博客文章浏览阅读598次,点赞15次,收藏13次。C语言中printf和scanf函数的详解和计算机单位的认识https://blog.csdn.net/2401_88433210/article/details/146109043?spm=1011.2415.3001.10575&sharefrom=mp_manage_link
3.printf函数的返回值
点进去直接做题
printf的返回值_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/a19ef1d8e55c4cc786f11cbf6b2fde61?tpId=107&&tqId=33290&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking
代码1:
int main()
{
int ret = printf("Hello world!"); //接收printf的返回值
printf("\n");
printf("%d\n", ret);
return 0;
}
代码2:
#include <stdio.h>
int main() {
printf("\n%d", printf("Hello world!"));
return 0;
}
解析:
printf函数是有返回值的,返回printf函数成功打印了几个字符。
4.学生基本信息的输入输出
点进去直接做题
学生基本信息输入输出_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/58b6a69b4bf943b49d2cd3c15770b9fd?tpId=107&&tqId=33292&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking
#include <stdio.h>
#include <math.h>
int main()
{
int id=0;
float c=0.0;
float math=0.0;
float english=0.0;
scanf("%d;%f,%f,%f",&id,&c,&math,&english);
printf("The each subject score of No. %d is %.2f, %.2f, %.2f.",id,roundf(c * 100) / 100,roundf(math * 100) / 100,roundf(english * 100) / 100);
return 0;
}
解析:
注意:小数在内存中可能不能精确保存
1. float类型对应的浮点型数据为%f;double类型对应的浮点型数据为%lf
2. 控制输出小数的精确度用%.mf, m为小数点后的位数;
eg:保留小数点后两位:%.2f
3. 不会对小数进行四四舍五入,可以希望你详细看下这篇博客。
C/C++中对小数进行四舍五入-CSDN博客文章浏览阅读199次,点赞2次,收藏3次。C/C++中对小数进行四舍五入https://blog.csdn.net/2401_88433210/article/details/146139815?spm=1011.2415.3001.10575&sharefrom=mp_manage_link
5.判断字母
点进去直接做题
判断字母_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/44d2d63103664913bc243d3836b4f341?tpId=107&&tqId=33316&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码
//代码一:
#include<stdio.h>
//A-Z == 65-90
//a-z == 97-122
int main() {
char ar;
scanf("%c", &ar);
if (ar >= 65 && ar <= 90 || ar >= 97 && ar <= 122)
printf("YES\n");
else
printf("NO\n");
return 0;
}
//代码2:用库函数
#include<stdio.h>
#include<ctype.h>
int main() {
char ar;
scanf("%c", &ar);
if (isalpha(ar))
printf("YES\n");
else
printf("NO\n");
return 0;
}
解析:
1.知道大写字母和小写字母对应的ASCII值
A-Z == 65-90
a-z == 97-122
2.学习函数isalpha函数(判断字符是不是字母)可以仔细看一下下面这篇博客:
C/C++中对字符处理的常用函数-CSDN博客文章浏览阅读337次,点赞11次,收藏14次。C语言中的 ctype.h 头文件提供了一系列字符分类和转换函数,用于高效处理字符相关操作。https://blog.csdn.net/2401_88433210/article/details/146140744?spm=1011.2415.3001.10575&sharefrom=mp_manage_link
6.字符金字塔
点进去直接做题
字符圣诞树_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/0fae60c3b5c64699b7c0f031c2187dde?tpId=107&&tqId=33293&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:(找规律题,希望大家先自己找找规律)
#include<stdio.h>
int main()
{
char a;
scanf("%c", &a);//输入一个任意字符
int i = 1;//记行数用的
int j, g; //j是输出“空格”用的,g是输出“字符+空格”用的
for (i = 1; i < 6; i++)//关于行数i在前5行执行的循环(包括第5行)
{
for (j = 5 - i; j > 0; j--)//输出第n行的前5-n个空格(n<=5)
{
printf(" ");
}
for (g = 0; g < i; g++)//输出第n行的所有空格后的字符
{
printf("%c ", a);//注意所输出的%c后有一个空格
}
printf("\n");//第n行输出结束,执行换行操作
}//运行到这里就输出了n行的字符金字塔图形
return 0;
}
解析:
注意:上面代码g循环的作用
这个题的代码看不懂的一定要用纸笔模拟一下,可以锻炼大家的代码能力
本题的难点就是精确的控制空格的个数和字符的个数。
7.ASCII码
点进去直接做题
ASCII码_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/4280d330fe314e8f98cd5c593e3e9190?tpId=107&&tqId=33294&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include <stdio.h>
int main()
{
char arr[] = {73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33};
//求数组长度
int length = sizeof(arr);
int i;
for(i = 0;i < length;i++)
{
printf("%c", arr[i]);
}
return 0;
}
解析:
非常简单的一道打印出ASCII码值对应的字符的题
ASCII 码表 - cppreference.comhttps://zh.cppreference.com/w/cpp/language/ascii
8. 出生日期输入输出
点进去直接做题
出生日期输入输出_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/4a4a9dd1edb6453ba4a0432319200743?tpId=107&&tqId=33295&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%4d%2d%2d",&a,&b,&c);
printf("year=%d\nmonth=%02d\ndate=%02d\n",a,b,c);//这里合起来写了,也可以分开写
}
解析:
通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据;通过 printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0。
代码中:%4d就是读取4位整数
%02d意思是输出不够2位时,左边拿0填充
9.2的n次方计算
点进去直接做题
2的n次方计算_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/35a1e8b18658411388bc1672439de1d9?tpId=107&&tqId=33310&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking
参考代码:
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("%d",1 << n);
//注意<<(左移操作符的使用,左移一位有乘2的效果)
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
int n;
scanf("%d",&n);
int ret = pow(2, n);//用pow可以做的进行2的n次方的运算
printf("%d",ret);
return 0;
}
解析:
注意 <<(左移操作符的使用,左移一位有乘2的效果)
>> (右移操作符的使用,右移一位有除2的效果)
10.按照格式输入并交换输出
点进去直接做题
按照格式输入并交换输出_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/95eb723a3e854376a7eb6d116cc7d875?tpId=107&&tqId=33296&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
//代码一:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("a=%d,b=%d",&b,&a);
printf("a=%d,b=%d",a,b);
return 0 ;
}
//代码二:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("a=%d,b=%d",&a,&b);
c = a;
a = b;
b = c;
printf("a=%d,b=%d",a,b);
return 0 ;
}
解析:
非常简单的一道题,自己看代码去
11.字符转ASCII码
点进去直接做题
字符转ASCII码_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/93f4d05a02d9468db424ed4316bfc8fd?tpId=107&&tqId=33297&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include <stdio.h>
int main() {
char c = 0;
scanf("%c",&c);
printf("%hhd",c);
printf("%d", c); //也可以AC但会浪费不必要的空间
return 0;
}
解析:
这题的char型变量,它是在这个编译器里面是一个字节的长度,也就是8位二进制。
而%d是指的int类型的转换规则,也就是4个字节,想要正确的显示char类型的话需要在%后面,d的前面加上一个长度指示符。
长度指示符对应的类型等级
%hhd = char、
%hd = short、
%d = int、
%ld = long、
%lld = long long。
hh、h、l、ll这几个就是长度指示符。
12.计算表达式的值
点进去直接做题
计算表达式的值_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/58457d27f91043edaf95b6591bb64fd6?tpId=107&&tqId=33298&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include<stdio.h>
int main()
{
int a = 40;
int c = 212;
int b = 0;
b = (-8 + 22)*a - 10 + c/2;
printf("%d",b);
return 0;
}
解析:按照操作符的优先级直接设计表达式,计算输出就行。
13.计算带余除法
点进去直接做题:
计算带余除法_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/34d3911bf2fd48a285f6396e886a1259?tpId=107&&tqId=33299&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking
#include <stdio.h>
int main() {
int a, b;
scanf("%d %d",&a,&b);
printf("%d %d", a / b, a % b);
return 0;
}
解析:掌握%和/两个操作符的使用,按照格式输出就行