学习目标:
- 复习循环语句
- 复习条件语句
- 复习函数
- 备注:C++库函数说明:cplusplus.com
C官网:cpppreference.com
程序员知乎:stackoverflow.com
学习内容:
- 掌握while,for ,dowhile()使用方法 ,完成相应题目
- 掌握if,switch 使用方法 ,完成相应题目
- 掌握函数递归 迭代,完成相应题目
- 额外补充知识 getchar,putchar,scanf 以及输入缓冲区
学习时间:
- 2022/5/28
学习产出:
- CSDN 技术博客 1
具体内容:
一.循环案列
1.打印1-100的奇数
short i;
for(i=0;i<100;i++)
{
if(1 == i%2)
{
printf("%d\n",i);
}
}
2. 使用嵌套循环将“hehe”打印一百次,请判断打印结果,并解释
int i=0;
int j=0;
for(;i<10;i++)
{
for(;j<10;j++)
{
printf("hehe\n");
}
}
结果只打印10个hehe,因为外循环第一次进入时 i=0,外循环第二次进入时i=1,此时内循环中的j 已经在上次循环中自增到10,所以只打印10个hehe
3. 第二题的变种,解释结果
int x, y;
for (x = 0, y = 0; x < 2 && y < 5; ++x,y++)
{
printf("hehe\n");
}
打印两次hehe,因为for 进行一次时 已经 开始一圈 自增 和x++没有区别
4.面试题 请问下面循环了多少次
int i = 0;
int j = 0;
for (i = 0, j = 0; i = 0; i++, j++)
{
i++;
}
0次,i=0 ,即将0传入for的条件判断语句,条件为假 跳出循环
5.n的阶乘
int i=0;
int n=0;
int sum=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
sum=i*sum;
}
printf("%d的阶乘为:",sum);
6.计算1!+2!+3!...+10!
int i;
int temp=1;
int sum=0;
for (i = 1; i <= 10; i++)
{
temp *= i;
sum +=temp;
}
printf("%d\n", sum);
7.输入周几 判断是工作日还是休息日
int day;
scanf("%d",&day);
switch(day)
{
case1:
case2:
case3:
case4:
case5:
printf(“今天是工作日”);break;
case6:
case7:
printf(“今天是休息日”);break;
}
二.函数案例
1.学会查找库函数的使用说明
//C++库函数说明:cplusplus.com
// C官网:cppreference.com
// 程序员知乎:stackoverflow.com
参考使用说明 使用strcpy
1.1strcpy函数
char arr []="MUJI";
char arr2[]="########";
strcpy(arr2,arr1);
//说明:arr2是目标,arr1是源头,将源头 拷贝到 arr2。形参是char指针类型,而数组名就是数组第一个元素的地址,所以不用加入&取地址
printf("%s\n",arr2);
2.函数的调用
分为传值调用,传址调用
//传值调用
swap1(int a,int b)//函数将a和b交换
{
int temp=0;
temp=a;
a=b;
b=temp;
}
int main()
{
int a=1;
int b=2;
swap1(a,b);
printf("a:%d\n,b:%d\n",a,b);
return 0;
}
发现 a和b并没有交换,是因为 在main里使用swap1 传入实参时,会开辟新的内存空间 给swap1使用,swap1里的空间 的ab会在 调用完函数后销毁,并不会干扰到main里面的 ab空间存放的值; 而传址就很好的解决这个问题,使用指针指向存放ab的地址.
//传址调用
swap2(int *a, int *b);
{
int temp=0;
temp=*a;
*a=*b;
*b=*a;
}
int main()
{
int a=1;
int b=2;
swap2(&a,&b);
printf("a:%d,b:%d\n",a,b);
}
3.函数的递归
3.1理论:程序自身调用自身, 函数的递归 作为一种算法,极大减少了代码量
3.2递归常见的错误
无条件递归或者栈区对放不下时 就会导致栈溢出,所以一定要加入 递归后越来向 结束递归的条件接近,且不能存放的递归数据过大;
//栈区被消耗干,会跳出错误,stack overflow,即栈溢出
//栈区:存放局部变量,函数形参,由编译器自动分配释放
//堆区:动态开辟的内存,一般由程序员释放
//静态区:存放全局变量 static修饰的变量,程序结束后系统自动释放
//文字常量区:常量字符,程序结束后系统自动释放
//程序代码区:存放函数体的二进制代码
4.递归练习
4.1接受一个无符号整型值,按照顺序打印每一位,如输入1234,输出 1 2 3 4
int print(int num)
{
if(num>9)
{
print(num/10);
}
printf("%d",num%10);//%10是留下最后一位
}
int main()
{
unsigned int num=0;
scanf("%d",&num);
print(num);
}
4.2 编写函数来计算 字符串长度,不允许使用编写临时变量
my_lenstr(char *str)
{
if(*str!='\0')
{
return 1+my_lenstr(str+1);
}
else
{
return 0;
}
}
int main()
{
char arr[]='bit';
printf("%d",my_lenstr(arr));
return 0;
}
//