第一篇:c语言编程大题
三、编程题
1.输入一个半径值,分别计算圆周长、圆面积和球的体积。要求使用符号常量定义圆周率。#include
#include (s=(a+b+c)/2,三角形面积area=sqrt(s(s-a)(s-b)(s-c)))#include #include printf(“yesn”);else printf(“non”);return 0;} 21.编写程序,编程实现以下功能:读入两个运算数(data1和data2)及一个运算符(op),计算表达式data1 op data2的值,其中op可为+,?,*,(/执行除法运算时假设data2不为0,用switch语句实现)。#include else if(s[i]==' '){ c++;} else { d++;} i++;} printf(“数字的个数是%dn”,a);printf(“字母的个数是%dn”,b);printf(“空格的个数是%dn”,c);printf(“其他符号的个数是%dn”,d);return 0;} 25.输出图形 $ $$$ $$$$$ $$$$$$$ #include int sum=0,n,i,a=1;printf(“计算1+(1+2)+(1+2+3)+„„(1+2+3+n)=?n”);scanf(“%d”,&n);while(a<=n){ i=(1+a)*a/2;sum=sum+i;a++;} printf(“输出sum=%dn”,sum);return 0;} 27.计算10!#include s=s+a[m][l];} v[m]=s/4;s=0;} printf(“第一个人平均分是%.2fn第二个人平均分是%.2fn第三个人平均分是%.2fn”,v[0],v[1],v[2]);return 0;} 37.编程输出杨辉三角中的前10行。1 1 1 1 2 1 1 3 3 1 1 4 6 4 1......#include return 0;} intpailie(int a[10],int n){(不会)} 42.编写一个函数,求一个3×4的矩阵所有元素之和。 43.编写求圆的面积的函数,并调用该函数求出圆的面积。#include if(a%i==0&&b%i==0) break;} return i;} int MIN(inta,int b){ for(int j=(a>b?a:b);j<=a*b;j++){ if(j%a==0&&j%b==0) break;} return j;} 47.编写判断回文的函数,并调用此函数判定一个字符串是否为回文。(回文字符串是指该字符串从左到右读和从右到左读完全一样。)#include 49.编写一个函数,使给定的一个3×3的二维整型数组转置,即行列互换。#include scanf(“%d”,&a[i][j]);} ZHIHUAN(a);return 0;} int ZHIHUAN(int b[3][3]){ int c[3][3],m,n;printf(“转置方阵为:n”);for(m=0;m<=2;m++){ for(n=0;n<=2;n++)c[n][m]=b[m][n];} for(n=0;n<=2;n++){ for(m=0;m<=2;m++)printf(“%d ”,c[n][m]);printf(“n”);} return 0;} 数据结构考试题参考答案 1、设顺序表L中的数据元素递增有序。试写一算法,将数据元素x插入到顺序表L的适当位置,以保持该表的有序性。 解:存储结构为: typedef struct SeqList { DataType *data; int MaxLen; int len;}SeqList;算法如下: void insertLx(SeqList &L, DataType x){ if(L.len==L.maxlen)return;int i=L.len-1;while(i>=0 && x 2、试写一个算法,在带头结点的单链表L的元素x前插入一个结点y。解:存储结构如下: typedef struct Lnode {ElemType data;struct Lnode *next;}Lnode, *LinkList;算法如下: void insert_y_before_x(LinkList L, ElemType x, ElemType y){ Lnode *q, *p=L; while(p->next && p->next->data!=x)p=p->next;//找x的前驱结点p;if(!p->next)return;// 若不存在结点x,则返回; q=new Lnode;q->data=y;q->next=p->next;p->next=q;} 3、试写一个算法,统计带头指针的单链表L的元素个数。解:存储结构如下: typedef struct Lnode {ElemType data;struct Lnode *next;}Lnode, *LinkList;算法如下: int length(LinkList L){ int len=0;Lnode *p=L;while(p){ len++;p=p->next;} return len;} 注:如果单链表是带头结点的,则算法如下: int length(LinkList L){ int len=0;Lnode *p=L->next;;while(p){ len++;p=p->next;} return len;} 4、试写一个算法,在带头结点的单链表L的第k个结点后插入一个结点x。解: 存储结构如下: typedef struct Lnode {ElemType data;struct Lnode *next;}Lnode, *LinkList;算法如下: void insert_after_k(LinkList L, int k, ElemType x){ if(k<0)return;Lnode *q, *p=L;int i=0;while(p && i q=new Lnode;q->data=x;q->next=p->next;p->next=q;} 注:如果是在L的第k个结点前插入一个结点,则找第k-1个结点p,然后插入。5、试写一个算法,在带头结点的单链表L中删除所有的数据元素为x的结点。解: 存储结构如下: typedef struct Lnode {ElemType data;struct Lnode *next;}Lnode, *LinkList;算法如下: void Delete_all_x(LinkList L, Elemtype x){ Lnode *p, *q;p=L;while(p){ if(p->next && p->next->data==x){q=p->next;p->next=q->next;delete q;} else p=p->next;} } 注意:要删除所有的值为x的结点。6、假设一个单循环链表L的数据域为整型,设计一个算法,求该表中所有结点的数据之和。解: 存储结构如下: typedef struct Lnode {ElemType data;struct Lnode *next;}Lnode, *LinkList; 假设L带头结点,且L指向头结点,则算法如下: int sum_Of_Data(LinkList L){ int s=0;Lnode *p=L->next;while(p!=L){s+=p->data;p=p->next;} return s;} 假设L不带头结点,且L指向循环链表中任何一个结点,则算法如下: int sum_of_data(LinkList L){ int s=0;Lnode *p=L;if(L){ s+=p->data;p=p->next;while(p!=L){ s+=p->data;p=p->next;} } return s;} 注:以上两种情形,只要给出其中一种情形的解即可。 7、假设二叉树用二叉链表存储,设计一个算法,求二叉树的结点个数。解:存储结构如下: typedef struct bitnode {ElemType data;struct bitnode *lchild, *rchild;}bitnode, *bitree;算法如下: int nodes(bitree T){ if(!T)return 0;else return(1+nodes(T->lchild)+nodes(T->rchild));} 8、写一个算法,建立二叉树的二叉链表。解:存储结构如下: typedef char ElemType;typedef struct bitnode {ElemType data;struct bitnode *lchild, *rchild;}bitnode, *bitree;算法如下: void creat_bitree(bitree &T){ //按扩展的先序序列输入结点,输入‘#’表示空。ElemType ch; cin>>ch;if(ch==’#’)T=0;else { T=new bitnode;T->data=ch;creat_bitree(T->lchuild);creat_bitree(T->rchild);} } 或者写成以下算法: bitree creat_bitree(void){ //按扩展的先序序列输入结点,输入‘#’表示空。bitree T;ElemType ch; cin>>ch;if(ch==’#’)T=0;else { T=new bitnode;T->data=ch;creat_bitree(T->lchuild);creat_bitree(T->rchild);} return T;} 9、假设一棵二叉树的先序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK,请画出该二叉树,并写出后序序列。解:该二叉树如下: 后序序列为:ACDBGJKIHFE。 10、假设一棵二叉树的层次序列为ABCDEFGHIJ,中序序列为DBGEHJACIF,请画出该二叉树,并写出其先序序列和后序序列。解:该二叉树如下: 先序序列为:ABDEGHJCFI; 后序序列为:DGJHEBIFCA。 11、编写一个递归算法,将用二叉链表表示的二叉树的所有结点的左、右子树交换。解:存储结构如下: typedef char ElemType;typedef struct bitnode {ElemType data;struct bitnode *lchild, *rchild;}bitnode, *bitree;算法如下: void exchange(bitree &T){if(!T)return;bitree temp;temp=T->lchild;T->lchild=T->rchild;T->rchild=temp;exchange(T->lchild);exchange(T->rchild);} 12、试写出二叉链表表示的二叉树的先序遍历的非递归算法。解:存储结构如下: typedef char ElemType;typedef struct bitnode {ElemType data;struct bitnode *lchild, *rchild;}bitnode, *bitree;算法如下: void preorder(bitree T){ //先序遍历,当前结点入栈。#define MaxNum 20 bitree stack[MaxNum];int top=0;//指向栈顶的下一位置。bitnode *p;p=T;while(p || top>0){while(p){cout< data;stack[top++]=p;p=p->lchild;} if(top>0){ p=stack[--top];p=p->rchild;} } cout< 1.功能:计算并输出给定整数n的所有因子之和(不包括1与自身)。注意:n的值不大于1000。 例如:n的值为12时,除了1和12外的因子有2、3、4、6,和为15,应输出15 int s=0,i;for(i=2;i 素数并放在aa数组中,该函数返回所求出素数的个数。 int n=0;int i,j;for(i=lim;i<=100;i++){for(j=2;j 于1000的整数)。long y=0;int i;for(i=1;i<=w;i++)if(i%2==1)y+=i;return y;4.功能:能计算从1开始到n的自然数的和,n由键盘输入,并在main()函数中输出。请使用for循环实现 int sum,i;sum =0;for(i=1;i<=n;i++){sum=sum+i;} return(sum);5.功能:编写程序, 使用循环将矩阵(3行3列)各元素值乘2。例如:输入下面的矩阵: 100 200 300 400 500 600 700 800 900 程序输出: 200 400 600 800 1000 1200 1400 1600 1800 int i,j;for(i=0;i < 3;i++)for(j=0;j < 3;j++)array[i][j]=array[i][j]*2;6.功能:把20个随机数存入一个数组,然后输出该数组中的最大值 int i,max=0;for(i=1;i 公式的值:y=1+1/3+1/5+1/7+...+1/(2m+1)例如:若m=9,则应输出:2.133256 double y=1;int i;for(i=1;i<=m;i++){y+=1.0/(2*i+1);} return(y);8.功能:判断m是否为素数。int i,k=1;if(m<=1)k=0;for(i=2;i 所求出素数的个数。int n=0;int i,j;for(i=2;i<=lim;i++){for(j=2;j 为整数),然后输出主对角线元素的平方和。fun()函数的功能为求对角线元素的和。程序中如果用到 循环,必须使用for循环。int sum;int i;sum=0; for(i=0;i<3;i++)sum=sum+a[i][i]*a[i][i]; return sum;11.功能:求一个给定字符串中的字母的个数。int i,k=0;for(i=0;s[i]!=' ';i++)if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')k++;return k;12.功能:编写函数fun其功能是:根据整型形参m,计算如下 公式的值:y=1/2!+1/4!+...+1/m!(m是偶数)。double y=0.0;int i,j;double s=1;for(i=2;i<=m;i+=2){ for(j=i-1;j<=i;j++)s=s*j;y=y+1.0/s;} return y; 13、从键盘为一维整型数组输入10个整数,调用fun函数找出其中最小的数,并在main函数中输出。int min,i;min=x[0];for(i=1;i 在c数的个位和百位上, b数的十位和个位数依次放 在c数的十位和千位上。 例如: 当a=45,b=12,调用该函数后,c=2514。*c=a/10+a%10*100+b/10*10+b%10*1000;15.功能:编写函数判断一个整数m的各位数字之和能否被7整除,可以被7整除则返回1,否则返回0。调用该函数找出 100~200之间满足条件的所有数。int k,s=0;do {s=s+m%10;m=m/10;}while(m!=0); if(s%7==0)k=1;else k=0;return(k);16.功能:将主函数中输入的字符串反序存放。 例如:输入字符串“abcdefg”,则应输出“gfedcba”。int i,j;char c;for(i=0,j=n-1;i 实现,请给出该函数的定义。int i,min=0;for(i=1;i int i,j,t;for(i=0;i 例如:当s中的数为:7654321时,t中的数为:7531。long sl=10;t = s % 10;while(s > 0){ s = s/100;t = s%10*sl + t;sl = sl * 10; 20.求一个正整数的各位数字的立方和。int d,k,s=0;4 while(n>0){d=n%10;s+=d*d*d;n/=10;} return s;21.求给定正整数n以内的素数之积。(n<28)long i,k;long s=1;for(i=2;i<=n;i++){for(k=2;k 例如:主函数中给出的矩阵的两条对角线的和为45。int s=0;int i,j;for(i=0;i jc=1.0/j;i++;} 24.请编一个函数: void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。int i,j;for(j=0;j 例如:当s中的数为:7654321时,t中的数为:642。long sl=10;s /= 10;t = s % 10; while(s > 0){ s = s/100;t = s%10*sl + t;sl = sl * 10;28.功能:求一组数中大于平均值的数的个数。 例如:给定的一组数为1,3,6,9,4,23,35,67,12,88时,函数值为3 int i,k=0;float s=0,ave;for(i=0;i y=1/5+1/6+1/7+1/8+1/9+1/10...+1/(m+5)例如:若m=9,则应输出:1.168229 double y=0;int i;for(i=0;i<=m;i++){y+=1.0/(i+5);} return(y); 31.功能:编写函数fun生成一个主对角线元素为1,其他元素都 为0的3*3的二维数组。for(i=0;i<3;i++)for(j=0;j<3;j++)if(i==j)arr[i][j]=1;else arr[i][j]=0;32.功能:调用函数fun判断一个三位数是否“水仙花数”。在main函数中从键盘 输入一个三位数,并输出判断结果。请编写fun函数。 说明:所谓“水仙花数”是指一3位数,其各位数字立方和等于该数本身。例如:153是一个水仙花数,因为153=1+125+27。int bw,sw,gw;bw=n/100;sw=(n-bw*100)/10;gw=n%10; if(n==bw*bw*bw+sw*sw*sw+gw*gw*gw)return 1;else return 0; 33.根据整型形参m,计算如下公式的值:y=1/2+1/4+1/6+...+1/2m。程序中如果用到循环,必须使用for循环。例如:若m=9,则应输出:1.414484 double y=0;int i;for(i=1;i<=m;i++){y+=1.0/(2*i);} return(y);34.编写函数判断一个整数能否同时被3和5整除,若能则返回值为1,否则为0。调用该函数求出15~300之间能同时被3和5整除的数的个数。if(n%3==0&&n%5==0)return(1);return(0); 35.将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的个位和百位上。例如:当a=45,b=12。调用该函数后,c=4251。*c=a/10*1000+a%10*10+b/10+b%10*100; 36.判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。x的值由主函数从键盘读入,要求不大于100。说明:所谓“同构数”是指这样的数,这个数出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数。int k;k=x*x;if((x<10 && k%10==x)||(x>9 && k%100==x))return 1;else return 0;37.功能:在键盘上输入一个3行3列矩阵的各个元素的值(值为整数),然后输出主对角线元素的积。fun()函数的功能为求对角线元素的积。int sum; int i,j; sum=1; for(i=0;i<3;i++)sum=sum*a[i][i]; return sum; 38.产生20个随机整数放入二维数组a[5][4]中,利用函数row_sum求每行元素的和,并将和放到另一个数组中。int i,j;for(i=0;i<5;i++)8 { b[i]=0;for(j=0;j<4;j++)b[i]=b[i]+a[i][j];39.功能:根据整型形参m,计算如下公式的值:y=sin(m)*10。例如:若m=9,则应输出:4.121185 double y=0;y=sin(m)*10;return(y);} 40.功能:求出N×M整型数组的最大元素及其所在的行坐标及列坐标 (如果最大元素不唯一,选择位置在最前面的一个)。例如:输入的数组为:1 2 3 4 15 6 12 18 9 10 11 2 求出的最大数为18,行坐标为2,列坐标为1。 int max,i,j;max=array [0][0];Row=0;Col=0;for(i=0;i 程序语言学习的总结 通过两年的学习,我们基本上掌握了C语言,C++和C#三个编程课程。对于程序设计语言的学习,分为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。课程上的安排除了课堂讲授以外,学院设有专门课堂到实验室进行上机操作实验。 要利用c语言学到的知识编写c语言程序,即把c语言作为工具,通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。通过上机实验来验证自己编制的程序是否正确。在这种思想支配下,可能你会想办法去“掩盖”程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。 在原有的C语言的基础知识之上,初步接触C++时感到比较简单易懂。但随着之后的步步深入学习,C++的不同之处以及其优势逐。从第二章引入了C++简单程序的设计。包括一些C++语言的概述,基本数据类型和表达式,数据的输入与输出,算法的基本东芝结构,以及自定义类型数据等知识。此部分多与C语言相似。之后又学习了函数的相关内容,这里学到了新的知识要点----函数重载。该内容尤其在现在做课程设计的时候尤为重要。类是C++语言的精华之所在,在学习中,我感觉到类和C语言中的结构体有很大的相似之处,但在类中的构造函数、拷贝构造函数以及类的组合,经常弄混淆一些概念。在这之后又学习了类的继承与派生。这使得类与类之间形成了树状图的模型,各子类可以访问到父类的一些数据成员,同样也实现了数据的之间的“共享”。我个人在编写派生类的构造函数和拷贝构造函数时,感觉很不熟练,后面章节的多态性主要学习了运算符的重载,其本质就是函数的重载。 在学习C#中,类是具有相同特性和行为的对象的抽象。它使用关键字class声明的。在c#中仅允许单个继承,类只能从一个基类继承实现。但是一个类可以实现一个以上的接口。对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等局可以看对象,它不仅表示具体的事物,还能表示抽象的规则、计划或者事件。接口只是包含方法、委托或事件的签名。方法的实现是在实现接口的类中完成的。接口可以是命名空间或类的成员,并可以包含下列成员:每个C#可执行文件都有一个入口—Main方法:static void Main()修饰符public表示可以在任何地方访问该方法。所以可以在类的外部调用它。修饰符static表示方法不能在类的实例上执行,因此不必先实例化类在调用。在变量声明时:变量是类或者结构中的字段,如果没有显示初始化,创建这些变量时,其值就是默认的0。变量是方法的局部变量就必须在代码中显示初始化,之后才能在语句中使用它们的值。 课堂上要讲授许多关于语法规则,要使用这些工具解决问题,通过多次上机练习,对于语法知识有了更深刻的认识,在理解的基础上就会自然而然地掌握。一个程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。通过上机实验,熟练地掌握开发环境,为以后真正编写计算机程序解决实际问题打下基础。 #include(stdio.h) main() { int question[4]={-1,-1,-1,-1},i=0,j=0,k=0,A=0,B=0,answer[4]={0}; char again='y'; while(again=='y'){ srand((int)time(0)); while(i4){ k=(int)rand()%10; for(j=0;ji;j++)if(k==question[j]){ k=-1;break;} if(k==-1)continue;question[i]=k;i++;}/*while i*/ for(i=8;i0;i--)/*还有8次机会*/ { A=0;B=0;printf(“n你还剩下%d次机会。”,i); printf(“n请输入四个0-9之间的数字,中间用空格隔开n”);for(j=0;j4;j++)scanf(“%d”,&answer[j]); for(j=0;j4;j++) for(k=0;k4;k++) { if(answer[j]==question[k]){ if(j==k)A++;else B++;} }/*for*/ if(A==4){ again='0'; printf(“n你赢了,还继续猜吗?(y/n)”); while(again!='y'&&again!='n') scanf(“...%c”,&again);break;}/*if*/ printf(“n%dA%dB”,A,B);if(i==1){ again='0'; printf(“n你输了,正确答案是”); for(j=0;j4;j++) printf(“%dt”,question[j]); printf(“n还继续吗?(y/n)”); while(again!='y'&&again!='n')scanf(“%c”,&again); printf(“%c”,again);break;}/*if*/ }/*for changce*/ }/*while again*/ printf(“感谢您玩这个游戏。”);}第二篇:数据结构试题大题编程及参考答案
第三篇:c语言大题
第四篇:编程语言学习心得
第五篇:C语言编程