您现在的位置是:首页 > 学无止境 > C语言网站首页C语言 如何学习C语言、入门C语言,看这篇就够了

如何学习C语言、入门C语言,看这篇就够了

  • 莫愁
  • C语言
  • 2019-11-10
简介该文章将会把C语言基础语法梳理一遍,主要记录帮助理解相关知识点的代码示例和重要或容易忽略的面试知识,将会陆续发布系类文章.
字数 24775

数组

1.程序 创建一个整型数组,使用多种方式访问数组元素

/* 使用多种方式来访问数组元素*/
#include <stdio.h>
int main(int argc, char const *argv[])
{
    int arr[] = {10,11,12,13,14};
    int i;
    // 使用数组下标访问数组元素-方法1
    for (i = 0; i<5; i++)
        printf("%d\t",arr[i]);
    printf("\n");   // 将光标移到下一行
    // 使用数组下标访问数组元素-方法2
    for (i = 0; i<5; i++)
        printf("%d\t",i[arr]);
    printf("\n");
    // 使用指针访问数组元素-方法3
    for (i = 0; i<5; i++)
        printf("%d\t",*(arr+i));
    printf("\n");
     // 使用指针访问数组元素-方法4
    for (i = 0; i<5; i++)
        printf("%d\t",*(i+arr));
}

输出:

10    11    12    13    14    
10    11    12    13    14    
10    11    12    13    14    
10    11    12    13    14

2.重要的面试题

为什么数组下标从0开始计数?
答:数组元素可以通过arr[i]形式来访问,而arr[i]在底层实现中被编辑器转换为arr+i.当i的值为0.arr+i即数组名本身.数组名代表第一个数组元素的地址.当i的值为1.arr+1代表第二个数组元素的地址.以此类推,因此,数组下标是从0开始计数.

3.程序 计算某学生5门功课的总分数及平均分.

/* 使用多种方式来访问数组元素*/
#include <stdio.h>
int main(int argc, char const *argv[])
{
    int marks[5];
    int i,tot = 0;
    float percent;
    /* 将数据元素存入数组*/
    for (i = 0; i<5; i++) {
        printf("Enter ,marks: ");
        scanf("%d",&marks[i]);
        tot += marks[i];
    }
    printf("\nToal marks = %d",tot);
    percent = tot/5;
    printf("\nPercentage = %.2f",percent);
}

输出:

Enter ,marks: 45
Enter ,marks: 50
Enter ,marks: 55
Enter ,marks: 60
Enter ,marks: 72

Toal marks = 282
Percentage = 56.00

3.重要的面试题

如何在C语言中定义常量?
答:方法一,使用const关键字,如下所示

const float PI = 3.14159;

方法二,使用#define指令,如下所示

#define MAX 50;

出现MAX的地方,使用文本“50”替换.

4.程序 使用线性搜索方法在数组中搜索某个数据元素

/* 使用线性搜索方法在数组中搜索某个数据元素 */
#include <stdio.h>
#define MAX 50
int main(int argc, char const *argv[])
{
    /* 声明一个大小为50的数组*/
    float number[MAX];

    float search;
    int i,n,location = 0;

    /* 将数字存入数组*/
    printf("How many number?\n");
    scanf("%d",&n);

    for (i = 1; i<=n; i++) {
        printf("Type the number: ");
        scanf("%f",&number[i]);
    }

    /* 接收将被搜索的数据元素*/
    printf("\nWhich number to search: ");
    scanf("%f",&search);
    /* 在数组中线性搜索该数据元素*/
    for (i = 1; i<=n; i++) {
        if (search == number[i]) {
            printf("Number found at location: %d\n",i);
            /* 在location变量中存储匹配元素的下标*/
            location = i;
        }
    }

    /* 如果location的值没有改变,那么该元素没有找到.*/
    if (location == 0)
        printf("Number not found in the list.\n");
}

输出:

How many number?
5
Type the number: 11
Type the number: 22
Type the number: 45
Type the number: -12.5
Type the number: 90

Which number to search: 22
Number found at location: 2

5.程序 将人名保存到一个字符型数组中然后再显示它

/* 将人名保存到一个字符型数组中然后再显示它 */  
#include <stdio.h>
int main(int argc, char const *argv[])
{
    /* 申明字符型数组保存人名*/
    char name1[20],name2[20];
    /* 使用%[^\n]格式串接收人名*/
    printf("Enter a name: ");
    scanf("%[^\n]",name1);

    /* 使用%s格式串接收人名*/
    printf("Enter another a name: ");
    scanf("%s",name2);

    printf("Hello %s\n",name1);
    printf("Another hello to %s\n",name2);
}

输出:

Enter a name: vijay kumar
Enter another a name: vinay Ganesh
Hello vijay kumar
Another hello to vinay

6.程序1 接收不同类型数据并显示

/* 接收一个学生的id,性别,姓名并显示它们 */
#include <stdio.h>
int main(int argc, char const *argv[])
{
    int id;
    char sex;
    char name[20];

    printf("Enter id: ");
    scanf("%d",&id);

    printf("Enter sex: ");
    sex = getchar();

    printf("\nEnter name: ");
    scanf("%[^\n]",name);

    printf("\nId = %d\n",id);
    printf("Sex = %c",sex);
    printf("Name = %s\n",name);
}

输出:

Enter id: 11
Enter sex: 
Enter name: zhxiong

Id = 11
Sex = 
Name = zhxiong

sex的信息并没有接收到,这是什么原因呢?
当id 号输入以后,用户会按下enter键,enter键对应的字符是‘\n’,会被当成字符保存到sex中,因此没有接收到性别信息,解决方法为使用fflush(stdin)语句,清空键盘的缓存区,如下7.程序所示.

7.程序2 接收一个学生的id,性别,姓名并显示它们

/* 接收一个学生的id,性别,姓名并显示它们 */
#include <stdio.h>
int main(int argc, char const *argv[])
{
    int id;
    char sex;
    char name[20];

    printf("Enter id: ");
    scanf("%d",&id);

    fflush(stdin);
    printf("Enter sex: ");
    sex = getchar();

    fflush(stdin);
    printf("\nEnter name: ");
    scanf("%[^\n]",name);

    printf("\nId = %d\n",id);
    printf("Sex = %c",sex);
    printf("Name = %s\n",name);
}

输出:

Enter id: 11
Enter sex: M
Enter name: zhxiong

Id = 11
Sex = M
Name = zhxiong

8.程序 二维数组

创建并初始化一个3行5列的二维数组并以矩阵形式显示该数组.

/* 矩阵形式显示一个外围数组 */
#include <stdio.h>
int main(int argc, char const *argv[])
{
    int i,j;

    int marks[][5] = {
        {50,60,70,80,90},
        {55,65,75,85,95},
        {59,69,79,89,99}
    };

    /* 矩阵显示二维数组,外围循环b代表行,里层循环代表列*/
    for (i = 0; i<3; i++) {
        for (j = 0; j<5; j++) {
            printf("%d\t",marks[i][j]);
        }
        /*显示新的一行s需要输出换行符*/
        printf("\n");
    }
}

输出:

50    60    70    80    90    
55    65    75    85    95    
59    69    79    89    99

9.程序 矩阵转置

/* 矩阵转置*/
#include <stdio.h>
int main(int argc, char const *argv[])
{
    // 声明变量
    int i,j,r,c;
    int mat[50][50];
    // 输入矩阵
    printf("Enter rows,cols: ");
    scanf("%d,%d",&r,&c);

    printf("Enter matrix: \n");
    for (i = 0; i<r; i++)
        for (j = 0; j<c; j++)
            scanf("%d",&mat[i][j]);
    // 显示转置矩阵
    printf("\nTranspose matrix is: \n");
    for (i = 0; i<c; i++) {
        for (j = 0; j<r; j++) {
            printf("%d\t",mat[j][i]);
        }
        printf("\n");
    }
}

输出:

Enter rows,cols: 3,4
Enter matrix: 
1 2 3 4
5 6 7 8
9 10 11 12

Transpose matrix is: 
1    5    9    
2    6    10    
3    7    11    
4    8    12    

10.程序 矩阵求和

/* 矩阵求和*/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
    // 矩阵最大大小为10,10
    float a[10][10],b[10][10],c[10][10];
    int i,j,r1,r2,c1,c2;

    // 检查两个矩阵的行和列数
    printf("Enter no.of rows,cols of matrix1: ");
    scanf("%d,%d",&r1,&c1);
    printf("Enter no.of rows,cols of matrix2: ");
    scanf("%d,%d",&r2,&c2);

    // 检查两个矩阵是否可以相加
    if ((r1 != r2) || (c1 != c2)){
        printf("\nAddition cannot be done");
        exit(0);
    }

     // 从键盘读入matrix1的数据元素
    printf("\nEnter elements of matrix1: \n");
    for (i = 0; i<r1; i++)
        for (j = 0; j<c1; j++)
            scanf("%f",&a[i][j]);

    // 从键盘读入matrix2的数据元素
    printf("\nEnter elements of matrix2: \n");
    for (i = 0; i<r2; i++)
        for (j = 0; j<c2; j++)
            scanf("%f",&b[i][j]);

    // 对两个矩阵求和
    for (i = 0; i<r1; i++)
        for (j = 0; j<c1; j++)
            c[i][j] == a[i][j] + b[i][j];

    // 显示矩阵求和结果
    printf("\nThe sum matrix is: \n");
    for(i = 0; i<r1; i++) {
        for (j = 0; j<c1; j++) {
            printf("%.2f\t",c[i][j]);
        }
        printf("\n");
    }
}

输出:

Enter no.of rows,cols of matrix1: 2,3
Enter no.of rows,cols of matrix2: 2,3

Enter elements of matrix1: 
1.1 2.2 3.3
4 5 6

Enter elements of matrix2: 
1.1 2.2 3.3
4.1 5.0 6

The sum matrix is: 
2.20    4.40    6.60    
8.10    10.00    12.00    

11.程序 三维数组

/* 矩阵求和*/
#include <stdio.h>
int main(int argc, char const *argv[])
{
    int i,j,k;
    // 三个二维数组,每个二维数组3行5列
    int marks[3][3][5] ={
            {{11,12,13,14,15},
            {16,17,18,19,20},
            {21,22,23,34,25}},

            {{26,27,28,29,30},
            {31,32,33,34,35},
            {36,37,38,39,40}},

            {{41,42,43,44,45},
            {46,47,48,49,50},
            {51,52,53,54,55}},
    };
    // 读取并显示
    for (i = 0; i<3; i++) {
        for (j = 0; j<3; j++) {
            for (k=0; k<5; k++)
            printf("%d\t",marks[i][j][k]);
        printf("\n");
        }
        printf("\n");
    }
}

输出:

11    12    13    14    15    
16    17    18    19    20    
21    22    23    34    25    

26    27    28    29    30    
31    32    33    34    35    
36    37    38    39    40    

41    42    43    44    45    
46    47    48    49    50    
51    52    53    54    55

12.重要的面试题

数组在内存中是如何存储的?
答:不论是一维,二维或n维数组,它们的数据元素都是在内存中连续存储的,这意味着在系统底层会为数组分配连续的内存块.

 第4页/共11  首页 上一页 2 3 4 下一页 尾页


转载: 感谢您对莫愁个人博客网站平台的认可,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“来源莫愁个人博客 https://www.mochoublog.com/study/367.html”。

文章评论

    • 评论
    人参与,条评论

技术在线

服务时间

周一至周日 12:00-22:00

关闭下雪
关闭背景特效