1、求100之内自然数中最大的能被17整除的数。
#include <stdio.h>
#include <math.h>
int main(){
int i;
for(i=100;i>0;i--){
if(i%17 == 0 ){
printf("%d ",i);
}
}
return 0;
}
3、计算并输出200-400之间不能被3整除的整数的和。
#include <stdio.h>
int main(){
int i;
int sum = 0;
for(i=400;i>200;i--){
if(i%3 == 0 ){
printf("%d\n ",i);
sum+= i;
}
}
printf("[200-400)之内所有不能被3整除的数的和是%d", sum);
return 0;
}
4、从键盘输入10个数,统计非负数的个数,并计算非负数的和
#include<stdio.h>
int main(){
int a[10] = {0};
int c = 0;
int sum = 0;
for(int i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(int i = 0;i<=9;i++){
if(a[i]>=0)
{
sum+=a[i];
c++;
}
}
printf("%d %d",c,sum);
return 0;
}
1.基本算术运算符
所有表达式的运算符:
从左向右两两运算比较优先级,左边高的先计算左边的,右边优先级高的,继续向右走,直到找的相对最高的运算符进行计算,如果优先级相同,看结合性(单目运算右结合,双目运算左结合,三目运算嵌套右结合,计算左结合)
左结合,先计算左边
右结合,继续向右走,直到找到最高的优先级进行计算,
重复以上步骤
注意短路
关于:/
- 两个整形数相除,必得整形数,必为地板数;
- 分子或分母有一个浮点型数,即为通常意义的除法。
- 分母不能为0,否则崩溃。
关于:%取余
- 用于计算两个数相除后,得到的余数。
- 参与计算的量,必须是整型,其结果也是整型
- 某个数和n取余,其结果的范围是【0,n-1】
2. 自增、自减运算符
含义 | 运算符 | 优先级 | 结合性 | 功能 |
自增 | ++ | 2 | 右结合 | 使变量的值增1 |
自减 | -- | 2 | 右结合 | 使变量的值减1 |
使用形式 | Œ ++i 或--i 变量i先自增或自减1,再引用i。 | |||
i++或i-- 先使用变量i,再自增或自减1。 |
3.关于++ --
(1)
单独的i++或++i,没有区别。
单独的i--或者--i;没有区别。只有变量才能自增自减
( 2).
当i++或者++i在其他表达式上没有区别
符号在前,先自增,在参与所在表达式的运算。
变量在前,先参与所在表达式的运算,在自增。
同理,i--和--i也是如此
(3)
当连续多个+或者多个-一起写的情况
例:i++++i,编辑器会识别前两个++或钱2个-为自增自减运算符。
void main( )
{ int i=6, a, b;
printf(“%d\n”, ++i );
printf(“%d\n”, i++ );
a=--i ; printf(“%d\n”, a );
b=i--; printf(“%d\n”, b );
printf(“%d\n”, -i++) ;
printf(“i=%d\n”, i );
}
练习
#include <stdio.h>
int main(){
int a[10] = {1, 2,3, 4,5,6};
int *p = a;
if(p[2] == a[2]){
printf("ok\n");
}
p++;//p+n表示p代表的地址向右偏移n个存储单元,得到一个新的地址值。
p=p+2;
printf("%d",p[2]);
return 0;
}
注意
自增、自减运算只能用于变量, 不能用于常量和表达式。
例: i++ 为合法的运算
++6, ++(a+b) 为非法的运算
自增、自减运算符是两个+或两个-的一个整体, 中间不能有空格。如果有多于两个+ 或两个-连写的情况,则编译首先识别前两个+或-为增量或减量运算符。
表达式 x+++y 等价于 (x++)+y
自增、自减运算符的运算顺序是右结合,因此对-i++应理解为: -(i++),而 (-i )++ 是非法的。
例: i=3 ;
printf(“%d”, -i++); 输出:-3
4.标准函数
关于大小端
CPU在处理整型数时,把高字节放到低地址,叫大端
把低字节放到低地址,叫小端
练习
#include <stdio.h>
int main(){
int a = 0*12345678;
int * p = &a;
char * q = (char *)p;
if(q[0]==0*78){
printf("小端\n");
}
else{
printf("大端!\n");
}
return 0;
}
5.强制类型转换
格式:
(数据类型说明符)(表达式)
注意:
强制转换属单目运算, 运算优先级为2。
强制转换得到的是中间结果类型,原变量类型不变。
数据类型说明符和表达式都必须加括号(单个变量除外)
例: int x, y ; float z ;
(float)(x+y) ;
(int)z+x ;
(float)(5%3); (将5%3的值转换为float型)
6.优先级
含义 | 运算符 | 优先级 | 结合性 |
小于 | < | 6 | 左结合 |
小于等于 | <= | ||
大于 | > | ||
大于等于 | >= | ||
等于 | == | 7 | |
不等于 | != |
算数运算符
自增自减
强转
关系运算符
计算结果只能是0或者1 :0假 1真
只能表示两者之间的关系;否则用逻辑运算符连接
7.逻辑运算符:
含义 | 运算符 | 优先级 | 结合性 |
逻辑非 | ! | 2 | 右结合 |
逻辑与 | && | 11 | 左结合 |
逻辑或 | || | 12 | 左结合 |
注意结果一定是0或1
注意短路
8.三目运算符:
?: a>b? a:b
条件运算符可以嵌套, 这种嵌套是右结合的。
9.作业
求125之内自然数中偶数之和。
编程计算1*2*3+3*4*5+5*6*7+...+99*100*101的值。
编写程序,将用户输入的字符串中所有的字符a用*代替,然后输出。
周天休闲,结束!