c语言第六次作业解析汇报

合集下载

C语言实验

C语言实验

提交作业要求1.建立一个学号+姓名文件夹(如:20111234张志),建立一个实验报告文件(实验报告.txt或实验报告.doc均可),将实验步骤和程序运行结果拷贝到.txt文件或.doc文档中(可用Alt+PrtSc组合键抓屏),把每次的实验报告(.txt或.doc)和源程序(.C文件)放在学号+姓名文件夹中,上传到教师机“03/09教学班”下面对应的班级文件夹中,下机前把文件夹删除。

2.课外编程题提交到教师机“程序设计”文件夹中。

上机注意事项●运行程序时,应在英文状态下输入数据。

●上一个程序运行结束后, 要关闭工作区或VC窗口, 重新建立一个文件,输入下一个程序。

●编译时死机,将原程序窗口最小化,将程序拷贝到重新打开的VC文件中,可激活系统。

第一次实验(基本程序设计)★预习: 上机指导P4~10详细阅读上机指导P6~7, 掌握vc++6.0的使用方法。

★实验内容:(1)实验1(P5)①(p6)2. 调试修改(改错:求由键盘输入的任意两个整数的乘积。

)#include<stdio.h>void main(void){ int c;scanf(“%d,%d”,&x,&y);/**********FOUND**********/c=a*b/**********FOUND**********/printf(“The product is:%d\n”,c)}②(p7)3.完善程序(程序填空:求圆面积)#define PI 3.14159#include<stdio.h>void main(void){ float r ;double area;scanf(“%f”, &r);/**********SPACE**********/area=【?】;printf(“area=%f\n”, area);}(2)学习编程:①编写一个两个整数相乘的C程序,要求输出格式为: c=3*4=12②从键盘输入三个整数,计算并输出三个整数的平均值。

C语言第五六次作业

C语言第五六次作业
C语言作业解析
——第四弹
。。原来真正变态的是这两作业哇~ 原本是做完第五次作业等大家数分期中考完以后给大家,结果 直接出了第六次。就顺便做了。买一送一还包邮哦亲~ 虽然这两次作业比较难。理解起来困难无比。。不过考试的时 候不会有这么变态的题目啦~放心
当前编程题:11级第五次作业---凸多边形面积1. 【问题描述】给出平面上一组顶点的坐标,计算出它们所围成的凸多 边形的面积。 【输入形式】从标准输入读取顶点坐标。格式为:第一行是点的个数 N(3≤N≤15),后面紧接着N行,每行两个数字 (由空格隔开),分 别表示该点的X、Y坐标(0≤X,Y≤32767)。所有点的坐标互不相同, 且按顺时针次序给出。 输入数据确保该多边形是一个凸多边形。 【输出形式】向标准输出打印一个浮点数,是该多边形的面积。该浮 点数保留两位小数。 【输入样例】 4 3 3 3 0 1 0 1 2 【输出样例】 5.00 【样例说明】输入数据表示了如图所示的四边形。其面积为5.00。 提示:求三角形面积可用海伦公式,求平方根可用<math.h>头文件中 定义的sqrt函数。 【评分标准】结果完全正确得20分,每个测试点4分。提交程序名为: points.c。
当前编程题:11级第五次作业---求两组整数的异或集 3.【问题描述】从标准输入中输入两组整数(每行不超过20个整数,每组整数中元素 不重复),合并两组整数,去掉在两组整数中都出现的整数,并按从大到小顺序排序 输出(即两组整数集“异或”)。 【输入形式】首先输入第一组整数,以一个空格分隔各个整数;然后在新的一行上 输入第二组整数,以一个空格分隔,行末有回车换行。 【输出形式】按从大到小顺序排序输出合并后的整数集(去掉在两组整数中都出现 的整数,以一个空格分隔各个整数)。 【样例输入】 5 1 4 32 8 7 9 -6 5 2 87 10 1 【样例输出】 87 32 10 9 8 7 4 2 -6 【样例说明】第一组整数为5 1 4 32 8 7 9 -6,第二组整数分别为 5 2 87 10 1。将第一组和第二组整数合并(去掉在两组整数中都出现的整数5 和1),并从大到小顺序排序后结果为87 32 10 9 8 7 4 2 -6。 【评分标准】该题要求输出两组整数的异或集,共有5个测试点,提交程序文件名 为xor.c。

C语言实验报告--上海工程技术大学

C语言实验报告--上海工程技术大学

实验报告《高级语言程序设计》2009-2010学年第二学期学院(部)管理学院实验名称高级语言程序设计学号姓名成绩第1次实验实验名称______素数的输出______一、实验目的:1.输出100~200以内的全部素数。

2.联系将输出的数字排的更加整齐。

二、实验内容及步骤:三、运行结果:四、实验心得与体会:将100~200中的全部素数输出并没有太大的难度。

但对于一个初学者来说,将输出的多个数字排列整齐则需要费一些脑筋,至少我是这个样子的。

将结果整齐的输出,充分的体现了C语言的灵活性,和创造者缜密的思维。

第2次实验实验名称______对输入不同的形式的统计______一、实验目的:1.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

2.熟练掌握ASCII代码。

二、实验内容及步骤:三、运行结果:上图为输入“I am a student ,and my number is 031209105 !”其运行后显示的结果为,这句话中拥有:英文字符24个,空格9个,数字9个,其他符号2个。

这个统计,需要用到ASCII码,有几处还是颇有难度的。

我也在这里犯了一个错误。

就是在第十一行中,我最初没有写“c>=48&&c<=57”,而是写的“c>=0&&c<=10”。

也就是说我忘记了将数字也用ASCII码表示了。

这时,我的程序依然能够运行,但是却输不出我想要的结果。

这个问题,我今后将特别注意与之类似的问题,不会再犯类似问题了。

第3次实验实验名称_____ 有关浮点的分析_____一、实验目的:1.有一个分数序列:2/1,3/2,5/3,8/15…,求出这个数列的前20项之和。

2.注意浮点形式的应用,学会正确的运用浮点形式。

二、实验内容及步骤:三、运行结果:这道题一定要注意第三行的定义部分,“a,b,n”都是float型的,尤其是其中的“n”。

因为“n=n+b/a”,若“n”不为float型,则无法将小数部分存进“n”中,将会严重影响运算准确性。

C语言程序设计教程第六章课后习题参考答案

C语言程序设计教程第六章课后习题参考答案

C语⾔程序设计教程第六章课后习题参考答案P158 1求三个实数最⼤值#includefloat max(float,float,float);int main(){float a,b,c,m;printf("请输⼊三个实数:");scanf("%f %f %f",&a,&b,&c);printf("最⼤数为%f\n",max(a,b,c));return 0;}float max(float a,float b,float c){float t;if(a>b&&a>c)t=a;else if(b>a&&b>c)t=b;elset=c;return t;}P158 2求最⼤公约数最⼩公倍数#includeint fun1(int a,int b);int fun2(int a,int b);int main(){int a,b;printf("请输⼊两个整数:");scanf("%d %d",&a,&b);printf("最⼤公约数为:%d\n",fun1(a,b));int t,r;if(a{t=a;a=b;b=t;}while((r=(a%b))!=0) {a=b;b=r;}return b;}int fun2(int a,int b) {int n;n=(a*b)/fun1(a,b); return n;}P158 3求完全数#includevoid wan(int n); void main(){int n;for(n=1;n<1000;n++) wan(n);printf("\n");}void wan(int n){if(n%i==0)s=s+i;}if(n==s)printf("%d\t",n); }P158 4⽆暇素数#include#includeint nixvshu(int n);int isPrime(int n);int main(){int n,t;printf("⽆暇素数:\n");for(n=100;n<=999;n++) {t=nixvshu(n);if(isPrime(n)&&isPrime(t)) printf("%d\t",n);}printf("\n");return 0;}int nixvshu(int n){int x=0;while(n){x=x*10+n%10;n=n/10;}return x;int i;for(i=2;i<=sqrt(n);i++)if(n%i==0) return 0;return n;}P158 7递归函数#includeint Y(int n){if(n==0)return 0;if(n==1)return 1;if(n==2)return 2;elsereturn (Y(n-1)+Y(n-2)+Y(n-3)); } int main(){int n,k=0;for(n=0;n<=19;n++){printf("%d\t",Y(n));k++;if(k%5==0)printf("\n");}return 0;}P124 6分解质因数#include#includevoid fenjie(int );int main(){int n;printf("请输⼊⼀个正整数:"); scanf("%d",&n);if(isPrime(n)){printf("%d=1*%d\n",n,n);}else{fenjie(n);printf("\n");}return 0;}int isPrime(int n){int i;for(i=2;i<=sqrt(n);i++){if(n%i==0) return 0;}return 1;}int zhi(int n){int m;for(m=2;m<=n;m++){if(isPrime(m)&&(n%m==0)) break;void fenjie(int n){int m;printf("%d=%d",n,zhi(n));while(n>zhi(n)){m=zhi(n);n=n/m;printf("*%d",zhi(n));}}P47 1输出闰年#includeint f(int year);int main(){int year,k=0;for(year=1900;year<=2000;year++){if(f(year)){printf("%d\t",year);k++;if(k%5==0)printf("\n");}}return 0;}int f(int year){if((year%4==0&&year%100!=0)||(year%400==0)) return year;P47 2输出回⽂数#includeint fun(int n);int main(){int n,k=0;for(n=10;n<=2000;n++) {if(n == fun(n)){printf("%d\t",n);k++;if(k%5==0)printf("\n");}}return 0;}int fun(int n){int i=0;while(n>0){i=i*10+n%10;n=n/10;}return i;}P47 3进制转换#includevoid trans(int n,int base); int main()printf("请输⼊要转换的⼗进制数:"); scanf("%d",&n);printf("请输⼊转换的进制:"); scanf("%d",&base);trans(n,base);printf("\n");return 0;}(⽅法⼀)void trans(int n,int base){if(n){trans(n/base,base);if(n%base>=10)switch(n%base){case 10:printf("A");break;case 11:printf("B");break;case 12:printf("C");break;case 13:printf("D");break;case 14:printf("E");break;case 15:printf("F");break;}elseprintf("%d",n%base);}}(⽅法⼆)void trans(int n,int base){int r;char c;trans(n/base,base); r=n%base;if(r>=10)c='A'+r-10;elsec='0'+r;printf("%c",c);}}。

c语言教学资料—第6章课后答案.docx

c语言教学资料—第6章课后答案.docx

第6章练习与思考1.指针变量有哪几种运算类型?除了一般变量能做的它都能做以外,还有取地址和取内容运算。

2.有一个4x4的矩阵,试用指针变量按照4行4列格式,输岀矩阵中各元素的值。

#include "stdio.h"void main(){int 询4][4]={{1,1丄1},{1丄1,1},{1丄1,1},{1,1,1,1}};int *p=a;for(i=0;i<4*4;i++){ printf(n%3d",*(p+i));if((i+l)%4=0)printf(H\n H);}}3•输出一个字符串,将这个字符串屮大写字母改为小写字母,第一个字母变大写。

#include "stdio.h"void main(){char a[100],*p 二NULL;int i;printf(n Please input a string:\n H);gets(a);P=a;if(*p>=,a,&&*p<=,z,)*p=*p・32;for(i=l;a[i]!='\O f;i++){if(*(p+i)>='A '&&*(p+i)v=Z) *(p+i)=*(p+i)+32;}puts(a);}4.指向函数的指针有哪些特点?(1)可以通过调用指向函数的指针来调用函数。

(2)对于已定义的函数指针可以指向返回值类型相同的不同函数。

(3)函数指针可做函数的参数。

5.编写程序,在己知字符串str中截取一子串。

要求该子串是从血的第m个字符开始, 由n个字符组成。

#include "stdio.h"void main()char str[100],s[100];char *pl=str,*p2=s;int i,m,n;printf(n please input string:\n");scanf(n%s n,str);printf(”please input m,n:\n n);scanf("%d,%d",&m,&n);for(i=0;i<n;i++)*(p2+i)=*(pl+m+i);for(i=0;*(p2+i)U\0:i++) prin(f(”%c”,*(p2+i));}6.编写程序,利用指针将二维数组屮各元素输出。

习题解答(第六章)

习题解答(第六章)

C 语言程序设计习题解答(第六章)6.1 题目略[解答] (1) A (2) A (3) C (4) D6.2 略6.3 从键盘输入3个整数, 要求设3个指针变量p1, p2, p3, 使p1指向3个数中的最大者, p2指向次大者, p3指向最小者, 最后按由大到小的顺序输出这3个数.[解答]#include <stdio.h>void main(){int x1, x2, x3, *p1=&x1, *p2=&x2, *p3=&x3, *p;printf("请输入3 个整数: ");scanf("%d%d%d", &x1, &x2, &x3);if(*p1<*p2){p=p1; p1=p2; p2=p;}if(*p1<*p3){p=p1; p1=p3; p3=p;}if(*p2<*p3){p=p2; p2=p3; p3=p;}printf("从大到小: %d, %d, %d\n", *p1, *p2, *p3);}6.4 想使指针变量pt1指向a和b中的较大者, pt2指向a和b中的较小者, 请问以下程序能否达到此目的?#include <stdio.h>void swap(int *p1, int *p2){int *p;p=p1; p1=p2; p2=p;}int main(void){int a, b;int *pt1, *pt2;scanf("%d, %d", &a, &b);pt1=&a; pt2=&b;if(a<b) swap(pt1, pt2);printf("%d, %d\n", *pt1, *pt2);return 0;}请分析此程序的执行情况, 指出pt1和pt2的指向并修改程序, 使之能够实现题目要求. [解答]main函数调用swap函数时, 将指针pt1和pt2的值分别赋给形式参数p1和p2, pt1与p1虽然都指向变量a, 但它们是不同的指针变量, 同样, pt2与p2也是不同的指针变量, swap函数中虽然改变了p1和p2的指向, 但不影响main函数中pt1和pt2的指向. 为了实现题目的要求, 可以修改程序, 将pt1与pt2的地址传给函数swap, 同时将swap的形式参数改为二级指针. 正确的程序如下:#include <stdio.h>void swap(int **p1, int **p2){int *p;p=*p1; *p1=*p2; *p2=p;}int main(void){int a, b;int *pt1, *pt2;scanf("%d, %d", &a, &b);pt1=&a; pt2=&b;if(a<b) swap(&pt1, &pt2);printf("%d, %d\n", *pt1, *pt2);return 0;}6.5 略6.6(1) 想输出数组a的10个元素, 用以下程序行不行? 为什么?#include <stdio.h>void main(){int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i;for(i=0; i<10; i++, a++)printf(“%d”, *a);}请修改程序使之能实现题目要求.(2) 想输出数组a的10个元素, 用以下程序行不行? 请与上题对比并进行分析, 得到必要的结论.#include <stdio.h>void print_arr(int a[], int n){int i;for(i=0; i<n; i++, a++)printf("%d", *a);}void main(){int arr[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};print_arr(arr, 10);}请修改程序使之能实现题目要求.[解答](1) 不行, 因为数组名a表示该数组的首地址, 是一个指针常量, 其值是不能改变的, 因此不能进行++ 运算. 正确的程序如下:void main(){int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i;for(i=0; i<10; i++)printf("%d ", *(a+i));}(2) 可以, 因为形参数组本质上是一个指针变量, 其值可以改变, 可以进行++ 运算.6.7 有一个数列, 含有20个整数, 现要求编一个函数, 能够对从指定位置开始的几个数按相反顺序排列, 并在main函数中输出新的数列. 例如, 原数列为:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20若要求对从第5个数开始的10个数进行逆序处理, 则得到的新数列为1, 2, 3, 4, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 15, 16, 17, 18, 19, 20[解答]#include <stdio.h>#define N 20void reverse(int a[], int m, int k) /* 将数组a 从第m 个数开始的k 个数按相反顺序排列*/ {int temp, *p, *q;for(p=a+m-1, q=p+k-1; p<q; p++, q--) /* p, q 初始时分别指向要反序的起始与终止位置*/{temp=*p; *p=*q; *q=temp;}}void main(){int i, m, k, a[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};printf("请输入要反序的数列的起始位置和长度: ");scanf("%d%d", &m, &k);reverse(a, m, k);printf("反序后的数列为: ");for(i=0; i<N; i++)printf("%d ", a[i]);printf("\n");}6.8 有n个人围成一圈, 顺序排号, 从第1号开始报数, 从1报到m, 凡报到m的人退出圈子.问最后留下的是原来第几序号的人? 要求如下:(1) 用函数实现报数并退出;(2) n和m的值由main函数输入并通过实参传递给该函数, 最后结果由main函数输出;(3) 要求使用指针.[解答]#include <stdio.h>#define N 100int baoshu(int a[], int n, int m) /* n 个人围成一圈, 从1 到m 报数的函数*/{int i, cnt, num, *p, last;for(i=0; i<n; i++) /*给每一个人赋予一个初始位置号*/*(a+i)=i+1;cnt=0; /* cnt 用于从1 到m 记数, 模拟报数*/num=0; /* num 用于记录出圈人数*/while(num<n)for(p=a; p<a+n; p++) /* 报数*/if(*p) /* 若*p 在圈中*/{cnt++; /* 报数记数器加1 */if(cnt==m) /* 若报数记数器到达m */{/* 处理出圈事宜*/last=*p; /* 用last 记录当前出圈者的位置号*/*p=0; /* 位置号清零, 表示从圈中删除此人*/cnt=0; /* 报数记数器清零, 下一个人重新开始报数*/num++; /* 出圈人数加1 */}}return last;}void main(){int n, m;int a[N]; /* 用数组 a 记录每一个人在圈中的位置 */printf("输入人数 n (<%d) 和所报的最大数 m: ", N);scanf("%d%d", &n, &m);printf("最后留下的是原来第 %d 号的人.\n", baoshu(a, n, m));}6.9 有一个二维数组a, 大小为53⨯, 其元素为⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=2927252321191715131197531a (1) 请说明以下各表达式的含义:a, a+2, &a[0], a[0]+3, *(a+1), *(a+2)+1, *(a[1]+2), &a[0][2], *(a[0][2]), *(*(a+2)+1), a[1][3].(2) 如果输出a+1和&a[1][0], 它们的值是否相等? 为什么? 它们各代表什么含义?[解答](1)a : 数组首地址, 等价于 &a[0]a+2 : 第 2 行的地址, 等价于 &a[2]&a[0] : a[0]的地址, 即第0行的地址, 也是整个数组的首地址, 等价于a a[0]+3 : 第 0 行第 3 列元素的地址, 即 &a[0][3]*(a+1) : 第 1 行第 0 列元素的地址, 等价于 a[1] 和 &a[1][0]*(a+2)+1 : 第 2 行第 1 列元素的地址, 即与 &a[2][1] 等价*(a[1]+2) : 第 1 行第 2 列元素的值, 即 a[1][2] = 15&a[0][2] : 第 0 行第 2 列元素的地址*(a[0][2]) : 无意义*(*(a+2)+1) : 第 2 行第 1 列元素的值, 即 a[2][1] = 23a[1][3] : 第 1 行第 3 列元素的值, 等于 17.(2) 如果输出a+1和&a[1][0], 它们的值相等, 但它们有着不同的含义, a+1 等价于 &a[1], 表示第1行的首地址, 是一个二级指针; &a[1][0] 表示第1行第0列的地址, 是一个一级指针. 由于a[1][0] 是第1行的首元素, 因此它的地址刚好就是第1行的首地址, 从而两者输出的值相等.6.10 有一个整型二维数组, 大小是n m ⨯, 要求找出最大值所在的行和列以及该最大值, 请编写一个程序max, 要求如下:(1) 以数组名和数组大小为该函数的形参;(2) 数组元素的值在main 函数中输入, 结果在max 函数中输出.[解答]#include <stdio.h>#define M 3#define N 4void max(int a[], int m, int n){int i, j, row=0, col=0, max=*a;for(i=0; i<m; i++)for(j=0; j<n; j++, a++)if(*a>max){max=*a;row=i;col=j;}printf("最大值是%d, 在第%d, 第%d 列.\n", max, row, col);}void main(){int i, j, a[M][N];printf("请输入%d * %d 个整数:\n", M, N);for(i=0; i<M; i++)for(j=0; j<N; j++)scanf("%d", &a[i][j]);max(*a, M, N);}6.11 有n个学生, 每个学生参加m门课程的考试, 要求编写一函数, 能检查n个学生有无不及格的课程, 如果某个学生有一门或一门以上课程不及格, 就输出该学生的学号(学号从0算起, 即0, 1, 2, …) 及其全部课程成绩.[解答]#include <stdio.h>#define M 5 /*学生数*/#define N 3 /*课程数*/void proc(float s[][N]){int i, j, k;for(i=0; i<M; i++){for(j=0; j<N; j++)if(s[i][j]<60.0) break;if(j<N){printf("第%d 个学生有不及格的课程, 其各门课的成绩为:\n", i);for(k=0; k<N; k++)printf("%7.2f", s[i][k]);printf("\n");}}}void main(){float score[M][N];int i, j;for(i=0;i<M;i++){printf("请输入第%d 个学生的成绩: ", i);for(j=0;j<N;j++)scanf("%f", &score[i][j]);}proc(score);}6.12 输入3行字符(每行60个字符以内), 要求统计出其中共有多少个大写字母, 小写字母, 空格及标点符号.[解答]#include <stdio.h>#include <string.h>#define M 3#define N 60void main(){int i, j, upper=0, lower=0, blank=0, punc=0; /* upper, lower, blank, punc 分别记录大写字母, 小写字母, 空格及标点符号的个数*/char str[M][N];printf("请输入%d 行字符, 每行不超过%d 个字符:\n", M, N);for(i=0; i<M; i++)gets(str[i]);for(i=0; i<M; i++)for(j=0; j<N && str[i][j]!='\0'; j++)if(str[i][j]>='A' && str[i][j]<='Z')upper++;else if(str[i][j]>='a' && str[i][j]<='z')lower++;else if(str[i][j]==' ')blank++;else if(str[i][j]>' ' && str[i][j]<'0' || str[i][j]>'9' && str[i][j]<127)punc++;printf("大写字母, 小写字母, 空格及标点符号的个数分别是%d, %d, %d, %d.\n", upper, lower, blank, punc);}6.13 指出下列程序的错误, 并分析出错的原因.#include <stdio.h>void Print(char *[], int len);int main(void){char *pArray[]={"Fred", "Barrey", "Wilma", "Betty"};int num=sizeof(pArray)/sizeof(char);printf("Total string numbers = %d\n", num);Print(pArray, num);return 0;}void Print(char *arr[], int len){int i;for(i=0; i<len; i++)printf("%s\n", arr[i]);}[解答]程序第6行试图计算指针数组pArray所含元素的个数, 但这是错误的, 一个数组所含元素个数应该等于数组大小除以数组元素类型的大小, 这个数组的元素是字符指针类型, 而不是字符类型, 正确的语句是:int num=sizeof(pArray)/sizeof(char *);6.14 建立一个动态二维数组, 用来存储1~10的1~4次幂.[解答]#include <stdio.h>#include <stdlib.h>#define M 10#define N 4void main(){int i, j, (*p)[N], pow;p=(int (*)[N])malloc(M*N);if(!p){printf("内存分配出错.\n");exit(1);}for(i=0; i<M; i++){pow=1;for(j=0; j<N; j++)p[i][j]=pow*=(i+1);}for(i=0; i<M; i++){for(j=0; j<N; j++)printf("%6d", p[i][j]);printf("\n");}// free(p);}6.15 略.6.16 题目略.[解答] (1) A (2) C.。

C++6~11章课后作业参考答案解析

C++6~11章课后作业参考答案解析

第六章类和对象1.给出以下程序的执行结果题目见《C++语言程序设计》9.9—9.21(P212)和《C++程序设计教程》6.2-6.4(P115)答案:《C++语言程序设计》9.9运行结果:String9.10运行结果:n=6n=6n=69.11运行结果:n=10, k=3n=20, k=3n=30, k=39.13运行结果:n=2n=39.14运行结果:Constructor, i=0,Destructor9.15运行结果:Constructor1 Constructor2 i=0i=10 Destructor Destructor 9.16运行结果:A ConstructorB Constructor Value=0B DestructorA Destructor9.17运行结果:A=7, b=89.18运行结果:5 6 79.19运行结果:Constructor1 Constructor1Constructor1 Destructor Constructor2 Destructor Constructor3 Destructorx=0, y=0x=5, y=0x=2, y=3 Destructor Destructor Destructor 9.20运行结果:(1,2,3):count=2 (2,3,4):count=2 9.21运行结果:A: Constructor B: Constructor n=3m=2B: Destructor2.编写一个程序,输入若干个学生的英语和数学成绩,求出总分,并按总分从高到低排序,最后输出结果。

#include"iostream"#include"string"#include"iomanip"using namespace std;class Student{public:char *name;int eng,math,sum;Student();void inscore();void display();~Student();};Student::Student(){name=new char[10];}void Student::inscore (){cout << "姓名:"; cin >> name;cout <<"英语:";cin >> eng;cout << "数学:";cin >> math;sum=eng+math;}void Student::display (){cout << setw(10) << name << setw(6) << eng << setw(6) << math << setw(10) << sum << endl;}Student::~Student(){delete [] name;}void equal(Student &a,Student &b){strcpy( , );a.eng =b.eng ;a.math =b.math ;a.sum =b.sum ;}void sort(Student *p,int n){int i,j,exchange;Student tmp;for (i=0;i<n-1;i++){exchange=0;for (j=n-2;j>=i;j--)if (p[j+1].sum >p[j].sum ){equal(tmp,p[j+1]);equal(p[j+1],p[j]);equal(p[j],tmp);exchange=1;}if(!exchange)break;}}void main(){int n,i;Student *p;cout <<"请输入学生个数:"; cin >> n;p=new Student[n];for (i=0;i<n;i++)p[i].inscore ();cout << "排序前:" <<endl;for (i=0;i<n;i++)p[i].display ();sort(p,n);cout << "排序后:" << endl;for (i=0;i<n;i++)p[i].display ();system("pause");}3.设计一个立方体类Box,它能提供立方体的体积和表面积。

第六次实验报告模板

第六次实验报告模板

第六次实验报告模板实验报告六六学时课程专业班级姓名c语言程序设计实验项目学号实验日期综合应用实验成绩批阅日期指导教师一【实验目的】基于C语言,完成了具有一定难度的综合编程。

通过编写、调试和运行程序,进一步掌握C语言编程的基本方法和编程技巧,巩固所学知识,提高分析和解决问题的能力。

二【实验内容】参加期末考试的班级人数不超过30人(具体数字由键盘输入),不超过6人(具体数字由键盘输入)。

定义结构类型并描述学生信息。

每个学生的信息包括:学生人数、姓名、多门课程的分数、总分和平均分。

以结构阵列为功能参数,编制了以下菜单驱动的学生成绩管理系统。

(1)输入每个学生的学号、姓名和考试成绩。

(2)计算每门课程的总分和平均分。

(3)计算每个学生的总分和平均分。

(4)按每个学生的总分由高到低排出名次表。

(5)按学号由小到大排出成绩表。

(6)按姓名的字典顺序排出成绩表。

(7)按学号查询学生排名极其考试成绩。

(8)按姓名查询学生排名极其考试成绩。

(9)按优秀(90~100)、良好(80~90)、中等(70~80)、及格(60~70)、不及格(0~59)5个类别,对每每门课程都会统计每个类别的人数和百分比。

(10)输出每个学生的学号、姓名、各科考试成绩以及每门课程的总分和平均分。

程序运行后需要显示以下菜单,并提示用户输入选项:1 inputrecord2.caculatetotalandaveragescoreofeverycourse3.caculatetotalandaveragescoreofeve rystudent4.每名学生的得分依次下降或下降。

SORTINASCENDINGORDERBY6。

SortinDictionary 或DerbyName7。

按数字8搜索。

搜索名字9.statisticanalysisforeverycourse10.listrecord0.exit请输入您的选择:三【题目分析】本主题主要研究数组、指针、结构、函数调用相关操作以及C语言算法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第六次作业:指针(以下题目如无特殊声明,请使用指针技术实现,尽量不要使用数组作为形参,也尽量避免使用数组下标引用数组元素)1.数组元素循环移位有n个整数,使前面的各整数顺序向后移动m个位置,后面的m个整数则变成最前面的m个数。

写一函数实现以上功能。

在主函数中输入n及n个整数,输入m (m<n),调用编写的上述函数,然后输出调整后的n个整数。

#include<stdio.h>void main(){void inv(int *p,int n,int m);int n,m,a[20],*p;printf("please input n=");scanf("%d",&n);printf("please input %d numbers:",n);p=a;while(p<a+n)scanf("%d",p++);printf("please input m=");scanf("%d",&m);p=a;inv(a,n,m);printf("the new array:\n");while(p<a+n)printf("%d ",*p++);putchar('\n');}void inv(int *p,int n,int m){int i;for(i=1;i<=n;i++)*(p+n-i+m)=*(p+n-i);for(i=0;i<m;i++)*(p+i)=*(p+n+i);}2. 矩阵元素的排序将一个5×5的整数型矩阵中各元素重新排序。

排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即4,41,10,14,03,02,01,00,0.......a a a a a a a a ≤≤≤≤≤≤≤。

要求编写一个函数实现上述排序功能。

在主函数中输入该矩阵,调用编写的上述函数,然后输出排序后的矩阵。

#include<stdio.h>void main(){void inv(int (*x)[5]);int i,j,a[5][5];int (*p)[5];printf("please input an 5*5 array:\n");p=a;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",*(p+i)+j);inv(p);printf("the new array:\n");for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%4d",*(*(p+i)+j));putchar('\n');}putchar('\n');}void inv(int (*x)[5]){int i,j,t;for(i=0;i<24;i++)for(j=i+1;j<25;j++){if(*(*x+i)>*(*x+j)){t=*(*x+i);*(*x+i)=*(*x+j);*(*x+j)=t;}}return;}3.星期的查找编写一个程序,输入一个1~7之间的整数,表示星期几,然后输出相应的文字。

例如:如用户输入3,则输出“星期三”。

要求:用指针数组的方法来实现。

#include<stdio.h>void main(){int n;char (*p)[3];char a[7][3]={"一","二","三","四","五","六","七"};printf("please input n=");scanf("%d",&n);p=a;printf("星期%s\n",p+n-1);}4.字符串库函数的实现请使用指针的方法来实现如下的库函数:Char * strncpy( char *s, char * t, int n) //复制t的前n个字符至sChar * strncat( char *s, char * t, int n) //连接t的前n个字符至s的末尾int strncmp( char *s, char * t, int n) //比较s和t的前n个字符并请编写一个主函数来调用并测试自己编写的库函数。

#include<stdio.h>#include<string.h>char *strncpy(char *s,char *t,int n){int i,length;length=strlen(s);for(i=0;i<n;i++)*(s+i)=*(t+i);if(length<n)*(s+n)='\0';return(s);}char *strncat(char *s,char *t,int n){int i,length;length=strlen(s);for(i=0;i<n;i++)*(s+i+length)=*(t+i);*(s+length+n)='\0';return(s);}int strncmp(char *s,char *t,int n){int i;for(i=0;i<n;i++){if(*(s+i)==*(t+i))continue;else if(*(s+i)>*(t+i)){return(1);break;}else {return(-1);break;}}}void main(){char a[20],b[20];int n;scanf("%s%s%d",a,b,&n);printf("%s\n",strncpy(a,b,n));scanf("%s%s%d",a,b,&n);printf("%s\n",strncat(a,b,n));scanf("%s%s%d",a,b,&n);printf("%d\n",strncmp(a,b,n));}5.算术练习程序(指针型函数)一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。

该程序调用一个GetRandomExpression(),由它随机返回一个简单的表达式;然后程序提示用户输入表达式的计算结果,并判断答案是否正确。

#include<stdio.h>#include<time.h>#include<stdlib.h>int result=1;void GetRanddomExpression(int *num1,char *a,int *num2){int n;srand(time(NULL));*num1=rand()%100+1;*num2=rand()%100+1;n=rand()%4;switch(n){case 0:{while(*num2>*num1) *num2=rand()%100+1;result=(*num1)-(*num2);*a='-';}break;case 1:{while((*num1+*num2)>100)*num2=rand()%100+1;*a='+';result=(*num1)+(*num2);}break;case 2:while((*num1*(*num2))>100)*num2=rand()%100+1;*a='*';result=(*num1)*(*num2);break;case 3:{while(*num1%*num2!=0)*num2=rand()%100+1;result=(*num1)/(*num2);*a='/';}break;}}int judge(int answer){if(answer==result)return(1);else return(0);}void main(){int num1,num2;char a;int answer;while(result!=answer){GetRanddomExpression(&num1,&a,&num2);printf("please input the result of the expression:\n%d%c%d=",num1,a,num2);scanf("%d",&answer);if(judge(answer)==1)printf("you are right!");else printf("sorry,it not the right answer.\n");}}6.数组分区(指针作为函数参数)本题由三个部分构成(1)编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。

该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回奇数、偶数的个数)(2)利用(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是找出给定长度的一个整型数组中的所有奇数和偶数,并把它们分别保存在两个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两个新数组及其长度。

该函数的参数有6个,整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。

(3)编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,然后调用(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。

#include <stdio.h>#include<malloc.h>#include<time.h>#include<stdlib.h>void CountEvensAndOdds(int *parr,int arr_len,int *even_count,int *odds_count) {int i;int count_even=0,count_odds=0;for (i=0;i<arr_len;i++){if ((*(parr+i)%2)==0)count_even++;else count_odds++;}*even_count=count_even;*odds_count=count_odds;}void Partition(int *parr,int arr_len,int **even_arr,int *even_len,int **odds_arr,int *odds_len){int even_count,odds_count,i,m=0,n=0;int count_even=0,count_odds=0;CountEvensAndOdds(parr,arr_len,&even_count,&odds_count);*even_arr=(int *)malloc(sizeof(int)*even_count);*odds_arr=(int *)malloc(sizeof(int)*odds_count);for (i=0;i<arr_len;i++){if((*(parr+i)%2)==0){*(*even_arr+m) = *(parr+i);m++;}else{*(*odds_arr+n) = *(parr+i);n++;}}*even_len=m;*odds_len=n;}void print_arr(int *parr,int arr_len){int i;for(i=0;i<arr_len;i++){printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}printf("\n");}void main(){int *parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;srand(time(NULL));arr_len = rand()%50;parr=(int *)malloc(sizeof(int)*arr_len);printf("arr_len=%d\n",arr_len);for(i=0;i<arr_len;i++)parr[i] = rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:\n");print_arr(parr,arr_len);printf("even_arr len=%d\n",even_len);printf("even_arr:\n");print_arr(even_arr,even_len);printf("odds_arr len=%d\n",odds_len);printf("odds_arr:\n");print_arr(odds_arr,odds_len);}7.字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1)如果该字符是空格,则保留该字符。

相关文档
最新文档