学习日志
姓名:陈长稳 日期: 7.10
今日学习任务
学习一维数组,二维数组,函数,变量的存储类型及预处理的相关知识
今日任务完成情况
1.学习了一维数组,二维数组,函数,变量的存储类型及预处理的相关知识
2.编写了各个知识点的典型案例
3.完成课堂上练习
今日开发中出现的问题汇总
1. 调用函数时值传递与地址传递的区别无法分清
2. 在另外一个界面定义的变量,无法被当前界面的函数体调用
今日开发收获
1. 数组地址空间:
int a[5];//未初始化的局部变量是随机值
int a[5]= {1,2,3,4,5};//全部变量初始化
int a[5]= {1, 2};//部分元素初始化
int a[]= {1, 2, 3};//数组长度是3
2.冒泡排序法
for(i=0 ; i< SIZE-1; i++)
{
for(j=0 ; j< SIZE-i-1 ; j++)
{
if(a[j] > a[j+1])
{
tmp=a[j];
a[j] = a[j+1];
a[j+1]=tmp;
}
}
}
3. 二维数组定义时长度不能同时省略;
4.
printf("%d\n",&a[0][0]);//数组元素首地址,代表一个元素
printf("%d\n",a[0]);//数组首行元素地址,代表一个元素
printf("%d\n",a);//数组首行地址,代表一行
printf("%d\n",&a);//数组的地址,代表一个数
5.函数1.只包含一个main()函数
2.函数调用在函数定义之前,要进行声明
#include <stdio.h>
void print();
int get_number()//有一个整形的返回值没有形参
{
return 2;
}
int add(int x,int y) //形参个数和实参保持一致 类型也要保持一致
{
int result;
result= x + y;
return result;
}
int main()
{
int num,a = 1,b = 2;
print(); //自定义函数
num=get_number();//定义一个变量,接返回值
printf("num= %d\n",num);
num=add(a,b);//a和b 实参
printf("num= %d\n",num);
while(1);
return 0;
}
void print() //没有返回值没有形参
{
printf("helloworld!\n");
}
3.函数调用过程
通过函数名找到函数的入口地址,函数名就是地址
给形参分配空间
传值(实参传给形参)
执行函数体
返回
释放空间(栈空间)
6.变量数据类型
1.局部变量默认为auto型。
2.register型变量个数受限制,且不能为long、double、float型,不能取地址
3.extern int num; //声明一个外部变量//不需要分配空间
7.static修饰局部变量:改变变量的申明周期,一直到程序结束才被释放
原因:存放的地方不一样,不加static修饰(普通局部变量)存放在栈(内存的一种)上面;加上static修饰(静态变量),存 放在数据段
今日未解决问题
自我评价
1.对一维数组,二维数组,函数,变量的存储类型及预处理的相关知识有了更加深入的了解
2.对c语言的基础知识有了更深的了解
作业:
1.字符数组中指定位置插入字符串
#include <stdio.h>
int cr(char a[],char num,int a_i);
void main()
{
int a_i;
char a[50],num;
printf("请输入一个字符串:");
gets(a);
printf("请输入您想插入的一个字符:");
num=getchar();
getchar();
printf("请输入您想插入的位置:");
fflush(stdin);
scanf("%d",&a_i);
if (cr(a,num,a_i))
printf("没有插入!\n");
else
printf("插入后的字符串为:%s\n",a);
system("pause");
}
int cr(char a[],char num,int a_i)
{
int i;
if(a_i >= strlen(a))
{
printf("您输入的位置超出字符串长度了!");
return -1;
}
else
{
for(i=strlen(a); i >= a_i; i--)
{
a[i+1]=a[i];
}
a[i]=num;
return 0;
}
}
2.设计一个洗牌发牌的程序
#include <stdio.h>
int main()
{
int n,i;
int flag[52]= {0};
srand((unsigned int)time(NULL));
for(i = 0; i < 52; i++)
{
n = rand()%52;
while(flag[n] == 1)
{
n = rand()%52;
}
flag[n] = 1;
if(n >= 0 && n < 13)
{
printf("红心%d ", n + 1);
}
else if(n >= 13 && n < 26)
{
printf("黑桃%d ", n - 12);
}
else if(n >= 26 && n < 39)
{
printf("梅花%d ",n - 25);
}
else
{
printf("方片%d ",n - 38);
}
if((i +1) % 13 == 0)
printf("\n");
}
return 0;
}