C语言(循环结构详解、一维数组、字符串处理函数)笔记-day2

目录

一、循环结构

1.1 while循环

1.2  for循环

1.3 do-while循环

1.4 循环嵌套

1.5  死循环

1.5.1 break 关键字 

 1.5.1 continue 关键字 

 1.6 练习编程

二、一维数组

2.1 数组初始化

 2.2 冒泡排序

​  三、字符串

3.1  字符串输出

3.2  字符串拷贝

 3.3  字符串函数讲解

总结



一、循环结构

循环可反复进行操作,非常方便,例如求1~1000的值、遍历数组等等,需要注意:1.循环变量的初始化 2. 循环结束条件 3. 循环变量的自加自减 ,常用循环语句:for() 、while() 、do{}while()

1.1 while循环

练习1: 问题: 求出 1+2+3+4+5+6+....+100的和

练习2: 用while循环 输出从1-1000内能整除3 或 整除5的数字,能够整除任意一个都算满足条件

1.2  for循环

练习3:用for循环 求出 1+2+3+4+5+6+....+100的和

练习4: 用for循环 输出从1-1000内能整除3 或 整除5的数字,能够整除任意一个都算满足条件 

1.3 do-while循环

练习同上,不过是使用do-while循环来求1~100的值;1~1000内整除3但不能整除5的数

while和do-while有什么区别

    while循环,先进行条件判断,再决定是否进入循环体;while可能一次也不进入
    do-while,先进入一次循环体,再进行条件判断,循环是否继续运行;循环至少循环一次,

1.4 循环嵌套

        凡是循环语句都可以复合进行嵌套

练习7:用for循环嵌套 实现输出如下图型, 要求1次只能输出一个 "#" printf("#");
             //外循环次数控制行数,内循环的次数控制列数    3行5列的#

 练习8: 用for循环嵌套 实现输出如下图型, 要求1次只能输出一个 "*" printf("*");

 (1)确定行数,控制外循环的次数  (2)找到关系式 ,内循环控制个数

1.5  死循环

当我们不知道循环次数时,但又必须要使用循环,所以只要设定结束条件,让程序停下来,如果没有满足刹车条件,程序就会一直进行。

例如:for(;;)  while(1)

1.5.1 break 关键字 

break 作用:跳出一个循环体     结束switch体和循环体(for,while,do-while循环)

练习9:求和 1+2+3+4+5+6+....+100 ,如果只加到5 (1+2+3+4+5)停止

 1.5.1 continue 关键字 

continue 关键字作用:结束本次循环 或 结束一次循环

练习10:求和 1+2+3+4+5+6+....+100 ,如果跳过10?

练习11:用while写一个死循环,实现用户输入一个数字后,立刻打印输出该数字,直到输入为0时为止,结束程序

 1.6 练习编程

练习12:打印输出100-999之间的所有水仙花数,水仙花数需要满足下面条件

例如 153就是水仙花数 满足条件 153 == 1*1*1 + 5*5*5 + 3*3*3  

方法1:

方法2:

 练习13:编写一个程序,输出1-100的全部素数(除了1和自己,不能被任何数整除的数)

 2 3 5 7 11 13 17 19 ....

 练习14:输出N层三角形阵,层数由用户输入(输出满足下面规律的三角形阵)

二、一维数组

数组:一次性定义多个变量 也可看做同一类型的集合 。数组定义:类型 数组名[个数] 

2.1 数组初始化

数组元素下标是从0开始,循环赋值

(1)完全初始化,所有的元素,都会赋值

(2)部分初始化(没赋值的元素默认为0)

注意事项:

练习15:键盘输入5个学生成绩,然后打印输出和与平均值

练习16:输出Fibonacci数列前20项, 先正序输出,然后逆序输出。斐波那契数列  (前两项的和等于第三项  )

#include <stdio.h>
int main()
{
	int i;
	int a[20] = {1,1};//让a[0]和a[1]初始化为1,其他为0
	//形成斐波那契数列
	for(i = 2; i < 20; i++)//i从2开始,是因为下标为2代表第3个,往后开始满足规律
	{
		a[i] = a[i-1] + a[i-2];
	}
	//用个for循环 正序打印
	for(i = 0; i < 20; i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
	//用个for循环,倒序打印
	for(i = 19; i >= 0; i--)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
	return 0;
}			

 2.2 冒泡排序

原理:每次两个数进行比较,从数组的前两个元素开始,如果前面的数 > 后面的数,就交换第一趟会求出一个最大值,并且放在最后面,然后 依此类推,经过最多N-1趟,排好序

  练习17:使用冒泡排序将数组a[6]={12,5,34,234,34,23}按增序排列

#include <stdio.h>
int main()
{
	int i,j;
	//规律 假设数组的元素个数为n,那么 
	//外循环的结束条件是 i < n-1;
	//内循环的结束条件是 j < n-1-i;
	int a[6] = {12,5,34,234,34,23};
       //循环遍历数组打印
	for(i = 0; i < 6; i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
	//实现对数组进行冒泡排序
	for(i = 0; i < 6-1; i++)
	{
		for(j = 0; j < 6-1-i; j++)
		{
			//j =   0 1 2 3 4
			//j+1 = 1 2 3 4 5 
			if(a[j] > a[j+1])
			{
				int temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
		}
	}
	//循环遍历数组打印
	for(i = 0; i < 6; i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
	return 0;
}

    练习19:完数(因子不包含自己)的和等于它本身 6  1*6  2*3 1+2+3 == 6 打印输出1-1000之间的完数

#include <stdio.h>

int main()
{
	int i,j;
	int sum;
	//此for循环来代表1-100之间的每一个数
	for(i = 1; i <= 1000; i++)
	{
		sum = 0;//在对每个数判断之前,都要先将sum清零
		//对每一个数进行找到它的所有因子,将1-前一个数,都%一遍
		for(j = 1; j < i; j++)
		{
			if(i % j == 0)//说明j是因子
			{
				sum += j;
			}
		}
		//上面的循环结束后,得到了这个数的所有的因子的和
		if(sum == i)
		{
			printf("%d\n",sum);//sum is 6
		}
	}
	return 0;
}	


  三、字符串

字符串由多个单个字符组成并且由'\0'结尾 ,任何字符串必须以'\0'结尾  不以'\0'结尾也不叫字符串

3.1  字符串输出

字符用char 类型变量保存,那么字符串就用char数组来保存

3.2  字符串拷贝

对于字符数组来说,字符串拷贝就是把数组赋值给另一个字符数组

 3.3  字符串函数讲解

strlen strcpy  strcat

练习20:围绕着山顶有10个圆形排列的洞,狐狸要吃兔子,兔子说:“可以,但必须先找到我,我就藏身于这十个洞中的某个洞。你从1号洞找,下次隔1个洞(即3号洞)找,第三次隔2个洞(即6号洞)找,再隔3个…以后在这个圆圈中如此类推,次数不限。”但狐狸从早到晚进进出出了1000次,仍没有找到兔子。问:兔子可能在哪个洞里?

#include <stdio.h>
int main()
{
	int a[10] = { 0 };
	int i;
	int j = 0;//j是数组的下标,j代表的是狐狸入洞的洞号对应的下标
	//循环次数代表找了1000次
	for(i = 0; i < 1000; i++)
	{
		a[j] = 1;//代表狐狸去过这个洞
		j = (i+j+2) % 10;//计算出下一次狐狸要去的洞号对应的数组下标 % 10循环
	}
	//用循环遍历每一个元素,只要保持0不变就是没去过的洞
	for(i = 0; i < 10; i++)
	{
		if(a[i] == 0)
		{
			printf("%d ",i+1);//i下标  下标 + 1 == 洞号
		}
	}
	printf("\n");
	return 0;
}


 

练习21:消除一句话中所有的元音字母,例如:a[] = "I am a student!"

#include <stdio.h>

int main()
{
	char a[] = "I aaam a Student!!";
	char b[] = "aeiouAEIOU";
	int i,j,k;
	printf("%s\n",a);
	//遍历字符串 
	for(i = 0; a[i] != '\0'; i++)
	{
		//k 用来遍历b数组
		for(k = 0; b[k] != '\0'; k++)
		{
			if(a[i] == b[k])//只要出现a[i] == b[k]说明a[i]是元音,没必要继续往下和b[k]比较,所以break
			{
				break;
			}
		}

		if(b[k] != '\0')//证明上面的循环,是提前结束了,执行过break,说明a[i]是元音
		{
			//进入这个条件,证明当前的a[i]是原因字母,需要进行a[i]之后的元素整体向前移动一个位置
			for(j = i; a[j] != '\0'; j++)
			{
				a[j] = a[j+1];//逐个向前移动覆盖删除
			}
			//为了解决连续两次出现元音字母的bug
			i--;//删除一个元音字母后,后面的元音字母会向前移动一个位置,需要继续对原来删除的位置,再次判断
		}
	}
	printf("%s\n",a);
	return 0;
}


总结

  1. 今天主要讲述了C语言的循环结构、数组和字符串函数。其中对while() for() do{}while(); 循环结合break continue关键字进行了详细的讲解,并且进行了相关的代码编程练习;对一维数组有了一个基本的认识,存储、长度、起始位置和定义规则进行了细致的表述;对字符串函数进行了讲解,加深了对ASCII的理解、操作能力。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值