牛客网编程初学者入门训练讲解(C语言)

发布时间:2023-05-07 11:00

牛客网编程初学者入门训练讲解(C语言)_第1张图片

 牛客网编程初学者入门训练讲解(C语言)_第2张图片

 以十进制显示数字,使用%d;以八进制 显示数字,使用%o;以十六进制显示数字,使用%x。另外,要显示各进制数的前缀0、0x和0X,必须使用%#o、%#x、%#X。 ——《C Primier Plus》第六版

#include

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

反向输出四位数

#include 

int main()
{
	int n = 0;
	scanf("%d", &n);
	while(n)
	{
		printf("%d", n % 10);
		n /= 10;
	}
	printf("\n");

	return 0;
}

牛客网编程初学者入门训练讲解(C语言)_第3张图片

牛客网编程初学者入门训练讲解(C语言)_第4张图片

 牛客网编程初学者入门训练讲解(C语言)_第5张图片

C语言中有一个函数:getchar( )——获取一个字符,输入一个字符。

C语言还有一个函数:putchar( )——输出一个字符,打印一个字符。

关于字符@!~,但是计算机中存储的是二进制,所以要给这些字符编码比如A:65,a:97。这些数字叫ASCII码。

#include 

int main()
{
	int ch = 0;
	ch = getchar();
	putchar(ch);
	return 0;
}

此处ch为整型,输入一个字符时,将ASCII码赋值到ch中,如A就是65,然后putchar会将ASCII码转化成对应的字符输出。

#include 

int main()
{
	int ch = 0;
	ch = getchar();
	putchar(ch+32);
	return 0;
}

A:65 a:97,差32,所以大小写转化只需要多加32.

特点:只能接收一个字符!

#include 

int main()
{
	int ch = 0;
	while(ch = getchar())
	{
		putchar(ch + 32);
	}
	return 0;
}

牛客网编程初学者入门训练讲解(C语言)_第6张图片

 比如输入A,A此时在输入缓冲区中,但是没有送给getchar,还要加上回车才能给它,即A\n。

A变成a后,因为循环又从输入缓冲区中看到了\n(10),加上32为'*'。

因为while循环,会一直让你输入。

牛客网编程初学者入门训练讲解(C语言)_第7张图片

是不是不舒服。

#include 

int main()
{
	int ch = 0;
	while(ch = getchar())
	{
		putchar(ch + 32);
		getchar();
	}
	return 0;
}

 只需要再加个getchar()把\n吃掉就好了!

不过,这个循环会让你一直输入,是个无底洞。

#include 

int main()
{
	int ch = 0;
	while((ch = getchar()) != EOF)
	{
		putchar(ch + 32);
		getchar();
	}
	return 0;
}

getchar函数在文件读取错误或者文件结束时,返回EOF(End of file),通常放在文件的末尾。

牛客网编程初学者入门训练讲解(C语言)_第8张图片要想停止,只要ctrl+z就行了。

#include 

int main()
{
    int ch = 0;
    while((ch = getchar()) != EOF)
    {
        printf("%c\n", ch+32);
        getchar();
    }
    return 0;
}

牛客网编程初学者入门训练讲解(C语言)_第9张图片

 牛客网编程初学者入门训练讲解(C语言)_第10张图片

%15d的效果是靠着右边的墙排排站。

#include 
int main()
{
	printf("%#X\n", 0xABCDEF);
    return 0;
}

 十六进制为%X或%x,#用于显示前导的0X或0x.

printf函数返回的是:打印在屏幕上的字符的个数。

#include 

int main()
{
	int ret = printf("hehe");
	printf("%d\n", ret);
	return 0;
}

牛客网编程初学者入门训练讲解(C语言)_第11张图片

 牛客网编程初学者入门训练讲解(C语言)_第12张图片

#include 

int main()
{
    printf("\n%d", printf("Hello world!"));
    return 0;
}

先调第一个printf1函数,那么它的值是后面一个printf2,printf2先打印Hello world!,再返回返回值为打印的字符的个数,再换行打印printf1。

牛客网编程初学者入门训练讲解(C语言)_第13张图片

 牛客网编程初学者入门训练讲解(C语言)_第14张图片

        有小数最好用double,虽然还有float,但是浮点数默认都是double类型,而且double类型的数值范围比float大很多,推荐使用double。

        C语言编程时常量写为0时,系统默认其是一个整型常量int,写0.0时系统默认其是双精度浮点型常量double。

        %f为单精度类型的数据(占4个字节),而%lf为双精度类型的数据(占8个字节)。超出范围会四舍五入。

        %.2f,%.2lf代表小数点后保留2位小数。

#include 

int main()
{
    int id = 0;
    double c_score = 0.0;
    double math_score = 0.0;
    double eng_score = 0.0;
    scanf("%d;%lf,%lf,%lf", &id, &c_score, &math_score, &eng_score);
    printf("The each subject score of  No. %d is %.2lf, %.2lf, %.2lf.", id, c_score, math_score, eng_score);
    return 0;
}

输入 17140216;80.845,90.55,100.00

牛客网编程初学者入门训练讲解(C语言)_第15张图片

 double类型,float类型在存储时会有精度丢失,所以四舍五入的答案不对。

那为什么会有精度丢失呢?

        是因为我们输入时是十进制,但是在计算机内部计算时需要先转换成二进制。

参考:如何理解double精度丢失问题? - 知乎

比如把0.1转换成二进制,0.1 = 1 / 10。那么二进制就是0.1 = 1 / 1010 = 0.0001100110011……,放进double类型中。

  • 半精度(16bit):11 位有效数字
  • 单精度(32bit):24 位有效数字
  • 双精度(64bit):53 位有效数字
  • 四精度(128bit):113 位有效数字

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号