C语言总结精华版

第1章 C程序基础

1.简单C程序的组成

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

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

{  //函数体

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

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

         return0;            

}

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的偶数:02……

   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=%ds=%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=%ds=%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=%ds=%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;

}

1.个数统计

#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++)//输出数组a10个整数

    {

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

}

2.一维数组求和

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

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

    {

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

       s=s+a[i];

    }

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

    {

       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++)//输入数组a5个整数

    {

       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++)//输出数组a5个整数

    {

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

    }

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

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

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

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

    {

       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++)//输出数组a5个整数

    {

       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++)

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

          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");

 

.字符串操作——连接

chars1[10000],s2[10000],*ps1,*ps2;

   gets(s1);

   gets(s2);

   ps1=s1;

   ps2=s2;

   strcat(ps1,ps2);

   puts(ps1);

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

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.定义二维数组  ab

   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.简单的无参函数-求最值

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

  首先从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)

{

  intt;

 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.指针指向数组元素

inta[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;

         charstr[100]="abcdefg",str1[100];

         gets(str);

         inti=0;

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

         {

                  printf("can'topen file\n");

                  exit(0);

         }

         fputs(str,fp);

         fclose(fp);

 

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

         {

                  printf("can'topen file\n");

                  exit(0);

         }

         fgets(str1,10,fp);

         fclose(fp);

 

   puts(str1);

 

         return0;

}

 

4.文件读写结构体数组(fscanffprintf

#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.文件读写结构体数组(freadfwrite

#include <stdio.h>

#include<stdlib.h>

struct student

{

         charnum[10];

         charname[8];

         intage;

         floatscore;

};

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

 

int main()

{

         FILE*fp;

         inti;

 

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

         {

                  printf("can'topen 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(structstudent),1,fp);

         }

   fclose(fp);

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

 

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

    {

                  fread(&stu2[i],sizeof(structstudent),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);

         return0;

}

 

 

 

猜你喜欢

转载自blog.csdn.net/pdsu_congshuang/article/details/79464646