C语言基础
接上次3 的程序。判断输入的是大写字母还是小写字母还是数字,可以再程序中添加一行 export LANG = “C”
转义字符
一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示
\n : 换行 \t :水平制表 \r :回车
“a”代表字符串,后面加\0 ‘a’代表字符
C的运算符有以下几类:
(1)算术运算符 (+ - * / %)
(2)关系运算符 (> < == >= <= !=)
(3)逻辑运算符 (! && ||)
(4)位运算符 (<< >> ~ | ∧ &)
(5)赋值运算符 (=及其扩展赋值运算符)
(6)条件运算符 (?:)
(7)逗号运算符 (,)
(8)指针运算符 (*和&)
(9)求字节数运算符(sizeof)
(10)强制类型转换运算符( (类型) )
(11)分量运算符(.->)
(12)下标运算符([ ])
(13)其他 (如函数调用运算符())
1. / 与 % 运算符应用 如写出一个四位数的个十百千位
在1目录下编写4.c
#include<stdio.h>
int main()
{
int a;
int g,s,b,q;
printf("Please input a number:\n");
scanf("%d",&a);
q=a/1000;
b=a/100%10;
s=a/10%10;
g=a%10;
printf("%d %d %d %d\n",g,s,b,q);
return 0;
}
函数符号() 数组下标【】
单目运算符
算数运算符
移位运算符
关系运算符 优先级从下到上在变大
逻辑运算符
三目运算符
++i --i :在执行i所在的语句之前,先使得i值加/减1。
I++ i-- :在执行i所在的语句之后,在使得i值加/减1。
如:int a = 4;
a+=a++; (a+a)++ 结果为9
a+=++a; 10
++a+=a; 10
++a+=a++; 11
++a+=++a; 12
逗号运算符:
一般形式: 表达式1,表达式2
求解过程:
先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。
Float小数点后的有效位为6位,double小数点后的有效位为15位。
%.4f 代表小数点后有效位为4位 %.7f代表小数点后有六位是有效的,剩下一位是无效的。
如果是 %8.4f 则8为输入长度 如1.111111 会显示为 (空格)(空格)1.1111
在1目录下编写5.c
#include<stdio.h>
int main()
{
float a=8.8883888;
printf("%6.3f \n",a);
return 0;
}
最后 gcc 5.c -o 5 在./5 得出结果 (空格)8.888
(1)布尔变量与零值比较
注意:不可将布尔量直接与TRUE、FALSE或者1、0作比较,根据布尔类型的语义,零值为假,任何非零值为真。
(2)整型变量与零值比较
应当将整型变量用“==”或“!=”直接与0比较。
(3)浮点变量与零值比较
浮点变量不能用==或!=与任何数字比较。
(4)指针变量与零值比较
指针变量应当用==或!=与NULL比较。
if(表达式1)语句1
else if(表达式2)语句2
else if(表达式3)语句3
……
else if(表达式m)语句m
else 语句n
匹配规则:
else总是与它上面的,最近的,统一复合语句中的,未配对的if语句配对;
当if和else数目不同时,可以加花括号来确定配对关系
If(表达式)
{
} 如果表达式为0则不进入循环 表达式不为0 (真)则执行循环
在1目录里编写6.c 判断一个月份是否是闰年
#include<stdio.h>
int main()
{
int year;
printf("Please input a year:\n");
scanf("%d",&year);
if((!(year%4) && year%100) || !(year%400))
{
printf("Leap year\n");
}
else
{
printf("Not leap year\n");
}
return 0;
}
Switch语句
基本格式:
switch()
{
case 1:
{
break;
}
case 2:
{
break;
}
default:
{
break;
}
}
每个case结尾加break,否则会导致多分支重叠;不要忘记default分支。
例:用switch语句编写 两个数字进行加减乘除的运算
在1目录下编写7.c
#include<stdio.h>
int main()
{
int num1,num2;
char ope;
scanf("%d%c%d",&num1,&ope,&num2);
printf("%d,%c,%d\n",num1,ope,num2);
switch(ope)
{
case '+':
{
printf("result %d\n",num1+num2);
break;
}
case '*':
{
printf("result %d\n",num1*num2);
break;
}
default:
{
printf("error");
break;
}
}
return 0;
在此处是将 num1 ope num2一起进入scanf 和 printf 输入,如果分开定义则可以修改程序为
#include<stdio.h>
int main()
{
int num1[2],num2[2];
char ope[2];
//scanf("%d%c%d",&num1,&ope,&num2);
//printf("%d,%c,%d\n",num1,ope,num2);
printf("please input:\n");
scanf("%d",num1);
printf("please input:\n");
scanf("%s",ope);
printf("please input:\n");
scanf("%d",num2);
switch(ope[0])
{
case '+':
{
printf("result %d\n",num1[0]+num2[0]);
break;
}
case '*':
{
printf("result %d\n",num1[0]*num2[0]);
break;
}
default:
{
printf("error");
break;
}
}
return 0;
}
结果为:
[root@localhost 1]# ./7
please input:
5
please input:
+
please input:
1
result 6
循环语句:重点论述循环体的效率。提高循环体效率的基本办法是降低循环体的复杂性。
continue语句
作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定.
一般形式: continue;
break语句
break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句
一般形式: break;
注意:break语句不能用于循环语句和switch语句之外的任何其他语句中。
在1目录下编写8.c 查看continue与break 的区别
#include<stdio.h>
int main()
{
int i,a;
for(i=0;i<3;i++)
{
for(a=0;a<10;a++)
{
if(5==a)
{
// continue;
break;
}
printf("hello world! %d\n",a);
}
}
语句中使用continue 结果为
hello world! 0
hello world! 1
hello world! 2
hello world! 3
hello world! 4
hello world! 6
hello world! 7
hello world! 8
hello world! 9
hello world! 0
hello world! 1
hello world! 2
hello world! 3
hello world! 4
hello world! 6
hello world! 7
hello world! 8
hello world! 9
语句中使用break 结果为
hello world! 0
hello world! 1
hello world! 2
hello world! 3
hello world! 4
hello world! 0
hello world! 1
hello world! 2
hello world! 3
hello world! 4
在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU 跨切循环层的次数;
如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。