printf的返回值
printf返回的是它打印了多少个字符
例:printf("%d",printf("%d",printf("%d",43)));
括号最里面的printf打印输出一个值43,这个时候它给相邻的printf函数返回了43这个值的个数2,这个printf会给最外层的printf函
返回2的个数1,这样一层层运行,最后输出的值就是4321。
scanf的返回值
scanf()函数有返回值且为int型。
scanf()函数返回的值为:正确按指定格式输入变量的个数;即能正确接收到值的变量个数。
例: scanf("%d%d", &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF
断言assert
断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断
验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。
使用断言可以创建更稳定、品质更好且 不易于出错的代码。当需要在一个值为FALSE时中断当前操作的话,可以使用断言。
断言不是函数,而是一个宏。
#include<stdio.h>
#include<assert.h>
bool IsPrime(int n)//判断一个数是否为素数
{
assert(n != 1);
for(int i = 2;i < n;i++)
{
if(n % i == 0)
{
return false;
}
}
return true;
}
int main()
{
bool flg = IsPrime(6);
printf("%d\n",flg);
return 0;
}
逗号表达式
int c;
int b = (a = 20,c = 30);
printf("%d\n",b);
得到的结果是b=30
求三个数的最大值
#include<stdio.h>
int Max2(int a,int b)//把两个数字先进行比较
{
return a > b ? a : b;
}
int Max3(int a,int b,int c)
{
return Max2(Max2(a,b),c);
}
int main()
{
int max = Max3(10,20,30);
printf("%d\n",max);
return 0;
}
isdigit是计算机C(C++)语言中的一个函数,主要用于检查其参数是否为十进制数字字符。
判断字符ch是否为英文字母,若为英文字母,返回非0(小写字母为2,大写字母为1)。若不是字母,返回0。
for循环
1.语句最简形式为:
for( ; ; )
2.一般形式为:
for(单次表达式;条件表达式;末尾循环体)
{
中间循环体;
}
其中,表示式皆可以省略,但分号不可省略,因为";"可以代表一个空语句,省略了之后语句减少,即为语句格式发生变化,则
编译器不能识别而无法进行编译。
for循环小括号里第一个";"号前为一个为不参与循环的单次表达式,其可作为某一变量的初始化赋值语句, 用来给循环控制变量
赋初值; 也可用来计算其它与for循环无关但先于循环部分处理的一个表达式。
int main()//运行这个程序可以清楚看到for循环的内部构造
{
int i;
for(i = 0,printf("#1%d\n",i);printf("#2:%d\n",i),i < 3;i++,
printf("#3:%d\n",i))
{
printf("语句块\n");
}
return 0;
}
if和switch
switch与if的区别:(if 和else都为条件判断语句)
1.switch会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。程序首先判断switch变量是否大于最大case 常量,若大于,则跳到default分支处理;否则取得索引号为switch变量大小的跳表项的地址,程序接着跳到此地址执行,到此完成了分支的跳转。
2. 当分支较多时,当时用switch的效率是很高的。因为switch是随机访问的,就是确定了选择值之后直接跳转到那个特定的分支,switch只能是在常量选择分支时比ifelse效率高,但是if能应用于更多的场合,if比较灵活。
3. switch适合处理判断分支较多的情况下,而if适合处理判断分支较少的情况下 。
4.switch可以同时对多个条件进行处理和选择,而if 每次只能描述一个条件,多个需要用到if语句嵌套。
5.if :不管有多少次比较,都会一一进行比较 switch() >=4 被优化为一次比较
switch 语句,仅能够处理整型数值,即switch()括号中的判断的值,必须是整型的,float 和double不能被判断,而且每个case后面跟的值,也必须是整形的。对于大规模的连续数值,比如if(a>=1 && a<=100) 这样的语句,要用switch则需要连续写100个case,这种情况下,switch是不适用的。但是总体来说,对于散列的整型数据,用switch语句更清晰明确,而对于其它情况,if语句则更好。
#include<stdio.h>
void Fun(char ch)
{
switch(ch)
{
case 'A':
printf("90-100\n");
break;
case 'B':
printf("70-80\n");
break;
case 'C':
printf("60-70\n");
break;
case 'D':
printf("60以下\n");
break;
default:
printf("不及格\n");
break;
}
}
int main()
{
Fun('A');
Fun('B');
return 0;
}
数字求和
#include<stdio.h>
void Sum(int n)//求和
{
int sum = 0;
int sumOdd = 0;//奇数
int sumEve = 0;//偶数
for(int i = 1;i <= n; i++)
{
sum += i;
}
for(int i = 1;i <= n;i += 2)
{
sumOdd += i;
}
for(int i = 2;i <= n;i += 2)
{
sumEve += i;
}
printf("sum ==>%d",sum);
printf("sumOdd ==>%d",sumOdd);
printf("sumEve ==>%d",sumEve);
}
int main()
{
Sum(1000);
return 0;
}