学习日志 姓名:郭旭亮 日期:2018-7-10
今日学习任务 | 一维数组 二维数组 C语言中的函数 |
今日任务完成情况 | 今天主要复习了数组,函数以及变量的内容: 在数组中,未初始化的全局变量都为0 未初始化的局部变量都为随机值 一维数组与二维数组的初始化 利用循环体和数组实现冒泡排序法,并且可以利用函数来实现对主函数的简化 a[1]==*(a+1) C语言中的函数:会涉及到各种参数的使用 其中包括形参和实参 形参个数和实参个数保持一致 1.通过函数名找到函数入口地址,,函数名就是地址 2.给形参分配空间3.传值(实参传给实参) 4.执行函数体 5.返回 6.释放空间(释放栈空间,由操作系统自动完成) |
冒泡排序法需要熟练的掌握,
数组的各种表达以及几种情况:
Printf(“%p”,&a[0][0])//数组首元素地址,代表一个元素
Printf(“%p”,a[0])//数组首行元素地址,代表一个元素
Printf(“%p”,a)//数组首行地址,代表一行
Printf(“%p”,&a)//数组的地址,代表一个数组
a[1]==*(a+1)
Printf(“%p”,&a[])//数组首元素的地址
Printf(“%p”,a)//数组名,同时也是数组的首元素的地址
Printf(“%P”,&a)//数组的地址
Printf(“%P”,a+1) //步长不一样,代表一个元素
Printf(“%P”,&a+1)//代表一个数组 4*10字节
C语言函数的使用,形参和实参的区别有些分不清
几种重要的关键词!
今日未解决问题对冒泡排序法的函数转化并不熟练,还需要多加练习,同时函数这部分还存在着不小的问题
今日开发收获今天着重的强调了数组以及函数部分,所以我也更加的深入了解了这两部分的内容
一维数组和二维数组的不同以及其地址表达等多个问题
自我评价随着对C语言的多加练习,对常用的代码以及表达有了不少的了解
今日习题:
1.字符数组中在指定位置插入字符串
#include<stdio.h>
#include<string.h>
void input(char a[])
{
printf("输入字符串:");
scanf("%s",a);
}
int count(char a[])
{
return strlen(a);
}
void ins(char x[],char y[],int s,int n)
{
char ch[10];
int i,j;
printf("输入插入字符:");
scanf("%s",ch);
if(s>=n)
{
for(i=0;i<n;i++)
{
y[i]=x[i];
}
y[i]=ch[0];
for(j=i,i++;i<=s;i++,j++)
{
y[i]=x[j];
}
for(i=0;i<s+1;i++)
{
x[i]=y[i];
}
}
if(s<n)
{
printf("input error\n");
while(1);
}
}
int main()
{
char a[1000]={0},b[2000]={0},ch;
int str,num;
input(a);
str=count(a);
printf("输入在第几个字符插入字符:");
scanf("%d",&num);
ins(a,b,str,num-1);
printf("插入后:\n");
printf("%s\n",a);
while(1);
return 0;
}
2.设计一个洗牌发牌的程序
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void initial(int* p)//初始化一副牌
{
int i;
for (i = 0; i<52; i++)
p[i] = (i / 13 + 3) * 100 + i % 13 + 1;
}
void xipai(int *p)//洗牌
{
int i, x, y;
int t;
srand((int)time(0));
for (i = 0; i<200; i++)
{
x = rand() % 52;
//52中一个数
y = rand() % 52;
//52中一个数
if (x != y)
{
t = p[x];
p[x] = p[y];
p[y] = t;
}
}
}
void fapai(int* p, int* p1, int* p2, int* p3, int* p4)//发牌
{
int i;
for (i = 0; i<13; i++)
{
p1[i] = p[4 * i];
p2[i] = p[4 * i + 1];
p3[i] = p[4 * i + 2];
p4[i] = p[4 * i + 3];
}
}
void paixu(int* p)//排序
{
int i, j;
int t;
for (i = 0; i<13; i++)
for (j = 0; j<13 - i; j++)
{
if (p[j]>p[j + 1])
{
t = p[j];
p[j] = p[j + 1];
p[j + 1] = t;
}
}
}
void xianshi(int *p)
{
int i;
int f, d;
for (i = 0; i<13; i++)
{
f = p[i] / 100;//301~313,401~413,501~513,601~613
d = p[i] % 100;//1~13
switch (f)
{
case 3:
printf("黑桃");
break;
case 4:
printf("红桃");
break;
case 5:
printf("梅花");
break;
case 6:
printf("方块");
break;
}
if (d<10 && d>1)
{
printf("%c ", (d + '0'));
}
else if (d == 1)
printf("A ");
else if (d == 11)
printf("J ");
else if (d == 12)
printf("Q ");
else if (d == 13)
printf("K ");
else if (d == 10)
printf("10 ");
}
printf("\n");
}
int main()
{
int pai[52], player1[13], player2[13], player3[13], player4[13];
initial(pai);
xipai(pai);
fapai(pai, player1, player2, player3, player4);
paixu(player1);
paixu(player2);
paixu(player3);
paixu(player4);
xianshi(player1);
xianshi(player2);
xianshi(player3);
xianshi(player4);
return 0;
}