标签:c语言
1. 二维数组的定义和一维数组的定义非常相似,只不过和一位数组相比多了一个维度
定义数组: 数据类型 数组名/[行数] [列数] = 初值(多个元素赋初值要加大括号)
例如: int a[5] [5] = {0};
2. 给二维数组中的元素赋值
给第一行元素赋值
外层循环用来控制行数
for (int i = 0; i< 5; i++) {
a[0][i] = i + 1;
}
给第二行元素赋值
for (int i = 0; i< 5; i++) {
a[2][i] = i + 1 + 5;
给第三行元素赋值
for (int i = 0; i< 5; i++) {
a[0][i] = i + 1 +5*2;
}
内存循环用来控制列数
for (int j = 0; j < 5; j++) {
for (int i = 0; i< 5; i++) {
a[0][i] = i + 1;
a[j][i] = i + 1 + 5*j;
printf("%-2d ",a[j][i]);
}
printf("\n");
}
int a[4][5] ={0}; int b[5][4] = {0};
for (int i = 0; i < 4; i++) {
for (int j; j < 5; j++) {
b[j][i] = a [i][j];
}
printf("%d ",b[j][i]);
}
int c[3][4] = {0};
int max = 0;//用来记录最大值
int row = 0,column = 0;
row 用来记录当,column 用来记录列
3. 给二维数组赋值
遍历数组元素,求出数组元素中最大值,记录所在行与列
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
c[i][j] =arc4random() % (30 - 10 +10) +10;
printf("%d ",c[i][j]);
}
printf("\n");
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
if (max < c[i][j]) {
max = c[i][j];
row = i;
column = j;
}
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
if (c[i][j] == max) {
printf("行为:%d,列为:%d\n",i,j);
}
}
}
printf("max = %d,row = %d,column = %d\n", max ,row,column); 注解: 二维数组定义时,第一维下标可以不给(行数可以省略),但是第二维列数下标必须要指定(一定不可以省去,列数表示什么时候换行)
并且第一维和第二维的下标必须是常量或者是常量表达式
int a [][3] = {1,2,3,4,5,6,7};
for (int i = 0; i <3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ",a[i][j]);
}
printf("\n");
}
4. 字符串数组,存放字符串的数组叫做字符串组,只不过字符串是存储在一维的字符数组中,所以本质上是一个二维的字符数组.
char str[3][10] = {"Frank","dunke","iphone"};
printf("%s",str[2]);
输入三个单词,查找并输出最长单词
char str[3][10] = {"Frank","dunke","iphone"};
int maxlength (str) = 0;
if (strlen(str) > maxlength(str)) {
strlength(str) = strlen(str);
printf("长度%lu ", strlen(str));
}
char str[3][10] = {0};
printf("请输入三个人的名字:\n");
scanf("%s%s%s",str[0],str[1],str[2]);
unsigned long maxLength = 0;//unsigned 无符号
for (int i = 0;i < 3;i++) {
if (strlen(str [i] )> maxLength) {
maxLength = strlen(str[i]);
}
}
printf("%lu\n",maxLength);
输出最长单词,
得到最长单词的长度之后,那最长长度和每一个字符串的长度进行对比,一旦发现相同,就立即输出该字符串.
for (int i = 0;i < 3;i++) {
if (strlen(str[i]) == maxLength) {
printf("%s\n",str[i]);
}
/ }
实例: 有10个联系人的通讯录(假设只有人名),按姓名(英文)从小到大排序
char str[10[10]={"Frank","Duke","Account","Kisi","Jack","IronMan","SpiderMan","Merry","Cherry","Rose"};
char tempStr [10] = {0};
5. 存储临时字符串
数组名代表数组的首地址,是一个常量地址,不可修改.
printf("请输入十个人的名字:\n");
for (int i = 0; i < 10; i++) {
scanf("%s",str[i]);
} for (int i = 0; i < 10 - 1; i++) { for (int j = 0; j < 10 - 1 -i; j++) { if (strcmp(str[j], str[j + 1]) > 0) {
6. 对字符串进行交换操作时,要使用strcpy函数 strcpy(tempStr,str[j]);
/将str[j]字符串中的内容拷贝到临时字符数组tempStr中 strcpy(str[j], str[j + 1]);
strcpy(str[j + 1] ,tempStr);
}
}
}
printf("有节操之人排行榜:\n");
//输出排好序的字符串
for (int i = 0; i < 10; i++) {
printf("%s\n",str[i]);
}
函数存在的意义:把main函数中复杂的逻辑进行拆分,由一个一个单独的函数来处理一个单独的模块,main函数只起到宏观调控的作用.
函数的定义:包括一下四个部分; 1.返回值类型(要返回的数据的类型).
2.函数名(给函数起一个简明的名字).
3.参数列表(用来接受传入的数据).
4.函数体(函数真正的功能,实际做的操作)
函数定义的一种格式:(无参数,无返回值) 函数名命名规范:由多个单词组成,除了第一个单词外,其余单词的首字母大写. 工程名的命名规范:有单词组成,并且每个单词的首字母都要大写(记住:是单词,不是拼音). 变量名的命名规范:有单词组成,除了第一个单词外其余单词的首字母都要大写.
void buyMilk () {
//函数体 printf("无法买,没有给钱\n");
}
//函数定义的第二种格式: (无返回值,有参数)
void buyMilkVersionTwo(float money);
void buyMilkVersionTwo(float money){
printf("哈哈 ,我给你买了不过我自己喝了\n");
}
//函数定义的第三种格式:(有返回值,无参数)
int giveMoney() {
return 1;
return用于返回值,将返回的数据放在return之后即可,谁调用该函数,就将值返回给谁 ,一定要切记,不要把代码放到return的后面,会执行不到
printf("下一年好好工作,继续加油\n");
}
//函数定义的四种格式:(有返回值,有参数)
//求两个整数的最大值(多个参数之间用逗号进行间隔)
//Control reaches end of non-void function
//没有到达一个返回值不为空得函数的结尾
//原因:非空函数需要返回值,识别到return之后意味着函数功能的结束
//解决方案:返回最终的数据即可,(return操作)
函数与函数之间可以嵌套调用,但是不可以嵌套定义 Function definition is not allowed here 解释在这不允许定义函数 产生原因:函数与函数之间存在嵌套定义.(也就是在一个函数体中又定义了另一个函数; ) 解决方法:就把内部函数的定义提到函数外部让函数与函数之间形成并列关系;
例1.
int maxVlueForTwo(int a ,int b) {
int max = 0;
if (a > b) {
max = a;
} else {
max = b;
}
return max;
}
例2.
int maxValueForTwo(int a ,int b) {
return a > b ? a : b;
}
int minValueForTwo(int a, int b) {
return a < b ? a : b;
}
求三个数的最大值
int maxValueForThree(int a ,int b,int c) {
先求a和b的最大
int max = 0; max = maxValueForTwo(a,b);
max = maxValueForTwo(max, c);
return max ;
return maxValueForTwo(maxValueForTwo(a, b),c);
}
求四个数的最大值
int maxValueForFour(int a ,int b,int c, int f) {
return maxValueForTwo(maxValueForThree(a,b,c), f);
}
求五个数的最大值
函数声明:和函数定义相比,只是缺少了 函数体,最后加分号.
int maxValueForFive(int a ,int b,int c,int f,int e); void sayHi(){
printf("I love ios\n");
}
int main(int argc, const char * argv[]) {
函数使用的三部分;
1.函数的声明;
2.函数的定义;
3.函数的调用;
函数调用]
buyMilk ();
函数名 + 参数列表(实参)
buyMilkVersionTwo(0.1);
sayHi();
int money = giveMoney();
printf("money = %d",money);
int maxValue = maxValueForTwo(12,30);
printf("maxValue = %d\n",maxValue);
int minValue = minValueForTwo(12, 30);
printf("minValue = %d\n",minValue);
求五个数的最大值
实参:实际参数,真实的具体的数据,也就是在函数调用时给定的参数叫做实参
形参:形式参数,只用来表示接收什么类型的数据,具体的存储的数据未知,也就是在函数定义时给定的参数叫做形参
函数调用时,实参到形参的传递是一个拷贝的过程.
int maxValue = maxValueForFive(10, 20,30,40,50);
printf("maxValue = %d",maxValue );
return 0;
}
int maxValueForFive(int a ,int b,int c,int f,int e){
return maxValueForTwo(maxValueForFour(a,b,c,f),e);
}
7. 头文件的导入
导入自定义的文件夹时,使用"",导入系统定义的头文件时,使用<>
8.
结构体是一种自定义的数据类型,也是用来存储多个数据的大容器,只不过结构体要比数组灵活,它可以存储不同类型的数据.
结构体的定义
struct + 结构体的名称 {大括号中填写结构体成员,多个结构体成员之间通过分号进行间隔} + ;(分号必不可少)
struct student {
结构体成员
int number; //存储学号
char sex ; //存储性别
};//分号是结构体定义的结束标志,必不可少
typedef struct student Student;
struct point {
float x;//存储横坐标
float y;//存储竖坐标
};
给结构体类型struct student 重新定义了一个名字Student
typedef第二种格式,定义结构体的同时,typedef
typedef struct rect1 {
int length;
存储长度
int width;
存储宽度
}
Rect1;
typedef struct rectangular Rec;
typedef 第一种格式,先定义结构体类型,然后再typedef
typedef 类型重定义(给已有的类型重新起一个名字),新的名字和原类型具有同样的功能
typedef int Integer;标签:c语言
原文地址:http://9217856.blog.51cto.com/9207856/1563458