admin 管理员组

文章数量: 1184232


2024年3月10日发(作者:documentary怎么读英语)

C语言实验报告

实验1-1:

hello world程序:

源代码:

#include

main()

{

printf("hello world!n");

system("pause");

}

实验1-2:

完成3个数据的输入、求和并输出计算结果的程序:

源代码:

#include

main()

{

int i,j,k,sum;

scanf("%d%d%d",&i,&j,&k);

sum=i+j+k;

printf("sum=%d",sum);

system("pause");

实验1-3:

在屏幕上输出如下图形:

A

BBB

CCCCC

源代码:

#include

main()

{

printf(" An");

printf(" BBBn");

printf(" CCCCCn");

system("pause");

}

实验2-1:

计算由键盘输入的任何两个双精度数据的平均值

源代码:

#include

main()

{

double a,b;

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

printf("%.1lfn",(a+b)/2);

system("pause");

}

实验2-2:

写一个输入7个数据的程序,把输入的数据代入a + b * (c – d ) / e * f – g 表达式进行运算

源代码:

#include

main()

{

float a,b,c,d,e,f,g,x;

scanf("%f%f%f%f%f%f%f",&a,&b,&c,&d,&e,&f,&g);

x=a + b * (c - d ) / e * f - g;

printf("x=%f",x);

system("pause");

}

实验2-3:

编写一个C语言程序,测试下列各表达式:

i, j

i + 1 , j + 1

i++ , j++

++i , ++j

i+++++j

源代码:

#include

main()

{

int i=1,j=1;

printf("%d %dn",i+1,j+1);

printf("%d %dn",i++,j++);

printf("%d %dn",++i,++j);

printf("%dn",(i++)+(++j));

system("pause");

}

实验2-4:

输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest

(税前),输出时保留2位小数。

interest = money(1+rate)

year

- money

源代码:

#include

#include

main()

{

int year=2;

float rate=0.1,money=1000;

float futureMoney;

futureMoney=money*pow((1+rate),year);

printf("%10.2f",futureMoney);

system("pause");

}

实验2-5:

输入华氏温度,输出对应的摄氏温度。计算公式如下:

c = 5 * ( f - 32) / 9

其中,c表示摄氏温度,f表示华氏温度

源代码:

#include

main()

{

int c,f;

scanf("%d",&f);

c = 5 * ( f - 32) / 9;

printf("%d",c);

system("pause");

}

实验3-1:

编写一个程序完成输入一个整数,输出它的符号

源代码:

#include

main()

{

int i;

scanf("%d",&i);

if(i>0)

printf("+");

else

printf("-");

system("pause");

}

实验3-2:

请编写居民应交水费,并提供各种测试数据。

居民应交水费y(元)与月用水量x(吨)的函数关系式如下:

0 x < 0

y = f(x) = 4x / 3 0 ≤ x ≤ 15

2.5x – 10.5 x > 15

源代码:

#include

main()

{

float x,y;

scanf("%f",&x);

if(x<0)

printf("0");

else if(x>=0&&x<=15)

{

y=4*x/3;

printf("%f",y);

}

else if(x>15)

{

y=2.5*x-10.5;

printf("%f",y);

}

system("pause");

}

实验3-3:

请根据输入的学生成绩给出成绩等级的判断,判断规则如下:

如果输入的成绩大于等于90,则输出优秀;

如果输入的成绩小于90、大于等于80,则输出良好;

如果输入的成绩小于80、大于等于70,则输出中等;

如果输入的成绩小于70、大于等于60,则输出及格;

其他输出不及格

源代码:

#include

main()

{

int x;

scanf("%d",&x);

if (x>=90)

printf("优秀n");

else if (x>=80&&x<90)

printf("良好n");

else if (x>=70&&x<80)

printf("中等n");

else if (x>=60&&x<70)

printf("及格n");

else

printf("不及格n");

system("pause");

}

实验3-4:

运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:

s = 250km 没有折扣

250km ≤ s < 500km 2%折扣

500km ≤ s < 1000km 5%折扣

1000km ≤ s < 2000km 8%折扣

2000km ≤ s < 3000km 10%折扣

3000km ≤ s 15%折扣

设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费的计

算公式为:

f = p * w * s * ( 1 – d )

请编程实现:从键盘输入基本运费p,货物重w,距离s,计算输出用户最终需要支付

的运费

源代码:

#include

main()

{

int p,w,s,f;

scanf("%d%d%d",&p,&w,&s);

float d;

f = p * w * s * ( 1 - d );

if (s=250)

{

d==0;

printf("%d",f);

}

else if (s>=250&&s<500)

{

d==0.02;

printf("%d",f);

}

else if (s>=500&&s<1000)

{

d==0.05;

printf("%d",f);

}

else if (s>=1000&&s<2000)

{

d==0.08;

printf("%d",f);

}

else if (s>=2000&&s<3000)

{

d==0.1;

printf("%d",f);

}

else if (s>=3000)

{

d==0.15;

printf("%d",f);

}

system("pause");

}

实验4-1:

已知xyz + yzz = 532,其中x、y、z都是数字(0~9),编写一个程序求出x、y、z分别代表

什么数字

源代码:

#include

main()

{

int x,y,z;

for(x=1;x<=9;x++)

for(y=1;y<=9;y++)

for(z=1;z<=9;z++)

if(100*x+10*y+z+100*y+10*z+z==532)

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

system("pause");

}

实验4-2:

编写一个程序打印如下对称图形(行数由键盘输入1~9范围的值),例如下面是输入的数字

4时的情形:

4444444

33333

222

1

222

33333

4444444

源代码:

#include

main()

{

int i,j,k,n;

printf("请输入一个数字n");

scanf("%d",&n);

i=n;

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

{

k=i;

if(i>=n)

k=2*n-2-i;

for(j=0;j

printf(" ");

for(j=0;j<2*(n-k)-1;j++)

printf("%d",n-k);

printf("n");

}

system("pause");

}

实验4-3:

学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,

编写一个程序求该校的学生人数

源代码:

#include

main()

{

int i;

for(i=900;i<=1100;i++)

{

if(i%5==2&&i%7==3&&i%3==1)

{

printf("%dn",i);

break;

}

}

system("pause");

}

实验4-4:

学校某班A、B、C、D四位同学中的一位做了好事不留名,表扬信来了之后,班主任问这

四位是谁做了好事,四位回答如下:

A说:不是我。

B说:是C。

C说:是D。

D说:他胡说。

已知三个人说的是真话,一个人说的是假话。请根据这些信息,找出做了好事的人

源代码:

#include

main()

{

int i,j,a,b,c,d;

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

{

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

if(j==i)

switch(j)

{

case 0:a=1;b=0;c=0;d=0;

break;

case 1:a=0;b=1;c=0;d=0;

break;

case 2:a=0;b=0;c=1;d=0;

break;

case 3:a=0;b=0;c=0;d=1;

break;

default:break;

}

if(a+b+c==1&&b+c==1&&c+d==1&&b+c+d==1)

printf("做好事的人是%cn",i+'a');

}

system("pause");

}

实验5-1:

从键盘输入一个长度为N(比如10)的整型数组,而后将数组中小于零的元素移动到数组

的前端,大于零的元素移到数组的后端,等于零的元素留在数组中间。比如原来数组为:2 -5

-89 75 0 -89 0 93 48 0,经过处理后的数组为:-5 -89 -89 0 0 0 75 93 48 2。由于不要求数组有

序,所以不允许用排序方法

源代码:

#include

#include

#define N 10

main()

{

int a[N]={2,-5,-89,75,0,-89,0,93,48,0};

int i,t,j;

for(i=0;i

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

printf("n");

for(i=0;i

{

for(j=i+1;j

{

if(a[i]>0&&a[j]<0)

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

else if(a[i]>0&&a[j]==0)

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

else if(a[i]==0&&a[j]<0)

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}

}

for(i=0;i

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

printf("n");

system("pause");

}

实验5-2:

设数组a的定义如下:

int a[20] = {2,4,6,8,10,12,14,16}; 已存入数组中的数据值已经按由小到大的顺序存放,现从

键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请

编写一个程序实现上述功能

源代码:

#include

main()

{

int a[9]={2,4,6,8,10,12,14,16};

int i,j,number;

printf("原数组n");

for(i=0;i<=8;i++)//输出数组原有的元素

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

printf("n");

printf("请输入一个数据n");

scanf("%d",&number);

i=0;//以下三行找到插入位置

while(a[i]

i++;

for(j=7;j>=i;j--)//将插入点以后的元素顺序往后移一位

a[j+1]=a[j];

a[i]=number;//插入数据

printf("输出改变后的数组n");

for(i=0;i<=8;i++)//输出插入后仍有序的数组

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

system("pause");

}

实验5-3:

写一个3 x 5矩阵的转置程序,输出其原矩阵的值和转置以后的结果

源代码:

#include

#include

main()

{

int i,j;

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

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

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

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

printf("n");

}

printf("转置后的矩阵为n");

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

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

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

printf("n");

}

system("pause");

}

实验5-4:

编程实现随机产生10个位于区间[100 200]互不相等的整数,并将其按降序排序和输出

源代码:

#include

#include

#include

#define random(x)(rand()%101+100)

main()

{

int i,j,k,n;//产生随机数

int a[10];

srand((int)time(0));

for(i=0;i<=9;i++){

a[i]=random(200);

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

}

printf("n");

for(i=0;i<=9;i++){//排序

k=i;

for(j=i;j<10;j++)

if(a[k]

n=a[i];

a[i]=a[k];

a[k]= n;

}

printf("排序后的数组为n");

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

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

system("pause");

}

实验6-1:

写一个函数int digit( int n , int k ),它返回数n的从右向左的第k个十进数字值。例如,函数

调用digit(1234,2)将返回值3

源代码:

#include

#include

int digit(int n,int k)

{

int i,j,a,b;

b=n%10;

a=(n/10)%10;

j=(n/100)%10;

i=(n/1000)%10;

n=1000*i+100*j+10*a+b;

if(k==1)

printf("%d",b);

else if(k==2)

printf("%d",a);

else if(k==3)

printf("%d",j);

else if(k==4)

printf("%d",i);

}

main()

{

int x,y;

printf("请输入一个数据n");

scanf("%d%d",&x,&y);

digit(x,y);

system("pause");

}

实验6-2:

写一个函数int isprime(int n),当n是质数时,函数返回非零值;当n是合数时,函数返回零

源代码:

#include

#include

int isprime(int n)

{

int i;

for(i=2;i

if(n%i==0){//判断

return (0);

}

else{

return (1);

}

}

main()

{

int x;

printf("请输入一个数据n");

scanf("%d",&x);

printf("%d",isprime(x));

system("pause");

}

实验6-3:

写一个函数reverse( char s[]),将字符串s[]中的字符串倒序输出。试分别用递归和非递归两

种形式编写

源代码:

递归:

#include

#include

#include

void res(char s[],int len)

{

if(len>=0)

{

printf("%c",s[len-1]);

len--;

res(s,len);

getchar();

}

}

void reverse(char b[])

{

res(b,strlen(b));

}

void main()

{

char a[100];

gets(a);

reverse(a);

system("pause");

}

源代码:

非递归:

#include

#include

void reverse(char s[]);

void main()

{

char s[100];

gets(s);

reverse(s);

}

void reverse(char s[]) //非递归调用的reverse函数

{

int j,i=0;

do

{

i++;

}while(s[i]!='0');

for(j=i-1;j>=0;j--)

printf("%c",s[j]);

printf("n");

system("pause");

}

实验6-4:

写一个主函数输入测试数据(自己指定),并调用上述函数,检查函数功能的正确性

源代码:

#include

int max(int a,int b)

{

if(a>b)

return a;

if(a

return b;

}

main()

{

int a,b;

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

printf("%dn",max(a,b));

}

实验6-5:

一个数如果从左到右和从右到左读,数字是相同的,则称这个数字为回文数,比如898、1221、

15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?要求:回文判断和

质数判断都需要通过子函数实现,输出的时候要求5个数字一行

源代码:

#include"stdio.h"

int hw(int n)

{

int a[5],i,k=n,j;

for(i=2;i

if(n%i==0)

return 0;

else

{

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

{

a[i]=k%10;

k=k/10;

}

if(n==a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4])

return 1;

else

return 0;

}

}

int main()

{

int i,s,j=0;

for(i=10000;i<=99999;i++)

{

s=hw(i);

if(s)

{

printf("%10d",i);

j++;

if(j%5==0)

printf("n");

}

}

getchar();

system("pause");

}

实验6-6:

在n个已排好序(设为从小到大)的数据(数或字符串)中查找某一个数据,如果找到了,

就指出其在n个数中的位置;否则给出无该数据的信息。请用递归的方法实现二分查找来实

现这一查找过程

源代码:

#include"stdio.h"

void found(int s[],int max,int min,int l)

{

int mid;

mid=(max+min)/2;

if(mid>max||mid

printf("此数不存在于此数列中!");

else

{

if(s[mid]==l)

{

printf("该数在10个数中的位置是%d",mid+1);

}

else if(s[mid]>l)

{

max--;

found(s,max,min,l);

}

else

{

min++;

found(s,max,min,l);

}

}

getchar();

}

int main()

{

int a[100],i,n;

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

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

scanf("%d",&n);

found(a,9,0,n);

system("pause");

}

实验7-1:

编写一个函数char *delk( char *sp),把sp所指向的字符串中所有的“$”字符删除,并把处

理后的字符串指针返回

源代码:

#include

#include

void delchar(char *s,char c)

{

char s2[50];

int i,j;

for(i=0,j=0;s[i]!='0';i++){

if(s[i]!=c){

s2[j]=s[i];

j++;

}

}

s2[j]='0';

for(i=0;s2[i]!='0';i++){

s[i]=s2[i];

}

s[i]="0";

}

int main()

{

char str[20]="abcdef";

delchar (str,'c');

puts(str);

system("pause");

}

实验7-2:

写一个函数int find( char *s1, char *s2),函数find的功能是查找串s1中是否包含指定的词(s2

指向),如果存在则返回第1次出现的位置,否则返回-1.约定串中的词由1个或1个以上的

空格符分隔。

源代码:

#include

int find(char *s1,char *s2)

{

int i=0,j=0;

char *p=s2;

for(;s1!='0';s1++,i++)

{

if(*s1!=*s2)

{

s2=p;

j=0;

}

if(*s1==*s2)

{

j++;

s2++;

if(*s2=='0')

{

return i-j+2;

}

}

}

return -1;

}

int main()

{

char *s1="I am a girl",*s2="am";

printf("%d",find(s1,s2));

printf("n");

}

实验7-3:

编程实现将输入的十进制整数n通过函数DtoH转换为十六进制数,并将转换结果以字符形

式输出。例如:输入十进制数79,将输出十六进制数4f

源代码:

#include

#include

int DtoH(int n,int a[])

{

int i=0;

while(n!=0){

int bit=n%16;

a[i]=bit;

i++;

n=n/16;

}

return i;

}

int main()

{

int x;

printf("please enter a numbern");

scanf("%d",&x);

int a[10]={0};

int nbits=DtoH(x,a);

int i;

printf("转换后的数为n");

for(i=nbits-1;i>=0;i--){

if(a[i]>9)

printf("%c",a[i]-10+'A');

else

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

}

printf("n");

system("pause");

}

实验7-4:

定义函数void Merge(int a[], int n, int b[], int m),参数a、b为一维数组,数组中的数据为升

序排列,n和m分别为它们的元素个数。函数的功能为:将数组a和b合并为一个数组,合

并后的结果存放于数组a中,要求合并后的数组a仍旧为升序排列。请编程实现,并编写

main函数对其测试。

源代码:

#include

void Merge(int a[],int n,int b[],int m)

{

int *p,*q,i,j,k;

p=a;

q=b;

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

{

if(i>0&&*(p+i)<*(p+i-1))

{

*(p+i)=*q;

q++;

}

}

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

for(j=i+1;j<10;j++)

if(*(p+i)>*(p+j))

{

k=*(p+i);

*(p+i)=*(p+j);

*(p+j)=k;

}

}

main()

{

int a[10]={2,3,5,7,9},b[5]={1,4,6,8,10};

int i;

Merge(a,10,b,5);

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

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

}

实验8-1:

编写一个书名排序程序,输入10个书名存入一个二维数组,用函数void sortstring( char

*name[] , int n)实现它们的字典顺序。

源代码:

#include

#include

void sortstring(char *name[],int n)

{

char *p;

int i,j;

for(i=0;i

for(j=i+1;j

{

if(strcmp(name[i],name[j])>0)

{

p=name[i];

name[i]=name[j];

name[j]=p;

}

}

}

main()

{

char *name[]={"hello","world","start","end","then",

"first","follow","watch","see","hear"};

int a;

sortstring(name,10);

for(a=0;a<10;a++)

printf("%sn",name[a]);

}

实验8-2:

编写函数void search( char *s1, char *s2, char *s3)。函数search()从已知的两个字符串s1与s2

中找出它们都包含的最长的单词放入字符串s3,约定字符串中只有小写字母和空格字符,

单词用1个或1个以上空格分隔

源代码:

#include

#include

#include

void search(char *s1, char *s2, char *s3)

{

char *p;

int word,i,m,n;

char a[20];

p=s1;

s3[0]='0';

while (*p!='0')

{

word=0;

for (i=0;p[i]!='0';i++)//记录单词的长度i

{

if (p[i]!=' '&&word==0)

{

word=1;

m=i;

}

else if (p[i]==' '&&word==1)

{

n=i;

break;

}

}

if (p[i]=='0'&&word==1)

n=i;

if (word==1)

{//将单词复制到atemp中

strncpy(a,p+m,n-m);

a[n-m]='0';

//puts(s3);

char *pfind;// strstr:找出atemp字符串在s2字符串中第一次出现的

位置。

if ( (pfind=strstr(s2,a))!=NULL )

{ // finded

// 只是找到包含,如果完全一致,应该将找到对应的单词取出

来再比较

if ( *(pfind+strlen(a))==' ' || *(pfind+strlen(a))=='0' )

if (strlen(a)>strlen(s3)) strcpy(s3,a);

}

p=p+n;

}

else break;

}

}

main()

{

char *s1="What's your name";

char *s2="My name is 007";

char s3[20];

search(s1,s2,s3);

printf("%sn",s3);

}

实验8-3:

编写一个主函数,测试上述两个函数的正确性。

结果如上两题所示。

实验8-4:

输入一个字符串,内有数字和非数字字符,例如:

A123cdf 456.78cpc876.9er 849.1

将其中连续的数字作为一个实数,依次存放到一数组a中。例如123存放在a[0],456.78

存放在a[2],依次类推,统计共有多少个数,并输出这些数。

源代码:

#include

void f(char *sp,float b[])

{

char *p;

float value;

int power,i=0,j=0;

p=sp;

while(*p)

{

for(;!(*p>='0'&&*p<='9');p++)

value=0;

for(value=0;(*p>='0'&&*p<='9');p++,i++)

value=value*10+*p-'0';

if(*p=='.')

p++;

for(power=1;(*p>='0'&&*p<='9');p++,i++)

{

value=value*10+*p-'0';

power=power*10;

}

value=value/power;

b[j++]=value;

}

printf("数字个数为:%dn",i);

}

void main()

{

int j;

float b[4]={0};

char *a="A123cdf 456.78cpc876.9er 849.1";

f(a,b);

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

printf("%.2fn",b[j]);

}

实验9-1:

编写一个建立单链表的函数,设链表的表元素信息包含学号、姓名、一门课的成绩;写一个

按照学号查学生成绩的函数;最后写一个主函数,它先调用建立函数,再调用查询函数,显

示查到学生的姓名和成绩。

源代码:

#include

struct student

{

int num;

char name[20];

float score;

}stu[4]={{1,"zeng",98},{2,"pu",90},{3,"wu",90},{4,"wang",89}};

main()

{

int i,j;

printf("请输入学号:n");

scanf("%d",&i);

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

if(stu[j].num==i)

printf("%4d%8s%12fn",stu[j].num,stu[j].name,stu[j].score);

}

实验9-2:

编一程序,能把从终端输入的一个字符串中的小写字母全部转换成大写字母,要求输入的字

符的同时指定该字符在字符串中的序号(即字符在字符串中的顺序号,例如第1个字符的序

号为1),字符和序号存入结构体中,字符串存入结构体数组中,然后显示结构体数组的结

果(用字符!表示输入字符串的结束)。

源代码:

#include

struct str

{

char a;

int num;

}s[10];

main()

{

int i=0;

printf("请输入字母,以!为结束标志n");

while(1)

{

scanf("%c",&s[i].a);

if(s[i].a!='!')

s[i].num=i+1;

else

break;

if(s[i].a>'Z')

s[i].a=s[i].a-32;

printf("%c,%dn",s[i].a,s[i].num);

i++;

}

}

实验9-3:

在本实验的实验内容1的基础上,实现在链表元素index之前插入元素的操作Insert( struct

node *head, int index)和删除指定位置元素的操作Delete( struct node * head, int index),并编写

主函数测试。

源代码:

#include

#include

#include

#include

struct student

{

char name[15];

char num[15];

char risk[15];

struct student *next;

};

struct student * fun()

{

struct student *p,*q,*head;

q=head=NULL;

char str[15]={'0'};

printf("请依次输入学生的姓名,学号,成绩:(以'0'作为结束标志)n");

while(1)

{

scanf("%s",str);

if(str[0]=='0')

break;

p=(struct student *)malloc(sizeof(struct student));

strcpy(p->name,str);

scanf("%s",p->num);

scanf("%s",p->risk);

if(head==NULL)

head=q=p;

else

{

q->next=p;

q=p;

}

}

q->next=NULL;

return head;

}

struct student * park(struct student *head)

{

int i;

char str[15];

struct student *p,*q;

printf("你想要删除某个学生的信息吗?是/否(1/0)n");

scanf("%d",&i);

if(!i)

return head;

printf("请输入你想要删除的学生姓名n");

scanf("%s",str);

for(p=head,q=NULL;p!=NULL;q=p,p=p->next)

if(!strcmp(p->name,str))

break;

if(p==NULL)

{

printf("没有你要删除的学生的信息n");

return head;

}

else

{

if(q==NULL)

head=p->next;

else

{

q->next=p->next;

}

free(p);

}

return head;

}

struct student *wall(struct student *head)

{

int i,j,k=1;

struct student *p,*q,*r;

printf("你想要添加某个学生的信息吗?是/否(1/0)n");

scanf("%d",&i);

if(!i)

return head;

printf("请输入你想要添加的学生的信息:(依次为:姓名,学号,成绩)n");

p=(struct student *)malloc(sizeof(struct student));

scanf("%s",p->name);

scanf("%s",p->num);

scanf("%s",p->risk);

printf("请输入你想要添加到的位置n");

scanf("%d",&j);

for(q=head,r=NULL;q!=NULL;r=q,q=q->next)

{

if(j==1)

{

p->next=head;

head=p;

break;

}

if(k==j)

{

p->next=q;

r->next=p;

break;

}

k++;

}

if(q==NULL&&j==k)

{

q=p;

p->next=NULL;

}

if(q==NULL&&j>k)

printf("你的添加的位置不合法n");

return head;

}

void prin(struct student *head)

{

struct student *p;

for(p=head;p!=NULL;p=p->next)

{

printf("%s ",p->name);

printf("%s ",p->num);

printf("%s ",p->risk);

printf("n");

}

}

main()

{

struct student *head;

head=fun();

head=wall(head);

head=park(head);

prin(head);

}

实验10-1:

编写一个程序,读取磁盘上的一个C语言程序文件,要求加上注释后再存放到磁盘上,文

件可以另外命名。

源代码:

#include

#include

void main()

{

int i=0,j;

char c,a[80]={"dsaff"};

FILE *p;

if((p=fopen("E:","r"))==NULL)

}

fscanf(p,"%s",a);

fclose(p);

if((p=fopen("E:","w"))==NULL)

{

printf(" Can't open filen");

exit(1);

}

fputs("/*",p);

fprintf(p,a);

fputs("*/",p);

fclose(p);

实验10-2:

编写一个程序,将文件从第10行起存放到中。

源代码:

#include

#include

void main()

{

int i=0;

char c;

FILE *p1,*p2;

if((p1=fopen("E:","r"))==NULL)

{

printf(" Can't open filen");

exit(1);

}

if((p2=fopen("E:","w"))==NULL)

{

printf(" Can't open filen");

exit(1);

}

while(!feof(p1))

{

if((c=fgetc(p1))=='n')

i++;

if(i>=9)

{

fputc(c,p2);

}

}

system("pause");

fclose(p1);

fclose(p2);

}

实验10-3:

有一个整数文件,读取其中的数值,如果为奇数加1,如果为偶数减1,然后存放到新的文

件中去。

源代码:

#include

#include

void main()

{

int i=0;

char c;

FILE *p1;

if((p1=fopen("F:","r"))==NULL)

{

printf(" Can't open filen");

exit(1);

}

while(!feof(p1))

{

c=fgetc(p1);

if((c-'0')%2==0)

i--;

else if((c-'0')%2==1)

i++;

}

fclose(p1);

printf("%dn",i);

}

实验10-4:

二进制文件中包含若干个整数,用键盘输入一个整数,请在文件中找出该整数的下一

个数并输出。若找不到则输出“Not Found!”。

源代码:

#include

int main()

{

FILE *pf;

int x,y,j;

int i=0;

int a[8]={3,4,6,8,7,1,2,9};

pf = fopen("E:","wb");

if( pf==NULL ){

printf("open file errorn");

}

else{

fwrite((char *)a,sizeof(int),8,pf);

fclose(pf);

}

if((pf=fopen("E:","rb"))==NULL){

printf("open file errorn");

}

else{

scanf("%d",&x);

while(!feof(pf)){

fread((char*)&y,sizeof(int),1,pf);

i++;

if(y==x)

break;

}

fread((char*)&y,sizeof(int),1,pf);

if(!feof(pf)){

printf("%d在第%d个,下一个数字为%dn",x,i,y);

}

else{

printf("not found or it last num,no nextn");

}

fclose(pf);

}

}


本文标签: 输入 数组 输出 函数 字符串