【C语言程序设计笔记】

C语言程序设计的三大语法结构

前言:
语句:C语言中,由分号隔开的句子就是一条语句
C语言中用非零表示,用表示,即:逻辑真,逻辑假
三大语法结构:顺序结构、分支(选择)结构、循环结构

/知识点汇总/

1、顺序结构

C语言中的顺序结构,逻辑很简单,就是代码一条一条的按顺序执行。

2、分支(选择)结构

2.1、if语句:

if语句的语法结构:

a、形式一:if(表达式)
			语句;
a、形式二:if(表达式)
			语句1;
		  else
		    语句2;		
a、形式三:if(表达式1)
				语句1;
		  else if(表达式2)
			    语句2;
		  ...
		  else
		        语句n;

2.1.1 、if—else语句例程1

/*例程2.1.1*/
#include <stdio.h>
int main()
{
	int age;
	scanf("%d",&age);
	//形式一:
	if (age >= 18)
		printf("成年");
	//形式二:
	if (age >= 18)
		printf("成年");
	else 
		printf("未成年");
	//形式三:
	if (age >= 18)
		printf("成年");
	//区分逻辑真,age=60也可输出,故不满足条件
	//else if (18 <= age <= 28)
	else if (age>=18 && age <= 28)
		printf("青年");
	else
		printf("发展");
	return 0;
}

代码规范性

2.1.2 、强调代码规范性例程1

/*例程2.1.2*/
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("haha");
	else
		printf("hehe");
		//此时,该代码不会打印
		//因为代码不规范,else理解为就近原则,是与第二个if组合的
	return 0;
}
//例程纠正,正确按照逻辑输出
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
		{
			printf("haha");
		}	
		else
		{
			printf("hehe");
		}		
	}
	return 0;
}

2.1.2 、强调代码规范性例程2

/*代码规范性例程2*/
//不规范书写
if (codition){
	return x;
}
return y;
//规范书写,加括号划分清楚
if (codition)
{
	return x;
}
else 
{
	return y;
}

2.1.2 、强调代码规范性例程3

/*代码规范性例程3*/
//避免错误
if(num == 5)
printf("666");
//更好的书写,避免输入为赋值符
if(5 == num)
printf("6868");

2.1.3 、练习题1

a、判断一个数是否为奇数
b、奇数:除二余一

#include <stdio.h>
int main()
{
	int num;
	printf("请输入一个正整数:");
	scanf("%d",&num);
	if (1 == num % 2)
	{
		printf("YES:奇数\n");
	}
	else 
	{
		printf("NO:不是奇数\n");
	}
	return 0;
}

2.1.3 、练习题2
a、输出一百以内的奇数
b、奇数:除二余一

#include <stdio.h>
int main()
{
	//方法一:结合for语句
	for (int i = 1; i <= 100; i++)
	{
		int js = i % 2;
		if (1 == js)
		{
			printf("  %d", i);
		}
	}
	printf("\n\n");
	//方法二:结合while语句
	int num = 1;
	while (num >= 1 && num <= 100)
	{
		if (1 == num % 2)
		{
			printf("  %d",num);
		}
		num++;
	}
	printf("\n");
	return 0;
}

小结:
(1)注意代码的规范性
(2)注意判断的语句赋值符 = 与关系运算符 == 的应用
(3)注意 if—else 语句的对应

2.2、switch语句

switch也属于分支结构,常常用于多分支的情况
switch语句的语法结构如下:

swich(表达式)
{
  case 常量1: 语句1 ;break;
  case 常量2: 语句2;break;
  ...
  case 常量n:    语句n;break;
  default 语句n+1break;
}

2.2.1 、switch语句例程1

/*例程2.2.1*/
#include <stdio.h>
int main()
{
	int day = 0;
	printf("请输入一个整数:");
	scanf("%d",&day);
	switch (day)//switch语句的参数只能整型/字符型/枚举型/字符串型
	{
	case 1:     //case的参数需要为常数
		printf("星期一\n");
		break;//跳出循环
	case 2:
		printf("星期二\n");
		break;
	case 3:
		printf("星期三\n");
		break;
	case 4:
		printf("星期四\n");
		break;
	case 5:
		printf("星期五\n");
		break;
	case 6:
		printf("星期六\n");
		break;
	case 7:
		printf("星期七\n");
		break;
	default:
		printf("无效\n");
		break;
	}
	return 0;
}

2.2.2 、switch语句例程2

/*例程2.2.2*/
#include <stdio.h>
int main()
{
	int n = 1;
	int m = 2;
	switch (n)
	{
	case 1:m++;
	case 2:n++;
	case 3:
		switch (n)
		{
		case 1:
			n++;
		case 2:
			m++; n++;
			break;
		}
	case 4:
		m++; 
		break;
	default:
		break;
	}
	printf("m = %d,n = %d",m,n);//5,3
	return 0;
}

小结
(1)switch语句的参数只能整型/字符型/枚举型/字符串型
(2)case的参数需要为常数
(3)break在switch语句的正确使用

3、循环结构

3.1、while循环语句

while语法结构:

while(表达式){
    语句块
}

3.1.1 、while语句例程1

/*例程3.1.1*/
#include <stdio.h>
int main()
{
	int i = 0;
	while (i < 10)
	{
		printf("%d",i);
		i++;
	}
	printf("\n");
	return 0;
}

3.1.2 、while语句例程2

/*例程3.1.2*/
#include <stdio.h>
int main()
{
	int i = 0;
	while (i < 10)
	{
		if (5 == i) break;//起到了强制跳出整个循环作用//0124
		if (5 == i) continue;//起到了强制跳出本次循环作用//0124+i==5的死循环
		printf("%d", i);
		i++;
	}
	printf("\n");
	return 0;
}

3.1.3 、while语句例程3

/*例程3.1.3*/
#include <stdio.h>
int main()
{
	char ch = 0;
	while ((ch = getchar()) != EOF)//ctrl+z退出
	{
		if (ch < '0' || ch > '9')//如果是非数字
			continue;//跳出本次循环
		putchar(ch);
	}
	printf("\n");
	return 0;
}

小结
(1)while语句根据情况,是否给跳出循环的条件,避免死循环
(2)break在while语句中的正确使用

3.2、getchar()与putchar()语句

a、getchar()从标准输入中读取一个字符
b、putchar()把一个字符写到标准输出

3.2.1 、getchar()与putchar()语句例程1

/*例程3.2.1*/
#include <stdio.h>
int main()
{
	int ch = getchar();
	printf("%c\n",ch);
	putchar(ch);
	while ((ch = getchar()) != EOF)//EOF理解为逻辑错误-1
	{
		putchar(ch);
		printf("输入ctrl+z结束循环。\n");
	}
	return 0;
}

3.2.2 、getchar()与putchar()语句例程2

/*例程3.2.2*/
#include <stdio.h>
int main()
{
	char  paeeword[20] = {0};
	printf("请输入密码:");
	scanf("%d",paeeword);//数组名本身是地址,所以不用加&
	printf("请确认(Y/N):");
	//int ch = getchar();
	//输入错误,因为输入函数是从缓冲区获取反馈,故此时的enter也被识别为\n,导致输出错误
	//清理缓冲区中不需要的内容
	int tmp = 0;
	while ((tmp = getchar()) != '\n')//判断从缓冲区读取到得是否是\n
	{
		;//空语句,理解为不用的扔掉
	}
	int ch = getchar();
	if('Y' == ch )
	{
		printf("密码正确\n");
	}
	else 
	{
		printf("密码错误\n");
	}
	return 0;
}

小结
(1)getchar()与putchar()语句是单个的输入输出,字符需要单引号 ’ ’
(2)注意格式符的正确使用 %c%d%s等
(3)数组名本身是地址,所以不用加取地址符 &

3.3、for循环语句

for语法结构:

for(表达式1;表达式2;表达式3)
	语句;

3.3.1、for语句例程1

/*例程3.3.1*/
#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		//if (5 == i) break;//01234
		//if (5 == i) continue;//012346789
		printf("%d\n",i);
	}
	return 0;
}

3.3.2、for语句例程2

/*例程3.3.2*/
#include <stdio.h>
int main()
{
	int arr[10] = { 0 };
	int i = 0;
	for (i = 0; i < 10; i++)//左闭=,右开<
	{
		printf("%d\n",arr[i]);
	}
	return 0;
}

3.3.3、for语句例程3

/*例程3.3.3*/
#include <stdio.h>
int main()
{
	int j = 0;
	int i = 0;
	//for (i = 0; i < 3; i++)//左闭=,右开<
	//{
	//	for (j = 0; j < 3; j++)//左闭=,右开<
	//	{
	//		printf("haha ");//9个haha
	//	}
	//}
	for (; i < 3; i++)//结束内部的for循环后,i++,i=2,进入内部for
	//由于此时内部for没有赋初值,所以j任然等于3,判断3=3不进入内部for循环
	{
		for (; j < 3; j++)//因为当j=3时,完成了打印三次haha,然后结束内部的for循环
		{
			printf("haha ");//3个haha
		}
	}
	printf("\n");
	return 0;
}

3.3.4、for语句例程4

/*例程3.3.4*/
#include <stdio.h>
int main()
{
	int j = 0;
	int i = 0;
	for (i = 0,j = 0; i = 10; i++,j++)//判断参数为0,0为假所以一次都不执行
	{
		printf("循环几次?");//0次
	}
	return 0;
}

小结
(1)for语句参数用分号隔开
(2)for语句参数可省略,但是不滥用

3.4、do–while循环语句

do–while语法结构:

do 
循环语句; 
while(表达式);

3.4.1、do–while语句例程1

/*例程3.4.1*/
#include <stdio.h>
int main()
{
	int i = 0;
	do
	{
		//if (5 == i) break;//01234
		//if (5 == i) continue;//01234+死循环
		printf("%d",i);
		i++;
	} while (i < 10);
	printf("\n");
	return 0;
}

3.4.2、do–while语句例程2

/*例程3.4.2*/
#include <stdio.h>
int main()
{
	int i = 0;
	do
	{
		//if (5 == i) break;//01234
		//if (5 == i) continue;//01234+死循环
		printf("%d",i);
		i++;
	} while (i < 10);
	printf("\n");
	return 0;
}

小结
(1)do–while语句至少都执行一次
(2)break和continue的正确使用

3.5、goto语句

a、无条件转移语句
b、其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加半角冒号“:”
c、语句标号起标识语句的作用,与 goto 语句配合使用
d、goto语句语法结构:

flag:
  语句; 
goto flag;

3.5.1、goto语句例程1
通常不建议使用goto,滥用可能导致程序混乱甚至崩溃

/*例程3.5.1*/
#include <stdio.h>
int main()
{
	flag:
	printf("hehe\n");
	printf("666\n");
	goto flag;//使得程序跳回到指定位置
	//根据goto : 可反复横跳
	//造成死循环
	return 0;
}

3.5.2、goto语句例程2
注意:goto语句只能在一个函数范围内跳转,不能跨函数。

/*例程3.5.2*/
#include <stdio.h>
void test()
{
flag:
	printf("不可跳转\n");
}
int main()
{
	goto flag;//报错,不能跨函数使用
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值