怎样给网站做推广,做网站必须要电脑吗,自定义功能的网站,wordpress免登录评论逻辑运算符
连接两个完整的关系表达式。 逻辑与#xff0c;ab都为真时#xff0c;ab的值真#xff0c;其余时候假。 || 逻辑或#xff0c;ab都为假时#xff0c;a||b的值假#xff0c;其余时候真。 ! 逻辑非、只需要一个运算对象#xff0c;a真 逻辑与ab都为真时ab的值真其余时候假。 || 逻辑或ab都为假时a||b的值假其余时候真。 ! 逻辑非、只需要一个运算对象a真!a假a真!a假。
逻辑表达式求值顺序从左往右
和II 都是序列点到或||之前副作用都会生效
一旦发现有使整个表达式为假的因素会立即停止求值 第一个条件不成立时 之后的语句都直接跳过
#include ctype.h //为isspace ()函数提供原型
#include stdbool.h //为bool、 true、 false提供定义
#define PERIOD .
#define STOP | // 标记输入结束/*if(range90 range100) //不可以用90range100(ch ! | | ch ! \) // 使用 || 两个条件有一个为真时为真都为假时为假if (!(ch ! )) // 使用 ! 条件为假时为真为真时为假6 2 3 3 为真。 !(6 2 3 3) 为假。abbc||bd 相当于 ((ab)(bc))||(bd)if(num!012/num2)// 第一个表达式为假num0时,会直接跳过后面的表达式所以不会出现 除以0的情况x ! 0 20 / x 5只有在x是非零时才会对第2个表达式求值。while(x10xy20) //是序列点可以保证在xy的时候已经完成了自增操作*/char ch;int charcount 0;while ((ch getchar()) ! PERIOD) // 读字符并检查是不是.{if (ch ! ch ! \) // :两个条件都为真时为真不是和时记数charcount;}printf(There are %d non-quote characters.\n, charcount);char c; // 读入字符char prev; // 读入的前一个字符long n_chars 0L; // 字符数int n_lines 0; // 行数int n_words 0; // 单词数int p_lines 0; // 不完整的行数bool inword false; // 如果c在单词中,inword 等于trueprintf(Enter text to be analyzed (| to terminate) : \n);prev \n; // 用于识别完整的行while ((c getchar()) ! STOP) // getchar便于统计字符 读到|结束循环{n_chars; // 统计字符if (c \n)n_lines; // 统计行if (!isspace(c) !inword) // 不是空格不在单词内则在单词开头标记inword,相当于inwordfalse{inword true; // 开始一个新的单词n_words; // 统计单词}if (isspace(c) inword) // 是空格在单词内说明一个单词结束标记inword为false不在单词内inword false; // 打到单词的末尾prev c; // 保存字符的值}if (prev ! \n)p_lines 1; // 不完整的一行printf(characters %ld,words %d,lines %d,, n_chars, n_words, n_lines);printf(partial lines %d\n, p_lines);条件运算符 ?:
唯一的三元运算符每个运算对象都是一个表达式 expression1 ? expression2 :expression3
expression1为真非0表达式的值为expression2否则为expression3
if else语句的便捷方式
#define COVERAGE 350 // 每罐油漆可刷的面积单位:平方英尺)
//max(ab)?a:b; 取最大值
//(53)?1:2的值为 1。
//(35)?1:2的值为 2。int sq_feet;int cans;printf(Enter number of square feet to be painted : \n);while (scanf(%d, sq_feet) 1){cans sq_feet / COVERAGE; // int除法会被截断cans ((sq_feet % COVERAGE 0)) ? 0 : 1; // 取余等于0说明刚刚好不等于0说明多一桶printf(You need %d %s of paint . \n, cans, cans 1 ? can : cans); // 如果值是1则打印can,否则打印cansprintf(Enter next value (q to quit) : \n);}按位运算符
~ 按位取反一元运算符。 按位与运算符 | 按位或运算符 ^ 按位异或运算符 左移运算符numnnum左移n位(*2n)。左边丢掉右边补0。 右移运算符numnnum右移n位(/2n)。右边丢掉左边补0。
int x 2; // 010
int y 3; // 011
// x y 2; // 010
// y x 12; // 1100其他运算符
sizeof运算符和size_t类型
sizeof返回运算对象的字节大小一元运算符 返回size_t类型的值是语言定义的标准类型 %zd 或者%u %lu
// 使用C99新增的%zd转换说明--如果编译器不支持%zd 请将其改成%u或%lu
int n 0;
size_t intsize;// sizeof返回值是无符号整型的typedef别名相当于 typedef unsigned int size_t
intsize sizeof(int);//运算对象可以是类型或具体数据对象是类型时必须加()
printf(n %d,n has %zd bytes; all ints have %zd bytes. \n,n, sizeof n, intsize);//是具体对象()可以省略() 强制类型转换运算符
(目标类型)
mice 1.61.7;//3.3-3 先计算在转换
mice (int)1.6(int)1.7;//先转换11强制转换超出范围时依然会出错 显示选择合适的类型强制类型转换指明转换类型避免出现不正确的自动转换
逗号运算符 ,
性质 保证从左往右求值 是一个序列点逗号左侧的副作用会在执行逗号右侧之前发生
逗号表达式的值是右侧项的值
const int FIRST_OZ 46; // 2013邮资
const int NEXT_OZ 20; // 2013邮资
int ounces, cost;
printf( ounces cost\n);
/*
* 初始化表达式的逗号是两个值都可进行初始化
* 更新表达式的初始化可使两个值每次迭代都变化
*
* x(y3,(z y 2)5)先给y赋3y为442为6赋给z,65赋给x
* i5,500;相当于i5;500;
* i(5,500);相当于i500;
*/
for (ounces 1, cost FIRST_OZ; ounces 16; ounces, cost NEXT_OZ)printf(%5d $%4.2f\n, ounces, cost / 100.0);类型转换
在语句和表达式中应使用类型相同的变量和常量
基本转换规则
1、升级 unsigned和signed的char和short会被自动转换为int 如果short和int的大小相同unsigned short 比int大时会自动转换为unsigned int float会自动转换为double
2、涉及两种类型的运算两个值会被分别转为两个类型的更高级别
3、级别从高到低 long double double float unsigned long long long long unsigned long long unsigned int(当longintunsigned int long) int 当long和int大小相同时unsigned int比long级别高
4、赋值时计算的最终结果会被转换成被赋值变量的类型包括升级和降级
5、函数参数传递char和short被转换为intfloat被转换为double函数原型会覆盖升级
降级可能会导致放不下整个数字 整型转换为无符号整型额外的位被忽略eg目标类型是8位无符号整型原始值求256模
char ch;
int i;
float fl;
fl i ch C;
/*
1字节的ASCII存储在ch中
转换为ASCII中C对应的整数67四字节存储在i中
67转换为浮点数存储在fl中
*/
printf(ch%c,i%d,fl%2.2f\n, ch, i, fl);
ch ch 1; /*转换成整数671结果是4字节整数68然后截断1字节存在ch*/
i fl 2 * ch; /*ch转换为4字节整数68乘以2转换为浮点数和fl相加转换为int存储在i*/
fl 2.0 * ch i; /*ch转换为浮点数乘以2把i转换为浮点数相加存在fl*/
printf(ch%c,i%d,fl%2.2f\n, ch, i, fl);
ch 1107; /*超出范围取256模*/
printf(Now ch %c\n, ch);
ch 80.89; /*截断*/
printf(Now ch %c\n, ch);带参函数
void pound(int n); // ANSI函数原型声明表明该函数接受一个 int 类型的参数 且没有返回值const int S_PER_M 60; // 1分钟的秒数
const int S_PER_H 3600; // 1小时的秒数
const double M_PER_K 0.62137; // 1公里的英里数int times 5;char ch !; // ASCII码是33float f 6.0f;pound(times); // int 类型的参数把实参5传递给函数把5赋值给形参即把times的值拷贝给函数中的新变量npound(ch); // 和pound((int)ch);相同根据函数声明自动转换pound(f); // 和pound((int)f);相同如果函数声明没提供参数类型则不会转换只会自动升级为double使用时错误double distk, distm; // 跑过的距离(分别以公里和英里为单位 )double rate; // 平均速度(以英里/小时为单位)int min, sec; // 跑步用时(以分钟和秒为单位 )int time; // 跑步用时(以秒为单位)double mtime; // 跑1英里需要的时间以秒为单位int mmin,msec; // 跑1英里需要的时间以分钟和秒为单位printf(This program converts your time for a metric race\n);printf(to a time for running a mile and to your average\n);printf(speed in miles per hour.\n);printf(Please enter, in kilometers, the distance run, \n);scanf(%lf, distk); // %lf 表示读取一个 double 类型的值printf(Next enter the time in minutes and seconds,\n);printf(Begin by entering the minutes.\n);scanf(%d, min);printf(Now enter the seconds,\n);scanf(%d, sec);time S_PER_M * min sec; // 把时间转换成秒distm M_PER_K * distk; // 把公里转换成英里rate distm / time * S_PER_H; // 英里/秒X秒/小时英里/小时mtime (double)time / distm; // 时间/距离 跑1英里所用的时间mmin (int)mtime / S_PER_M; // 求出分钟数msec (int)mtime % S_PER_M; // 求出剩余的秒数printf(You ran %1.2f km (%1.2f miles) in %d min,%d sec.\n, distk, distm, min, sec);printf(That pace corresponds to running a mile in %d min,, mmin);printf(%d sec.\nYour average speed was %1.2f mph,\n, msec, rate);void pound(int n)
/*ANSI 风格函数头
返回值类型 函数名(返回值类型 形参名) 不需要参数或返回值时用void
括号内就包括形参变量的声明形参的变量名是函数私有的不会和其他处相同名称发生冲突
实际函数调用传递的值为实参*/
{ while (n-- 0)printf(#);printf(\n);
}