学习日志 姓名: 徐雪 日期: 2017.07.10
今日学习任务 | 数组与函数 |
今日任务完成情况 (详细说明本日任务是否按计划完成,开发的代码量。)
| 今日任务已按计划完成。编写冒泡排序程序,用函数的方法实现;编写含有多个子函数的程序,区分有无形参,返回值 ;实参向形参传递,传值与传地址 |
今日开发中遇到的问题汇总 | 函数定义最好要在主函数之前,否则编译会出错; 传地址可以修改内存里的值;
|
今日未解决问题 | 无 |
今日开发收获 | 数组大小不能动态定义 ; a是数组名 ,数组首元素地址 &a数组的地址 &a[0]是数组首元素的地址 a+1代表一个元素4个字节 &a+1代表一个数组 4*10个字节 未初始化的局部变量是随机值; 【初始化方法】 全部元素初始化 int a[5]={1,2,3,4,5}; 部分元素初始化 int a[5]={1,2}; int a[]={1,2,3}; //数组长度是3 int a[10]={0}; //对第一个元素初始化 【重点理解】: &a[0][0] 数组首元素地址 代表一个元素 a[0] 数组首行首元素地址 代表一个元素 a (a+1 加一行) 数组首行地址,代表一行 &a 数组地址,代表一个数组 【函数调用顺序】函数名就是地址 (1)通过函数名找到函数的入口地址 (2)给形参分配空间,int x,y 4字节 (3)传值 实参传给形参 值传递 地址传递 地址传递:当涉及修改内存里的值 值传递:当需要读出值的时候 (4)执行函数体 (5)返回 (6)释放空间(栈空间) extern: 不仅可以在本文件中使用还可以在同一工程中的其他文件中使用; static:修饰全局变量,改变变量的作用域,只能在当前文件中使用 修饰函数,改变函数的作用域,当前函数只能在本文件中使用 修饰局部变量,改变变量的生命周期,直到程序运行结束才被释放,原因:存放地方不一样,如果不加ststic修饰就是普通局部变量,存放在栈; 如果加上ststic修饰(静态变量),则存放在数据段 预处理:只做简单的替换,编译时的第一遍扫描之前的工作
|
自我评价 (是否规范完成指定任务,需要改进的地方,与他人合作等。) | 同学讨论发现解决程序错误的方法;一题编程采用两种方法,拓展了思路,及时做笔记,将所思所得带进程序进行实践;编程速度较慢;
|
其他 | 无 |
1.字符数组中在指定位置插入字符
#include<stdio.h>
#include<string.h>
int Insert(char a[],char num,int a_i);
void main()
{int a_i=1;
char a[50],num;
printf("please input a zifushuzu: ");
gets(a);
printf("please input a zifu: ");
num=getchar();
getchar();
printf("请输入插入的位置: ");
scanf("%d",&a_i);
if(Insert(a,num,a_i))
printf("没有插入!\n");
else
printf("插入后的字符串为: %s\n",a);
}
int Insert(char a[],char num,int a_i)
{
int i;
if(strlen(a)-1<a_i)
{
printf("输入位置超出长度!");
return -1;
}
else
{
for(i=strlen(a);i>=a_i-1;i--)
{
a[i+1]=a[i];
}
a[a_i-1]=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;
}