C语言基础语法


数据类型

int
char
short
long
long long
float
double
#include "stdio.h"

int main(int argc, char const *argv[])
{
    printf("%d \n",sizeof(int)); // 4
    printf("%d \n",sizeof(char)); // 1
    printf("%d \n",sizeof(short)); // 2
    printf("%d \n",sizeof(long)); // 4
    printf("%d \n",sizeof(long long)); // 8
    printf("%d \n",sizeof(float)); // 4
    printf("%d \n",sizeof(double)); // 8
}

char

char a = 'a';
char b[] = "abcef"; // 实际上会在结尾放置一个'\0',是"abcef\0",实际长度是6
char c[5] = {'a','b','c','d','e'}; //实际长度是5 没有'\0'

strlen("abc"); //返回 3,求字符串长度的一个函数,从第一个字符开始计算,直到碰到'\0',  string.h

int

int a = 7 / 2; // 3参与运算的两个数字都是int的时候,按照整数运算,如果有一个浮点数,就进行浮点数运算

float

    float a = 1.0 / 2.0;
    printf("%f \n",a); // 0.5000
    printf("%.1f \n",a); // 0.5
    printf("%.2f \n",a); // 0.50

double

double d = 1.0;
scanf("%lf",&d);
printf("%lf",d);
接收输入:
    整数类型:
    int:%d
    short:%hd
    long:%ld
    long long:%lld
    
    字符类型:
    char:%c
    
    浮点类型:
    float:%f
    double:%lf
    long double:%Lf

浮点数易错点

// 当使用scanf函数接受参数时候,double必须是%lf ,  float必须是 %f 二者不能混用
// 当使用printf函数输出时候,double和float 均可以使用%f %lf  %.f %.1f %.2f

#include "stdio.h"
int main(int argc, char const *argv[])
{
    double d;
    float a;

    scanf("%lf",&d); // 100
    scanf("%f",&a); //100 

    printf("%f \n",d); // 100.000000
    printf("%f \n",a); // 100.000000

    printf("%lf \n",d); // 100.000000
    printf("%lf \n",a); // 100.000000

    printf("%.f \n",d); // 100 
    printf("%.f \n",a); // 100 

    printf("%.1f \n",d); // 100.0
    printf("%.1f \n",a); // 100.0

    printf("%.2f \n",d); // 100.00
    printf("%.2f \n",a); // 100.00
    return 0;
}

字符串常用函数

sprintf

#include <stdio.h>

int main() {
  char str[100];
  int num = 123;
    
  sprintf(str, "Hello World %d", num); // 格式化文字赋值给str

  printf("%s\n", str); // Hello World 123

  return 0;
}

strcmp

#include "stdio.h"
#include "string.h"
int main(){
    char str1[4] ="测试";
    char str2[4] ="测试";
    printf("%d",strcmp(str1,str2)) 
    /*
    str1<str1,返回为负数 注意不是-1
    str1==str1,返回值= 0
    str1>str1,返回正数 注意不是1
    */
}

操作符

算数操作符
+, -, *, /, %   
参与取模运算的两个数字只能是整型

移位操作符
>>, <<

赋值操作符
=, +=, -=, *=, /=, &=, ^=, |=, >>=, <<=

define

#include "sdtio.h"
#define ADD(x,y) ((x) + (y))
int main(){
    int a = 10;
    int b = 20;
    int c = ADD(10,20); // 这里是将ADD(10,20) 替换成了((10) + (20))
    printf("%d",c);
}

枚举

enum Dat {
    Mon,
    Tues,
    Wed,
    Thur,
    Fri,
    Sat,
    Sun
};

int main() {
  enum Day d = Fri;
  return 0;
}

文件读写

//写入文件
#include <stdio.h>
int main(int argc, char const *argv[])
{
    FILE * file = fopen("C:\\Users\\ReturnZero\\Desktop\\test.txt","w");
    if (file != NULL)
    {
        char i = 'a';
        for(i = 'a'; i <='z'; i++){
            fputc(i,file);   
        }
    }
    // 关闭文件
    fclose(file);
    file = NULL;
    return 0;
}
// 读取文件
#include <stdio.h>
int main(int argc, char const *argv[])
{
    FILE * file = fopen("C:\\Users\\ReturnZero\\Desktop\\test.txt","r");
    int low = 0;
    int update = 0;
    if (file != NULL)
    {
        int c = 0;
        while (c != EOF)
        {
            c = fgetc(file);

            if (c >= 'a' && c <= 'z' )
            {
                 low++;
            }

            if(c >= 'A' && c <= 'Z'){
                update++;
            }
            
        }
        printf("大写字母%d个,小写字母%d个",update,low);
    }
    // 关闭文件
    fclose(file);
    
    return 0;
}
// 写一行数据
FILE * file = fopen("test.txt","w")
fputs("hello \n",file);
// 读一行数据
char arr[20];
fgets(arr,5,file); //读到的是“hell" 因为会在末尾加一个'\0'

struct Student {
      char mame[12];
    int age;
};
//格式化输出
struct Student * student = malloc(sizeof(struct Student));
fprintf(file,"姓名:%s,年龄:%d",student->name,student->age);

//格式化输入
fscanf(file,"姓名:%s,年龄:%d",student->name,&(student->age))
参数含义
"r"read 读
"w"write 写
"a"read/update 为了读和写新建一个文件
"r+"write/update 为了读和写打开一个文本文件
"a+"append/update
"rb"为了输入数据,打开一个二进制文件
"ab"为了输出数据,打开一个二进制文件
功能函数名适用于
字符输入函数fgetc所有输出流
字符输出函数fputc所有输出流
文本行输入函数fgets所有输出流
文本行输出函数fputs所有输出流
格式化输入函数fscanf所有输出流
格式化输出函数fprintf所有输出流
二进制输入fread文件
二进制输出fwrite文件

fgetc

#include "stdio.h"
int main(int argc, char const *argv[])
{
    FILE * file = fopen("read.txt","r"); 
    if (file == NULL)
    {
        return 1;
    }
    char c ;
    while ( (c = fgetc(file)) != EOF ) //按字符来读取
    {
        printf("%c",c);
    }
    return 0;
}

fputc

#include "stdio.h"
int main(int argc, char const *argv[])
{
    FILE * file = fopen("read.txt","w");
    if(file == NULL)
    {
        printf("Error");
        return 0;
    }
    char ch = 'a';
    while (ch <= 'z')
    {
         fputc(ch++,file);
    }
    fclose(file);
    return 0;
}

fgets

#include "stdio.h"
int main(int argc, char const *argv[])
{
    FILE * file = fopen("read.txt","r");
    if (file != NULL)
    {
   
        char string[20];
        while ( (fgets(string, 20, file)) != NULL)
        {
            printf("%s", string);
        }
        fclose(file);
    }
    return 0;
}

fpus

#include "stdio.h"
int main(int argc, char const *argv[])
{
    FILE * file = fopen("read.txt","w");
    if (file != NULL)
    {
        fputs("这是一段文字",file);//写入文件
        fclose(file);
    }
    
    return 0;
}

fscanf

#include <stdio.h>

int main() {
  FILE * file = fopen("read.txt","r");

    if (file != NULL)
    {
        char string[100];
        while (fscanf(file,"%s",string) != EOF)
        {
            printf("%s",string);
        }
    }
    return 0;
}

fprintf

#include "stdio.h"
int main(int argc, char const *argv[])
{
    FILE * file = fopen("read.txt","w");
    fprintf(file,"这是一段文字,它的长度是 %d",10);
    fclose(file);
    return 0;
}

fwrite && fread

#include "stdio.h"
int main(int argc, char const *argv[])
{
    FILE * file = fopen("read.txt","rb");
    if(file != NULL)
    {
        int nums[10] = {0};
        for (int i = 0; i < 10; i++)
        {
            scanf("%d",&nums[i]);
        }

        fwrite(nums,sizeof(int),10,file); //写入

        int readnums[10] = {0};
        fread(readnums,sizeof(int),10,file);//读取
        for (int i = 0; i < 10; i++)
        {
            printf("%d ",readnums[i]);
        }
        
        fclose(file);
    }
    return 0;
}

关于数组

void method (int **matrix);
int main(){
    int matrix[3][3] = {0};
    method(matrix); // 错误  无法传递,类型不同
    method((int**)matrix) //错误  可以传递,但是函数中无法使用
}
void method (int **matrix,int rows,int clos);
int main(){
    int ** matrix = malloc(sizeof(int*) * 3);
    for(int i = 0; i < 3; i++){
        method[i] = malloc(sizeof(int) * 3);
    }
    method(matrix,3,3);// 正确  这样可以传递
}
void method (int rows,int cols,int matrix[rows][cols]);
int main(){
     int matrix[3][3] = {0};
    method(3,3,matrix);// 正确  也可以这样
}

声明:冰醋酸|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - C语言基础语法


一切随缘