C语言课程知识点及实例总结

  • 内容
  • 评论
  • 相关

第1章 C程序基础

1.简单C程序的组成

#include <stdio.h> //把输入输出函数的头文件包含进来

int main(  )  //main函数:程序开始执行的入口

{   //函数体

        printf(“Hello  world!\n”); //在屏幕上输出字符串“Hello  world!”

//此处:添加自己定义的命令

        return 0;            

}

2.简单输入、计算、输出实例:a+b

#include<stdio.h>//包含已有功能的库文件

int main()//main函数:程序执行的入口

{

    //1.数据存储功能

    int a;

    int b;

    int sum;

    scanf("%d%d",&a,&b);//2.输入命令从键盘接受2个数

    sum=a+b;

    printf("a+b=%d",sum);//3.计算结果,输出

    return 0;

}

/*

课外思考:

1.变量、标识符命名规则

2.变量的数据类型包含哪些

3.scanf中的占位符“%d”有哪几种,各有什么作业

4.printf中的占位符“%d”,有哪几种,各有什么作业

*/

第2章 数据类型、输入输出、运算符

1.常用数据类型、输入输出总结:

2.整型变量输入输出 代码实例

int id;//注释1: 整型变量——定义

printf("请输入学生学号:");//输出提示信息

scanf("%d",&id);//注释1: 整型变量——输入

printf("您输入的学号为:%d",id);//注释1: 整型变量——输出

printf("\n");//输出换行

3.字符型变量输入输出 代码实例

char sex;//字符型变量——定义

printf("请输入学生性别:");//输出提示信息

flushall();//清空输入缓冲区的数据

scanf("%c",&sex);//字符型变量——输入

printf("您输入的性别为:%c",sex);//字符型变量——输出

printf("\n");//输出换行

4.实型变量输入输出 代码实例

float score;// 浮点型变量——定义

printf("请输入学生成绩:");//输出提示信息

scanf("%f",&score);// 浮点型变量——输入

printf("您输入的成绩为:%f",score);//浮点型变量——输出

printf("\n");//输出换行

5.格式化输出

int a=5;

    int b=18;

    float  x=3.888;

    printf("%d\n",66666666);

printf("%6d%6d\n",a,b);//2.输入命令从键盘接受2个数

    printf("%f, %.4f, %.2f, %7.4f",x,x,x,x);

6.自增自减运算符

int main()

{

    int i=1,j,x;

    printf("%d\n",i++);//1

    printf("%d\n",i);//2

 

    i=1;

    printf("%d\n",++i);//2

    j=1;

    x=j++;

    printf("%d\n",x);//1

    printf("%d\n",j);//2

    return 0;

}

7.字符与ASCII码

char x;

x='a'; //引号不能省略

printf("%d  ",x); //97

printf("%c\n ",x);//a

x=x+1;

printf("%d  ",x); //98

printf("%c\n ",x);//b

8.字符运算:数字字符与数字的不同

#include <stdio.h>

int main()

{

    int a=9;

    char x;

    x='9';

    printf("%d\n ",a-2);  //7

    printf("%c\n ",x-2);  //7

    printf("%d\n ",a+10);  //19

    printf("%c\n ",x+10);  //C

    return 0;

}

9.数据类型转换——显式转换

显式转换数据类型:(目标数据类型)变量

float b=3.32;

int a;

a=(int)b; //将小数b转换为整数(即截掉小数部分)并赋值给a

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

10.数据类型转换——隐式转换

int a=1;

    float b;

    b=a/3*1.0; //将整数a与整数3进行除运算,其结果仍是整数,即0

printf("%f",b);//0

b=a*1.0/3; //将整数a隐式转换为小数a,跟1.0进行计算:数据类型转换——隐式转换

    printf("%f",b);//0.3333

 

第3章 三种基本控制结构

1.if语句简单使用:判断成绩是否及格

int s=101;

    if(s>=60) //注意1:此处无分号;

    {//注意2:此处加写花括号“{”,这是个好习惯,避免出错的好习惯

        printf("恭喜及格,你过关了");

    }

    else

    {

        printf("遗憾你挂科了,加油啊");

}

2.if语句嵌套:判断男女生跳远及格

int s=1.6;

    char c='b'; //'b'字符代表boy男生,'g'字符代表girl女生,注意:单引号不可省略

    if (c=='g')//若是女生,

    {

        if(s>=1.5)

        {

            printf("恭喜及格。");

        }

        else{

            printf("遗憾了,继续锻炼身体");

        }

    }

    if (c=='b') //若是男生

    {

        if(s>=2)

        {

            printf("恭喜及格。");

        }

        else{

            printf("遗憾了,继续锻炼身体");

        }

}

3.多条件同时满足 “&&”

int s=1.6;

    char c='b';

    if ((c=='g')&&(s>=1.5))

    {

         printf("恭喜及格。");

    }

    if ((c=='g')&&(s<1.5))

    {

            printf("遗憾了,继续锻炼身体");

}

4.多条件部分满足“||”

int s=-5;

if(s>100 || s<0)

    {

        printf("成绩出错了!");

}

5.多分支语句switch:五种成绩类型判断

int s=100;

    switch(s/10) //注意1:括号里表达式的计算结果应为整数或字符

    {//注意2:花括号不可省略

            case 10:printf("you");break; //注意3: break语句跳出switch语句,一般不可省略

            case 9:printf("you");break;

            case 8:printf("liang");break;

            case 7:printf("zhong");break;

            case 6:printf("jige");break;

            default: printf("bujige");break;

    }

还可以用if嵌套实现上述功能:

if(s>=90)

        printf("you");

    else

        if(s>=80)

            printf("liang");

        else

            if (s>=70)

                printf("zhong");

            else

                 if (s>=60)

                    printf("jige");

                else

                    printf("bujige");

或:

if(s<60)

        printf("bujige");

    else

        if(s<70)

            printf("jige");

        else

            if (s<80)

                printf("zhong");

            else

                 if (s<90)

                    printf("liang");

                else

                    printf("you");

5.for循环:判断多个成绩的类型

int s=85;

    for(;;)  //注意1:循环语句,圆括号后不可有分号“;”

    { //注意2:循环体为花括号内的1-N条命令,将被重复执行

        scanf("%d",&s);

        if(s>=90)

            printf("youxiu");

        else

            if(s>=80)

                printf("lianghao");

            else

                if (s>=70)

                    printf("zhongdeng");

                else

                    if (s>=60)

                        printf("jige");

                    else

                        printf("bujige");

        if (s<0)  //注意2:循环跳出的条件,若无此条件,将陷入无限次的循环(死循环)

            break; // break语句跳出循环

}

6.for循环语法:输出1—30中的30个数字

int i;

    for(i=1;i<=30;i=i+1)//i=i+1执行时间在循环体的printf之后

    {

       printf("%d ",i);

}

7.for循环-灵活使用循环变量控制循环次数及数据:

输出1—30中的30个数字、偶数、奇数

int i;

    for (i=1;i<=30;i=i+2)//输出 1-30的奇数

    {

        printf("%d ",i);   //输出 i 的值

    }

    printf("\n");

    for (i=2;i<=30;i=i+2)//输出 1-30的偶数

    {

        printf("%d ",i);   //输出 i 的值

    }

    //输出 100的偶数:0,2……

    for (i=0;i<=100;i=i+2)//输出 1-30的偶数

    {

        printf("%d ",i);   //输出 i 的值

    }

8.for循环求和

int i,s=0;//s存储和,初值为0

    for(i=1;i<=100;i=i+1)//i=i+1执行时间在循环体的printf之后

    {

       s=s+i;  //将i的值加入到和s中

    }

printf("i=%d s=%d\n",i,s); //输出和s

9.while循环求和

int i,s=0;

    i=1;  //循环变量赋初值

    while(i<=100)  // while循环、循环条件,注意括号后不可加分号

    {

       s=s+i;

       i=i+1;  //循环变量值被更改,慢慢向循环终止的方向靠近

    }

printf("i=%d s=%d\n",i,s);

功能与上例for循环相同,但具体用法不同,具体详见红色的命令

10.do while循环求和

int i,s=0;

    i=1;

    do

    {

       s=s+i;

       i=i+1;

}while(i<=100);

printf("i=%d s=%d\n",i,s);

11.字符类型判断

#include<stdio.h>

int main()

{

    char x;

    scanf("%c",&x);

    if(x>='A' && x<='Z')

    {

        printf("大写字母\n");

    }

    else

        if(x>='a' && x<='z')

        {

            printf("小写字母\n");

        }

        else

        {

            if(x>='0' && x<='9')

            {

                printf("数字字符\n");

            }

            else

            {

               printf("其他字符\n") ;

            }

 

        }

 

    return 0;

}

 

#include<stdio.h>

int main()

{

    char x;

    scanf("%c",&x);

    if(x>=65 && x<=90)//if(x>='A' && x<='Z')

    {

        printf("大写字母\n");

    }

    else

        if(x>=97 && x<=122)//if(x>='a' && x<='z')

        {

            printf("小写字母\n");

        }

        else

        {

            if(x>=48 && x<=57)//if(x>='0' && x<='9')

            {

                printf("数字字符\n");

            }

            else

            {

               printf("其他字符\n") ;

            }

 

        }

 

    return 0;

}

或:

#include<stdio.h>

#include<string.h>

//字符处理函数库

int main()

{

    char x;

    scanf("%c",&x);

    if (isupper(x))//if(x>='A' && x<='Z')

    {

        printf("大写字母\n");

    }

    else

        if(islower(x))//if(x>='a' && x<='z')

        {

            printf("小写字母\n");

        }

        else

        {

            if(isdigit(x))//if(x>='0' && x<='9')

            {

                printf("数字字符\n");

            }

            else

            {

               printf("其他字符\n") ;

            }

 

        }

 

    return 0;

}

12.个数统计

#include<stdio.h>

int main()

{

    int n,m,a,b,c,i;

    while (~scanf("%d",&n))

    {

 

    a=0;b=0; c=0;

    for(i=0;i<n;i++)

    {

        if(n==0) break;

        scanf("%d",&m);

        if(m<0)

            a++;

        else

          if(m==0)

            b++;

          else

            c++;

    }

    printf("%d %d %d\n",a,b,c);

    }

   return 0;

}

第5章 数组

1.一维数组定义、赋值、输出

int i;

int a[10];//定义数组,数组a可存储10个整数

    for(i=0;i<=9;i++)  //向数组a输入10个整数

    {

        scanf("%d",&a[i]);  //向a数组中下标为i的数组元素,输入一个整数

                // a[i]=i;  //为a数组中下标为i的数组元素,赋值为i的值

    }

    for (i=0;i<10;i++)//输出数组a的10个整数

    {

        printf("%d ",a[i]);

}

2.一维数组求和

int i,a[10],s=0; //s将存储求得的和

    for(i=0;i<10;i++)//输入数组a的10个整数,并求和

    {

        scanf("%d",&a[i]);

        s=s+a[i];

    }

    for (i=0;i<10;i++)//输出数组a的10个整数

    {

        printf("%d ",a[i]);

    }

printf("\n总分:%d,平均分:%d\n",s,s/10);

3.一维数组求最大值

int i,a[5],m;//m将存储求得的最大值

    for(i=0;i<5;i++)//输入数组a的5个整数

    {

        scanf("%d",&a[i]);

        if(i==0)  m=a[i];  //若是第一个数组元素,将其赋值给m

        if (a[i]>m)       //若a[i]大于m,则更新m的值为a[i]

            m=a[i];

    }

    for (i=0;i<5;i++)//输出数组a的5个整数

    {

        printf("%d ",a[i]);

    }

printf("\n最大值:%d\n",m);

4.一维数组排序1—冒泡排序

int i,t,j,a[5];

    for(i=0;i<=4;i++)  //输入数组a的5个整数

    {

        scanf("%d",&a[i]);

    }

    for(j=0;j<5-1;j++)  //xiao-->da  排序

    {

        for(i=0;i<5-1-j;i++)

        {

          if (a[i]>a[i+1])

          {

                t=a[i];

                a[i]=a[i+1];

                a[i+1]=t;

          }

        }

    }

    for (i=0;i<=4;i++)//输出数组a的5个整数

    {

        printf("%d ",a[i]);

}

 

总结:排序功能的代码段如下,分析后可达到通用的效果。

5.冒泡排序--通用

//xiao-->da  排序5个数

for(j=0;j<5-1;j++)  //注意1:循环条件(两个循环):5替换为待排序的数值的个数

    {

        for(i=0;i<5-1-j;i++)

        {          //注意2:if条件中的>,排的结果是升序的,若要结果降序,改用<

          if (a[i]>a[i+1]) //注意3:数组下标中应为内层循环变量,数组名也应是待排序数组的名字

          {

                t=a[i];

                a[i]=a[i+1];

                a[i+1]=t;

          }

        }

}

 

6.字符串操作——输入、输出、复制、比较

char s1[10000],s2[10000],s3[100000];

    gets(s1);

    gets(s2);

    //strcpy(s3,strcat(s1,s2));

    //puts(s3);

    int x=strcmp(s1,s2);

    if (strcmp(s1,s2)==0) printf("s1=s2\n");

    if (x<0)  printf("s1<s2\n");

if (x>0)  printf("s1>s2\n");

 

7.字符串操作——连接

char s1[10000],s2[10000],*ps1,*ps2;

    gets(s1);

    gets(s2);

    ps1=s1;

    ps2=s2;

    strcat(ps1,ps2);

    puts(ps1);

8.字符数组操作——自定义字符串连接功能函数

void lianjie(char a1[10000],char a2[10000])

{

    int m,i=strlen(a1) ;

    for (m=0;m<strlen(a2);m++)

    {

        a1[m+i]=a2[m];

        //printf("%c ", a1[m+i]);

    }

    a1[i+strlen(a2)]='\0';

    //puts(a1);

}

int main()

{

    char s1[10000],s2[10000],*ps1,*ps2;

    gets(s1);

    gets(s2);

    ps1=s1;

    ps2=s2;

    lianjie(s1,s2);

    puts(s1);

 

    return 0;

}

9.二维数组定义、初始化、输出

//1.定义二维数组,初始化

    int a[2][3]={{1,2,3},{4,5,6}};

    int i,j;

  

    //2.输出二维数组:b

    for (i=0;i<2;i++)//处理多行,循环条件应为i<行数

    {

        for(j=0;j<3;j++)//处理一行中的多个元素,循环条件应为j<列数

        {

            printf("%d ",b[i][j]);

        }

        printf("\n");

}

10.二维数组转置、求和

//1.定义二维数组,初始化

    int a[2][3]={{1,2,3},{4,5,6}};

    int b[3][2],i,j,s=0;

    //2.转置 元素行号、列号相反

    for (i=0;i<3;i++)

    {

        for (j=0;j<2;j++)

        {

            b[i][j]=a[j][i];

        }

    }

    //3.输出二维数组:b

 

    for (i=0;i<3;i++)//处理多行

    {

        for(j=0;j<2;j++)//处理一行中的多个元素

        {

            printf("%d ",b[i][j]);

        }

        printf("\n");

    }

//4.求所有元素之和

 

    for (i=0;i<3;i++)

    {

        for(j=0;j<2;j++)

        {

            s=s+b[i][j];

        }

        printf("qian%d hangHe:%d\n",i,s);

 

    }

printf("zongHe:%d\n",s);

11.二维数组求最值及其位置

//1.定义二维数组  a,b

    int max,min,x1,x2,y1,y2,s=0,i,j,b[3][2]= {{3,2},{8,7},{9,3}};

    //2。求最大值

    max=b[0][0];

    min=b[0][0];

    x1=x2=y1=y2=0;

    for (i=0;i<3;i++)//多行

    {

        for  (j=0;j<2;j++)//输出一行

        {

            if(max<b[i][j])

            {

                max=b[i][j];

                x1=i;

                y1=j;

            }

 

            if(min>b[i][j])

            {

                min=b[i][j];

                x2=i;

                y2=j;

            }

 

        }

        printf("\n");

    }

    //3。输出二维数组 b

    for (i=0;i<3;i++)//多行

    {

        for  (j=0;j<2;j++)//输出一行

        {

            printf("%d ",b[i][j]);

        }

        printf("\n");

    }

 

    printf("\n%d %d %d %d %d %d\n",max,x1,y1,min,x2,y2);

第6章 函数

1.简单的函数

/*函数:

1:概念:

2:作用:把一个复杂功能的函数实现的更加简单

3:执行流程:遇到函数调用,转去执行该函数,、

                该函数执行完毕,返回到调用她的地方

*/

myprint()  //函数定义

{

    printf("******************\n");

    printf("     大家好!\n");

    printf("******************\n");

}

int main()

{

    myprint();//函数调用

    return 0;

}

/*自定义的功能函数

总结函数使用步骤:

1.函数定义

2.函数调用

*/

 

/*

1.函数定义(通用格式):

函数名()

{

   一组命令;

}

*/

/*

2.函数调用格式:

函数名()

*/

2.简单的无参函数-求最值

/*1.带函数的程序的执行流程:

  首先从main函数开始执行,

  遇到函数调用命令,转向该函数执行

  该函数执行完毕后,回到调用它的地方

  接着执行函数调用下一条命令

*/

 

max2()  //函数定义

{

    int a,b,m;

    scanf("%d%d",&a,&b);

    if (a>b)  m=a;

    else m=b;

    printf("%d\n",m);

 

}

int main()

{

    printf("函数调用前:\n");

    max2();//函数调用

    printf("函数调用后:\n");

    return 0;

}

/*问题:

1.自己编写函数min2():求2个数中的最小值。

2.编写函数max3():求3个数中的最大值。

3.编写函数min3():求3个数中的最小值。

*/

3.无参函数――求和

add()  //函数定义

{

    int a,b,s;

    scanf("%d%d",&a,&b);

    s=a+b;

    printf("%d\n",s);

 

}

int main()

{

    printf("函数调用前:\n");

    add();//函数调用

    printf("函数调用后:\n");

    return 0;

}

//问题:自己编写函数:求2个数中的最大值。

4.带参数的函数——求和

/*带参数和返回值的函数

1.函数定义

2.函数调用

*/

 

int add(int a,int b)  //函数定义

{

    int s;

    s=a+b;

    return (s);//printf("%d\n",s);

 

}

//问题:编写函数求3个小数的和

float  add3(float a,float b,float c)

{

    return (a+b+c);

}

int main()

{

    int x; float s3;

 

    x=add(8,15);//函数调用

    printf("二数和:%d\n",x);

 

    s3=add3(7.1,5.2,1.1);

    printf("三数和:%f\n",s3);

    return 0;

}

/*问题:编写带参数和返回值的函数

1.min2():求2个数中的最小值。

2.max3():求3个数中的最大值。

3.min3():求3个数中的最小值。

4.max10():求10个数中的最大值

*/

 

/*

1.函数定义(通用格式):

返回类型  函数名(参数1,参数2……)

{

   一组命令;

   return ();

}

*/

/*

2.函数调用格式:

   函数名(实参1,实参2……)

*/

 

/*3.函数可返回处理结果

函数返回值:使用return命令

函数返回类型: 与return中值的类型一致

*/

/*4.参数:主函数可指定要处理的数据

         位置:函数名后的圆括号中

         参数的个数和类型:由函数要处理的数据个数和类型决定

*/

5.函数(数组作为参数)——排序

void sortn(int a[10000],int n)//数组作为参数,直接保存了修改后的结果

{

    int i,j,t;

   for(j=0;j<(n-1);j++)  //大-->小

    {

        for(i=0;i<n-1-j;i++)

        {

          if (a[i]<a[i+1])

          {

                t=a[i];

                a[i]=a[i+1];

                a[i+1]=t;

          }

        }

    }

}

int main()

{

    int m,n,x;

    int a[12]={12,-9555,1,-582,4,8,5,2,9,-123,3,6};

 

    sortn(a,12);

    for (m=0;m<12;m++)

    {

        printf("%d ",a[m]);

    }

    printf("最大值:%d,最小值:%d",a[0],a[11]);

    return 0;

}

//问题:

 

//编写函数:1!+2!+3!+...+n!

 

6.函数嵌套

/*函数嵌套:

1:概念:

2:作用:把一个复杂功能的函数实现的更加简单

3:执行流程:遇到函数调用,转去执行该函数,、

                该函数执行完毕,返回到调用她的地方

*/

int max2(int a,int b)  //函数嵌套:一个函数调用另一个函数

{

    int m;

    if (a>b)  m=a;

    else      m=b;

    return m;

}

int max3(int x,int y,int z)  //求3个数的最大值

{

    int m;

    m=8;

    m=8;

    return m;

}

int main()

{

    int m=0;

    printf("函数调用前:%d\n",m);

    m=8;//函数调用

    printf("函数调用后:%d\n",m);

    return 0;

}

7.函数递归

/*函数递归

1.概念:

2.适用场合:问题分解成更小规模的同类问题。

 

*/

//求n的阶乘:  4!=4*3!     3!=3*2!  2!=2*1!  1!=1

int fac1(int n)  //递归函数:函数调用自身

{

    int c;

    if (n==1) c=1;

    else c=n*fac1(n-1);

 

    return c;

}

//问题:求1,2……n的和

int sum(int n)

{

    int s;

    if (n==1)  s=1;

    else s=n+sum(n-1);

 

    return s;

}

int fac(int n)  //函数定义

{

    int i,c=1;

    for (i=2;i<=n;i++)

    {

        c=c*i;

    }

    return c;

}

 

int main()

{

    int m=0;

    printf("函数调用前:%d\n",m);

    m=fac(5);//函数调用

    printf("函数fac调用后:%d\n",m);

 

    m=fac1(6);

    printf("函数fac1调用后:%d\n",m);

 

    m=sum(4);

    printf("函数sum调用后:%d\n",m);

    return 0;

}

8.全局变量和局部变量

//两个x:不同

//变量有作用域:

//局部变量:定义它的那个函数中

         //max2函数:r,a,b

//全局变量:定义它的位置开始--程序结束;

      //多个函数共同使用

 

int m=8;

int max2(int a,int b)  //2数最大值

{

    int r;

    if (a>b) r=a;

    else r=b;

    printf("max2函数内%d\n",m);

    return (r);

}

int max3(int x,int y,int z) //3数最大值

{//函数嵌套

    int r;

    r=max2(x,y);

    r=max2(r,z);

    return r;

}

 

int main()

{

   int x=max3(100,3,78);//调用时,参数必须有实际值

    printf("%d\n",x);

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

    printf("main函数内%d\n",m);

    return 0;

}

第7章 指针

1.指针基础——定义、赋值、获取指向的数据

 

//作业:定义两个小,使用指针指向他们,、求2数之和

int main()

{

    char x='A';

    //1.定义指针,类型应与指向数据的类型一致

    char *px;

    //2.赋值:变量的地址:&变量名

    px=&x;

    //3.获取所指向的数据:*指针名

    (*px)++;  //'B'

    printf("%c\n",*px);

 

    return 0;

}

2.指针作为函数的参数

//指针参数,数据修改后,可返回到主函数

//作业:编写sort2(int *pa,int *pb),将两个整数正序排序

void jiaohuan(int *pa,int *pb)

{

  int t;

  t=*pa;

  *pa=*pb;

  *pb=t;

}

int main()

{

    int x=15,y=8;

    jiaohuan(&x,&y);//指针参数,数据修改后,可返回到主函数

    printf("x:%d,y:%d",x,y);

    return 0;

}

3.指针指向数组元素

int a[5]={1,2,3,4,5};

    int *pa,*p1;

    pa=a; //本质指向了数组首元素的地址

    p1=&a[1];//指针指向单个数据元素

    printf("%d \n",*pa);

    //printf("%d \n",pa[4]);

    //指针名[下标],

4.指针操作数组

int main()

{

    int a[5]={1,2,3,4,5};

    int *pa,*p1,i;

    pa=a; //本质指向了数组首元素的地址

    pa=pa+2; //指针+i 等价于  a[i]

    printf("%d \n",*pa);

 

    for (i=0;i<5;i++)

    {

        printf("%d ",a[i]);

    }

    printf("\n");

 

    pa=a;

    for (i=0;i<5;i++)

    {

        printf("%d ",pa[i]);

    }

    printf("\n");

 

    pa=a;

    for (i=0;i<5;i++)

    {

        printf("%d ",*(pa+i));

    }

    printf("\n");

 

 

    for (pa=a;pa<(a+5);pa++)

    {

        printf("%d ",*pa);

    }

    printf("\n");

    return 0;

}

第9章 结构体

1.结构体基础

struct student

{

    int num;

    char name[20];

    char sex;

    int age;

    float score;

    char addr[50];

} ;

int main()

{

    struct student s2,s1={1,"Lilei",'b',18,99.5,"pdsu"};

    printf("%d\n",s1.num);

    printf("%s\n",s1.name);

 

    s1.num=20;

    printf("%d\n",s1.num);

 

    strcpy(s1.name,"Lucy");//s1.name="Lucy";

    printf("%s\n",s1.name);

    return 0;

}

2.结构体数组

struct student

{

    int num;

    char name[20];

    char sex;

    int age;

    float score;

    char addr[50];

} ;

int main()

{

    struct student s[100];//s[i]

    int zx,i;

    char str[50];

    for(i=0;i<2;i++)

    {

        scanf("%d%s %c",&s[i].num,s[i].name,&s[i].sex);

        //scanf("%d%s",&zx,str);//scanf("%d",&zx);

        //s[i].num=zx;

        //scanf("%s",str);

        //strcpy(s[i].name,str);//s2.name=str;

    }

 

    for (i=0;i<2;i++)

    {

        printf("%d ",s[i].num);

        printf("%s ",s[i].name);

        printf("%c\n",s[i].sex);

    }

    return 0;

}

3.结构体数据排序

struct student

{

    int num;

    char name[20];

    char sex;

    int age;

    float score;

    char addr[50];

} ;

int main()

{

    struct student s[100];//s[i]

    int zx,i,j;

    float t;

    char str[50];

    for(i=0;i<3;i++)

    {

        scanf("%d%f",&s[i].num,&s[i].score);

        //scanf("%d%s",&zx,str);//scanf("%d",&zx);

        //s[i].num=zx;

        //scanf("%s",str);

        //strcpy(s[i].name,str);//s2.name=str;

    }

    for(j=0;j<2;j++)

    {

        for(i=0;i<2-j;i++)

            if (s[i].score<s[i+1].score)

            {

                t=s[i].score;

                s[i].score=s[i+1].score;

                s[i+1].score=t;

                zx=s[i].num;

                s[i].num=s[i+1].num;

                s[i+1].num=zx;

 

            }

    }

 

 

    for (i=0;i<3;i++)

    {

        printf("%d ",s[i].num);

        printf("%.1f \n",s[i].score);

    }

    return 0;

}

第11章 文件

1.文件读写数据(数值)4步骤

#include <stdio.h>

#include <string.h>

#include<stdlib.h>

#include <stdio.h>

#include <stdlib.h>

int main()

{

   float ch=98.5,ch1;

   FILE *fp; //1.定义文件指针

 

   //2.将文件指针指向一个磁盘文件,w:文件打开模式:写

   if((fp=fopen("num.txt","w"))==NULL)//当前目录下

   {   printf("无法打开此文件\n");

       exit(0);

   }

 

   fprintf(fp,"%f",ch);//3.向文件读写数据

   fclose(fp);//4.关闭文件

 

   if((fp=fopen("num.txt","r"))==NULL)

   {   printf("无法打开此文件2\n");

       exit(0);

   }

   fscanf(fp,"%f",&ch1);

   printf("%f",ch1);

fclose(fp);

 

   return 0;

}

2.文件读写字符

#include <stdio.h>

#include <string.h>

#include<stdlib.h>

#include <stdio.h>

#include <stdlib.h>

int main()

{

   char ch,ch1;

   FILE *fp; //1.定义文件指针

   /*

   //2.将文件指针指向一个磁盘文件,w:文件打开模式:写

   if((fp=fopen("str.txt","w"))==NULL)//当前目录下

   {   printf("无法打开此文件\n");

       exit(0);

   }

   ch=getchar( );

   fputc(ch,fp);//3.将ch字符输出到fp所指向的文件中

   fclose(fp);//4.关闭文件

*/

   if((fp=fopen("str.txt","r"))==NULL)

   {   printf("无法打开此文件2\n");

       exit(0);

   }

   ch1=fgetc(fp);

   putchar(ch1);

fclose(fp);

   putchar(10);

   return 0;

}

3.文件读写字符串

#include <stdio.h>

#include<stdlib.h>

#include<string.h>

int main()

{

        FILE *fp;

        char str[100]="abcdefg",str1[100];

        gets(str);

        int i=0;

        if((fp=fopen("filechar.txt","w"))==NULL)

        {

                printf("can't open file\n");

                exit(0);

        }

        fputs(str,fp);

        fclose(fp);

 

        if((fp=fopen("filechar.txt","r"))==NULL)

        {

                printf("can't open file\n");

                exit(0);

        }

        fgets(str1,10,fp);

        fclose(fp);

 

    puts(str1);

 

        return 0;

}

 

4.文件读写结构体数组(fscanf、fprintf)

#include <stdio.h>

#define SIZE 10

struct Student_type

{ char name[10];

   int num;

   int age;

   char addr[15];

 }stud[SIZE],stud1[SIZE];

int main()

{

    int i;

    FILE *fp;  //定义指针

    printf("enter data of students:\n");

    for(i=0;i<2;i++)  //输入2个学生的信息

     scanf("%s%d%d%s",stud[i].name,&stud[i].num,

                   &stud[i].age,stud[i].addr);

   if((fp=fopen("stu.txt","w"))==NULL)//将文件指针关联到文件

   { printf("cannot open file\n");      return;

   }

   for(i=0;i<SIZE;i++) //将2个学生的信息输出到文件

      fprintf(fp,"%s %d %d %s\n",

                  stud[i].name,stud[i].num,

                   stud[i].age,stud[i].addr);

   fclose(fp);//关闭文件

 

   if((fp=fopen("stu.txt","r"))==NULL)

   { printf("cannot open file\n");

      return;

   }

   for(i=0;i<2;i++)   //将2个学生的信息读入到stud1数组

     fscanf(fp,"%s%d%d%s",

                  stud1[i].name,&stud1[i].num,

                   &stud1[i].age,stud1[i].addr);

   fclose(fp);//关闭文件

 

   for(i=0;i<2;i++)//将2个学生的信息输出到屏幕

     printf("%s %d %d %s\n",

                  stud1[i].name,stud1[i].num,

                   stud1[i].age,stud1[i].addr);

   return 0;

}

5.文件读写结构体数组(fread、fwrite)

#include <stdio.h>

#include<stdlib.h>

struct student

{

        char num[10];

        char name[8];

        int age;

        float score;

};

struct student stu[3],stu2[3];

 

int main()

{

        FILE *fp;

        int i;

 

        if((fp=fopen("student.txt","w"))==NULL)

        {

                printf("can't open file\n");

                exit(0);

        }

 

        for (i=0;i<1;i++)

    {

        scanf("%s%d%s%f",stu[i].num,&stu[i].age,stu[i].name,&stu[i].score);

    }

 

        for(i=0;i<1;i++)

        {

                fwrite(&stu[i],sizeof(struct student),1,fp);

        }

    fclose(fp);

    fp=fopen("student.txt","r");

 

        for (i=0;i<1;i++)

    {

                fread(&stu2[i],sizeof(struct student),1,fp);

    }

    for (i=0;i<1;i++)

    {

                printf("%s,%d,%s,%f\n",stu2[i].num,stu2[i].age,stu2[i].name,stu2[i].score);

    }

        fclose(fp);

        return 0;

}

 

相关文件下载

* C语言课程知识点及实例总结.doc (下载0)

 

 

 

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注