结构体与函数:
# include <stdio.h>
# include <string.h>
struct Student
{
char name[100];
char sex;
int age;
}; //在定义结构体时分号不能省
void InputStudent(struct Student *);
void OutputStudent_1(struct Student);
void OutputStudent_2(struct Student *);
int main(void)
{
struct Student st;
InputStudent(&st); //对结构体变量的输入,要修改st的值,必须发送地址。
OutputStudent_2(&st); //对结构体变量的输出,既可以发送地址,也可以发送变量的值,但发送地址能够减少内存耗费,也能够提高执行速度,提高效率。
//一般选择发送地址
return 0;
}
//函数一般定义于主函数下面
void InputStudent(struct Student * pst)
{
strcpy(pst->name,"张三");
(*pst).age = 10;
pst->sex = 'F';
}
void OutputStudent_1(struct Student stu) //定义结构体变量stu要占108个字节,且需要复制108个字节内容,耗费内存,执行速度慢。
{
printf("%s, %c, %d\n", stu.name, stu.sex, stu.age);
}
void OutputStudent_2(struct Student * pst) //定义指针变量pst只占4个字节,且只需要复制4个字节内容,耗用内存少,执行速度快。
{
printf("%s, %c, %d\n", pst->name, pst->sex, pst->age);
}
字符与字符串变量:
# include <stdio.h>
# include <string.h> //<string.h>,字符串处理头文件。
int main(void)
{
char s;
char a[100]; //字符串的定义即为字符数组,100表示此字符串占100字节。数字与字母无论大小写,都只占一个字节,汉字占两个字节。同样,数组名a为第一个字节的地址。
s = 'A'; //字符的赋值要在字符左右加单引号'',以便区分这是字符而不是变量名。
//a[100] = "大家好!呵呵!" //错误,字符串的赋值不能用等号。
strcpy(a,"大家好!呵呵!"); //字符串的赋值要用strcpy()函数,字符串拷贝函数。strcpy(字符串变量名,"字符串")
printf("%c, %C\n", s, s); //%c用于输出字符,字符的输出用%c和%C与输出大小写没关系。
printf("%s\n", a); //字符串的输出用%s。
//printf("%c\n", a[0]); //错误,字符串名是a,而不是a[100],后不能加下标。
return 0;
}
冒泡排序法:
/*
冒泡排序法,最简单最基本的排序方法
相邻两个数之间进行比较,每一次循环比较,都将最大或最小的数放在右边,最大(小)值像水泡一样向上冒,所以叫做冒泡排序法。
双重循环,即完成排序。
*/
# include <stdio.h>
//冒泡排序
void sort(int * a, int len)
{
int i, j, t;
for (i=0; i<len-1; ++i)
{
for (j=0; j<len-1-i; ++j)
{
if (a[j] > a[j+1]) // >(大于号)为升序,<(小于号)为降序。
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
return;
}
int main(void)
{
int a[6] = {2, 5, -3, 11, 9, 6};
int i;
sort(a, 6);
for (i=0; i<6; ++i)
printf("%d ", a[i]);
printf("\n");
return 0;
}