C语言学习分享
1、选择结构
选择语句又称为分支语句,它通过对给定的条件进行判断,从而决定执行两个或多个分支中的哪一支。
- 示例:为了判断一个数是偶数还是奇数,执行如下操作:
1.1、if语句
1.1.1、if语句(一)
- 通过条件为真还是为假来决定
- 常规格式:
if (表达式)
{
语句;
} - 表达式是要判断的条件,跟在后面的是一个或一组语句
- 在if后的语句不止一个,应用大括号{}将他们组织起来。这样的组会称为“复合语句”或“代码块”。如果只有一个语句,大括号{}可以省略,但不建议。
1.1.2、if语句(二)
- 可以选择两个语句中的一个来执行
- 语法形式:
if(表达式)
{
语句-1;
}
else
{
语句-2;
} - 如果 if 表达式的值为true(非0),将执行 if 语句(一个或一组)后的语句块
- 如果 if 表达式的值为false(0),那么控制权将交给else 表达式后面的语句
- else语句是可选的.仅当 if 表达式的值为false时,才会执行else后的语句或语句序列
实例
#include <stdio.h>
int main()
{ //这个程序用来显示一个数是偶数还是奇数
int num , res ;
printf("Enter a number :");
scanf("%d",&num);
res = num % 2;
//if(0 == res)//赋值运算符= 和 关系运算符==注意使用
if (res == 0)
{
printf("Then number is Even");
}
else
{
printf(“The number is Odd ”);
}
return 0;
}
1.1.3、if语句(三)
- if-else-if 语句也称为 if-else-if 台阶或if-else-if 阶梯
- 条件的计算是自顶向下的
- 建议书写格式:
if (表达式)
{ 语句;
}
else if (表达式)
语句;
else if (表达式)
语句;
else
语句;
实例
#include <stdio.h>
#include <stdlib.h>
void main(){
int x = 0;
system (“cls”);
printf("Enter Choice (1 - 3) :");
scanf("%d", &x);
if (x == 1)
printf ("\nChoice is 1");
else if ( x == 2)
printf ("\nChoice is 2");
else if ( x == 3)
printf ("\nChoice is 3");
else
printf ("\nInvalid Choice ");
}
1.1.4、嵌套的if语句(一)
- 嵌套的 if 语句就是在 if 或 else 语句中包含另一个 if 语句
- 在 C 语言中,else 语句通常与同一块中距离它最近且未与 else 关联的 if 语句相匹配,与书写格式无关
- 语法示例:
if (表达式-1)
{
if (表达式-2)
{
语句-1;
}
if (表达式-3)
{
语句-2;
}
else
{
语句-3;
}
/与if(表达式-3)相匹配/
}
else
{
语句-4;
}
/与if (表达式-1)相匹配/
#include <stdio.h>
void main (){
int x, y;
x = y = 0;
printf ("Enter Choice (1 - 3) :");
scanf ("%d", &x);
if (x == 1)
{
printf("\nEnter value for y (1 - 5) :");
scanf ("%d", &y);
if (y <= 5)
printf("\nThe value for y is : %d", y);
else
printf("\nThe value of y exceeds 5");
}
else
printf ("\nChoice entered was not 1");
}
1.1.5、嵌套的if语句(二)
1.2、Switch语句
- switch 语句是一种多路判定语句,它判断表达式的值是否与整数或字符常量列表中的某个值相匹配
- 若找到了相应的匹配,就会执行与常量关联的语句
- 通用语法:
switch(a)
{
case 常量1:
语句集;
break;
case 常量2:
语句集
break;
……
default:
语句集;
break;
} - switch、case、和default都是关键字,语句可以是简单或复合语句。
- switch后的表达式需要用圆括号括起来,而且switch语句的主题用{ }括起来
- 计算表达式的数据类型要与指定的case常量的数据类型匹配。
- switch后的表达式可以包含任何变量名,也可以是常量。
- case后面只能是常量(整型和字符型)。
- switch语句执行过程:
#include<stdio.h>
void main()
{
int iBasic;
printf("\n please enter your basic:");
scanf("%d",&iBasic);
switch(iBasic)
{
case 100:printf("\n Bonus is dollar %d\n",30);break;
case 200:printf("\n Bonus is dollar %d\n",50);break;
case 300:printf("\n Bonus is dollar %d\n",125);break;
case 400:printf("\n Bonus is dollar %d\n",140);break;
case 500:printf("\n Bonus is dollar %d\n",175);break;
default:printf("\n Invalid entry");break;
}
}
2、循环结构
- 循环是程序中重复执行,直到满足指定条件才停止的一段代码。
- C语言中,控制循环执行的条件在编码时用到了关系和逻辑运算符。
2.1、for循环
- for循环的通用语法:
for(初始化计数 ; 条件测试 ; 再求值参数)
{
语句;
} - 初始化计数是一个赋值语句,它在进入循环前设置循环控制变量。
- 条件测试是一个关系表达式,它决定何时退出循环。
- 再求值参数定义每次执行循环时,循环控制变量如何变化。
- for 循环的三个部分必须用分号 ; 隔开。
- 组成循环体的语句可以是单个语句,也可以是复合语句。
- 要正确表达循环结构应注意三方面的问题:控制变量的初始化,循环的条件和控制变量的更新。
- 工作原理:
- 1、初始化计数,给循环变量赋初始值。
- 2、条件测试,求值结果为 true,就执行循环体内的代码执行。当条件变为 false时退出循环,程序将继续执行 for 循环后面的语句。
- 3、循环变量变化计算。
- 4、重复第二步条件测试。
实例(一)
#include <stdio.h>
int main(){
int count;
printf("\tThis is a \n");
for(count = 1; count <=6 ; count++)
{
printf("\n\t\t nice");
}
printf("\n\t\t world.\n");
return 0;
}
实例(二)
#include <stdio.h>
int main(){
int i,n;
long fact=1;
printf("Input n: ");
scanf("%d", &n);
for(i=2; i<=n; i++)
{
fact*=n;
}
printf("%d!=%ld\n",n,fact);
}
2.2、while循环
-
通用语法:
while(表达式)
{
语句;
} -
表达式一般为关系表达式或者逻辑表达式
-
语句可以是空语句、一个简单的语句或语句块
-
如果while循环中包含一组语句,必须用{}括起来
-
只要条件为真循环就会迭代
实例
#include <stdio.h>
int main()
{
int count = 1;
while( count <= 10)
{
printf("\n This is iteration %d\n ",count);
count++;
}
printf("\n The loop is completed. \n ");
return 0;
}
/*和for循环一样,while循环在执行循环前检查条件*/
2.3、do…while循环
-
通用语法
do
{
语句;
}while(条件); -
while后面的分号不能省略
-
do…while 循环中,循环体中的代码在条件测试执行前执行一次
-
条件为 False 时,do while 循环终止;控制权传递给紧跟在 while 语句之后的语句
#include <stdio.h>
int main () {
/*接受并显示一些整数,直到输入0(零),然后退出整个循环,
并打印输入的整数的个数*/
int num1, num2;
num2 = 0;
do {
printf("\nEnter a number : ");
scanf("%d",&num1);
printf(" No. is %d ",num1);
num2++;
} while (num1 != 0);
printf ("\nThe total numbers entered were %d ",--num2);
return 0;
}
2.4、三种循环的区别和总结
- while和for语句先判断循环控制条件,do-while语句后判断循环控制条件,所以,while和for语句的循环体可能一次也不执行,而do-while语句的循环体至少也要执行一次。
- 三种循环可以处理同一问题,一般情况可以互相代替。但在实际应用中,我们要根据具体情况来选用不同的循环语句。选用的一般原则如下:
- 如果循环次数在执行循环体之前就已确定,一般用for语句;如果循环次数是根据循环体的执行情况确定的,一般用while语句或者do-while语句。
- 当循环体至少执行一次时,用do-while语句;反之,如果循环体可能一次也不执行时,用while语句。
2.5、嵌套循环
- 如果一个循环出现在另一个循环中,则称它为嵌套循环。
- 三种循环都可以相互嵌套,自由组合
实例
#include <stdio.h>
void main()
{
int i, j, k;
i = 0;
printf("Enter no. of rows:");
scanf("%d", &i);
printf("\n");
for (j = 0; j < i ; j++)
{
printf("\n");
for (k = 0; k <= j; k++)
printf("*");
}
}
3、运算符
3.1、条件运算符
- 条件运算符是C语言中唯一的三目运算符
表达式1 ? 表达式2 :表达式3 - 条件运算符的优先级高于赋值运算,低于关系和算术运算符
- 结合方式:从右向左
- 计算:a=3,b=30;
a<5 ? (c=6) : b>20 ? (b=8) : (c=9)
3.2、逗号运算符
- 格式是 :exprn1, exprn2 ;
- 逗号运算符优先级最低
- 表达式被逗号运算符隔开,从左向右求值。但只有其最右端的表达式的结果,作为整个逗号表达式的结果
- 通过在for循环中包含多个初始化表达式或增量表达式,可以丰富for循环中表达式
4、其他控制语句
4.1、return
- 通用语法: return expression;
- 表达式是可选的
- return 语句用于从函数中返回
- return 语句可以带有值,该值将返回给调用程序它使执行返回到调用函数的位置
- 一个函数中可以使用多个return语句,但是遇到第一个return语句时返回
4.2、break
- 通用语法: 通用语法:
- 用于在 switch 语句中终止case
- 也可以用于在循环中突然终止循环
- 当循环中遇到 break 语句时,循环立即终止,控制权传递给循环之后的语句
- 多层循环中,break只向外跳一层
实例
#include <stdio.h>
int main ()
{
int count1, count2;
for(count1 = 1, count2 = 0;count1 <=100;count1++)
{
printf(" Enter %d count2 : ",count1);
scanf("%d", &count2);
fflush(stdin);
if(count2 == 100) break;
}
return 0;
}
4.3、goto
- 通用语法: goto label;
- 需要在函数中某行代码处,定义一个标签
- goto 语句将控制权传递给C程序中同一函数内的其他语句
- 它实际上违背了严格的结构化程序设计语言的原则
- 它们降低了程序的可靠性,并使得程序难以维护
4.4、continue
- 通用语法: continue;
- continue 语句,只能在循环中使用让封闭循环进行下一次迭代
- 遇到该语句时,跳过循环体中剩余的语句,控制权传递给重新初始化步骤
- 在while循环和do…while循环中,程序控制权传递个条件测试语句
- 在for循环中,continue影响循环的增量部分,然后执行条件测试
实例
#include <stdio.h>
int main ()
{
int num;
for(num = 1; num <=100; num++)
{
if(num % 9 == 0)
continue;
printf("%d\t",num);
}
return 0;
}
/*打印1-100之间不能被9整除的数*/
4.5、exit()
- 通用语法: exit(int return_code);
- exit() 用于跳出一个程序
- 是一个标准库函数
- 该函数的用途是立即终止程序,控制权交给操作系统