第一篇:这次C语言实验中
这次C语言实验中,新运用到逗号表达式。他的功能是把两个表达式连接起来组成一个表达式,表达式作用是分别求两个表达式的值并以表达式2的值作为整个逗号表达式的值,需要注意的是逗号表达式也可以形成嵌套结构例如 表达式1,(表达式2,表达式3)。
我认为比较难得一到题目是水仙花数的计算。由于它特有的计算模式,需要很多循环和嵌套语句才能实现水仙花数的计算。在这题上我耽搁了很久,但是通过自己完成后明白了不少。
第二篇:C语言实验
C语言实验
实验一:C语言程序调试基础
一、实验目的
1.掌握C语言源程序的编写方法和调试方法
2.学会使用VC6开发工具及调试过程的查错纠错能力。
二、任务
调试课本例子:例2.19、例3.5、例5.9
三、实验过程及结果
1.鼠标左键双击VC,打开程序;单击打开的New的页面中,单击
键,选择键,选择,在新,最后单击键,就可以建立一个新的页面。
2.在界面中输入例2.19的内容,单击
键进行调试,底下的对话框出现
一句话时,说明我们编写的程序无错,就可以单击键,来运行程序。运行结果及编写程序内容如图:
4.关闭这两个窗口,再单击
实验二:顺序程序设计
一、实验目的:
1.掌握顺序程序的设计方法;
键,选择
;
2.掌握输入输出控制语句。
二、实验任务与要求
1.第3章课后习题T2 2.第3章课后习题T7
三、实验过程及结果
实验三:分支程序设计
一、目的
1.掌握分支程序控制语句的语法格式及纷争程序设计方法。2.了解分支程序的条件表达式及运算规则; 3.掌握分支程序控制语句的嵌套使用方法。
二、任务
1.第4章课后习题T6 2.第4章课后习题T8 3.第4章课后习题T12
三、实验过程及结果
实验四:循环程序设计
一、目的
1.掌握循环程序的控制语句的语法规则;
2.掌握循环程序的编写方法;
3.掌握循环程序的嵌套与退出控制方法。
二、任务
1.求100~200间的全部素数。2.第5章课后习题T8 3.第5章课后习题T10
三、实验过程及结果
实验五:数组
一、目的
1.掌握数组的定义及使用方法 2.掌握字符数组的相关操作函数。
二、任务
1.用数组求Fibonacci数列的钱40项,每5个一行。2.将一个3行8列的数组A转置为数组B。3.已知字符串str1=”abcde”,str2=”hijklm”,比阿尼写程序分别实现str1与str2的连接、求长度、比较等操作。
三、实验过程及结果
实验六:函数
一、目的
1.掌握函数的定义与调用方法。2.掌握函数参数的专递方式。
3.掌握函数的嵌套调用和递归调用方法。
二、任务
1.编写一函数,用冒泡排序法实现对数组A的排序。2.编写一函数,用选择排序法实现对数组A的排序。3.编写一函数,实现对给定年year是不是闰年。4.编写一函数,实现对给定整数m是不是素数。
5.利用递归算法,编写一函数,求Fibonacci数列的第n项。
三、实验过程及结果
实验七:变量作用域
一、目的
1.了解变量的存储类型及生命周期、作用域的性质。2.准确使用局部变量和全局变量。
二、任务
1.根据变量作用域知识,分析下列程序的运行效果。2.调试程序,分析个变量的作用范围和生命期。
#include
Printf(“i=%dn”,i);
int i=40;
printf(“i=%dn”,i);
fun1();
fun1();}
三、实验过程及结果
实验八:结构体
一、目的
1.掌握结构体的定义方法和使用。
二、任务
定义一日期(年、月、日)结构体,编程实现日期的输入、日期的输出、日期加上一个整型天数、两个日期数据相减等功能。
三、实验过程及结果
第三篇:C语言实验十
实验10 文件程序设计
一、实验目的
1、掌握文件、文件指针的概念。
2、学会使用文件打开、关闭、读、写等文件操作函数。
二、实验内容 1.改错题
(1)下列程序的功能为:在键盘输入4行字符写到D盘data1.dat文件中。纠正程序中存在的错误,以实现其功能。程序以文件名sy10_1.c保存。#include
gets(ch);
j=0;
while(ch[j]!=’’)
{
fputc(fp1,ch[j]);
j++;
}
fputc(fp1,’n’);}
fclose(fp1);}(2)下列程序的功能为:随机产生10个整数,写入一个文本文件中。纠正程序中存在的错误,以实现其功能。程序以文件名sy10_2.c保存。#include
x[i]=rand();fp2=fopen(“data2.dat”,”wb”);if(fp2==NULL){
printf(“Open error n”);exit(0);} for(int k=0;k<10;k++)
fwrite(x[k],sizeof(int),fp2);fclose(fp2);}
(3)下列程序的功能为:从数组读入数据,建立ASCII码文件,并按下列格式输出。10 20 30 40 50 60 70 80 90 100(每个数据占5个字符宽度)纠正程序中存在的错误,以实现其功能。程序以文件名sy10_3.c保存。#include
FILE *fp3;int b[]={10,20,30,40,50,60,70,80,90,100},i=0,n;if((fp3=fopen(“e:file10_3.txt”,”w”))==NULL){
printf(“%s不能打开n”,”e:file10_3.txt”);
exit(1);} while(i<10){
fprintf(fp3,”%d”,b[i]);
if(i%3==0)fprintf(fp3,”n”);
i++;} fclose(fp3);if((fp3=fopen(“e:file10_3.txt”,”r”))==NULL){
printf(“%s不能打开n”,”e:file10_3.txt”);
exit(1);} fscanf(fp3,”%5d”,&n);while(!feof(fp3)){
printf(“%5d”,n);
fscanf(fp3,”%d”,&n);} printf(“n”);
fclose(fp3);}
2.程序填空题
(1)下列程序的功能是:从字符指针数组读出字符串,建立ASCII文件file10_4.txt。补充完善程序,以实现其功能。程序以文件名sy10_4.c保存。#include
FILE *fp;int i=0;char *str[]={“visual C++”, “visual Basic”, “visual java”, “visual foxpro”};if((fp=fopen(“e:file10_4.txt”,_________________))==NULL){ printf(“%s不能打开n”,”e:file10_4.txt”);
exit(1);} while(i<4){
fprintf(_______________________);
_________________________________;} fclose(fp);}
(2)下列程序的功能为:从键盘输入字符,直到输入EOF(Ctrl+Z)为止。对于输入的小写字符,先转换为相应的大写字符,其他字符不变,然后逐个输出到文件text.txt中,行结束符回车('n’)也作为一个字符对待,最后统计文件中的字符个数和行数。补充完善程序,以实现其功能。程序以文件名sy10_5.c保存。#include
FILE *fp;char c,str[256];int i=0,no=0,line=0;if((fp=fopen(“text.txt”,_________________))==NULL){ printf(“can’t open this file.n”);
exit(0);} printf(“please input a string.n”);while((c=getchar())!=EOF){
if(c>=’a’ && c<=’z’)_______________;
fputc(_________________,fp);} fclose(fp);if((fp=fopen(“text.txt”,”r”))==NULL){ printf(“can’t open this file.n”);
exit(0);} while(!eof(fp)){
c=__________________;
no++;
if(_________________)line++;} printf(“line=%d character_no=%dn”,line,no);fclose(fp);}
(3)下列程序的功能为:从字符指针数组读出字符串,建立和输出二进制文件file10_6.dat。补充完善程序,以实现其功能。程序以文件名sy10_6.c保存。#include
exit(1);} while(i<4){
fwrite(_______________,_______________,1,fp6);
i++;} fclose(fp6);if((fp6=fopen(“e:file10_6.dat”,_________________))==NULL){ printf(“%s不能打开n”,”e:file10_6.dat”);
exit(1);} fread((______________,______________,1,fp6);while(!feof(fp6)){
printf(“%sn”,s);
fread((_______________,_____________,1,fp6);} fclose(fp6);} 3.编程题
(1)设文件number.dat中放了一组整数,编程计算并输出文件中正整数之和、负整数之和。程序以文件名sy10_7.c保存。
(2)根据提示从键盘输入一个已存在的文本文件的完整文件名,再输入另一个已存在的文本文件的完整文件名,然后将源文本文件的内容追加到目的文本文件的原内容之后,并在程序运行过程中显示源文件和目的文件中的文件内容,以此来验证程序执行结果。程序以文件名sy10_8.c保存。
(3)有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号、姓名、3门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。程序以文件名sy10_9.c保存。
第四篇:C语言实验
实验人员:
17自动化类03,学号1710221315,万里,实验日期:2018.3.27
实验一
C语言上机基础
一实验目的 熟悉C语言运行环境——Microsoft Visual C++ 6.0中文版。掌握C语言程序的书写格式和C语言程序的结构,初步了解C源程序的特点。3 掌握C语言上机步骤,了解如何编辑、编译、调试和运行一个C程序的方法。4 掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对他们赋值的方法。
二实验内容 完成下面程序的运行
输入并运行下面的程序,运行后记录并分析结果。#include
char c1,c2;
// 定义变量
c1=97;c2=98;
/* 定义变量 */ printf(“%c %cn”,c1,c2);} 运行结果如下:
在此基础上:
⑴
在程序最后增加一个语句,再运行,并分析结果。
printf(“%d %dn”, c1, c2);
运行结果如下:
⑵
将第2行改为:
int c1,c2;运行结果如下:
原因分析:int是整形的变量,但是输出的时候使用的是%c的格式符,这样就触发了ASCII码的使用,将97,98对应成a,b。
⑶
再将第3行改为:
c1=305;c2=340;
再使之运行,分析运行结果。运行结果如下:
原因分析:char是定义字符型变量的,但是只有一个字节,存储的空间只有到255,所以输出的就是暂时未知规则的数值
三案例项目
1.定义三个变量记录你本人的生日(整型数),姓名拼音的首字母(字符型数),年龄(浮点型数,如:20.8),然后输出这三个变量。#include
}return 0;printf(“我的生日是%d.%d.%dn”,year,month,day);printf(“我的年龄是%fn”,age);printf(“我的姓名是%c%cn”,first_name,second_name);printf(“请输入出生年月日n”);scanf(“%hd %hd %hd”,&year,&month,&day);printf(“请输入您的年龄n”);scanf(“%f”,&age);printf(“请输入您的姓名n”);scanf(“ %c %c”,&first_name,&second_name);short year,month,day;float age;//定义函数 char first_name,second_name;
程序运行结果如下:
第五篇:C语言实验题目
求两个数之和。在两种情况下完成:
①数据在程序内部定义变量时赋初值,或者通过赋值语句赋值。②数据通过scanf()函数输入。静态输入:
#include
#include
设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆柱表面积、圆柱体积。要求用scanf 输入数据,输出计算结果。#include
l=%6.2fn”,l);printf(“圆的面积为
s=%6.2fn”,s);printf(“圆柱的表面积为
sq=%6.2fn”,sq);printf(“圆柱的体积为
vz=%6.2fn”,vz);}
输入a、b、c三个整数,求出其中最大者,并连同三个源数据一起输出。#include
if(x>z)
max=x;
else
max=z;} else {
if(y>z)
max=y;
else
max=z;} return(max);} void main(){ int max(int x,int y,int z);
int a,b,c,w;
printf(“请您输入三个整数:”);
scanf(“%d,%d,%d”,&a,&b,&c);
printf(“您输入的三个数是:%d,%d,%dn”,a,b,c);
w=max(a,b,c);
printf(“这三个数中最大的是:%dn”,w);}
给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。要求输入一个成绩并打印出对应的等级制成绩。要求用switch语句完成。#include
printf(“您输入了一个错误的成绩!请重新输入n”);
scanf(“%d”,&grade);} c=grade/10;switch(c){ case 10: case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;case 6: grade='D';break;default: grade='E';} printf(“您输入的成绩的等级为:%Cn”,grade);}
计算当n为何值时,不等式sum=1 + 1/2 + 1/3 +… + 1/n >limit成立,输出n对应的sum(limit从键盘输入,要求用while、或do...while 语句,limit=10)。#include
n++;
sum=sum+1/n;} printf(“此时sum的值是:%fn”,sum);printf(“此时n的值为%fn”,n);}
计算M=11+ 22+ 33+…+ NN,直到N等于15为止,输出N和对应的M。(要求用for语句做)
#include
M=M+(n+10*n);} for(n=10;n<=15;n++){
M=M+(n+100*n);} n--;printf(“当n是%d时,M的值为%fn”,n,M);}
100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马一匹驮0.5担,计算大、中、小马数目并输出。#include
for(small=0;small<100;small+=2)
for(mid=0;mid<50;mid++)
{
if(3*big+2*mid+small/2==100&&big+mid+small==100)
{
printf(“big:%dt,mid:%dt,small:%dn”,big,mid,small);
sum++;
}
}
printf(“一共有%d种组合方式n”,sum);}
求 sum=1!+2!+3!+...+10!,并输出结果。#include
t=t*n;
s=s+t;} printf(“1!+2!+3!+...+10!的和是:%en”,s);} 注意该程序的结果为:1!+2!+3!+...+10!的和是:4.037913e+006 是以科学计数法表示的结果,因为int的定义范围只能以此表示,如果用long int来输出,则可以得到正常表示的结果 #include
t=t*n;
s=s+t;} printf(“1!+2!+3!+...+10!的和是:%ldn”,s);}
1!+2!+3!+...+10!的和是:4037913
设数列为1,3,5,7,9,11,13,15,17,19,动态输入在数组array中,然后顺序打印输出该数列,再逆序打印输出该数列。#include scanf(“%d”,&array[i]);printf(“您输入的10个整数的顺序排列是:n”);for(i=0;i printf(“%-4d”,array[i]);printf(“n”);printf(“您输入的10个整数的逆序排列是:n”);for(i=N-1;i>=0;i--) printf(“%-4d”,array[i]);printf(“n”);} 将3x3阶二维数组的关于主对角线对称的元素互换。二维数组的第1至3行元素分别为1、2、3、4、5、6、7、8、9。用矩阵形式分别输出互换前、后的数组元素值。#include for(j=0;j<3;j++) printf(“%5d”,array[i][j]); printf(“n”);} for(i=1;i<3;i++) for(j=0;j { t=array[i][j]; array[i][j]=array[j][i]; array[j][i]=t; } printf(“After Exchanged:n”); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(“%5d”,array[i][j]); printf(“n”); } } 定义两个字符数组s1、s2,并用赋初值的方法把两个字符串“Computer”和“Language” 分别存放到s1、s2中,要求不用库函数strcat(),把s2连接到s1的尾部,然后以%s格式输出连接后的字符串s1。#include char s1[80],s2[40]; int i=0,j=0; printf(”input string1:“); scanf(”%s“,&s1); printf(”input string2:“); scanf(”%s“,&s2); while(s1[i]!='') i++; s1[i]=' '; i++; while(s2[j]!='') s1[i++]=s2[j++]; s1[i] = ''; printf(”The new string is:%sn“,s1);} 用赋初值的方法把字符串”C is a general purpose, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system.“存放到字符数组s中,编程统计其中的大写字母、小写字母、数字、空格、逗号的个数。#include char s[512] = ”C is a general purpose, procedural, imperative “ ”computer programming language developed in 1972 by Dennis“ ”Ritchie at the Bell Telephone Laboratories for use with “ ”the Unix operating system.“;int upper=0,lower=0,digit=0,space=0,comma=0;int i=0;while(s[i]) { if(s[i]>='A'&&s[i]<='Z')upper++; if(s[i]>='a'&&s[i]<='z')lower++; if(s[i]>='0'&&s[i]<='9')digit++; if(s[i]==' ')space++; if(s[i]==',')comma++; i++; } printf(”这串字符串有大写字母%d个,小写字母%d个,数字%d个,空格%d个,逗号%d个n“,upper,lower,digit,space,comma);} 试从主函数输入10个数据到数组中,编写对偶数项求和的子函数,它将计算结果返回给主函数,由主函数输出。#include int i,s;s=0; for(i=1;i s=s+a[i]; return(s);} void main(){ int a[10];int i,s;printf(”请您在数组内输入10个数:“);for(i=0;i<10;i++) scanf(”%d“,&a[i]);s=oqh(a,10);printf(”这个数组的偶数项的和是:%dn“,s);} 注意:oqh并无其他含义,是本人定义的一个函数名,偶数项求和的缩写。编写一个判断素数的程序,其中主函数用于完成输入一个整数并给出判断结果,单独编写一个函数用于判断其参数是否为素数,其返回值为1表示为素数,为0表示为非素数。#include if(n%i==0) { m=0; break; } if(i>t) m=1; else continue;} return(m);} void main(){ int n;int i;printf(”请输入你要判断的数:n“);scanf(”%d“,&n);while(n<=1){ printf(”您输入了一个错误的数据,请重新输入:n“); scanf(”%d“,&n);} if(prime(n)) printf(”您输入的是一个素数n“);else printf(”您输入的不是一个素数n“); } 输入三个整数,按由小到大的顺序输出。(要求使用指针来排序输出)#include t=*a; *a=*b; *b=t;} if(*a>*c){ t=*a; *a=*c; *c=t;} if(*b>*c){ t=*b; *b=*c; *c=t;} } void main(){ int a,b,c;printf(”请您输入三个整数:“);scanf(”%d %d %d“,&a,&b,&c);sort(&a,&b,&c);printf(”它们由小到大的排列顺序是:%d %d %dn“,a,b,c);} 或者是 #include void swap(int *p1,int *p2); int a,b,c; int *p1,*p2,*p3; printf(”请您输入三个整数:“); scanf(”%d %d %d“,&a,&b,&c); p1=&a; p2=&b; p3=&c; if(a>b)swap(p1,p2); if(a>c)swap(p1,p3); if(b>c)swap(p2,p3); printf(”它们由小到大的排列顺序是:%d %d %dn“,a,b,c);} void swap(int *p1,int *p2){ int p; p=*p1; *p1=*p2; *p2=p;} 输入十个整数,放在数组list中,然后用指针法从后向前输出该数组中的整数。#include int list[10],i,*p=list; printf(”请您输入10个整数:n“); for(i=0;i<10;i++) scanf(”%d“,&list[i]); printf(”这10个整数的逆序序列是:n“); for(i=9;i>=0;i--) printf(”%-4d“,*(p+i));} 如果输入的数字个数不定的情况,下面的代码可行 #include scanf(”%d“,&list[i]);p=&list[0];sort(p,n);printf(”这%d个整数的逆序序列是:n“,n);for(i=0;i printf(”%-4d“,list[i]);printf(”n“);} void sort(char *p,int m){ int i;char t,*p1,*p2;for(i=0;i p1=p+i; p2=p+(m-1-i); t=*p1; *p1=*p2; *p2=t;} } 编写一个函数,它能对一个字符串(“I am a student”)测出长度,要求函数的形参是一个指针变量,函数返回值是字符串的长度。#include n++; p++;} //*p='';//n++;return(n);} 若要统计结果包含结束符,则启用*p='';n++;两条语句 编一个函数cstrcmp实现两个字符串的比较,具体为: int cstrcmp(char *p1, char *p2)p1,p2分别指向字符串s1,s2;若s1=s2则函数返回0;若s1>s2,则函数返回1;若s1 return 0;} if(strcmp(p1,p2)>0){ return 1;} if(strcmp(p1,p2)<0){ return-1;} } void main(){ char *a;char *b;input();printf(”这两个字符串比较的结果是:%dn“,cstrcmp(a,b));} 如果要求返回的是不相同字母的ASCII码值: #include if(*(p1+i++)=='')return(0); return(*(p1+i)-*(p2+i));} 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,用赋初值的方法输入5个学生的数据到结构体数组中,输出每个学生3门课的平均成绩。#include { char num[6]; char name[8];int score[3];float avr;}stu[5]={{”101“,”Zhou“,93,89,87},{”102“,”Yang“,85,80,78},{”103“,”Chen“, 77,70,83},{”104“,”Qian“,70,67,60},{”105“,”Li“,72,70,69}};void main(){ int i,j,sum;for(i=0;i<5;i++) { sum=0; for(j=0;j<3;j++) sum+=stu[i].score[j]; stu[i].avr=sum/3.0;} printf(”number name score1 score2 score3 averagen“);for(i=0;i<5;i++){ printf(”%3s%10s“,stu[i].num,stu[i].name); for(j=0;j<3;j++) printf(”%7d“,stu[i].score[j]); printf(”%10.2fn“,stu[i].avr);} } 如果按平均成绩由高到低排序后,输出每个学生的成绩 #include { char num[6]; char name[8]; int score[3];float avr; }stu[5]={{”101“,”Zhou“,93,89,87},{”102“,”Yang“,85,80,78},{”103“,”Chen“, 77,70,83},{”104“,”Qian“,70,67,60},{”105“,”Li“,72,70,69}},temp;void main(){ int i,j,sum; for(i=0;i<5;i++){ sum=0; for(j=0;j<3;j++) sum+=stu[i].score[j]; stu[i].avr=sum/3.0;} for(i=0;i<4;i++) for(j=i;j<4;j++) if(stu[j].avr { temp=stu[j]; stu[j]=stu[j+1]; stu[j+1]=temp; } printf(”number name score1 score2 score3 averagen“); for(i=0;i<5;i++) { printf(”%3s%10s“,stu[i].num,stu[i].name); for(j=0;j<3;j++) printf(”%7d“,stu[i].score[j]); printf(”%10.2fn",stu[i].avr); } }