第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的偶数: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=%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;
}
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.字符串操作——连接
chars1[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)
{
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.文件读写结构体数组(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
{
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;
}