C2实验报告 2

更新时间:2024-04-20 10:49:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《C程序设计2》实验报告格式

实验名称

1、实验目的(自己组织) 2、实验内容 (1) (2) (3)

3、实验报告要求

(1)程序(可写在实验内容处); (2)程序运行结果及分析; (3)实验总结;

(4)学期结束,将所有实验内容完善后,以文件形式提交(文件名格式:学号_姓名.RAR)。

《C程序设计2》实验内容

实验一:函数

1、 定义函数返回两个数中的最大数,在主函数中通过调用该函数求三个数中较大的数

并输出。

#include int main() {

float f(float x,float y); float a,b,c,max;

printf(\ scanf(\ max=f(a,b); max=f(c,max);

printf(\ getch(); }

float f(float x,float y) {

float m; m=x;

if(x

分析:两次调用函数就可以了。。。

2、编写一个判断一个整数是否为素数的函数,并求出在2000以内的所有素数。

#include int main() {

int f(int x); int i,j=0;

for(i=2;i<2000;i++) {

if(f(i)==1) {

printf(\ j++;

if(j%5==0) printf(\ } }

return 0; }

int f(int x) {

int m;

for(m=2;m=x) return 1; else return 0; }

3、求方程ax2+bx+c=0的根,用三个函数分别求b2-4ac大于0、等于0和小于0的根,并输出结果。从主函数输入a、b、c的值。

#include #include #include int main() {

void jisuan1(float m,float a,float b,float c); void jisuan2(float m,float a,float b,float c); void jisuan3(float m,float a,float b,float c); float a,b,c,m;

printf(\请输入一元二次方程组的a,b,c:\ scanf(\ printf(\ m=b*b-4*a*c; if(a==0)

printf(\不是一元二次方程组!!!\ else if(m>0) jisuan1(m,a,b,c); else if(m==0) jisuan2(m,a,b,c); else if(m<0) jisuan3(m,a,b,c); getch(); }

void jisuan1(float m,float a,float b,float c) {

float m1,m2,x1,x2; m1=-b/(2*a);

m2=sqrt(m)/(2*a); x1=m1+m2; x2=m1-m2;

printf(\该方程的根为:\\n\

printf(\ }

void jisuan2(float m,float a,float b,float c) {

float m1,x1,x2; m1=-b/(2*a);

printf(\该方程的根为:\\n\ printf(\ }

void jisuan3(float m,float a,float b,float c) {

float m1,m2,x1,x2; m1=-b/(2*a);

m2=sqrt(-m)/(2*a);

printf(\该方程的根为:\\n\

printf(\ }

4、定义一个函数replace(),其中包含三个形参:两个是字符型,一个是字符串型。该函数返回一个整数。函数的功能是在字符串中查找第一个字符,如果找到,用第二个字符替换该字符,并将替换的次数作为返回值。编写主函数调用该函数。 #include #include int main() {

int replace(char *s,char c1,char c2); char s[100],ch1,ch2; int count;

printf(\请输入一个字符串:\\n\ gets(s);

printf(\请输入两个字符:\\n\ scanf(\ count=replace(s,ch1,ch2); printf(\变化后的字符串为:\ puts(s);

printf(\字符变化的次数为:%d\ getch(); }

int replace(char *s,char c1,char c2) {

int i,count=0;

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

if(s[i]==c1) {

s[i]=c2; count++; } }

return count; }

实验二:数组(一)

1、由键盘对10个数组元素初始化,求它们的平均值并输出。 #include int main() {

float a[10],s=0; int i;

for(i=0;i<10;i++) scanf(\ for(i=0;i<10;i++) {

printf(\ s+=a[i]; }

printf(\ getch(); }

2、输入一个十进制整数,输出与其相等的二进制形式。将二进制保存在一个数组中,然后按相反的顺序输出。 #include int main() {

int x,a[100],i,j;

printf(\ scanf(\ for(i=0;x!=0;i++)

{ a[i]=x%2; x=x/2;

} i--;

for(j=0;j<=i;j++) printf(\ getch(); }

2、编程对10个数组元素的排序。 #include int main() {

float a[10],j,t,i,m; for(i=0;i<10;i++) scanf(\ for(i=0;i<10;i++)

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

m=i;

for(j=m+1;j<10;j++) if(a[m]>a[j]) m=j;

t=a[i];a[i]=a[m];a[m]=t; }

for(i=0;i<10;i++) if(i!=9)

printf(\ else

printf(\ getch(); }

实验三:数组(二)

1、由键盘对4×4的二维数组初始化,计算其两条对角线元素之和并输出。 #include #include int main() {

int a[4][4],i,j,s1,s2; printf(\ for(i=0;i<4;i++) for(j=0;j<4;j++)

scanf(\ for(i=0;i<4;i++) {

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

printf(\ printf(\ }

s1=s2=0;

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

if(i==j) s1+=a[i][j];

else if(i+j==3) s2+=a[i][j]; printf(\ getch(); }

2、通过二维数组实现杨辉三角的前10行并输出。杨辉三角形式请参考教材P153。 #include int main() {

int a[10][10],i,j; for(i=0;i<10;i++) for(j=0;j<10;j++) a[i][j]=1;

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

a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<10;i++) {

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

printf(\ printf(\ }

getch();

}

3、将M×N的矩阵转置成N×M的矩阵并输出。 #include #include int main() {

int a[100][100],i,j,m,n; printf(\输入m,n:\ scanf(\ for(i=0;i

scanf(\ printf(\ for(i=0;i

for(j=0;j

printf(\ printf(\ }

printf(\ for(i=0;i

for(j=0;j

printf(\ printf(\ }

getch(); }

实验四:指针(一)

注:实验四~实验六的所有程序都使用指针方法操作

1、编写求字符串串长的函数(strlen),并在主函数中调用。 #include #include int main() {

int strlen(char *s); char s[100];

printf(\输入一个字符串:\\n\ gets(s);

printf(\这个字符串的长度为:%d\ getch(); }

int strlen(char *s) {

int i;

for(i=0;s[i]!='\\0';i++); return i; }

2、编写连接两字符串的函数(strcat),并在主函数中调用。 #include #include main() {

void strcat(char *s1,char *s2); char sm1[100],sm2[100];

printf(\请输入一个字符串:\\n\ gets(sm1);

printf(\请输入一个字符串:\\n\ gets(sm2);

strcat(sm1,sm2);

printf(\处理后的字符串为:%s\ getch(); }

void strcat(char *s1,char *s2) {

int i,j=0;

for(i=0;s1[i]!='\\0';i++); while(s2[j]!='\\0') {

}

s1[i]=s2[j]; i++; j++; }

3、sort()对一维整数数组的内容进行排序;编写函数in_data()读入一组整数;编写函数out_data输出整数数组的内容;在主函数中调用这些函数,输入一组整数,输出排序前和排序后的情况。

#include #include int s[100]; int n; main() {

void int_data();//输入 void out_data();//输出 void sort(int *s);//排序

int_data(); sort(s); out_data(); getch(); }

void int_data() {

int i;

printf(\输入一个数:\ scanf(\

printf(\输入%d个数:\ for(i=0;i

void out_data() {

int i;

for(i=0;i

void sort(int *s) {

int i,j,t;

for(i=1;i

for(j=0;js[j+1]) {

t=s[j];

s[j]=s[j+1]; s[j+1]=t; } }

实验五:指针(二)

1、编写函数 reverse(*s),实现对字符串S的倒排,编写主函数对其进行调用。 #include #include #include int main() {

void reverse(char *s); char sh[100];

printf(\输入一个字符串:\ gets(sh); reverse(sh);

printf(\输出一个字符串:\ puts(sh); getch(); }

void reverse(char *s) {

int i,j; char ch;

j=strlen(s);

for(i=0,j=j-1;i

ch=s[i]; s[i]=s[j]; s[j]=ch; } }

2、编写函数strcmp(*s1,*s2),实现对两字符串的比较,编写主函数对其进行调用。 #include #include #include int main() {

int strcmp(char *s1,char *s2); char sm1[100],sm2[100]; int count;

printf(\输入一个字符串:\ gets(sm1);

printf(\输入一个字符串:\ gets(sm2);

count=strcmp(sm1,sm2);

if(count==1) printf(\

else if(count==0) printf(\ else printf(\ getch(); }

int strcmp(char *s1,char *s2) {

int l1,l2,min,i; l1=strlen(s1); l2=strlen(s2); min=l1>l2? l2:l1; for(i=0;i

if(s1[i]==s2[i]) continue; else break; if(min-1==i) {

if(l1>l2) return 1;

else if(l1==l2) return 0; else return -1; } else {

if(s1[i]>s2[i]) return 1;

else if(s1[i]==s2[i]) return 0; else return -1; } }

3、有一字符串,包含n个字符,写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。

#include #include #include int main() {

void copy(char *s,int m); int n,m,i; char s[100];

printf(\请输入n的值:\ scanf(\

printf(\请输入一个字符串:\ for(i=0;i

printf(\请输入M的值:\ scanf(\ copy(s,m);

printf(\ getch(); }

void copy(char *s,int m) {

strcpy(s,s+m); }

实验六:指针(三)

1、有一个班4个学生5门课程。(1)求第一门课程的平均分;(2)找出有2门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;(3)找出平均成绩在90分以上的学生。分别编3个函数实现以上要求。

#include

void average(float stu[4][5],float av[4]) {

int i,j;

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

av[i]=0; for(i=0;i<4;i++) { for(j=0;j<5;j++) av[i]+=stu[i][j]; av[i]=1.0*av[i]/5; } }

void firstsubject(float stu[4][5]) {

float s=0; int i;

for(i=0;i<4;i++) s+=stu[i][0];

printf(\这些学生第一门课的平均分是:%.2f\\n\}

void search(float stu[4][5],long num[4]) {

int count[4],i,j; float av[4]; average(stu,av); for(i=0;i<4;i++) count[i]=0; for(i=0;i<4;i++) for(j=0;j<5;j++) if(stu[i][j]<60) count[i]++;

printf(\输出两门课以上不及格学生的信息:\\n\ for(i=0;i<4;i++) { if(count[i]>2) { printf(\学号 5门课的成绩 平均成绩\\n\ printf(\ for(j=0;j<5;j++) { printf(\ } printf(\ } } }

void zhaochu(float stu[4][5],long num[4]) {

float av[4]; int i;

average(stu,av);

printf(\平均成绩在90以上的学生信息:\\n\ for(i=0;i<4;i++) { if(av[i]>=90) { printf(\学号:%ld\\n\ printf(\平均成绩:%.2f\\n\ } } }

main() {

float stu[4][5]; long num[4]; int i,j;

printf(\输入4位学生的信息:\\n\ for(i=0;i<4;i++) { printf(\输入第%d位学生的信息:\\n\ printf(\学号:\ scanf(\ printf(\ for(j=0;j<5;j++) { printf(\输入该学生第%d门课的成绩:\ scanf(\ } }

firstsubject(stu); search(stu,num); zhaochu(stu,num); }

2、编写一个程序,输入月份,输出该月的英文月名。例如,输入“3”,则输出“March”,要求用指针数组实现。

#include void main() {

char *month[]= { \ \ \ \ \ \ \ \ \ \ \ \ }; int x;

printf(\请用数字输入月份:\ scanf(\

printf(\

}

实验七:结构体 (一)

1、用结构体表示日期,编写程序计算伦敦奥运会的倒计时的天数并输出(2012年8月15日)。

#include struct { int year; int month; int day; }date;

int banduan(int year) { return ((year%4==0&&year0!=0)||(year@0==0)); }

main() { int i,j,s=0; int tap[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}}; printf(\输入现在的时间:\ scanf(\

}

printf(\

for(i=date.year+1;i<2012;i++) { j=banduan(i); if(j==1) s+=356; else if(j==0) s+=355; }

if(date.year==2012) { for(i=date.month+1;i<8;i++) s+=tap[1][i]; if(date.month==8) s=s+15-date.day; else s+=tap[1][date.month]-date.day+15; } else { j=banduan(date.year); for(i=date.month+1;i<=12;i++) s+=tap[j][i]; for(i=1;i<8;i++) s+=tap[1][i]; s+=tap[j][date.month]-date.day+15; }

printf(\倒计时%d天\

2、某系的成绩登记册中,每个班最多有40个学生,每份成绩表中的成绩信息包括:学号(9位字符),姓名(8位字符),成绩(百分制),备注(20位字符)。设计程序以处理一个班的成绩信息,包括输入、输出、查询(给定分数以上的学生信息)等。

#include struct student { char num[9]; char name[8]; float score; char beizhu[20]; }stu[40];

void input(struct student stu[40],int n)

{ int i; printf(\学生信息:\\n\ for(i=0;i

void output(struct student stu[40],int n) { int i; printf(\学生信息:\\n\ for(i=0;i

void search(struct student stu[40],int n) { float x; int i; printf(\输入给定分数:\ scanf(\ printf(\ for(i=0;i=x) { printf(\学生信息:\\n\ printf(\学号:%s\\n\ printf(\姓名:%s\\n\ printf(\成绩:%.2f\\n\ printf(\备注:%s\\n\\n\ }

} }

main() { int n; printf(\输入总共有多少学生:\ scanf(\ printf(\ input(stu,n); printf(\ output(stu,n); printf(\ search(stu,n); }

实验八:结构体 (二)

1、为一个花店编写一个库存管理程序,花店库存的花用花的名称、颜色、单价和株的数量来表示。要求:

(1)定义一个结构数组,存储库存的鲜花的数据;

(2)编写函数input_data(),输入现有库存的鲜花数据;

(3)编写一个函数buy(),向用户询问她需要购买的鲜花的种类和数量,计算总价,并从库存中减去用户购买的数量,返回总价格。 编写主函数调用上述函数。

#include #include #include struct {

char name[20]; char color[10]; float price; int num; }flower[100]; int n,count;

void input_data() {

int i;

printf(\输入花店已有花的信息:\\n\ for(i=0;i

{ printf(\第%d种花:\\n\ printf(\名称:\ scanf(\ printf(\颜色:\ scanf(\ printf(\价格:\ scanf(\ printf(\数量:\ scanf(\ printf(\ } }

float buy() {

int i;

char s[20];

printf(\现在店里有的花的种类有:\ for(i=0;i

printf(\用户需要多少数量的这种花?\\n\ scanf(\ for(i=0;i

main() {

float money=0;

printf(\输入有多少种花:\ scanf(\ input_data(); money=buy(); n-=count;

printf(\用户买的这种花共需要%.2f元钱\}

实验九:编译预处理

1、输入输入两整数,求它们相除的余数,用带参数的宏来实现。

#include #include #define f(m,n) (m%n) main() { int x,y,t; scanf(\ if(x

12、三角的面积为area=s(s?1)(s?b)(s?c),其中s=(a?b?c)。a、b、c为三角形的三

2边。定义两个带参数的宏,一个用来求s,另一个用来求area。写程序,在主程序中用带实参的宏名来求面积area。

#include #include

#define S(a,b,c) ((a)+(b)+(c))/2

#define AREA(a,b,c) sqrt((S(a,b,c))*((S(a,b,c))-(a))*((S(a,b,c))-(b))*((S(a,b,c))-(c))) main() { float a,b,c; printf(\输入三角形三条边的长度:\ scanf(\ printf(\ return 0;

}

实验十:文件

1、编程统计一个文本文件 f.txt中所有字母和所有数字的总的出现次数。

#include #include #include main() { int zimucount=0,shuzicount=0; char ch; FILE *fp; if((fp=fopen(\ { printf(\ exit(0); } while(!feof(fp)) { ch=fgetc(fp);

if(ch>='0'&&ch<='9') shuzicount++; else zimucount++; } fclose(fp); printf(\字母有%d个 数字有%d个\}

2、编程将文本文件 f.txt中的所有小写字母变成大写字母并存入另一文本文件o.txt中。

#include #include main() { FILE *fp1,*fp2; char ch; fp1=fopen(\ fp2=fopen(\ ch=fgetc(fp1); while(!feof(fp1)) { if(ch>='a'&&ch<='z') { ch=ch-32; fprintf(fp2,\ } ch=fgetc(fp1); } fclose(fp1); fclose(fp2); return 0; }

3、由键盘初始化5个学生3门课程的成绩,计算出平均成绩,将原有成绩及平均成绩分行存放在文件score.txt中。

#include #include main() { float stu[5][3],av[5]; char name[5][20]; int i,j; FILE *fp; for(i=0;i<5;i++) av[i]=0; printf(\输入学生信息:\\n\ for(i=0;i<5;i++) { printf(\第%d位学生信息:\\n\ printf(\姓名:\ scanf(\ for(j=0;j<3;j++) { printf(\输入该学生第%d门课的成绩:\ scanf(\ av[i]+=stu[i][j]; } av[i]=av[i]*1.0/3; } if((fp=fopen(\ { printf(\ exit(0); } for(i=0;i<5;i++) { fprintf(fp,\姓名 三门课的成绩 平均成绩\\n\

}

fprintf(fp,\}

fclose(fp);

综合实验

1、对键盘输入的10个数进行排序后输出,方法不限

#include #include int main() { int a[10],i,j,t;

}

printf(\输入10个数:\\n\for(i=0;i<10;i++) { printf(\ scanf(\ printf(\}

for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; }

for(i=0;i<10;i++) printf(\getch();

2、有一个已经排好序的数组,现输入一个数,要求按原来的规律将它插入数组中。

#include #include int main() { int a[100],i,n,j,t,x; printf(\输入一个数:\ scanf(\ printf(\输入%d个数:\\n\ for(i=0;ia[j+1]) {

}

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

printf(\for(i=0;i

printf(\输入一个数:\scanf(\for(i=0;i=a[i]) continue; if(i==n) { for(j=0;j

else if(i==0) { printf(\ for(j=0;j

getch();

3、打印出杨辉三角形的前15行。 #include #include main() { long i,j;

}

long a[15][15]; for(i=0;i<15;i++) for(j=0;j<=i;j++)

if(j==0||i==j) a[i][j]=1; else

a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<15;i++) { for(j=0;j<=i;j++) printf(\ \ printf(\}

getch();

4、有n(>5)个人围成一圈,顺序排号,从第一个人开始报数(从1到5报数),凡报到5的人退出圈子,问最后留下的是原来第几号的那位? #include #include int main() { int n,i,count,j=1,k,people[1000]; printf(\输入总共有多少人:\ scanf(\ count=n; printf(\ for(i=1;i<=n;i++) people[i]=1; for(i=1;;i++) { if(people[i]!=0 && j!=5) {

}

}

people[i]=j; j++; }

else if(j==5&&people[i]!=0) { people[i]=0; j=1; count--; }

else if(people[i]==0) continue; if(count==1) { for(k=1;k<=n;k++) { if(people[k]!=0) { printf(\这个人的序号是:%d\ break; } } break; }

if(i==n) i=0;

5、反向输出一个链表。 #include #include struct student { long num; char name[10]; struct student *next; };

int n=0; main() { struct student *head,*tail,*p,*p1; int i=0; p=(struct student*)malloc(sizeof(struct student)); head=tail=NULL;

p->next=NULL;

printf(\输入学生学号、姓名:\scanf(\while(p->num!=0) { n++; if(head==NULL) head=p; else tail->next=p; tail=p; p=(struct student*)malloc(sizeof(struct student)); p->next=NULL; printf(\输入学生学号、姓名:\ scanf(\}

tail->next=NULL;

printf(\输出处理前学生信息:\\n\p=head;

if(head!=NULL) do { printf(\学生学号、姓名:\ printf(\ printf(\ p=p->next; }while(p!=NULL); p=head->next;

while(p->next!=NULL) { i++; if(i==1) head->next=NULL; p1=p->next; p->next=head; head=p; p=p1; }

p->next=head; head=p;

printf(\输出处理后学生信息:\\n\for(i=0;inext; }

}

/*p=head; do { printf(\学生学号、姓名:\ printf(\ printf(\ p=p->next; }while(p!=NULL);*/

本文来源:https://www.bwwdw.com/article/30tp.html

Top