1、输入输出
1、prinf
C语言内置函数,包含在#include <stdio.h>当中
stdio standard input output 标准输入输出
C语言中要想显示%
printf("%%");
int main(void) {
printf("%d%%",1); 输出1%
return 0;
}
%d和%c
字符在计算机内存都是以ascall形式存在的
A 65 a 97 大写-小写 = 32(记住)
\n 10 Esc 27
int main(void) {
char a = 'A';
printf("%d\n",a); //65
printf("%c\n",a); //A
return 0;
}
%o 八进制输出
%x or %X 十六进制输出
%e or %E 指数形式输出
%p 指针类型
int main(void) {
int a = 123;
float b = 34.6;
printf("%o\n",a);
printf("%x\n",a);
printf("%e\n",b);
printf("%f\n",b);
printf("%p\n",&a);
return 0;
}
2、scanf
scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。
它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
scanf(“%d”,&a); 一定不要拉下这个地址符号
这是必须要记住的。
输入变量的值肯定需要告诉编译器变量的地址
3. 字符输入输出函数
int getchar(void), 接收用户敲入键盘的第一个字符。
putchar(int c); 里面参数既可以是ascall码也可以是字符。
puts() 输出字符串
gets() 接收用户敲入的字符串
int main(void) {
char a;
a = getchar(); //接收你键盘敲下的字符赋值给a
putchar(65);
putchar('\n');
puts("c u later\n");
return 0;
}
2、选择结构
程序 = 算法+数据结构
基本结构三种:顺序,选择,循环
变量交换三部曲:必须记住
交换变量 a 和 b
int a=3,b=5;
int t = a;
a = b;
b = t;
printf(“%d,%d”,a,b);
语句分类:
复合语句:相当于一堵墙,围城。里面的变量不能被外部访问,外边的变量不能被内部访问。
int main(void) {
int a = 2;
{
int a = 3;
printf("%d\n",a);
}
printf("%d\n",a);
return 0;
}
作用域不同,在程序中应该把复合语句看成是单条语句而不是多条语句。
关系运算符和表达式:
c>a+b c>(a+b);
a>b==c (a>b)==c;
a==b<c a==(b<c);
a=b>c a=(b>c);
<,<=,>,>= 优先级要高
==,!= 优先级要低
1<<2+2<<2
赋值运算符<逻辑运算符<关系运算符<算术运算符
&& 0 && (表达式pass)
|| 1 || (表达式pass)
逻辑运算符短路操作(important)
#include <stdio.h>
//短路操作
//A && B
//A和B这两个表达式进行 A&&B逻辑与操作,
//一旦A判断为假后,A&&B就为假,后面的B表达式不用判断,也不用看。
//A || B
//A和B这两个表达式进行 A||B逻辑或操作,
//一旦A判断为真后,A||B就为真,后面的B表达式不用判断,也不用看。
int main () {
int a = 3,b = 5;
a>4&&b++;
printf("%d\n",b);
a>2&&b++;
printf("%d\n",b);
a = 3,b = 5;
a>2||b++;
printf("%d\n",b);
a>4||b++;
printf("%d\n",b);
return 0;
}
例题:需掌握
m = n = 1,a = 1,b =2,c= 3,d = 4.
(m=a>b)&&(n = c>d)
左边表达式 先 a>b 为0则 m=0 所以右面不用看
故 n的值没变 还是1.
闰年
四年一闰,百年不闰且四百年又闰
(year%4==0) || (year%100!=0 && year%400==0)
int x = 3;
int y = 2;
int z = x < y ? 100 : y++ > 2 ? 20 : 30;
等价于 int z = ((x > y) ? 100 :( ++y > 2 ? 20 : 30));
#include <stdio.h>
#include <string.h>
int main(void) {
int x=1,y=1,z;
y=(x+1)*(++x); //
z=(--x)*(x-1); //
printf("%d,%d,%d",x,y,z);
}
C语言规定:
1. C语言规定,在缺省的{}时,else总是和离他最近的未配对的if配对
2. If(a=5) 执行a=5这个赋值表达式。然后赋值表达式的值为5,非0,所以就为true了。
3. if(b) 等价于 if(b!=0)
switch:
Switch后面的表达式一般是int,char和枚举中的一种 enum
注意switch的case中有break和没有break的区别
有break 就停止,没有break,继续下个case 匹配
#include <stdio.h>
int main () {
int a = 4;
switch (a)
{
case 1: printf("1\n");
case 2: printf("2\n");
case 3: printf("3\n");
default: printf("default\n");break;
}
return 0;
}
总结:
1. if语句提供单项选择
2. if-else 用于双向选择
3. if-else-if,和switch语句用于多项选择
易错点:switch后面必须要有();
每个case后建议加break语句。
case后面必须是常量表达式
3、循环结构
While,do-while,for
以计算1+2+3+…+100为例
int main(void) {
int i=1,sum=0;
//while
while(i<=100)
{
sum+=i;
i++;
}
printf("while-sum=%d\n",sum);
i=1,sum=0;
//do-while
do{
sum+=i;
i++;
}while(i<=100);
printf("do-while-sum=%d\n",sum);
i=1,sum=0;
//do-while
for(;i<=100;i++){
sum+=i;
}
printf("for-sum=%d\n",sum);
return 0;
}
While 先判断条件 后循环
Do-while 至少先执行一次,然后在判断条件是否继续执行
While后面的()不能省,分号也不能省。
For先判断条件 后循环
三种循环都可以相互嵌套
Break vs Continue
#include <stdio.h>
// break and continue 的区别
int main () {
int i,j;
int sum = 0;
// 求1+2+3+...+i < 2000的i的值
// i的范围是[0,100]
for(i=1;i<=100;i++)
{
sum = sum +i;
if(sum>2000) break;
}
printf("when i = %d,sum > 2000,1+2+3....+%d>2000\n",i,i);
//求 1+3+5+7+9+...
sum = 0; //将 sum 归零
for(i=1;i<=100;i++)
{
if(i%2==0) continue; //当i是偶数时,就结束本次循环,进行下次循环,翻译为继续很形象
sum = sum+i;
}
printf("1+3+5+....99=%d",sum);
return 0;
}
Break作用:在循环体中测试到应立即结束循环时,使控制立即跳出循环结构,转而执行循环语句后面的第一条语句。
Continue作用:开始下一次的循环,只结束本次循环的执行,并不终止整个循环的执行。
exit() 函数
作用:终止整个程序的执行
用法:
1. 文件操作时,如果读取的文件不存在,程序就应当立即退出。
2. 遇到非法操作,如1/0,异常发生,使用此函数
3. -1表示非正常推出,0表示正常退出。
调用该函数需要嵌入头文件<stdlib.h>