C语言第五次课(if语句,函数,形参实参,值传递,逗号表达式)
(1)双分支改单分支语句;
求a b中的最大值:
#include <stdio.h>
int main()
{
int a =0,b = 0;
int max = 0;
scanf_s("%d %d",&a,&b);
max = a;
if(b > max)
{
max = b;
}
printf("max = %d \n",max);
return 0;
}
//用三目运算符简化if语句 表达式1?表达式2:表达式3;若表达式1为真则取表达式2的值否则取表达式3的值。(只适用于简单的if语句)
int main()
{
int a = 0;b = 0;
scanf_s("%d %d",&a,&b);
max=a>b?a:b;
printf("%d\n",a,b,max);
return 0;
}
(2)输入字符使用getchar(来替代scanf_s)
#include <stdio.h>
int main()
{
char ch = '\0';// 0 NULL
printf("input a character :\n");
ch = getchar();//stdin
return 0;
}
//ch = getchar();输入字符 a = getchar不可以 因为getchar不可修饰整型。
(3)函数
尽可能调用库函数
#include <ctype>
int main()
{
char ch = '\0';
printf("input a character:\n");
ch = getchar();
if (iscntrl(ch))//判断控制字符
{
printf("this is a control character \n");
}
else if (isdigit(ch))//判断数字型字符
{
printf("this is a dight \n");
}
else if (islowe(ch))//判断小写字母
{
printf("this is a small letter \n");
{
else if (isupper(ch))、、判断大写字母
{
printf("this is a capitall letter");
}
return 0;
}
//atoi面试必考:将字节字符串转换成整数值。
空语句(语句可以为空,除了末尾的分号以外什么符号也没有);即仅有分号不执行操作。如 :int i j; i = 0; ; j = 1; 句子会提前终止。 if()可以 但if();不可以。while语句在后面放分号; 会产生无限循环。
函数类型:库函数和自定义函数(函数返回类型+函数名+形参列表+函数体)
//int Add_int(int a,int b);加分号叫做声明。int Add_int(int a,int b) { } 不加分号 跟花括号的叫做定义。
//起函数名一定是合法的标识符,以下划线字母开头。(不能出现关键字,重名,运算符)。
//每一个形参前面都必须有一个类型并拿逗号分隔Add_int(int a,int b) { },但(int a,b);不可以
示例:比较两个整形数并返回最大整形数:
//返回哪个值就把它写入临时空间如上图 c ,第一个return结束后归还栈帧,回到主函数后从临时量读取数据此时max=20,因为c是第三行Maxint的局部变量,可见性只在Maxint中有效,所以不能直接把c赋给15行的max。
//调用时把x值给a,y值给b,xy部分为实参,ab部分为形参,只能把实参传递给形参但反过来不行。
//规则:从外部接收输入时把它定义为形参,把要打印的变量返回回来。
//形参:只能等函数被调用时接收传递进来的数据,形参只有在程序被调用的过程中赋值(分配空间),函数执行完后形参变量释放,所以形参只在函数中可见(作用域)。
//实参:调用函数时给出的参数,包含了实实在在的数据。
形参与实参的区别:
//函数之外定义的变量都在数据区(.data)。函数内定义的变量都在栈区(.stack),如果变量前加了静态关键字static则放在.data数据区。
//函数调用时分配部分栈区(栈帧) win系统下栈区大小为1M。
函数调用中的内存分配:值传递
//上图把y给b b=20,把x给a a=10,然后把a赋给tmp tmp=10,b赋给a a=20,tmp赋给b b=10,a和b的交换并不会影响x y 的值 x仍等于10,y仍等于20,因为值的传递是单向的。
//通过间接方式改变x y。
(4)逗号表达式的优先级最低且从左向右计算。
int main()
{
int a = 1, b = 2, c = 3;
int x = 0;
x = (a+b,b+10,b+c);
// 3 12 5
printf("%d \n",x);
return 0;
}
//逗号表达式 从左向右计算 则x=5。