首页 > 代码库 > C语言基础续集

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语言基础续集