实验一(第1章实验)
实验目的:
1. 掌握运行C语言程序的全过程。
2. 熟悉编译环境Visual C++或者Dev C++或者Turbo C2.0//3.0。 3. 初步熟悉C语言程序的语法规定。 4. 了解简单函数的使用方法。 实验内容:
1. 编程且上机运行:求3个整数的和。
2. 编程且上机运行:求2个数的和、差、积和商。 3. 编程且上机运行:输入3个数,求最大值。
4. 编程且上机运行:输入圆的半径,求圆的面积和周长。 5. 在屏幕上输出:“hello world!”
6. 输入并编辑本章中给出的C程序例子,在自己用的环境中形成一个C语言源程序文件;对这个源程序进行加工,得到对应的可执行程序,看一看它的效果。 实验结果: 1.
#include
printf(\输入整数数据,以半角逗号间隔,比如:1,2,3 scanf(\不能缺少地址符号“&” printf(\ system(\ } 2.
#include
printf(\输入整数数据,以半角逗号间隔,j不为0,因为做除数 scanf(\不能缺少地址符号“&” printf(\ printf(\ printf(\ printf(\
system(\ }
3. #include
{ int i,j,k;
printf(\输入整数数据,以半角逗号间隔 scanf(\不能缺少地址符号“&” if(i>j) {
if(j>k)
printf(\ else if(i>k)
printf(\ else
printf(\ } else {
if(j printf(\ else printf(\ } system(\ } 4. #include printf(\ scanf(\不能缺少地址符号“&” printf(\ system(\ } 5. #include printf(\ system(\ } 6.略 实验二(第3章实验一) 实验目的:理解C语言的类型系统。 实验内容:写程序测试数据 -2在类型char,int,unsigned int,long int,unsigned long int中存储情况。 实验过程: 实验结果:参见各种类型的存储实现描述。 #include { char c='-2';//1 int i=-2;//4 unsigned int ui=-2;//4 long int li=-2;//4 unsigned long int uli=-2;//4 printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ system(\ } 实验二(第3章实验二) 实验目的:了解混合类型计算中类型的转换规则。 实验内容:写程序测试多种类型数据一起运算时类型的转换及表达式结果的类型。注意unsigned int和 int数据运算时类型转换的方向。 实验过程: /* * 类型转换问题 * 试问下面两个表达式等价吗? */ #include unsigned int ui,uj; ui = 1; uj = 2; if (ui < uj) printf(\ else printf(\ if (ui - uj < 0) printf(\ else printf(\ system(\ return 0; } 实验结果:不等价。结果如下: 1 < 2 is true ! 1 - 2 <0 is false ! 原因是1-2=-1,-1在unsigned int 中的表示为 31 1 1 1 1 1 1 1 1 23 1 1 1 1 1 1 1 1 15 1 1 1 1 1 1 1 1 7 1 1 1 1 1 1 1 0 1 实验二(第3章实验三) 实验目的:理解数据溢出现象。 实验内容:写程序测试数据溢出,注意分别在16环境和32环境中测试。 实验过程: 实验结果:参见【例3.3】。 实验三(第3章实验四) 实验目的:char的符号问题。 实验内容:写程序测试你所用的C语言编译器char符号问题的处理方案。 实验过程: /* * 这个程序验证编译器对 char 的解决方案,是有符号,还是无符号 */ #include char c = -1; int k; k = c; /* k = ? */ if (k == 255) printf(\ else printf(\ printf(\ system(\ return 0; } 实验结果:TC2.0和DevC++中char是有符号的 实验三(第3章实验五) 实验目的:自增和自减运算符。 实验内容:写程序测试++、-- 运算符。 实验过程: main() { int i=3; printf(\ printf(\ printf(\ printf(\} 实验结果: i=3 i=4 i=5 i=5 实验三(第3章实验六) 实验目的:理解输入输出函数。 1.掌握输入输出函数的使用方法。 2.掌握格式字符的使用方法。 3.掌握不同数制间使用格式字符转换数据的方法。 实验内容:用getchar、putchar、printf、scanf函数实现各种数据的输入和输出。 实验过程: 实验结果:例如://用getchar、putchar、printf、scanf函数实现各种数据的输入和输出。 #include main( ) { printf(\ char c=getchar(); putchar(c); int i; printf(\ scanf(\ printf(\ printf(\ printf(\ printf(\ system(\ } 实验四(第4章实验) 实验目的: 1. 学会使用逻辑运算符和逻辑表达式; 2. 熟练掌握if语句和switch语句。 实验内容: 1. 从键盘输入三个整数a,b,c,输出其中最大的数。 2 2. 求方程ax+bx+c=0的根,其中a,b,c由键盘输入。有以下几种情况: ① a=0,不是二次方程; 2 ② b-4ac=0,有两个相等的实根; 2 ③ b-4ac>0,有两个不等的实根; 2 ④ b-4ac<0,有两个共轭复根。 3. 有一函数 X (X<1) Y = 2X-1 (1≤X<10) 3X-11 (X>≥10) 写一程序,输入整数X,输出Y的值。 4. 给一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。90分以上为‘A’, 80-89分为‘B’,70-79分为‘C’,60-69分为‘D’,60分以下为‘E’。 5. 企业发放的奖金根据利润提成。利润(B)低于或等于10万元时,奖金可提10%; 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分可提成7.5%;200000<B≤400000时,高于20万元的部分按5%提成;400000<B≤600000时,高于40万元的部分按3%提成;600000<B≤1000000时,高于60万元的部分按1.5%提成;B>1000000时,高于100万元的部分按1%提成。从键盘输入当月利润B,求应发放奖金总额。 6. 从键盘任意输入一个不多于五位的正整数, ① 求它是几位数; ② 分别输出每一个数字; ③ 按逆序输出各位数字,例如原数为135,应输出531。 实验过程: 实验结果: 1. 见第三版第五章作业5.4 2. 见第三版教材108页 3. 见第三版第五章作业5.5 4. 见第三版第五章作业5.6 5. 见第三版第五章作业5.8 6. 见第三版第五章作业5.7 实验五(第5章实验一) 实验目的: 1. 掌握循环的概念,学习用循环的思想来思考实际问题。 2. 掌握单循环的使用方法。 实验内容: 1.计算s??n,输出其结果。 n?11002.使用循环结构输出下列图形。 -5 3.计算下列公式的和,要求最后一项小于10。 1111。 1??????。提示:通项公式为:(?1)n?1231017n?14.输入30个字符,分别统计其中数字、字母及字符的个数。 5.求出Fibonacci(斐波那契)数列的前20项。 Fibonacci(斐波那契)数列的规律是:前2项为0和1,其余各项为该项前2项之和,即0,1,1,2,3,5,8,13……。 实验过程: 实验结果:1. #include main() { int s=0;//试一下s不赋初值 int i; //循环变量 for (i=1;i<=100;i++) { s+=i; } printf(\ system(\ } 2. #include main() { int i,j,k; for(i=0;i<=9;i++) { for(j=0;j<=9-i;j++) printf(\ //画空格 for(k=0;k<2*i+1;k++) printf(\输出2i+1个数字 printf(\ } system(\ } 3. #include main() { int i=0; float sum=0.0,t; int f=1; t=1.0/(i*i+1); while(t>=pow(10,-5)) { sum=sum+f*t; f=-f; //符号 i++; t=1.0/(i*i+1);//项 } printf(\ system(\ } 4. #include main() { int num=0; int alph=0; int ch=0; int i; char c; for(i=1;i<=10;i++) { c=getchar(); if(c>='0'&&c<='9') num++; else if(c>='a'&&c<='z'||c>='A'&&c<='Z') alph++; else ch++; } printf(\ system(\ } 5. #include long fib[20] = {0,1}; int i; for(i=2;i<20;i++) { fib[i] = fib[i-1]+fib[i-2]; } for(i=0;i<20;i++) { printf(\ } system(\ } 实验五(第5章实验二) 实验目的: 1.进一步学习循环的使用方法,用循环解决复杂问题。 2.掌握多重循环的使用方法及其他。 实验内容: 1.分别使用双循环和单循环结构计算s??n!,并输出其结果。 n?1102.编制程序,输出如下所示的九九乘法表。 3.输出下列所示菱形字符图形。 4.古代数学家在编写《算经》时,提出了一个不定方程问题,即著名的“百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何? 5.求s=1+(1+2)+(1+2+3)+……,并输出其结果。 实验过程: 实验结果:1.参见第三版第6章作业6.4 2. #include main() { int i,j,k; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) printf(\ printf(\ } system(\ } 3. #include main() { int i,j,k; for(i=0;i<=9;i++) { for(j=0;j<=8-i;j++) printf(\ for(k=0;k<=2*i;k++) printf(\ printf(\ } for(i=0;i<=9;i++) { for (j=0;j<=i;j++) printf(\ for(k=0;k<=16-2*i;k++) printf(\ printf(\ } system(\ } 4. #include main() { int i,j,k; for(i=0;i<=14;i+=4) { j=(100-7*i)/4; k=100-i-j; printf(\ } system(\ } 输出结果: 0,25,75 4,18,78 8,11,81 12,4,84 5. #include main() { int i,j,t,s=0; for(i=1;i<=5;i++) { for(t=1;t<=i;t++) s=s+t; } printf(\ system(\ } 实验六(第6章实验一) 实验目的: 1.掌握数组的定义方法。 2.掌握一维数组的使用方法。 实验内容: 1.用随机函数产生15个100以内的随机整数存入一维数组,然后分三行输出,每行5个数。 2.求出n个学生一门课程中的最高成绩和最低成绩及高于平均成绩的人数。 3.使用数组,求出下列数列的前20项。 1,1,2,4,7,13,…… 4.将一个一维数组反序放置。 例如: a=(67,89,76,98,66), 反序放置后,a=(66,98,76,89,67) 5. 有10个学生一门课程成绩,使用选择排序法将成绩从高向低排序。 实验过程: 实验结果:1. //用随机函数产生15个100以内的随机整数存入一维数组,然后分三行输出,每行5个数。 #include int main(void) { int i; time_t t; int a[15]; srand((unsigned) time(&t)); printf(\ for (i=1; i<=15; i++) { a[i]=rand()0; printf(\ if(i%5==0) printf(\ } system(\ return 0; } 2. 求出n个学生一门课程中的最高成绩和最低成绩及高于平均成绩的人数。 #include #define n 10 //注意,宏定义define 后不带分号结束符。 main() { int a[n] = {60,100,70,67,90,99,89,40,77,56}; int avg=0,num=0,sum=0,max,min; int i; for(i=0;i<10;i++) { sum+=a[i]; } avg=sum/n; min=a[0]; max=a[0]; for(i=0;i<10;i++) { if(a[i] min=a[i]; if(a[i]>max) max=a[i]; if(a[i]>avg) num++; } printf(\ printf(\ system(\ } 3. //方法1:使用数组,求出下列数列的前20项。1,1,2,4,7,13,…… #include long a[20] = {1,1}; long sum=0; int i; for(i=3;i<20;i++) { a[i] = a[i-1]+a[i-2]+a[i-3]; } for(i=0;i<20;i++) { sum+=a[i]; } printf(\ system(\ } //方法2:使用数组,求出下列数列的前20项。1,1,2,4,7,13,…… #include long a[20] = {1,1}; long sum=2; int i; for(i=3;i<20;i++) { a[i] = a[i-1]+a[i-2]+a[i-3]; sum+=a[i] } printf(\ system(\ } 4. #include int i,temp; int a[n]={0,1,2,3,4,5}; for(i=0;i<=(n-1)/2;i++) { temp=a[i]; a[i]=a[n-1-i]; a[n-1-i]=temp; } for(i=0;i 5. //有10个学生一门课程成绩,使用选择排序法将成绩从高向低排序。 #include int main() { int i,j,k,t,min; int a[10]={77,99,69,76,87,90,100,88,66,80}; for(i=0;i<10;++i) {//选出最小值所在的位置j min=65535;//可试试此句不在循环内的结果。 for(k=i;k<10;k++) { if(a[k] if(i!=j) {//交换 t=a[i]; a[i]=a[j]; a[j]=t; } } for(i=0;i<10;i++) printf(\ system(\ return 0; } 实验六(第6章实验二) 实验目的: 1. 掌握二维数组的使用方法。 2. 数组的综合应用。 实验内容: 1.将一个一维数组a[9]中各元素值按行的顺序放入二维数组b[3×3]。 2.有一个m×n矩阵,各元素值由随机数产生,将矩阵增加一列,求矩阵每一行的元素值的和,并将每一行的元素值的和放入增加列。 3.有一个m×n矩阵,找出最大元素值及其最大元素值所在的行、列位置。 4.有n个考生,每个考生有考号和一个总分成绩,如果录取m人,确定录取分数线,并输出录取考生的考号和成绩。 5.将矩阵m(n,n)对角线上的元素置为1,其余元素置为0。 实验过程: 实验结果: 1. //将一个一维数组a[9]中各元素值按行的顺序放入二维数组b[3*3] #include int main() { int i,j; int b[3][3]; int a[10]={77,99,69,76,87,90,100,88,66}; for(i=0;i<3;++i) for(j=0;j<3;j++) b[i][j]=a[3*i+j]; for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf(\ } printf(\ } system(\ return 0; } 2. //有一个m×n矩阵,各元素值由随机数产生,将矩阵增加一列,求矩阵每一行的元素值的和,并将每一行的元素值的和放入增加列。 #include #define n 4 int main() { int i,j; int a[m][n]; time_t t; srand((unsigned) time(&t)); printf(\ for (i=0; i a[i][j]=rand()0; printf(\ if(j!=0&&j%(n-2)==0) { a[i][n-1]=0; printf(\ } } printf(\ for(i=0;i for(j=0;j printf(\ } printf(\ } system(\ return 0; } 3. //有一个m×n矩阵,找出最大元素值及其最大元素值所在的行、列位置。 #include int i,j,max=-65536; int row,col; int a[m][n]={77,99,69,76,87,90,100,88,66}; for (i=0; i max=-65536; for(j=0;j if(a[i][j]>max) { max=a[i][j]; row=i;col=j; } } } printf(\ printf(\另一种输出方式 system(\ return 0; } 4. //有n个考生,每个考生有考号和一个总分成绩,如果录取m人,确定录取分数线,并输出录取考生的考号和成绩。 #include void SelectSort(int a[n][2])//选择排序 { int i,j,k,min,t0,t1; for(i=0;i {//选出最小值所在的位置j min=65535;//可试试此句不在循环内的结果。 for(k=i;k if(i!=j) {//交换 t1=a[i][1]; t0=a[i][0]; a[i][1]=a[j][1]; a[i][0]=a[j][0]; a[j][1]=t1; a[j][0]=t0; } } printf(\ for(i=0;i printf(\} int main() { int i,j,m; int a[n][2]={1,99,2,76,3,90,4,88}; SelectSort(a);//调用选择排序函数,第八章内容 printf(\ scanf(\ printf(\ for (i=n-m; i printf(\ } system(\ return 0; } 5. //将矩阵m(n,n)对角线上的元素置为1,其余元素置为0。 #include int i,j; int m[n][n]={1,99,2,76,3,90,4,88,66}; for(i=0;i m[i][j]=1; else m[i][j]=0; printf(\ for(i=0;i for(j=0;j printf(\ printf(\ } system(\ return 0; } 实验七(第7章实验 实验目的: 1.掌握函数的定义和使用方法。 2.了解参数传递方式。 3.掌握简单的递归算法。 实验内容: N! 1. 用函数过程计算 —————— M!(N-M)! 2.裴波那契数列的前两项是1、1,以后的每一项都是其相邻前两项之和。编写函数过程求: ⑴ 数列前n项和FS;⑵ 前n项的平均值V。并就n=20计算并输出FS与V。 3.编写一个用梯形法求一元函数f(x)在〔a,b〕上积分近似值的函数过程。并就 f(x)=sin(2x)+x,当[a,b]=[0,3.14159]、小区间数n=10和n=20时,分别计算并输出积分的近似值s1和s2,保留3位小数。(未实现) 4.编写一个函数程序,其功能是判定一个数是否为素数,若是素数则函数返回值为1, 若不是素数则函数返回值为0。用此函数判定找出 100 以内最大的 3 个素数。 532 5.编写函数程序,用牛顿迭代法求一元方程 x+2x-x+x+1=0在 0 附近的近似值。 6.编写函数程序,计算正整数 n1~n2 之间所有素数之和。 7.用递归方法求 Fibonacci数列前 20 项及其这20项的和。 实验过程: 实验结果:1. // #include float func(int m,int n) { int i; long int factorial_n=1,factorial_m=1,factorial_nm=1; float solut=0.0; for(i=1;i<=n;i++) factorial_n*=i; for(i=1;i<=m;i++) factorial_m*=i; for(i=1;i<=n-m;i++) factorial_nm*=i; solut= 1.0*factorial_n/(factorial_m*factorial_nm);//注意括号,如果没有,除的意义就变了。 return solut; } main(){ int m,n; printf(\ scanf(\ printf(\ system(\ } 2. //裴波那契数列的前两项是1、1,以后的每一项都是其相邻前两项之和。编写函数过程求: ⑴ 数列前n项和FS;⑵ 前n项的平均值V。并就n=20计算并输出FS与V。 #include long fib[m] = {1,1}; long sum=0; int i; for(i=2;i fib[i] = fib[i-1]+fib[i-2]; } for(i=0;i sum=sum+fib[i]; } return sum; } float Avg(int n) { float avg=0.0; avg=Fib(n)*1.0/n;//如果不乘以1.0,结果可能不对,因为整数/整数. return avg; } main() { int n; printf(\ scanf(\ printf(\前%d项和=%d\\n\ printf(\前%d项和平均值=%f\\n\ system(\ } 前20项和为17710,平均值为885.50 3. 4. //编写一个函数程序,其功能是判定一个数是否为素数,若是素数则函数返回值为1, 若不是 素数则函数返回值为0。用此函数判定找出 100 以内最大的 3 个素数。 #include int prime(int n)//判断素数的函数 { int flag=1,i; for (i=2;i<=sqrt(n)&&flag==1;i++)//for(i=2;i<=sqrt(n)&&flag==1;i++) if(n%i==0) flag=0; return(flag); } main() { int i,j=0,a[100]; for(i=0;i<=100;i++) { if(prime(i))//如果是素数,则记入数组中 { a[j]=i; j++; } } printf(\ for(i=j-3;i 5. //编写函数程序,用牛顿迭代法求一元方程 x5+2x3-x2+x+1=0在 0 附近的近似值。 #include {//牛顿迭代法公式为x=x0-f(x)/f'(x) float x=0,x0,f,f1; do{ x0=x; f=pow(x0,5)+2*pow(x0,3)-x0*x0+x0+1; f1=5*pow(x0,4)+6*pow(x,2)-2*x0+1; x=x0-f/f1; } while(fabs(x-x0)>1e-5); return x; } main() { printf(\ system(\ } 6. //编写函数程序,计算正整数 n1~n2 之间所有素数之和。 #include int prime(int n)//判断素数的函数 { int flag=1,i; for (i=2;i<=sqrt(n)&&flag==1;i++)//for(i=2;i<=sqrt(n)&&flag==1;i++) if(n%i==0) flag=0; return(flag); } main() { int i,n1,n2,sum; printf(\ scanf(\ for(i=n1;i<=n2;i++) { if(prime(i))//如果是素数,则加到和里 sum=sum+i; } printf(\ system(\ } 7. //用递归方法求 Fibonacci数列前 20 项及其这20项的和。 #include fib=Fib(n-1)+Fib(n-2); return fib; } int main() { int i; long sum=0; for(i=0;i<20;i++) sum=sum+Fib(i); printf(\ system(\ return 0; } 实验七(第九章实验)此实验不做 实验目的: 1. 掌握无参和带参宏的定义和宏替换方法。 2. 掌握文件包含处理方法。 实验内容: 1. 设计一个判断奇数的带参宏。在主函数中连续读取整数,直到输入的整数是奇数时 中止程序运行。 2. 用带参数的宏实现求两个数的最大值功能,再利用上述的带参宏设计一个求三个数 中最大数的带参宏。在主函数中求下列形式数据中的最大值: (1) (a,b) (2) (a,b,c) (3) (a-2,b+2) 4) (a-2,b,c+2) 3. 输入两个整数,求它们相除的余数。用带参的宏来实现,并写主函数调用宏。 4. 给年份year定义一个宏,以判别该年份是否闰年,并写主函数调用宏。 5. 三角形的面积为: area?s(s?a)(s?b)(s?c),其中, s?1(a?b?c)2,a, b,c为三角形的三边。定义两个带参的宏定义,一个用来求s,另一个用来求area, 在程序中用带实参的宏名来求面积area。 实验过程: 实验结果:1. #include #define odd(a) (a%2==0) main() { int a,b,c; printf(\ scanf(\ while(odd(a)) { scanf(\ } system(\ } 2. #include #define MAX(a,b) ((a)>(b)?(a):(b)) main() { int a,b,c; printf(\ scanf(\ printf(\ system(\ } 3. 见作业9.2 4. 见作业9.4 5. 见作业9.3 实验八(第8章实验一) 实验目的: 1. 通过实验进一步掌握指针的概念,会定义和使用指针变量。 2. 掌握指向变量的指针变量的使用方法。 3. 掌握指向一维数组的指针变量来处理数组元素。 4. 掌握指向字符串的指针变量的使用方法。 5. 掌握指针作为函数参数的用法。 实验内容: 1.用指针变量按从小到大的顺序输出三个整数。 2.输入n(不大于20)个单精度数存入一维数组,用指针变量处理数组元素的方式将其逆序存放后输出。n从键盘输入。 3.利用指针完成两个变量值互换。 4.编写一个程序,用12个月份的英文名称初始化一个字符指针数组,当键 盘输入整数为1到12 时,显示相应的月份名,键入其他整数时显示错误信息。 5.用选择法对10个整数排序(降序)。 6.编一个程序,从键盘上输入一串符号(以回车键为结束),将其以字符串形式存入一维字符数组,然后再输出该字符型数组中的字符串。 7.编写一个程序计算一个字符串的长度。 8.编写一个程序求一个子串在一个字符串中出现的次数,如果该字符不出现则返回0。 实验过程: 实验结果:1.见作业10.1 2. //输入n(不大于20)个单精度数存入一维数组,用指针变量处理数组元素的方式将其逆 序存放后输出。n从键盘输入。 #include int i,n; printf(\ scanf(\ float a[20],t; printf(\ for(i=0;i scanf(\ float *p_s,*p_e; p_s=a;p_e=a+n-1; while(*p_s<*p_e) { t=*p_s; *p_s=*p_e; *p_e=t; } printf(\ for(i=0;i printf(\ system(\ } 3. #include void swap(int *p1, int *p2) { int temp; temp=*p1;*p1=*p2;*p2=temp; } main(){ int a=46,b=-100; int *p_a,*p_b; p_a=&a;p_b=&b; printf(\ swap(p_a,p_b); printf(\ system(\ } 4. //编写一个程序,用12个月份的英文名称初始化一个字符指针数组,当键 盘输入整数为1到12 时,显示相应的月份名,键入其他整数时显示错误信息。 #include main() { char *month_name[13]={\month\ int n; printf(\ scanf(\ if(n<=12||n>=1) printf(\ else printf(\ system(\ } 5. #include int main() { int i,j,k,t,max; int a[10]={77,99,69,76,87,90,100,88,66,80}; for(i=0;i<10;++i) {//选出最大值所在的位置j max=-65536;//可试试此句不在循环内的结果。 for(k=i;k<10;k++) { if(*(a+k) >max) { max=*(a+k); j=k; } } if(i!=j) {//交换 t=*(a+i); *(a+i)=*(a+j); *(a+j)=t; } } for(i=0;i<10;i++) printf(\ system(\ return 0; } 6. //编一个程序,从键盘上输入一串符号(以回车键为结束),将其以字符串形式存入一维字符数组,然后再输出该字符型数组中的字符串。 #include int main() { char *s; int i,length=0; char ch[100]={}; printf(\ gets(s); length=strlen(s); for(i=0;i for(i=0;i 7. //编写一个程序计算一个字符串的长度。 #include main() { char a[20],*p=a; int i=0; printf(\请输入一个字符串(1至20个):\\n\ gets(a); while(*p++) i++; printf(\你输入的字符串长度是:%d\\n\ system(\} 8.//编写一个程序求一个子串在一个字符串中出现的次数,如果该字符不出现则返回0。 #include int index(char *s,char *t,int i) { int j=0; while((i if (s[i]==t[j] ) { ++i; ++j; // 相同继续比较后继字符 } else { i= i-j+1 ; j = 0; } } if(j>strlen(t)-1) return i-strlen(t);//匹配成功 else return 0;// 失败返回0 } int Count(char *s,char *t) { int i=0,count=0; do { i=index(s,t,i); printf(\ if(i) { count++; i+=strlen(t); } }while(i); return count; } main() { char s[20],t[20]; char s_a[20],t_a[20]; int i=0,num=0; printf(\请输入一个字符串(1至20个):\\n\ gets(s); printf(\请输入一个子串(1至20个):\\n\ gets(t); /* for(i=0;i for(i=0;i for(i=1;i<=strlen(t);i++) printf(\ printf(\ printf(\ printf(\ system(\} 实验八(第8章实验二) 实验目的: 1. 掌握指向二维数组的指针变量的使用。 2. 掌握指针数组的定义、初始化和引用。 实验内容: 1.输入2行3列的矩阵元素值,存入二维数组;再按行列格式输出。 2.输入一个3×6的二维整数数组,输出其中最大值、最小值及其所在的行列下标。 3.设有3个学生,4门功课,编写2个函数分别实现如下功能:(1)求每个学生的平均分;(2)找出一门以上课程不及格的学生。 4.设计一个函数把两个整数形参中较大的那个数的地址作为函数值返回,并写主函数实现调用。 5.输入5个字符串,从中找出最大的字符串并输出。要求用二维字符数组存放这5个字符串。 实验过程: 实验结果:1.//输入2行3列的矩阵元素值,存入二维数组;再按行列格式输出。 #include main() { int a[M][N]; int i,j; for(i=0;i for(j=0;j printf(\ printf(\ } system(\} 2. //输入一个3×6的二维整数数组,输出其中最大值、最小值及其所在的行列下标。 #include main() { int a[M][N]; int i,j; for(i=0;i int max=-32768; int min=32767; int maxrow=0,maxcol=0,minrow=0,mincol=0; for(i=0;i for(j=0;j if(*(a[i]+j)>max) { max=*(a[i]+j); maxrow=i; maxcol=j; } if(*(a[i]+j) min=*(a[i]+j); minrow=i; mincol=j; } } } printf(\ printf(\ system(\} 3. //设有3个学生,4门功课,编写2个函数分别实现如下功能: //(1)求每个学生的平均分;(2)找出一门以上课程不及格的学生。 #include void average(float (*p)[4],float aver[3]); int seek( float (*pnt_row)[4] ); int i; float score[3][4]={{20,67,70,60},{80,87,90,81},{90,99,100,98}}; float aver[3]; average(score,aver); for(i=0;i<3;i++) printf(\ seek(score); system(\} void average(float (*p)[4],float *aver) { int i,j; float sum; for(i=0;i<3;i++) { sum=0.0; for(j=0;j<4;j++) sum=sum+*(*(p+i)+j); aver[i]=sum/4; } } void seek( float (*p)[4] ) { int i,j; float unpass; for(i=0;i<3;i++) for(j=0;j<4;j++) if(*(*(p+i)+j)<60) printf(\ } 4. //设计一个函数把两个整数形参中较大的那个数的地址作为函数值返回,并写主函数实现调用。 #include if(x>y) return &x; else return &y; } main() { int x,y; printf(\ scanf(\ int *p=seek(x,y); printf(\ system(\} 5. //输入5个字符串,从中找出最大的字符串并输出。要求用二维字符数组存放这5个字符串。 #include char a[5][80],*p[5],**q,**max; /*定义数组、指针数组二级指针变量*/ int i; for(i=0;i <5;i++) /*让指针数组元素p[i]指向字符数组a的第i行*/ p[i]=a[i];/*注意a[i]不是数组元素,而是第i行的首地址*/ for(i=0;i <5;i++)/*输入5个字符串存入字符数组a*/ gets(p[i]); max=&p[0]; /*设当前最大字符串是字符组中第1行*/ q=&p[1]; /*让二级指针变量q指向指针数组第2行*/ for(i=1;i <5;i++,q++) if(strcmp(*max,*q) <0)max=q;/*如果当前最大字符串小于二级指针q指向的指针*/ /*数组元素指向的字符串,则重新记录最大字符串*/ puts(*max);/*输出最大字符*/ system(\ } 实验九(第9章实验) 实验目的: 1. 掌握结构型、结构型变量的定义和使用方法。 2. 掌握结构型数组的定义和使用方法。 3. 了解指向结构型数据的指针变量的定义和使用。 实验内容: 1. 设有学生信息如下:学号(长整型)、姓名(字符串型)、年龄(整型)、课程1成 绩(实型)、课程2成绩(实型)、课程3成绩(实型)、课程4成绩(实型)、课程5成绩(实型)、课程6成绩(实型)、课程7成绩(实型)、总分(实型)、平均分(实型)。试编写程序,输入3个学生的上述信息,计算每个学生的总分、平均分,然后输出每个学生学号、姓名、总分、平均分。 2. 设有学生信息如下:学号(长整型)、姓名(字符串型)、出生年月(其中含有年份、 月份、日,均为整型)。试编写程序,输入5个学生的上述信息,输出所有学生的学号、姓名和年龄。 3. 按“年/月/日”格式输出系统日期,按“时:分:秒.XX”格式输出系统时间。 4. 设有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、号码、性 别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务。要求输入人员的数据,然后再输出。 5. 已知3个学生的学号、姓名、性别及年龄,要求通过直接赋值的方式将数据送给某 结构体变量,然后再输出。 实验过程: 实验结果:1. //有学生信息如下:学号(长整型)、姓名(字符串型)、年龄(整型)、课程1成绩(实型)、课程2成绩(实型)、课程3成绩(实型)、课程4成绩(实型)、课程5成绩(实型)、课程6成绩(实型)、课程6成绩(实型)、总分(实型)、平均分(实型)。试编写程序,输入3个学生的上述信息,计算每个学生的总分、平均分,然后输出每个学生学号、姓名、总分、平均分。 #include struct student{ long no; char name[10]; int age; float course1; float course2; float course3; float course4; float course5; float course6; float course7; float total; float avg; }; main() { int i; struct student s[3]; for(i=0;i<3;i++) { printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ s[i].total=s[i].course1+s[i].course2+s[i].course3+s[i].course4+s[i].course5+s[i].course6+s[i].course7; s[i].avg=s[i].total/7.0; } for(i=0;i<3;i++) printf(\,s[i].age,s[i].course1,s[i].course2,s[i].course3,s[i].course4,s[i].course5,s[i].course6,s[i].course7,s[i].total,s[i].avg); system(\} 2. //设有学生信息如下:学号(长整型)、姓名(字符串型)、出生年月(其中含有年份、月份、日,均为整型)。 //试编写程序,输入5个学生的上述信息,输出所有学生的学号、姓名和年龄。 #include struct student{ long no; char name[10]; Date birthday; }; main() { int i; struct student s[5]; //取系统时间中的年份信息 time_t rawtime; struct tm *info; int year,month; time ( &rawtime ); info = localtime ( &rawtime ); year =info->tm_year + 1900; month =info->tm_mon + 1; //---------------------------- for(i=0;i<5;i++) { printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ } for(i=0;i<5;i++) printf(\ system(\} 3. //按\年/月/日\格式输出系统日期,按\时:分:秒.XX\格式输出系统时间。 #include int i; time_t now; time(&now); struct Date today; struct tm *tmpointer; tmpointer=localtime(&now); /*可以用asctime(tmpointer)来转换成字符串形式*/ // printf(\er->tm_year+1900,tmpointer->tm_hour,tmpointer->tm_min,tmpointer->tm_sec); today.year=tmpointer->tm_year+1900; today.month=tmpointer->tm_mon+1; today.day=tmpointer->tm_mday; printf(\ today.hour=tmpointer->tm_hour; today.minute=tmpointer->tm_min; today.second=tmpointer->tm_sec; if(today.hour>12) printf(\ else printf(\ system(\} 4.见教材311页例11.12 5. #include char sex; int age; }; main() { int i; struct student s[3]; for(i=0;i<3;i++) { printf(\ scanf(\ printf(\ scanf(\ getchar(); printf(\ scanf(\ printf(\ scanf(\ } for(i=0;i<3;i++) printf(\ system(\} 实验十(第10章实验) 实验目的: 1.掌握文件的打开、关闭和读写操作。 2.掌握文件的顺序访问和随机访问。 实验内容: 1.利用文本编辑软件在磁盘上建立一个有n个学生的学号、姓名及英语、数学和计算机三门课程成绩的数据文件。 2.编写程序将第1题建立的数据文件读入且求出每个学生的平均成绩。 3.用定义结构类型的方法,编写程序建立一个具有学生学号、姓名、总分和联系电话的记录文件。 4.编写程序,利用第3题建立的记录文件,从键盘上输入一个学号,可以查寻到此人其他信息。 5.编写程序,将第四题建立的文件复制一份。 6.用产生随机数的方法产生:100个商场的序号(1到500之间)、每个商场一年四个季度每个季度的销售金额(单位万元),将这些数据存于数据文件,然后利用该文件求出每个商场一年的销售总金额。 实验过程: 实验结果:1. //利用文本编辑软件在磁盘上建立一个有n个学生的学号、姓名及英语、数学和计算机三门课程成绩的数据文件。 #include char name[10]; int english; int math; int computer; }; main() { int i,n; struct student s[m]; printf(\ scanf(\ for(i=0;i printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ } for(i=0;i printf(\ FILE *fp; if((fp=fopen(\ { printf(\ exit(0); } for(i=0;i fwrite(&s[i],sizeof(struct student),1,fp);//写入文件后看是乱码 fclose(fp); FILE *fp1;//把写入文件的数据再次读出来 if((fp1=fopen(\ { printf(\ exit(0); } for(i=0;i fread(&s[i],sizeof(struct student),1,fp1); for(i=0;i printf(\ fclose(fp1); system(\} 2. //编写程序将第1题建立的数据文件读入且求出每个学生的平均成绩。 #include char name[10]; int english; int math; int computer; }; main() { int i,n; struct student s[m]; printf(\ scanf(\/* for(i=0;i printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ } for(i=0;i printf(\ FILE *fp; if((fp=fopen(\ { printf(\ exit(0); } for(i=0;i fwrite(&s[i],sizeof(struct student),1,fp);//写入文件后看是乱码 fclose(fp);*/ FILE *fp1;//把写入文件的数据再次读出来 if((fp1=fopen(\ { printf(\ exit(0); } for(i=0;i fread(&s[i],sizeof(struct student),1,fp1); for(i=0;i printf(\ fclose(fp1); system(\} 3. //用定义结构类型的方法,编写程序建立一个具有学生学号、姓名、总分和联系电话的记录文件。 #include char name[10]; int score; long telephone; }; main() { int i,n; struct student s[m]; printf(\ scanf(\ for(i=0;i printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ } for(i=0;i printf(\ FILE *fp; if((fp=fopen(\ { printf(\ exit(0); } for(i=0;i fwrite(&s[i],sizeof(struct student),1,fp);//写入文件后看是乱码 fclose(fp); system(\} 4. //编写程序,利用第3题建立的记录文件,从键盘上输入一个学号,可以查寻到此人其他信息。 #include char name[10]; int score; long telephone; }; main() { int i,n; struct student s[m]; printf(\ scanf(\/* for(i=0;i printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ } for(i=0;i printf(\ FILE *fp; if((fp=fopen(\ { printf(\ exit(0); } for(i=0;i fwrite(&s[i],sizeof(struct student),1,fp);//写入文件后看是乱码 fclose(fp);*/ FILE *fp1;//把写入文件的数据再次读出来 if((fp1=fopen(\ { printf(\ exit(0); } for(i=0;i fread(&s[i],sizeof(struct student),1,fp1); int no; printf(\ scanf(\ for(i=0;i if(s[i].no==no) printf(\ } fclose(fp1); system(\} 5. //编写程序,将第四题建立的文件复制一份。 #include char name[10]; int score; long telephone; }; main() { int i,n; struct student s[m]; printf(\ scanf(\/* for(i=0;i printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ } for(i=0;i printf(\ FILE *fp;//用于复制文件,即从原始文件中读出后再写入fp if((fp=fopen(\ { printf(\ exit(0); } // for(i=0;i // fwrite(&s[i],sizeof(struct student),1,fp);//写入文件后看是乱码 FILE *fp1;//用于读出record.txt 文件。 if((fp1=fopen(\ { printf(\ exit(0); } for(i=0;i { fread(&s[i],sizeof(struct student),1,fp1); fwrite(&s[i],sizeof(struct student),1,fp); } fclose(fp); fclose(fp1); system(\} 6. //用产生随机数的方法产生:100个商场的序号(1到500之间)、每个商场一年四个季度每个季度的销售金额(单位万元), //将这些数据存于数据文件,然后利用该文件求出每个商场一年的销售总金额。 #include long quarter1; long quarter2; long quarter3; long quarter4; }; main() { int i; struct market m[101]; /*time_t t; srand((unsigned) time(&t)); for (i=1; i<=100; i++) { m[i].no=rand()P0; m[i].quarter1=rand()0; m[i].quarter2=rand()0; m[i].quarter3=rand()0; m[i].quarter4=rand()0; } FILE *fp; if((fp=fopen(\ { printf(\ exit(0); } for(i=1;i<=100;i++) fwrite(&m[i],sizeof(struct market),1,fp);//写入文件后看是乱码 fclose(fp);*/ FILE *fp1; if((fp1=fopen(\ { printf(\ exit(0); } for (i=1; i<=100; i++) { fread(&m[i],sizeof(struct market),1,fp1); printf(\万)\\n\r2,m[i].quarter3,m[i].quarter4,(m[i].quarter1+m[i].quarter2+m[i].quarter3+m[i].quarter4)/4.0); } system(\}