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语言算法。

C语言实验报告总结(共6篇)

C语言实验报告总结(共6篇)

c语言上机实验心得在科技高度发展的今天,计算机在人们之中的作用越来越突出。

而c语言作为一种计算机的语言,学习它将有助于我们更好的了解计算机,与计算机进行交流,因此,我们一定要学好c语言,这对我们以后的发展是十分重要的。

说到这,上机实验当然就是一个必不可少的环节了,c语言灵活、简洁的特点,只有通过编程实践才能真正了解,真正说懂。

为了更好地学习语法规定、掌握程序设计方法、提高程序开发能力,我们必须实际上机、编写程序。

通过实验我也发现了自己不少的问题,这都是只看书上的程序而没有自己亲身上机编写程序而无法得知的,假如我们只因看熟书上的程序就以为自己已经掌握了c语言那就大错特错了。

我主要存在以下的这些缺点:1、学习耐心与细心不足,如scanf(“%d”,&amp;n);中的“&amp;”有时候会忘了。

而在最后输出时又错写成printf(“%d”,&amp;n);从而错误得输出了地址而不是我原来想要的答案。

2、编程思想不够发散,看着题目有时想不出解答的方法,更不用说编写程序来解题了。

3、4、基本功不够,有些函数的表达不太精通,需要看书来核实,以致耗时较多。

知识不够广,有些内容没有学好,不能要用到时及时反映出来,认识程度不够深刻。

5、6、有时候不够精简,有一点用处不大或者说没有也可以的文字存在。

英语水平较差,对错误的地方虽然电脑有说,但由于是英文,理解上还是存在一点问题。

为了能更好地学好c语言,在今后学习中我要更多的动脑,综合运用所学,多看相关东西,多上机练习,提高电脑水平,增强自学能力,把已会的东西掌握好。

实验中我深刻意识到完成程序的编写,决不意味着万事大吉。

认为万无一失的程序,实际上机运行时可能会出现很多意想不到的问题。

有时编译程序检测出一大堆错误,有时程序能够顺利运行,但是运行结果并不是你预期中想要的。

因为开发环境所提供的编译系统无法发现程序逻辑错误,或者是你原来所设计时的理论错误,这就只能靠自己的上机经验来分析判断错误的所在了。

c语言程序设计课程设计总结(菁选6篇

c语言程序设计课程设计总结(菁选6篇

c语言程序设计课程设计总结(菁选6篇c语言课程设计个人总结篇一当前,计算机已经成为人们工作、学习和生活中必不可少的工具,整个社会对计算机的高度依赖促使一个崭新的文化形态的形成――计算机文化。

随着高等教育从精英教育阶段进入大众教育阶段,教育部高等学校计算机科学与技术教学指导委员会在计算机基础课程教学基本要求中提出了1+X的课程设置方案[1],理工类学生在学学计算机基础课程后,接下来就要学习C语言程序设计,C语言程序设计已经成为各高校普遍开设的基础课程。

本文总结了我们在教学和实践中的一些做法和体会。

C语言功能强大,使用灵活方便,应用面广,可移植性好,兼有高级语言的优点和低级语言的特点[2],这也使得初学者较难学习和掌握,在教学中我们发现,学生往往对编程解决实际问题感到困难,不知从何下手,而一些考试题目往往重视考查语法的细节,而对编程能力考查得不多。

对于C语言程序设计的教学,我们从培养学生的兴趣和能力,以及计算机思维能力出发,进行了一系列教学的探索与实践。

一、教学师资团队建设人才培养师资队伍是关键,教学团队的建设是保障教学效果和实施教学的基础和支撑[3]。

根据本课程的特点和大一学生的基础,学院确定了一支老中青相结合的骨干教师组成本课程教学团队,团队由一位教授、一位副教授、四位讲师和三位助教组成,分别承担理论教学和实验教学任务,这支队伍年龄、职称结构合理,团队中的教师在每学期的教学督导和学生评教中,成绩都在良好以上,从根本上保证了课程的教学质量。

坚持教学团队的凝聚力建设,定期研讨,统一思想。

每周教研时间及时交流教学中出现的问题及解决方法,对教学过程进行总结反思,坚持互相听课,集体研究讨论教案、课件制作,对每个实验内容、案例的选用、考核的内容和方式等都经过团队的统一讨论确定。

重视教学团队中教师自身的进修和提高,团队中的多名教师先后参加了国家精品课程师资培训、全国高等学校计算机实验与实践教学研讨会、全国高等院校程序设计精品课程教学专题研讨会等,教师都很珍惜每一次与兄弟院校的教师、专家交流与学习的机会,教师及时把学习体会传达到团队的每一位教师,汲取其他院校的一些好的做法运用到我们的教学实践中,这些做法对促进教师的知识更新、教育理论的学习、教学方法的改进和教学能力的提高起到积极的作用,也保证了课程的教学能不断向前推进。

C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案

C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案

C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案第六章循环语句6.1输入两个正数,求最大公约数和最小公倍数.#includevoidmain(){inta,b,num1,num2,temp;printf(\请输入两个正整数:\\n\canf(\if(num1temp=num1;num1=num2;num2=temp;}a=num1,b=num2;while(b!=0){temp=a%b;a=b;b=temp;}printf(\它们的最大公约数为:%d\\n\printf(\它们的最小公倍数为:%d\\n\}编译已通过6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数.解:#includevoidmain(){charc;intletter=0,pace=0,degit=0,other=0;printf(\请输入一行字符:\\n\while((c=getchar())!='\\n'){if(c>='a'&&c<='z'||c>'A'&&c<='Z')letter++;eleif(c=='')pace++;eleif(c>='0'&&c<='9')digit++;eleother++;}printf(\其中:字母数=%d空格数=%d数字数=%d其它字符数=%d\\n\digit,other);}6.3求(n)=a+aa+aaa++aaa之值,其中a是一个数字,n表示a的位数。

解:voidmain(){inta,n,count=1,n=0,tn=0;printf(\请输入a和n的值:\\n\canf(\printf(\while(count<=n){tn=tn+a;n=n+tn;a=a某10;++count;}printf(\\\n\}6.4求(即1+2!+3!+4!++20!)voidmain(){floatn,=0,t=1;for(n=1;n<=20;n++){t=t某n;=+t;}printf(\\\n\}阶乘利用递归,再求和:#includeuingnamepacetd;longFunc(intn){ if(1==n)returnn;if(n>1)returnn某Func(n-1);}main(){long=0;inti=1;while(i<=6){=+Func(i);i++;}cout<6.5求voidmain(){intk,N1=100,N2=50,N3=10;float1=0.0,2=0.0,3=0.0;for(k=1;k<=N1;k++)/某计算1到100的和某/{1=1+k;}for(k=1;k<=N2;k++)/某计算1到50各数平方和某/{2=2+k某k;}for(k=1;k<=N3;k++)/某计算1到10各数倒数之和某/{3=3+1.0/k;}printf(\总和=%8.2f\\n\}已通过intmain(){intk=1,i=11,j=51;float=0.0;while(k<=10){=+k+k某k+1.0/k;while(k==10&&i<=50){=+i+i某i;while(i=50&&j<=100){ =+j;j++;}i++;}k++;}}6.6所谓“水仙开数”是指一个3位数,其个位数字立方和等于该数本身。

C语言习题六(数组部分)习题及答案

C语言习题六(数组部分)习题及答案

C语言习题六(数组部分)习题及答案习题六一.选择题1.在C语言中,引用数组元素时,其数组下标的数据类型允许是c 。

A)整型常量B)整型表达式C)整型常量或整型表达式C)任何类型的表达式2.以下对一维整型数组a的正确说明是DA)int a(10) ; B)int n=10,a[n];C)int n; D)#define SIZE 10scanf(“%d”,&n);int a[SIZE];int a[n];3.若有定义:int a[10],则对数组a元素的正确引用是 D 。

A)a[10] B)a[3.5] C)a(5) D)a[10-10]4.以下不能对一维数组a进行正确初始化的语句是B 。

A)int a[10]={0,0,0,0,0}; B)int a[10]={} ;C)int a[ ] = {0} ; D)int a[10]={10*1} ;5.若有定义:int a[3][4],则对数组a元素的正确引用是。

AA)a[2][3] B)a[1,3] C)a(5) D)a[10-10]6.以下能对二维数组a进行正确初始化的语句是B。

A)int a[2][]={{1,0,1},{5,2,3}} ;B)int a[][3]={{1,2,3},{4,5,6}} ;C)int a[2][4]={{1,2,3},{4,5},{6}} ;D)int a[][3]={{1,0,1},{},{1,1}} ;7.以下不能对二维数组a进行正确初始化的语句是。

CA)int a[2][3]={0} ;B)int a[][3]={{1,2},{0}} ;C)int a[2][3]={{1,2},{3,4},{5,6}} ;D)int a[][3]={1,2,3,4,5,6} ;8.若有说明:int a[3][4]={0};则下面正确的叙述是D。

A)只有元素a[0][0]可得到初值0B)此说明语句不正确C)数组a中各元素都可得到初值,但其值不一定为0D)数组a中每个元素均可得到初值09.若有说明:int a[][4]={0,0};则下面不正确的叙述是D。

C第六章习题答案(大题非选做).docx

C第六章习题答案(大题非选做).docx

6-3 (1)#include <iostream>using namespace std;int main(void){int num[10], *p, i, j, temp; cout«**输入10 个整数"vvendl; for(i=0; i<10; i++){ cin»num[订;}for(i=0; i<10; ■++){// 0, 1_________ 8p = &num[i];for(j = i+1; J<10; j++){//1, 2・.・ 9 if(num[i]<=num[J]){p = &num[j];}}cout«*p«endl; temp = *p;*p = num[i]; num[i] = temp;}system(M pause f,);return 0;(2)注:N的数值可以在宏定义中更改,以下是W12的吋候:#include <iostream>using namespace std;#define N 12struct N0DE{int num;NODE *next;};int i:class List{private:NODE list[N];NODE *temp;public:List() {//设置一个结点组成的圈temp = Iist;Iist[0].num = 1 ;Iist[0].next = &list[1];//第一个结点己经完成for(i=1: i<(N-1); ■++){Iist[i].num = i+1:Iist[i].next = &Iist[i+1];}//第二个至倒数第二个已经完成Iist[N-1].num = N;Iist[N-1].next = &list[O];//最后一个结点已经完成void Next2(){temp = temp->next;temp = temp->next;}void Fun(){temp = & list[N-1];//得到链表的最后一个结点地址do{Next2();//当前是0,数到2〃现在temp已经是标号为2的结点的地址了cout«(temp->next)->num«ff M;//$ny出要被删除的结点(p+1) temp->next = (temp->next)->next ;//^ 被删除的结点的前一个(p)和后一个相连接(p+2)}while(temp->next != (temp->next)->next); cout«temp->num;}};int main(void){List one; one.Fun(j; system(ft pause f,); return 0;}(3)#include <iostream>#include <string> using namespace std;#define SIZE 512class Str{private:char str1[SIZE]:char str2[SIZE];char *p;int i, length;public:void set(){cout«ff输入第一个字符串:ff«endl; cin>>str1;cout«ff输人第二个字符串:ft«endl; cin>>str2;}void fun(){Iian(str1, str2):}void Iian(char *m, char *n){ length = strlen(n); for(i=0; i<strlen(n)+1; i++){ P = & n[i];str1 [length+i] = *p;}cout«ft连接之后的结果:\n ft«str1«endl;}};int main(void){ Str one; one.set(); one.funO; system(ft pause f,); return 0;}(4)#include <iostream>#include <string>using namespace std;#define SIZE 512class Str{private:char str[SIZE]:int upper, lower, space, number, other, i:public:Str(){upper=Iower=space=number=other=0;void set(){cout«ff输入一个字符ff«endl;gets(str);}void check(){for(i=0; i<strlen(str); i++){if(str[i]>=w A・ && str[i]<="Z>){upper++;}else if(str[i]>=w a w && str[i]<=w z w){lower++;}else if(str[i]=="・){space++;}else if(str[i]>=w O w && str[i]<=w9w){number++;}else{other++;}}}void te11(){check();coutvv"箕冇大写字母ff«upper«ft个,小写字母"«lower«ff个,空格"vvspacevv”个,数字ff«numbervv”个,其他字符■•vvothervv”个”vvendl;}};int main(void){Str one;one.set();one.tel 1();system(ft pause ff);return 0;}(5)代码中要用到strlen函数,所以包含了string头文件,但strcmp函数在string中己经定义,所以下题屮改用Strcmpo#include <iostream>#include <string>using namespace std;#define SIZE 512class Str{private:char str1[SIZE];char str2[SIZE];■ nt i;public:void get(){cout«ft输入第一个字符串vvendl;OP+Q(Q+r1\■cout«M输入菊二个字符串:“vvendl; gets(str2);}void fun(){ Strcmp(str1, str2);}void Strcmp(char *m, char *n){int num;for(i=0; i<strlen(str1) || i<strlen(str2); i++){if(str1[i]==str2[i]){num = 0;}else{num = str1[i] - str2[i]; break;}}}};irrt main(void){Str one;one.get();one・fun();system(fl pause f,); return 0;}(6)注意:原有数组是不变的,但指针数组是排序Z后的。

c语言学习心得体会(通用6篇)

c语言学习心得体会(通用6篇)

c语言学习心得体会(通用6篇)我们在一些事情上受到启发后,写一篇心得体会,记录下来,这样有利于培养我们思考的习惯。

那么写心得体会要注意的内容有什么呢?山草香分享了6篇c语言学习心得体会,希望对于您更好的写作c语言学习心得有一定的参考作用。

学习宣传贯彻党章,就是要把党章的精髓和精神融入到落实“两个责任”的全过程,融入到作风建设的全过程,融入到监督执纪的全过程,融入到维护群众利益的全过程。

一、加强监督检查,压实“两个责任”。

首先我们将按照《中共晋城市委关于落实党风廉政建设党委主体责任的意见(试行)》和《中共晋城市委关于落实党风廉政建设纪委监督责任的意见(试行)》要求,推动市委发挥表率作用,带头落实主体责任;其次结合全市基层落实“两个责任”推进会精神,加大监督检查,实现压力传导,强化问责追究,着力解决反腐力度逐级递减问题;第三是围绕市委出台的六项举措要求,加强综合协调,开展督促指导,抓好推动落实,切实将“两个责任”压紧压实。

二、强化作风建设,防止“四风”反弹。

一是紧盯节点查。

盯住元旦、春节等重要节点,加大对公款吃喝、公车私用、公款旅游等违规违纪行为的监督检查;二是抓住重点查。

按照市委“八个严禁”要求,把违反中央八项规定精神的行为列入纪律审查重点,紧盯“四风”隐形变异问题,转变监督方式、提高监督实效、加大问题曝光,坚决遏制“四风”反弹回潮;三是开展专项查。

突出问题导向和专项整治重点,认真开展专项巡查,通过以上率下,以点带面,推动作风建设落地生根,成为新常态。

三、发扬“啄木鸟”精神,坚决把纪律挺在前面。

一是要把纪律和规矩立起来、严起来,管到位、严到份,让纪律和规矩成为管党治党的尺子、不可逾越的红线;二是突出抓早抓小,充分发扬“啄木鸟”精神,切实把党员干部的“小毛病”“小事”“小节”和“第一次”管住管好,形成不踩红线、不越雷池的纪律意识和行动自觉;三是把“四风”问题作为纪律审查的重点先行处理,突出快查快处,形成敬畏纪律、遵守规矩的政治新生态。

c语言程序设计第五版课后答案谭浩强第六章习题答案

c语言程序设计第五版课后答案谭浩强第六章习题答案

c语⾔程序设计第五版课后答案谭浩强第六章习题答案第六章:利⽤数组处理批量数据1. ⽤筛选法求100之内的素数【答案解析】素数:约数为1和该数本⾝的数字称为素数,即质数筛选法:⼜称为筛法。

先把N个⾃然数按次序排列起来。

1不是质数,也不是合数,要划去。

第⼆个数2是质数留下来,⽽把2后⾯所有能被2整除的数都划去。

2后⾯第⼀个没划去的数是3,把3留下,再把3后⾯所有能被3整除的数都划去。

3后⾯第⼀个没划去的数是5,把5留下,再把5后⾯所有能被5整除的数都划去。

这样⼀直做下去,就会把不超过N 的全部合数都筛掉,留下的就是不超过N的全部质数。

因为希腊⼈是把数写在涂腊的板上,每要划去⼀个数,就在上⾯记以⼩点,寻求质数的⼯作完毕后,这许多⼩点就像⼀个筛⼦,所以就把埃拉托斯特尼的⽅法叫做“埃拉托斯特尼筛”,简称“筛法”。

(另⼀种解释是当时的数写在纸草上,每要划去⼀个数,就把这个数挖去,寻求质数的⼯作完毕后,这许多⼩洞就像⼀个筛⼦。

)【代码实现】//⽤筛选法求100以内的素数#include<stdio.h>int main(){int i, j, k = 0;// 将数组汇总每个元素设置为:1~100int a[100];for (i = 0; i < 100; i++)a[i] = i+1;// 因为1不是素数,把a[0]⽤0标记// 最后⼀个位置数字是100,100不是素数,因此循环可以少循环⼀次a[0] = 0;for (i = 0; i < 99; i++){// ⽤a[i]位置的数字去模i位置之后的所有数据// 如果能够整除则⼀定不是素数,该位置数据⽤0填充for (j = i + 1; j < 100; j++){if (a[i] != 0 && a[j] != 0){//把不是素数的都赋值为0if (a[j] % a[i] == 0)a[j] = 0;}}}printf(" 筛选法求出100以内的素数为:\n");for (i = 0; i < 100; i++){//数组中不为0的数即为素数if (a[i] != 0)printf("%3d", a[i]);}printf("\n");return 0;}【运⾏结果】2. ⽤选择法对10个整数排序【答案解析】选择排序原理:总共两个循环,外循环控制选择的趟数,内循环控制具体选择的⽅式。

C语言解题报告

C语言解题报告
ata < p2->data){t = p1->data;
p1->data = p2->data;
p2->data = t;}
p2 = p2->next;
p1 = p1->next;
两个序列合并成一个非升序列:
if(p1->data >= p2->data){p->data = p1->data;
《C语言程序综合设计》
解题报告
学号030902426
姓名许堃
班级计算机4班
(正文)
(一)
题目:输入两个非降序列,转换成两个非升序列,合并成一个非升序列。
分析(解题思路及流程图):先建立一个动态链表,然后编译两个函数,一个完成将两个非降序列转化成两个非升序列,另一个完成将两个非升序列合并的过程。
程序代码(核心代码):
心得:实验的要求都是链表的基本操作,由于对链表的掌握不够熟练,在实验中经常需要翻书和向同学请教,通过这个实验,对链表也有了进一步的掌握。
(二)
题目:高精度N!
分析(解题思路及流程图):
将N!的每一个乘数都用数组形式来储存,设定二个数组a[],b[];将1存放在a[]中,2存放在b[]中,然后再将a[]*b[]的结果存放在a[]中,然后将3存放在b[]中,然后再将a[]*b[]的结果存放在a[]中,继续将4存放在b[]中,以此类推,到最后就完成了(N-1)!*N=N!
心得:实验的关键就是完成两个数化成数组之后的相乘,之后的步骤就会变得简单多了
(三)
题目:8皇后问题(在一个8×8国际象棋盘上,有8个皇后,每个皇后占一格;要求皇后间不会出现相互“攻击”的现象,即不能有两个皇后处在同一行、同一列或同一对角线上。问共有多少种不同的方法。)
  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)如果该字符是空格,则保留该字符。

相关文档
最新文档