C/C++教程

C语言的输入输出格式大全,输入输出格式程序实例,关于++自增运算符的应用

本文主要是介绍C语言的输入输出格式大全,输入输出格式程序实例,关于++自增运算符的应用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

C语言的输入输出可以指定需要的格式,选择合适的格式保证数据完整性

一、常用的输出格式对照表

1. %d格式:用来输出十进制整数,有以下几种用法:

1、%d 按整型数据的实际长度输出。
2、%md m为指定的输出值的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
3、%0md 用这种格式时,左端用0来代替空格
4、%-md m为指定的输出值的宽度。如果数据的位数小于m,则右端补以空格,若大于m,则按实际位数输出
5、%ld 输出长整型数据。

输出语句含义输出结果
printf("%6d\n",k);k的值有4列小于6列,在值的左边补2列空格;如果k的值为12则输出为□□□□12□□1234
printf("%2d\n",k);k的值有4列大于2列,不补空格原样输出1234
printf("%06d\n",k);空格用0替代001234
printf("%.6d\n",k);空格用0替代001234
printf("%-6d\n",k);右补空格1234□□

2. f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:

1、%f 不指定宽度,整数部分全部输出并输出6位小数。
2、%m.nf 输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。
3、%-m.nf 输出共占m列,其中有n位小数,如数值宽度小于m右端补空格。

输出语句含义输出结果
printf("%12f\n",f);输出的宽度为12列,f的值有7列,再加上输出时补的3个0共有10列,小于12列则在值的左边补2列空格□□123.456000
printf("%12.6f\n",f);输出的宽度为12列其中小数要占6列,f的值有7列,再加上输出时补的3个0共有10列,小于12列则在值的左边补2列空格□□123.456000
printf("%2.6f\n",f);输出的宽度为2列其中小数要占6列,f的值有7列,再加上输出时补的3个0共有10列,大于2列则输出时在值的左边不补空格,原样输出123.456000
printf("%.6f\n",f);小数占6列,不够补0补够6列,值的左边不补空格 ,可以理解为输出的宽度为0列,其中小数占6列。123.456000
printf("%12.2f\n",f);输出的宽度12列其中小数占2列;f的值共有7列,小数位有3列大于限定的2列则小数位只取2列并对第3位进行四舍五入;那么要输出的值就是123.46,总宽度为6列,则在输出时值的左边就要补6个空格□□□□□□123.46
printf("%12.0f\n",f);输出的宽度为12列其中小数为0列(就是不输出小数,注意四舍五入)□□□□□□□□□123
printf("%.0f\n",f);不指定宽度,小数占0列(无小数输出,注意四舍五入)123
printf("%012.6f\n",f);00123.456000
printf("%-12.2f\n",f);左对齐右补空格123.46□□□□□□
printf("%f%%\n",12.5);“%%”只输出一个“%”12.500000%

3. e格式:以指数形式输出实数。有以下用法:

1、%e 数字部分(又称尾数)输出6位小数,指数部分占5位或4位。
2、%m.ne和%-m.ne m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度

输出语句含义输出结果
printf("%e\n",f);输出数据的列数大于指定的列数就不补空格了。1.234560e+002
printf("%13e\n",f) 1.234560e+002
printf("%13.8e\n",f);1.23456000e+002
printf("%3.8e\n",f);1.23456000e+002
printf("%.8e\n",f);1.23456000e+002
printf("%13.2e\n",f);总宽度小于13列左端补空格,只有2位小数部分□□□□1.23e+002
printf("%13.0e\n",f);没有小数部分□□□□□□□1e+002
printf("%.0e\n",f); 1e+002
printf("%013.2e\n",f);空格用0替换00001.23e+002
printf("%-13.2e\n",f);1.23e+002□□□□

4. g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零

输出语句含义输出结果
printf("%g\n",f);无宽度控制123.456
printf("%5g\n",f);f值的宽度大于指定的宽度,原样输出123.456
printf("%10g\n",f);f值的宽度小于指定的宽度,左端要补空格□□□123.456
printf("%g\n",123.456789);使用%g格式符输出时,仅前7位是有效数字(从第一位非0的数字开始算,7位为有效数字)123.457

5. %s格式:用来输出一个串。用法如下:

1、%s:例如:printf("%s", “CHINA”)输出"CHINA"字符串(不包括双引号)。
2、%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格。
3、%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
4、%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
5、%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。

输出语句含义输出结果
printf("%s\n",“abedefg”);abedefg
printf("%10s\n",“abedefg”);□□□abedefg
printf("%5s\n",“abedefg”);实际输出的列数大于5列就原样输出abedefg
printf("%.5s\n",“abedefg”);只输出5列abcde

介绍了这么多的输出格式,下面用具体的程序输出体验一下

二、常用的输出格式程序实例

#include<stdio.h>

int main() {
	int a, b;
	float c,d;
	int e,f;
	unsigned int u,v;
	char c1,c2;
	scanf("%d,%d",&a,&b);
	scanf("%f,%f",&c,&d);
	scanf("%d,%d",&e,&f);
	scanf("%o,%o",&u,&v);
	scanf("%c,%c",&c1,&c2);
	printf("\n");
	printf("a=%7d,b=%7d\n",a,b);
	printf("c=%10.2f,b=%10.2f\n",c,d);
	printf("e=%17d,f=%17d\n",e, f);
	printf("u=%o,v=%o\n",u,v);
	printf("c1=%c,c2=%c\n",c1,c2);

	return 0;
}

可以自己尝试编译运行一下 ^ o ^,也可以使用下面的测试数据跑一下

  • 对应每一行的输入:

123,456
17.6,1837.65
2147483640,21474836470
62000,58765
a,b

  • 这里是我的测试结果(一定要注意逗号的输入):
    在这里插入图片描述
细心的小朋友就会发现这里的输入和输出好像不太一样啊!可以考虑一下这是为什么呢?

我觉得呢,当输入到f的值时出现了错误,因为输入f的值已经超出了int类型变量的最大值;当以八进制输入v的值时出现了错误,因为v的值的第二位为8,超过了八进制的最大基数7,系统停止给v赋值,转而后面的c1和c2值都出现了问题。

如果一定要用上面的一组数据做测试,该如何进行修改,我们可以做出下面的修改

#include<stdio.h>

int main() {
	int a, b;
	float c,d;
	int e;
	long long f;
	/*我将f的格式定义为了long long型,这样表示的位数可以更多*/
	unsigned int u,v;
	char c1,c2;
	scanf("%d,%d",&a,&b);
	scanf("%f,%f",&c,&d);
	scanf("%d,%lld",&e,&f);
	/*这里的输入也需要相应的修改*/
	scanf("%o,%d",&u,&v);
	/*这里以10进制接收v*/
	scanf("%c,%c",&c1,&c2);
	printf("\n");
	printf("a=%7d,b=%7d\n",a,b);
	printf("c=%10.2f,b=%10.2f\n",c,d);
	printf("e=%17d,f=%17lld\n",e, f);
	/*这里的输出也需要相应的修改*/
	printf("u=%o,v=%d\n",u,v);
	printf("c1=%c,c2=%c\n",c1,c2);

	return 0;
}

再一次用相同的数据测试:
在这里插入图片描述

这里虽然f的值可以正确显示了,并且u也以十进制接收了数据,但是c1和c2的值还是有问题,我觉得c1的值是“回车”,因为在输入完v的值后系统开始接收键盘上敲入的字符,首先敲入了回车然后是a接着是逗号,系统从回车开始接收,自动将回车赋给字符变量c1,将逗号给字符变量c2,因而不能正确显示

如果想正确显示c1和c2,又该如何进行修改?

我们直接在58765后面键入ab,中间不要用回车和空格
123,456
17.6,1837.65
2147483640,21474836470
62000,58765a,b

执行结果:
在这里插入图片描述
这样就可以正确显示c1c2的值了

在上面修改基础上在scanf(“%c,%c”,&c1,&c2);语句之前加一个语句:getchar();再用上述测试数据测试
#include<stdio.h>

int main() {
	int a, b;
	float c,d;
	int e;
	long long f;
	/*我将f的格式定义为了long long型,这样表示的位数可以更多*/
	unsigned int u,v;
	char c1,c2;
	scanf("%d,%d",&a,&b);
	scanf("%f,%f",&c,&d);
	scanf("%d,%lld",&e,&f);
	/*这里的输入也需要相应的修改*/
	scanf("%o,%d",&u,&v);
	/*这里以10进制接收v*/
	getchar();
	scanf("%c,%c",&c1,&c2);
	printf("\n");
	printf("a=%7d,b=%7d\n",a,b);
	printf("c=%10.2f,b=%10.2f\n",c,d);
	printf("e=%17d,f=%17lld\n",e, f);
	/*这里的输出也需要相应的修改*/
	printf("u=%o,v=%d\n",u,v);
	printf("c1=%c,c2=%c\n",c1,c2);

	return 0;
}

我们会发现这样也可以成功输出:
在这里插入图片描述
输入完v的值58765后面的回车自动被getchar()接收,从而后面的c1和c2可以接收a和b。也可以先定义一个字符型变量c3,让c3去接收v后面的回车符,后面输出时不输出c3即可。

尝试一下用字符型变量c3代替getchar();去接收v后面的回车符:

#include<stdio.h>

int main() {
	int a, b;
	float c,d;
	int e;
	long long f;
	/*我将f的格式定义为了long long型,这样表示的位数可以更多*/
	unsigned int u,v;
	char c1,c2,c3;
	/*c3不要忘了定义*/
	scanf("%d,%d",&a,&b);
	scanf("%f,%f",&c,&d);
	scanf("%d,%lld",&e,&f);
	/*这里的输入也需要相应的修改*/
	scanf("%o,%d",&u,&v);
	/*这里以10进制接收v*/
	scanf("%c%c,%c",&c3,&c1,&c2);
	printf("\n");
	printf("a=%7d,b=%7d\n",a,b);
	printf("c=%10.2f,b=%10.2f\n",c,d);
	printf("e=%17d,f=%17lld\n",e, f);
	/*这里的输出也需要相应的修改*/
	printf("u=%o,v=%d\n",u,v);
	printf("c1=%c,c2=%c\n",c1,c2);

	return 0;
}

结果也是和上面的一样,这里要注意

scanf("%c%c,%c",&c3,&c1,&c2);

前面的%c后面没有逗号分隔,实现c3接收回车后直接用c1接收a

三、配合++运算符的输入输出

1.这里是个小程序代码:

#include<stdio.h>

int main() {
	int i,j,m,n;
	i = 8;
	j = 10;
	m = ++j;
	n = j++;
	printf("%d,%d,%d,%d",i,j,m,n);

	return 0;
}

运行后可以看见输出:8,12,11,11
在这里插入图片描述
这里简单解释一下:
首先i的值没有改变,即8,直接输出
进行到m=++j时,j首先自增+1,变成11后赋值给m,所以m=11
进行到n=j++时,j先将11赋值给n,然后自增+1,变成12
最终输出8,12,11,11

2.对源程序修改一下:

#include<stdio.h>

int main() {
	int i,j,m,n;
	i = 8;
	j = 10;
	m = i++;
	/*改成i++*/
	n = ++j;
	printf("%d,%d,%d,%d",i,j,m,n);

	return 0;
}

运行后可以看见输出:9,11,8,11
在这里插入图片描述
进行到m=i++时,i首先将8赋值给m,m变成8,然后i自增+1变成9
进行到n=++j时,j首先自增+1,变成11,然后将11赋值给n,n=11
最终输出9,11,8,11

3.如果将对i和j的操作放到输出语句里面会怎么样呢?

#include<stdio.h>

int main() {
	int i,j;
	i = 8;
	j = 10;
	printf("%d,%d",i++,j++);

	return 0;
}

运行后可以看见输出:8,10
在这里插入图片描述
输出语句从右边开始读取j++,即先将j的值10输出,然后j自增+1
然后读取i++,即先将i的值8输出,然后自增+1

4.在3的基础上稍作修改:

#include<stdio.h>

int main() {
	int i,j;
	i = 8;
	j = 10;
	printf("%d,%d",++i,++j);

	return 0;
}

运行后可以看见输出:9,11
在这里插入图片描述
输出语句从右边开始读取++j,即先j自增+1变成11,接着将j的值11输出
然后读取++i,即先i自增+1变成9,接着将i的值9输出

5.在3和4的基础上再稍作修改:

#include<stdio.h>

int main() {
	int i,j;
	i = 8;
	j = 10;
	printf("%d,%d,%d,%d",i,j,i++,j++);

	return 0;
}

运行后可以看见输出:9,11,8,10
在这里插入图片描述
首先从右边开始读取j++,j=10,将10输出,接着自增+1,变成11
然后读取i++,i=8,将8输出,接着自增+1,变成9
然后分别输出j和i,此时的i和j都已经自增+1了
最终输出9,11,8,10

相信通过这么多的变化,一定清楚了输入输出以及++运算符的作用

四、输入输出的编程应用

1.写一个程序以实现输出公式

在这里插入图片描述

#include <stdio.h>
#include <math.h>

int main()
{
    int x;
    double r;
    /*一定要将r定义为双精度型,保证可以精确显示*/
    printf("please input x(1-30000):");
    scanf("%d",&x);
    if(x>=1&&x<=30000)
        {r=sqrt((9*x-7)/5);
        printf("the result of r is: %lf\n",r);}
    else
        printf("您输入的x值不符合要求,请重新运行输入x的值");
        
    return 0;
}

一定要将r定义为双精度型,保证可以精确显示,当我们输入500时,可以成功计算出结果:
在这里插入图片描述
当输入数字不在1-30000之间会提示输入错误

2.写一个程序,程序的功能是实现给定单价和数量,输出金额

定义两个双精度变量price和amount
如:price被赋予8.5;amount 被赋予12.0
输出 : money is XXX.XXX!
提示: 输出的格式符用%lf

#include <stdio.h>

int main()
{
    double price,amount,money;
    printf("请输入单价price和数量amount:\n");
    scanf("%lf %lf",&price,&amount);
    money=price*amount;
    printf("money is %lf!\n",money);

    return 0;
}

price被赋予8.5;amount 被赋予12.0,执行结果:
在这里插入图片描述
还可以对程序进一步改进完善,比如对输入的控制提示等等。。

这篇关于C语言的输入输出格式大全,输入输出格式程序实例,关于++自增运算符的应用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!