1 循环
do
{
}while(条件);
for()
{
}
题目:连续给变量a输入5次数据,每次都打印出结果。
2 函数
2.1 自定义函数的定义
函数原型(函数名、输入参数、返回值):
int main()
{
int a=20;
ing b=30;
int c=max_etc(a,b);
printf("2个数的最大值是:%d\n",c);
return 0;
}
int max_etc(int a,int b)
{
int result;
if(a>b)
{
result=a;
}
else
{
result=b;
}
return result;
}
知识点:
1 自定义函数如果放在main函数的后面,则main函数调用自定义函数时,会默认自定义函数的返回值为int,而且有告警。所以,必须修改。
修改方法:
方法一、将自定义函数写在main函数的前面
方法二、在main函数前面,增加1条语句----自定义函数的原型,即声明自定义函数
方法三、使用多文件的工程,包括多个.c和.h文件
2 多工程文件的使用步骤
1、将main函数放在a.c文件中
2、将max_etc函数的定义放在max_etc.c文件中
3、将max_ect函数的原型放在max_etc.h文件中
4、在main函数前增加头文件 #include "max_etc.h"
3 数组
int a[10];
char a[10];
float a[10];
double a[10];
3.1 整型数组
怎样定义1个整型数组
int a[5];
怎样给数组的每个元素赋值
方法一:
int a[5]={0};
上面是特殊用法
方法二:
先定义数组,再给每个元素赋值
int a[5];
a[0]=2;
a[1]=5;
a[2]=7;
a[3]=9;
a[4]=10;
特殊用法:
使用for循环,给每个元素赋值
题目:定义1个数组,给这个数组赋值前20个奇数。赋完20个奇数后,倒序打印出来。
题目:自定义1个函数,可以对整型数组中的元素进行排序。在main函数定义1个数组,并赋5个整型数,然后调用该函数,进行排序,最后打印输出。
5 9 2 7 4
5 2 7 4 9 第1轮结束
*
代码:
#include <stdio.h>
void sort_etc(int a[],int count)
{
int temp;
int i;
int j;
for(j=0;j<count-1;j++)
{
for(i=0;i<count-1-j;i++)
{
if(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
else
{
;
}
}
}
return;
}
int main()
{
int a[5]={5,9,2,7,4};
int i;
sort_etc(a,5);
for(i=0;i<5;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
3.2 字符型数组
3.2.1怎样定义1个字符型数组
int a[5]={5,3,4,6,7};
char b[5]={'h','e','l','l','o'};
char b[6]="hello";
char b[]="hello";
3.2.2 字符串
就是特殊的字符型数组:最后1个字符是'\0'
题目:定义1个函数,实现字符串复制功能。
在main函数中,定义1个字符串char a[20]="hello",再定义1个字符串b为"zhangsan",调用该自定义函数,将字符串b复制并粘贴到到字符串a上,然后在main函数中打印出字符串a,进行验证。
分析:
hello zhangsan
a[0]=b[0];
a[1]=b[1];
while(b[i]!='\0')
{
}
a[i]='\0';
题目:定义1个函数,实现字符串连接功能。
分析:
hello zhangsan
4 指针----地址
就是1种数据类型
四大基本数据类型
数组数据类型 int a[5];// 在JAVA中也可以这样定义 int[5] a;
地址数据类型:
int * p1;
char *p2;
float *p3;
double *p4;
4.1 整型地址
4.1.1 如何定义1个整型地址变量
int *p;
注意:p是地址变量,而且它只能存1个整型数的地址,如存的是100这个整型数的地址(0x27ff0001)
4.1.2 给整型地址变量赋值
方法一:
int a=100;
int *p=&a; //&是取地址 运算符
方法二:
int *p;
int a;
a=100;
p=&a;
注意:
有的项目要求,单独定义地址变量的时候,必须赋值为NULL;
题目:自定义1个函数,可以实现2个整型数的交换。在main函数中,调用该函数,验证结果。
知识点:
1 函数参数的传递方式
方式一:值传递(参数是4大基本数据类型)
参数是复制粘贴关系
被调用函数中的参数(形参),是复制品
方式二:地址传递(参数是地址类型)
参数是复制粘贴关系
被调用函数中的参数(形参),是复制品
注意:
但此时,自定义函数的函数体里,不是进行简单的地址的四则运算,还可以进行*运算(地址就变成 整型变量,而且这个变量是main函数里的真品)
题目:自定义1个函数,可以返回2个数的和、差、积、商。在main函数,定义2个整型数,让调用该函数,来验证结果。
代码:
#include <stdio.h>
void fun(int m,int n,int *a,int *b,int *c,int *d)
{
*a=m+n;
*b=m-n;
*c=m*n;
*d=m/n;
return;
}
int main()
{
int a=10;
int b=20;
int sum;
int sub;
int mulity;
int shang;
fun(a,b,&sum,&sub,&mulity,&shang);
printf("sum is %d\n sub is %d\n mulity is %d\n shang is %d\n",sum,sub,mulity,shang);
return 0;
}
知识点:
1 如果,函数中的形参是数组名,则本质上是地址变量
如:
int fun(int a[]); //以后不要这样用了,虽然符合语法规范。
int fun(int *a); //二者完全等价,而且理解时要用地址变量来理解。
2 数组名
数组名是常量,所以不能进行a++这样的运算。但可以进行a+1这样的运算
这个常量是第1个元素的地址(一维数组是这样)
2 走读代码:
从main函数开始
2 怎样调试
设置断点
go
F10
F11
点memory
课后作业:自定义1个函数,可以求出某个数值范围内的所有质数。 在main函数中调用,进行验证。比如参数可能为100,或200