c语言给整型变量i输入一个值,【20180626】【C/C++基础知识】C语言数据转换,数据的输入输出格式、函数:scanf_s,...

1. 数据类型转换

(1) 相同类型数据的运算结果,还是该类型;

(2) 不同类型的数据的运算结果是取值范围大的那种。

(3) 取值范围小的类型赋值给取值范围大的类型是安全的,反之不安全。

(4) 浮点数转为整数是截断(丢失小数部分,不是四舍五入)。

(5) 为了消除警告:强制类型转换(强转)可以消除从大到小的警告。可以通过下面方式把表达式的值转为任意类型:(类型)表达式,例如:

int x=10;

Float y;

y = (float)x;  // x值不改变,只是将转换了的x值赋给y

2. 数据的输入输出

C语言提供了标准的输入输出库。

(1) 格式输出函数printf

基本形式:printf("控制字符串”,输出项列表),输出项可以是变量、常量、表达式,其间用逗号分隔。

格式控制字符串:格式说明符、普通字符

格式控制说明:%字符 ,例如:%c按字符型输出,%d按十进制整数输出,%u按无符号整数输出,%f按浮点型小数输出,%o按八进制整数输出,%x按十六进制整数输出,%s按字符串输出。

使用修饰符:宽度、精度、小数位数、对齐方式等。字段宽度:%6d表示以字节宽度为6字节显示一个整数。例如:

i = 123;

printf(“%6d\n”,i); // 输出:___123(有三个空格)

printf(“%06d\n”,i); // 输出:000123(补零)

j = 1234.567;

printf(“%9.3f\n”,j); // 输出:_1234.567总共占9个字段,小数点占3个字段

负号:不用负号为右对齐,有负号是左对齐。

字符*:指定输出的字段宽度,例如:

printf(“%*d\n”,w,i);  // 指定字段宽度为w

printf(“%*.*f\n”,7,2,x); // 指定字段宽度为7,并且小数点后长度为2

%%两个百分号表示百分号,%t表示一个tab键。输入输出函数都在头文件,若只有printf和scanf,那么头文件可省略。

普通字符:原样输出的字符,可打印字符:直接写出字符,不可打印字符:使用转义字符\n,\t,\a

(2) 字符输出函数——putchar(将一个字符输出在显示屏上,显示参数可以是字符变量、字符常量、字符ASCII码)

putchar('A');   // 显示大写字母A

putchar(97);  // 显示小写字母a,里面数字都表示ASCII码

(3) 格式输入函数——scanf

基本形式:scanf(”控制字符串”,输入项列表)

注意:接收数据的变量必须用其地址表示,加一个&!

控制字符串与输出的表示方法类似,注意不同点:字符*:输入时用来跳过相应的数据(输入*用来跳过,输出*用来控制字段长度)!例如:

scanf("%d%d",&i,&j); // 输入分别存到i和j中

scanf("%*d%d",&i,&j); // 跳过第一个数,读取第二个数并存到i中

空格字符:输入字符型数据时,用来跳过输入流中所有空格字符(不管有几个空格字符,输入一个空格字符表示跳过所有空格字符)。例如:

若输入45 20 a:

scanf("%d%d%c",&i,&j,&ch);  // 输出会是45 20 空格

scanf("%d%d %c",&i,&j,&ch);  // 输出是45 20 a

/* 注意:只有输入字符型数据时需要加空格跳过所有空格,输入数值型数据时不需要,它会自动跳过! */

可打印字符:去除输入数据流中与可打印字符相同的字符

scanf("%d%d",&i,&j);  // 注意:输出格式按照后面那里来,后面是空格那么输出是空格,输出是逗号那么输出是逗号

(4) 字符输入函数——getchar

基本形式:getchar(),无参数,只能接收一个字符。

作用:从键盘输入一个字符,函数的返回值为该字符的ASCII码,使用时,通常将返回值赋予某个字符变量或整型变量。

程序1:输入一个字符,输出它的前导/后续字符,并分别按照字符和整数格式输出。

思路:前导:ASCII码-1,后续:ASCII码+1.

/* 输入一个字符,并输出它的前导、后续字符,并分别按照字符、整数输出 */

/*正确的程序 */

#include

#include

int main()

{

char c;

int c1, c2;

c = getchar();

c1 = c - 1;

c2 = c + 1;

printf("%c\t%c\t%c\n", c1,c,c2);

printf("%d\t%d\t%d\n", c1, c, c2);

system("pause");

return 0;

}

程序2:温度转换,将输入的摄氏温度值转化为华氏温度输出。

思路:转换公式:C=5/9*(F-32)

/* 将摄氏温度转换为华氏温度 */

/*正确的程序 */

#include

#include

int main()

{

float Ctemp,Ftemp;

printf("请输入一个摄氏温度值:\n");

scanf_s("%f", &Ctemp);

Ftemp = Ctemp * 9 / 5 + 32;

printf("转换后的华氏温度为:%.2f\n", Ftemp);

system("pause");

return 0;

}

程序3:小明家廉租房

/* 小明家 */

/*正确的程序 */

#include

#include

int main()

{

float xm = 0, bb = 3.5, mm = 1.5,remain;

if ((xm + bb + mm) > 6)

{

printf("小明家不满足廉租房要求\t");

remain = (bb + mm + xm) - (300 / 10000 * 12);

printf("小明家还剩余%.2f万元\n", remain);

}

else

{

printf("小明家满足廉租房要求\t");

remain = (bb + mm + xm) - (1000 / 10000 * 12);

printf("小明家还剩余%.2f万元\n", remain);

}

system("pause");

return 0;

}

我编写的程序出现这样一个错误,原因是因为if-else忘记加{ }。

程序3:输入两个整数,输出它们的和。

/* 输入两个整数,输出它们的和 */

/* 我写的程序 */

# include"stdio.h"

#include"stdlib.h"

int main()

{

int a, b,c;

printf("请输入两个整数%d%d:;\n");  // 错误:printf没有为格式字符传递足够的参数,应该把%d去掉!

scanf_s("%d%d", &a, &b);

c = a + b;

printf("这两个整数的和为%d+%d=%d", a+b=c);  // 错误(1):printf没有为格式字符传递足够的参数(应该把后面的+和=去掉)

// 错误(2):“=”左操作数必须为左值(把后面的+和=去掉)

system("pause");

return 0;

}

/* 正确的程序 */

# include"stdio.h"

#include"stdlib.h"

int main()

{

int a, b,c;

printf("请输入两个整数:;\n");

scanf_s("%d%d", &a, &b);

c = a + b;

printf("这两个整数的和为%d+%d=%d", a,b,c);

system("pause");

return 0;

}

我的错误:输出里的格式字符,后面数值只需要一一对应就可以,后面形式与前面格式字符不需要格式保持一致。

编程后回答一下问题:

(1) 空格、回车、逗号分隔输入的两个整数,分别输出什么?

scanf_s中间没有任何分隔符时:空格正常,回车正常,逗号不正常。说明:除了格式字符之外的其他字符都需要原样输入。但若原样输入了逗号,此时再用空格和回车会报错。

(2) 用回车分隔输入,scanf_s("%d\n%d\n",&a,&b)这样对吗?

不对,这样会没有输出结果。若想回车输出,那么直接什么都不加就可以。

(3) 如果要求输入符号+,也就是输入3+5,输出3+5=8,怎么写?(见下面程序)

(4) scanf_s对字符类型数据有没有特殊要求?

对字符型数据,scanf_s需要指明字符的个数(和scanf函数的不同之处)

# include"stdio.h"

#include"stdlib.h"

int main()

{

int a, b, c;

char ch;

printf("请输入两个整数:;\n");

scanf_s("%d+%d", &a, &b);

scanf_s("%c\n", &ch,1);  // scanf_s函数用字符类型数据时,必须注明字符个数!!

c = a + b;

printf("%c\n", ch);

printf("这两个整数的和为%d+%d=%d\n", a, b, c);

system("pause");

return 0;

}

总结:

1. 字符型的最大值、最小值是多少?

字符型数据占1个字节(8位),是有符号的,最高位是符号位,因此它的范围是-128~127。2个字节的无符号整数的最大值是多少? 2^16-1。

2. 'x'和"x"什么区别?

'x'是字符x,"x"是字符串x,除了存储x的ASCII码值,还要存储字符串结束符\0,所以占两个字节空间。

3. '0'和'\0'相等吗?

不相等!'0'的ASCII码值为48,'\0'的ASCII码值是0

4. sizeof("computer")的值是多少?

9。因为字符串以NULL或者'\0'结尾。

5. int I = 33/4

I的值为8,整型除以整型数据还是整型。

6. "= ="和"="的区别?

“= =”是等号,“=”是赋值。

7. &&和&, ||和|

&&是逻辑与,&是位与。

||是逻辑或,|是位或。

8. 位运算能对浮点型和双精度型变量操作吗?

不能!位运算只针对整型数据。

9. 数据类型转换,能不能改变变量的数据类型和值?

不改变,只是进行类型转换,不改变变量本身的类型和值。

10. 强制类型转换用括号()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值