第一篇:C语言实验报告题及答案
《C程序设计实验》
实验一 C程序开发环境(2学时)
1.实验目的熟悉C语言的集成开发环境,了解菜单的使用方法;掌握C语言程序上机的编辑、编译、连接、运行的基本步骤;了解C语言程序的结构。
2.实验内容
(1)熟悉C语言程序上机的编辑、编译、连接、运行的基本步骤;
(2)输入并调试、运行下面的程序。
#include
int main()
{
printf(“This is a C program.n”);
return 0;
}
(3)输入并调试、运行下面的程序。
#include
int main()
{
int max(int x,int y);
int a,b,c;
scanf(“%d,%d”,&a,&b);
c = max(a,b);
printf(“max=%dn”,c);
return 0;
}
int max(int x,int y)
{
int z;
if(x > y)z = x;
else z = y;
return(z);
}
3.实验仪器设备
微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。
4.问题讨论
将printf函数改为print,调试并分析结果。
实验二 数据类型、运算符与表达式(2学时)
1.实验目的掌握整型、字符型和实型变量的定义和使用;掌握算术运算符的使用;掌握C语言表达式的运算规则。
2.实验内容
(1)输入并调试、运行下面的程序。
#include
int main()
{
char c1,c2;
c1=97;
c2=98;
printf(“%c %cn”,c1,c2);
printf(“%d %dn”,c1,c2);
return 0;
}
(2)输入并调试、运行下面的程序。
#include
int main()
{
int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%dn”,i,j,m,n);
return 0;
}
3.实验仪器设备
微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。
4.问题讨论
将++i改为i++,j++改为++j,程序的运行结果会有何变化?
实验三 顺序结构程序设计(2学时)
1.实验目的掌握scanf、printf函数语句的使用方法;熟练应用赋值、输入、输出语句。
2.实验内容
(1)输入三角形三边长,求三角形面积。
(2)输入一个摄氏温度,要求输出华氏温度。公式为f=9/5*c+32。
3.实验仪器设备
微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。
4.问题讨论
如何理解格式控制符与它对应的变量之间的关系?
实验四 选择结构程序设计(2学时)
1.实验目的掌握利用if语句实现选择结构程序设计的方法;掌握利用switch语句实现选择结构的程序设计方法;注意break在switch语句的作用。
2.实验内容
(1)已知:当x<1时,y=x;当1≤x<10时,y=2x-1;当x≥10时,y=3x-11。输入x的值,输出对应y的值。
(2)输入一个百分制成绩,要求输出成绩等级A、B、C、D、E,练习使用switch语句。
(3)判断方程ax2+bx+c=0有几个解,如果有解则输出。
3.实验仪器设备
微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。
switch语句可否转换成if语句实现?
实验五 循环结构程序设计(4学时)
1.实验目的掌握利用while 或do while实现循环结构程序设计的方法;掌握利用for语句实现循环结构程序设计的方法。
2.实验内容
(1)编程实现1!+2!+…+n!的和,n由键盘输入。
(2)输出九九乘法表。
(3)输出“水仙花数”。“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。
(4)输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
3.实验仪器设备
微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。
4.问题讨论
三种循环结构有何联系和区别?
实验六 数组(4学时)
1.实验目的掌握一维数组的定义和输入输出操作;掌握二维数组的定义和输入输出操作;掌握字符数组和字符串处理函数的使用;掌握与数组有关的重要算法:排序、查找等。
2.实验内容
(1)输入15个整数,用冒泡法对它们按照由小到大的顺序排序并输出。
(2)输入15个整数,用选择法对它们按照由小到大的顺序排序并输出。
(3)求矩阵对角线元素之和。
(4)有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数。
3.实验仪器设备
微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。
增加或删除数组的一个元素,对数组的影响有哪些?
实验七 函数(4学时)
1.实验目的掌握C语言中函数定义、函数调用的方法和规则;掌握函数实参与形参的对应关系,以及“值传递”的含义;掌握全局变量和局部变量的关系和使用方法。
2.实验内容
(1)写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。
(2)求两个整数的最大公约数和最小公倍数。用一个子函数求最大公约数,用另一个子函数根据求出的最大公约数求最小公倍数。
(3)输入10个学生5门课的成绩,分别用函数求:①每个学生平均分;②每门课的平均分;③找出最高的分数对应的学生和课程;④求平均分方差;
3.实验仪器设备
微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。
4.问题讨论
如何将子函数中某个变量的值传回主函数?
实验八 指针(4学时)
1.实验目的掌握指针的概念,学会定义和使用指针;掌握跟数组有关的指针的操作(包括字符数组);掌握跟函数有关的指针的操作。
2.实验内容
(1)另写一个函数完成strcmp()功能。
(2)另写一个函数完成strcpy()功能。
(3)将一个5×5的矩阵转置,用一个子函数实现该功能。
3.实验仪器设备
微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。
4.问题讨论
如何理解指针和数组之间的关系?
实验九 结构体(2学时)
1.实验目的掌握结构体类型变量的定义和使用;掌握结构体类型数组的概念和应用;掌握链表的概念,初步学会对链表进行操作;理解共用体的概念与使用。
2.实验内容
(1)有10个学生,每个学生的数据包括学号、姓名、3门课的成绩。从键盘输入10个学生数据,要求输出每门课的平均成绩。
(2)有n个人围成一圈,顺序排号。从第1个人开始1—3报数,凡报到3的人退出圈子,问 最后留下的是原来第几号的那位。
3.实验仪器设备
微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。
4.问题讨论
结构体类型变量有哪几种定义和使用的方法?
实验十 综合程序设计(4学时)
1.实验目的掌握程序设计的基本方法和技能,理解结构化程序设计和模块化设计方法的基本思想,能综合运用C语言的结构和函数等功能编写程序解决实际问题。
2.实验内容
(1)用麦克劳林级数求sin(x),x有键盘输入。
(2)有五个学生,每人有3门课的成绩,从键盘输入学生学号、姓名、3门课成绩,计算出每人平均分并将其和原始数据都存放在磁盘文件“stud.dat”中
3.实验仪器设备
微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。
4.问题讨论
数据的不同组织形式对程序有哪些影响?
第二篇:c语言编程题答案
六、编程题参考答案
1.编程,统计在所输入的50个实数中有多少个正数、多少个负数、多少个零。#include “stdio.h” #define N 50 void main(){ float x;unsigned int s1,s2,s3,i;s1=s2=s3=0;for(i=1;i<=N;i++){ scanf(“%f”,&x);if(x<0)s1++;else if(x==0)s2++;else s3++;} printf(“负数%u个,零%u个,正数%u个n”,s1,s2,s3);}
2.编程,计算并输出方程 X2+Y2=1989 的所有整数解。#include “stdio.h” void main(){ int x,y;for(x=-45;x<=45;x++){ y=-45;while(y<=45){ if(x*x+y*y==1989)printf(“%d*%d+%d*%d=%dn”,x,x,y,y,1989);y++;} } }
3.编程,输入一个10进制正整数,然后输出它所对应的八进制、十六进制数。#include “stdio.h” void main(){ unsigned int x;printf(“请输入一个十进制正整数:”);scanf(“%u”,&x);printf(“%d=八进制数 %o=十六进制数%xn”,x,x,x);}
4.编程,找出1000以内的所有完数,并输出其因子。#include “stdio.h” void main(){ int i,j,s=1;for(i=1;i<=1000;i++,s=1){ for(j=2;j<=i/2;j++)if(i%j==0)s+=j;// 求 i的因子和
if(s==i){ printf(“%d=1”,i);// 如果i 是完数则输出其各因子
for(j=2;j<=i/2;j++)if(i%j==0)printf(“+%d”,j);printf(“n”);} } }
5.输入一个正整数,输出它的所有质数因子。#include “stdio.h” void main(){ int m,i=2;printf(“请输入一个整数:”);scanf(“%d”,&m);while(m!=1)if(m%i==0){ printf(“%d ”,i);m/=i;} else i++;printf(“n”);}
6.输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。#include “stdio.h” #define N 20 void main(){ int a[N],i,j;for(i=0;i 7.输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素。#include “stdio.h” #define NA 6 #define NB 8 void main(){ float a[NA],b[NB];int i,j;for(i=0;i 8.输入两个数组(数组元素个数自定),输出在两个数组中都不出现的元素。#include “stdio.h” #define NA 6 #define NB 8 void main(){ float a[NA],b[NB];int i,j;for(i=0;i 9.编程,将字符数组S2中的全部字符拷贝到字符数组S1中。#include “stdio.h” void main(){ char s1[20],s2[]=“Good morning!”;int i=0;while((s1[i++]=s2[i])!=' ');printf(“%sn”,s1);} 10.给定年份year,判别该年份是否闰年(定义一个宏以判别该年份是否闰年)。#include 11.输入一行小写字母后,或输出原文,或将字母变成其下一字母(a变成b、b变成c、„、x变成y、y变成z、z变成a)输出,用条件编译方法实现以上选择。#include 12.编写函数,处理n行n列维数组:将每一行的元素同除以该行上绝对值最大的元素。 #include “stdio.h” #include “math.h” void div(float** a,int n){ int i,j;float x;for(i=0;i { float b[3][3]={{1,2,3},{4,5,6},{7,8,9}};int i,j;float* c[3];for(i=0;i<3;i++)c[i]=b[i];div(c,3);for(i=0;i<3;i++){ for(j=0;j<3;j++)printf(“%f ”,b[i][j]);printf(“n”);} } 13.编写函数,求任意阶多项式 a0+a1X+a2X2+...+anXn 的值并返回多项式的值。#include “stdio.h” float f1(float* a,float x,int n){ int i;float t=1,y=0;for(i=0;i 14.设计一个函数,使给出一个数的原码,能得到该数的补码。 #include unsigned int getbit(unsigned int value)//第1位为0表示数的原码,{ if(value>>15)return(value^0x7fff)+1;//其补码即其原码;若value else return value;//右移15位后为1,表示value是负数的原码,负数 } //的补码为原码按位取反(第1位不变)后加1。 void main(){ unsigned int y=0x800c,k;k=getbit(y);printf(“%xn”,k);} 15.编写函数,求m行、n列的二维数组全体元素中负数的个数。#include { float b[2][3]={{-1,2,-3},{4,-5,-6}};int i;float* c[2];for(i=0;i<2;i++)c[i]=b[i];printf(“%dn”,sum(c,2,3));} 16.编写函数,返回在一个整数组中出现次数最多的数及其出现次数。#include { float c[10]={0,4,2,4,3,2,4,-3,1.5,7.6},t;int m;fun(c,10,&m,&t);// 若说明float *t;int *m;printf(“元素%f出现次数为%dn”,t,m);// 引用为 fun(c,10,m,t)将 } // 产生悬挂指针的错误,即t、m不只指向确定的存储单元。 17.编一个程序,打入月份号,输出该月的英文月名,要求用指针数组处理。#include 18.编写递归函数,将输入的以“?”结束的字符串按与输入相反的顺序输出。#include 19.编写函数,在n个元素的一维数组中,统计比相邻元素大的数组元素个数并将统计数返回(不考虑a[0]和a[n-1]),要求以指针变量而不是数组名作参数。#include { float a[10]={1,3,4,2,6,7,12,5,9,8};printf(“%dn”,num(a,10));} 20.编写函数,在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。 #include { float a[10]={1,3,4,2,6,7,12,5,9,8},x,y;num(a,10,&x,&y);printf(“最大值为%f,最小值为%f。n”,x,y);} 21.编写一个函数,统计m行n列二维数组中有多少个正数、多少个负数,多少个零,并 返回统计结果。 #include { float b[5][3]={{-1,5,2},{3,0,-2},{0,-3,5}, {4,7,-8},{3,4,5}},*c[5];int i,k1,k2,k3;for(i=0;i<5;i++)c[i]=b[i];sub(c,5,3,&k1,&k2,&k3);printf(“负数%d个,零%d个,正数%d个。n”,k1,k2,k3);} 22.编写函数,在给定的一行以'.'结束的字符中,找出最长的单词并输出。#include p1=p2=p3=str;// p3指向最长串首字符,p1指向当前处理串首字符,while(*p2!='.')// p2为移动指针,*p2为空格表示查找到单词尾部。 if(*p2!=' '){ k2++;p2++;} else if(k2>k1){ p3=p1;p1=++p2;k1=k2;k2=0;} else { k2=0;p1=++p2;} for(k2=0;k2<=k1;k2++)printf(“%c”,*(p3+k2));printf(“n”);return;} void main()// 函数引用示例 { char a[40];int i=0;while((a[i++]=getchar())!='.');find(a);} 23.编写函数print,打印一个学生的成绩数组,该数组中有若干个学生的数据记录,每个记录包括num,name,score[3]。#include void print(struct student* s,int n){ int i;// 运算符'*'、'&'的优先级均低于运算符'.' for(i=0;i printf(“%s %s %4d%4d%4dn”,(*(s+i)).num,(*(s+i)).name,(*(s+i)).score[0],(*(s+i)).score[1],(*(s+i)).score[2]);return;} void main(){ struct student t[4];int i;for(i=0;i<4;i++) scanf(“%s%s%d%d%d”,&t[i].num,&t[i].name,&t[i].score[0], &t[i].score[1],&t[i].score[2]);print(t,4);} 24.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中的英文字符。 #include 25.编程,把文本文件d1.dat复制到d2.dat(其中空格字符不复制)。#include 26.编程,把文本文件d1.dat复制到d2.dat(其中大写英文字母要转换为小写字母)。 #include 27.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中除英文字符和数字以外的其它内容。#include if(!(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'||ch>='0'&&ch<='9'))fprintf(fpd2,“%c”,ch);fclose(fpd1);fclose(fpd2);} 28.求出1至100之间的素数(只能被1和自身整除的数)并顺序写入文件su.dat。 #include 29.磁盘文件a1和a2,各自存放一个已按字母顺序排好的字符串,编程合并二个文件到a3 文件中,合并后仍保持字母顺序。#include // 循环比较,直到读到文件尾标志为止。 fp3=fopen(“a3”,“w”);c1=fgetc(fp1);c2=fgetc(fp2);do { if(c1 30.顺序文件C.DAT每个记录包含学号(8位字符)和成绩(三位整数)两个数据项。从文件读入学生成绩,将大于或等于60分的学生成绩再形成一个新的文件SCORE60.DAT保存在A盘上,并显示出学生总人数、平均成绩和及格人数。#include typedef int datatype;typedef struct node {datatype data;struct node *next;}linklist;„„ INVERT(linklist *head){linklisk *p,*q;p=head->next;if(p!=NULL){head->next=NULL;do {q=p->next;p->next=head->next;head->next=p;p=q;} while(p!=NULL);} } 32.程序清单: PURGE(linklist *head){linklist *p,*q;q=head->next;if(q==NULL)return;p=q->next;while(p!=NULL)if(p->data==q->data){q=p->next;free(p);p=q->next;} else {q=p;p=p->next;} } 33、程序清单: #include 34、#include