昨天给电脑装系统,折腾到今天上午才折腾好,今天补上昨天的学习内容。
昨天学习了for循环、函数。
一、for循环
1.结构
for (语句1; 条件 ; 语句2)
{
循环体
}
语句1:初始化语句(整个for循环只会执行一次)
语句2:增量语句(执行完循环体后再执行的语句)
2.特点
1>for一开始就会执行一次语句1(整个for循环只会执行一次)
2>判断条件是否成立,如果条件成立,就会执行一次循环体,然后就会执行语句2,再判断条件是否成立
#include <stdio.h>
int main(int argc, const char * argv[])
{
//for循环
for (int count = 0; count < 50; count++) {
printf("做第%d次俯卧撑\n",count);
}
//for循环,另一种写法
for (int count = 0; count < 50; printf("做第%d次俯卧撑\n",count), count++) {
}
//实现同样条件,while循环
int count = 0;
while(count < 50){
printf("做第%d次俯卧撑\n",count);
count++;
}
//逗号运算符
printf("做俯卧撑\n"),printf("哈哈哈\n");
return 0;
}
3.for循环的注意事项
#include <stdio.h>
int main(int argc, const char * argv[])
{
/*不要随便在for()后面写分号
for (int i = 0; i < 5; i++)
{
printf("哈哈\n");
}
*/
/*错误写法,如果for()后面{}取消,就执行紧挨着的语句,不能有空行
for (int i=0; i<5 ; i++)
int a = 10;
*/
/*错误写法,作用域问题,这里的a只能用在循环体{}中,当执行完之后,{}中数据消失,则相当于a++,并没有定义a
for(int i = 0; i <10;i++ ,a++)
{
//a只能用在循环体{}中
int a = 10;
}
*/
//作用域问题,当执行时,{}内没有定义a的值,所以他会出去寻找a=9的值
int a = 10;
for(int i = 0,a = 9; i < 5; i++)
{
//int i = 10;
printf("a = %d\n",a);
}
//最简单的利用for循环实现死循环
for(;;);
return 0;
}
4.循环嵌套
/*
输入下面内容
好友列表1
好友1
好友2
好友3
好友4
好友5
好友6
好友列表2
好友1
好友2
好友3
好友4
好友5
好友6
*/
#include <stdio.h>
int main(int argc, const char * argv[])
{
for (int i = 0; i < 5; i++) {
printf("好友列表%d\n",i+1);
for (int j = 0; j < 3; j++) {
printf(" 好友%d\n",j + 1);
}
}
}
5.练习:
提示用户输入一个正整数n,如果n=5,就输入下列图形,其他n值以此类推
*****
****
***
**
*
#include <stdio.h>
int main(int argc, const char * argv[])
{
//1.定义一个变量存储用户输入的值
int n = 0;//一定要初始化
//2.判断n值合不合理
while(n <= 0){
//2.1提示用户输入正整数
printf("请输入一个正整数:");
//2.2接收输入的数据
scanf("%d",&n);
}
//3.输出图形
for (int i = 0; i < n; i++) {
for (int j = 0; j <n-i; j++) {
printf("*");
}
printf("\n");
}
return 0;
6.对整个流程控制总结
一、选择结构
1.if
1>结构
if(条件)
{
}else if{
}else if{
}else{
}
2>特点:
*同一时刻,只有一个大括号里面的代码会被执行
2.switch
1>结构
switch(数值)
{
case 数值1:
break;
case 数值2:
break;
case 数值3:
break;
default:
break;
}
2>特点:
*默认情况下,只有一个case后面的代码会被执行
*如果一个case后面没有break,而且这个case成立,就会按顺气执行后面所有case中的语句,知道遇到break为止
*如果要在case后面定义一个新的变量,必须用大括号{}包住
二、循环结构
1.while
特点:如果一开始条件就不成立,永远不会执行循环体
2.do while
特点:不管条件是否成立,至少会执行一次循环体
3.for
4.选择
1>一般优先使用for循环
2>然后在考虑while
3>最后再考虑do while
7.continue和break的使用注意事项
/*
break:
1.使用场合
1>switch语句:退出整个switch语句
2>循环结构:退出整个循环语句
*while
*do while
*for
2.注意点:
continue:
1.使用场合
循环结构:结束当前这次的循环体,进入下一次循环体
*while
*do while
*for
2.注意点
*/
#include <stdio.h>
int main(int argc,constchar * argv[])
{
/*
for (int i = 0;i < 5;i++)
{
printf("%d\n",i);
if (i%2)
{// i为整数:1、3
continue;
}
}
*/
for (int i =0; i<3;i++)
{
for (int j =0;j <2;j++)
{
if (j ==1)
{
// continue;
break;
}
printf("A\n");
}
// break;
printf("B\n");
}
return0;
}
二、函数
1.函数的定义
返回值类型 函数名(形式参数列表)
{
函数名
}
2.函数的基本使用
#include <stdio.h>
int printLine()
{
printf("---------------\n");
return 0;
}
int average(int num1 ,int num2)
{
return (num1 + num2)/2;
}
int main(int argc, const char * argv[])
{
// printLine();
// printLine();
int a = 10;
int b = 9;
int c = average(a , b);
printf("c is %d\n",c);
int a1 = 11;
int b1 = 20;
int d = average(a1, b1);
printf("d is %d\n",d);
return 0;
}
3.函数的基本点:
1>形式参数:定义函数时函数名后面()中的参数,简称形参
2>实际参数:调用函数时传入的具体数据,简称实参
3>实参个数必须等于形参个数
4>函数体内部不能定义和形参一样的变量
5>如果是基本数据类型作为函数形参,纯粹是值传递,修改函数内部形参的值,并不会影响外面实参的值,充分演示了函数内存执行的整个过程
6>一个函数可以没有形参,也可以由无限多个形参
#include <stdio.h>
//形式参数,简称形参
int sum(int num1 ,int num2)
{
//函数体内部不能定义和形参一样的变量
//int num1;
num1 = 50;
return num1 + num2;
}
int main(int argc, const char * argv[])
{
//a、b称为函数的实际参数,简称实参
int a = 100;
int b = 27;
int c = sum(a , b);
//这里充分演示了函数内存执行的整个过程,看博客图
printf("a = %d , b = %d ,c =%d\n",a , b , c);
return 0;
}
此图为上面函数内存分布思考图。
4.关于returen函数的作用
return的作用
1>退出函数
2>返回一个具体值给函数调用者
返回值注意点:
1>void代表没有返回值
2>如果没有明确说明返回值类型,默认返回为int类型
3>就算明确声明了返回值类型,也可以不返回任何值
#include <stdio.h>
char test()
{
return 'A';
}
int tset2(){
printf("888888888\n");
// return 10;
}
/*伪代码
void login(QQ,密码)
{
//1.验证QQ有没有值
if (QQ没有值) return;
//2.验证密码有没有值
if (密码没有值) return;
//3.把QQ、密码发送到服务器
}*/
int main(int argc, const char * argv[])
{
int c = test2();
printf("c=%d\n",c);
return 0;
}
昨天就学到这里。