字符常量'a'
字符串常量“a”,字符串常量以\0结尾
输出打印
%p 以16进制形式输出指针
int a= 1;
printf("&a=%p\n",&a); /*打印a的地址*/
打印%时候需要写两个%%
prinf("%%\n");
%5d输出5个字符宽度,不足5个字符话用空字符填充,默认右对齐
printf("a=%5d",a);
%05d输出5个字符宽度,不足5个字符话用0字符填充,默认右对齐
printf("a=%05d",a);
%-5d输出5个字符宽度,不足5个字符话用空字符填充,
-符号代表左对齐, 0和-不能同时使用(同时使用在右边补0就改变其值大小了。)
printf("a=%-5d",a);
%f 默认小数点后有6位数,不够6位话补0.
printf("c1=%lf\n",c);
%8.3f 8代表有总共有8位字符,3代表后边有3位小数。
printf("c1=%8.3f\n",c);
puchar 输出一个字符到屏幕上
char ch1 = 'z';
putchar(ch);
输入
整形输入 int a; scanf("%d",&a);
字符输入, 当使用scanf输入字符的时候,编辑器默认会把内容先放到一块内存(缓冲区),scanf自动在缓冲区读完内容。 下边例子说明缓存区存储
字符a | 回车\n |
{
char a;
printf("请输入a:");
scanf("%c",&a); /*第一次使用scanf函数只读字符a,缓冲区中留下回车\n*/
printf("a=%c \n",a);
char b;
printf("请输入b:");
scanf("%c",&b); /*第二次使用scanf函数,因为缓存区中有内容,所以直接取内容无需输入*/
printf("b=%c \n",b); /*这一句换为打印%d时看出打印的是10,即回车键*/
char c;
printf("请输入c:");
scanf("%c",&c);/*第三次使用scanf函数,缓冲区为空,正常存取数据*/
printf("c=%c \n",c); /*正常显示*/
}
为避免上述情况可以如下处理
{
char a;
printf("请输入a:");
scanf("%c",&a); /*第一次使用scanf函数只读字符a,缓冲区中留下回车\n*/
printf("a=%c \n",a);
char b;
/*仅仅起到吃掉第一步的回车键\n*/
scanf("%c",&b);
char c;
printf("请输入c:");
scanf("%c",&c);/*第三次使用scanf函数,缓冲区为空,正常存取数据*/
printf("c=%c \n",c); /*正常显示*/
}
a=getchar();函数读取缓存区键盘的字符;
两个数相除,要想得到小数点后边的数时分子或分母至少有一个是小数,否则得到是取整后正数。
int a= 5, b=2;
double c;
c = a/b;
printf("c1=%lf\n",c); /*得到2.000000*/
c = 1/2;
printf("c2=%lf\n",c);
/*得到0.000000*/
c = 1.0/2;
printf("c3=%lf\n",c);/*得到0.500000*/
c = a*1.0/2; /*乘以1.0变为小数,然后再计算可以得到更准确结果*/
printf("c4=%lf\n",c);/*得到2.500000*/
运算符
|| 左边为真则右边不执行
&& 左边为假则右边不执行
类型转换:
1、隐式转换:编译器内部自动帮我们转换。
double a;
int b=10;
a=b;
printf("a=%lf\n",a); /*结果为a=10.000000 ,b的类型没有变。*/
2强制类型转换: (类型)需要转换的变量名。
double c ;
c =(double)1/2; /*将1强制转化为double型*/
printf("c=%lf\n",c);
return 0;
浮点型打印说明,一定要按照变量类型来
整型补要以浮点%lf型打印,会出错,除非强制类型转换
int a=11;
printf("a=%lf\n",a); /*结果为a=0.000000 ,结果出错*/
浮点型不要用整型%d打印,会出错,除非强制类型转换
double b=3.14;
printf("b=%d\n",b); /*结果为随机一个数,结果出错*/
强制类型转换原则:数据类型小的往数据类型大的转, 因为大转小会溢出
char ->int
任何编程语言都是3种结构:顺序、选择、循环。
三目运算符 a>b?a:b; /*? :是三目运算符*/
QT IDE调试代码
新建项目——>非QT项目——>纯C语言项目
1、设置断点 F9
2、调试运行 F5 、F10、F11
F5就是继续运行,不在中断,直到遇到断点。
F10是逐过程运行,也是一次运行一条语句,但遇到子函数调
用时不进入,直到子函数完成后直接继续。
F11是逐语句,和F10的区别是,当遇到子函数调用时,也会进入子函数进行单步调试。
goto 无条件跳转, goto语句不建议使用,用不好程序非常乱。
goto只能跳转到同一个作用域内。