实验二VC++流程控制语句(一)
二程序设计题
1、编写程序,输入一个不多于5位的整数,求出它是几位数,并分别打印出每一位数字,再按逆序打印出各位数字。
2、编写程序,输入三角形三边a、b、c,判断a、b、c能否构成三角形。若能,则判断组成的是等腰、等边、直角还是一般三角形;若不能,则输出相应的信息。
1、参考程序
方法一:
#include
void main()
{
int m,a,b,c,d,e;
cout<<"输入一个不多于5位的数字:";
cin>>m;
a=m%10;//个位
b=m/10%10;//十位
c=m/100%10;//百位
d=m/1000%10;//千位
e=m/10000;//万位
if(e!=0) cout< else if(d!=0) cout< else if(c!=0)cout< else if(b!=0)cout< else cout< } //当输入数字是012时,其实输入的是八进制数,对应的十进制是10。 方法二: #include void main() { int a,b,c;//b表示所输入数的位数 cout<<"请输入一个不多于5位数的正整数:"; cin>>a; cout<<"从个位到万位分别为:"; if(a==0) cout< else{ for(b=0;a;b++) { c=a%10; cout<<'\t'< a=a/10; } cout<<" 共"< } } 2、参考程序 #include void main() { int a,b,c; cout<<"输入三边的长:"; cin>>a>>b>>c; if(a+b>c&& a-b { cout<<"能构成三角形"<<'\n'; if(a==b&&b==c&&c==a)//错误的a==b==c cout<<"能构成等边三角形"<<'\n'; else if(a==b||a==c||b==c) cout<<"能构成等腰三角形"<<'\n'; else if(a*a+b*b==c*c||a*a+c*c==b*b||c*c+b*b==a*a) cout<<"能构成直角三角形"<<'\n'; else cout<<"能构成一般角形"<<'\n'; } else cout<<"不能构成三角形"<<'\n'; } 实验二VC++流程控制语句(二) 1、从键盘输入整数n,求n的阶乘。 2、从键盘输入若干个实数,以输入0结束。设计一程序,分别统计正数的个数和负数的个数,并求出正数之和、负数之和及总平均值 3、设计一个程序,求出满足以下条件的最小n值和s值: s=1+2+3……….+n, 且s>=600 4、用二分法解方程f(x)=0的具体算法如下: (1) 输入x1,x2,直至f(x1) 与f(x2)异号,说明方程在x1、x2之间有解。 (2) 求x1和x2的中点x0. (3) 如果f(x0)与f(x1)同号,表明方程的解在x0与x2之间,用x0取代x1;否则方程的解在x0与x1之间,用x0取代x2. (4) 如果f(x0)的值足够小,则方程的近似解为x0;否则重复执行步骤(2)、(3)、(4),直至f(x0)足够小。 (5) 输出方程的解x0. 要求用二分法求解方程x2+4x-4=0. 参考程序: 1、 #include void main(void) { int i=1,n; long int s=1; cout<<"请输入一个整数:"; cin>>n; while(i<=n) { s*=i; i++; } cout<<"n!="< } 2、 #include void main(void){ float a,s1=0,s2=0; int m=0,n=0; cin>>a; while(a){ if(a>0){ m++; s1+=a; } else{ n++; s2+=a; } cin>>a; } cout<<"\n正数有"< cout<<"\n负数有"< cout<<"\n正数之和为:"< cout<<"\n负数之和为:"< cout<<"\n总的平均为:"<<(s1+s2)/(m+n)<<'\n'; } 3、 #include void main(){ int n=0,s=0; while(s<600){ ++n; s+=n; } cout<<"n="< } 4、 #include #include void main() { float x0,x1,x2; double y0,y1,y2; do{ cout<<"请输入方程的两个初始区间值:"; cin>>x1>>x2; y1=x1*x1+4*x1-4; y2=x2*x2+4*x2-4; }while(y1*y2>0); x0=(x1+x2)/2; y0=x0*x0+4*x0-4; do{ if(y0*y1>0) {x1=x0;y1=y0;} else {x2=x0;y2=y0;}//可以不要y2=y0; x0=(x1+x2)/2; y0=x0*x0+4*x0-4; }while(fabs(y0)>1e-5); cout<<"方程x^2+4x-4=0的解为"< } 实验二VC++流程控制语句(三) 二、改错题 答案: 增加#include j=sqrt(i);修改为:int j=sqrt(i); if(i%n=0) break; 修改为:if(i%n==0) break; if(k/5=0) cout<<'\n'; 修改为:if(k%5==0) cout<<'\n'; 三、编程设计题 1、设计一个程序,输出所有的水仙花数。所谓水仙化数是一个三为数,其各位数字的立方和等于该数本身。列如153是一个水仙化数。 水仙花数的算法分析: 1)用穷举法对100~999之间的每个数验证,验证公式为:x=h*h*h+d*d*d+n*n*n 2)分解一个3位数x的百位、十位和个位。 2、求出1000以内所有完全数,并输出。例如6就是一个完全数,6的因数共有4个:1、2、 3、6,除了6自身这个因数外,其他的3个因数都是它的真因数,把6的所有真因数都加起来,正好等于6这个自然数本身。具有这种性质的自然数叫做完全数。 参考程序: 1、 #include void main() { int x,h,d,n; cout<<"水仙花数为:"; for(int i=100;i<1000;i++) { h=i/100; d=i/10%10; n=i%10; x=h*h*h+d*d*d+n*n*n; if(i==x) cout< } } 2、 #include void main() { int s; for(int i=1;i<=1000;i++) { s=0; for(int j=1;j<=i/2;j++) if(i%j==0) s+=j; if(s==i) cout< } } 实验三函数与编译预处理(一) 三、改错题 答案: 增加#include int isprime(n) 修改为:int isprime(int n) if(n%i==0) break; 修改为:if(n%i==0) return 0; if(!isprime(k)) 修改为:if(isprime(k)) 四、编程设计题 1、 设计一程序,计算组合数:C (m,r )=m!/(r!*(m-r)!),其中m,r 为正整数,且m>r.分 别求出C(4,2).C(6,4).C(8,7)的组合数。求阶乘和组合数须用函数来实现。 2、阿克曼函数定义如下,其中m 、n 为正整数,设计一个程序,分别求出Acm (3,2)和Acm (2,2)的值。 1 0(,)(1,1)0(1,(,1))0,0n m Acm m n Acm m n Acm m Acm m n n m +=??=-=??-->>? 参考程序: 1、 #include long int jc(int n) { if(n==1)return 1; return n*jc(n-1); } long int zh(int m,int r){ int c; if(m<=r){ cout<<"m 必须大于r!"<<'\n'; exit(1); } c=jc(m)/(jc(r)*jc(m-r)); return c; } void main(void){ cout<<"C(4,2)="< cout<<"C(6,4)="< cout<<"C(8,7)="< } 2、 #include long int Acm(int m,int n) { int c; if(m==0)return n+1; if(n==0)return Acm(m-1,1); if(n>0&&m>0) { c=Acm(m,n-1); return Acm(m-1,c); } } void main() { int m,n; cout<<"Acm(5,3)="< cout<<"Acm(4,2)="< cout<<"Acm(5,5)="< cout<<"请输入m和n的值:"; cin>>m>>n; cout<<"Acm("< } 实验三函数与编译预处理(二) 三、改错题 答案: 在main()的上面增加语句int gys(int x,int y); return y; 修改为:return x; 三、编程设计题 1、设计一程序,将求两个实数的最大值函数放在头文件myfun.h中,在源程序文件mypro.cpp 中包含该头文件,并实现输入三个实数,求最大值。 2、设计一程序,定义重载函数area,分别求圆和长方形的面积。 3、用递归法将一个整数n转换成字符串。例如,输入整数567,应输出字符串“567”。n 的位数不确定,可以是任意的整数。 参考程序: 1、 //myfun.h float max(float x, float y) { float z; if(x>y) z= x; else z=y; return z; } //mypro.cpp #include #include"myfun.h" void main() { float a,b,c; cin>>a>>b>>c; cout<<"最大值为:"<< max(max(a,b),c) <<'\n'; } 2、 #include #define PI 3.14 double area(float r) { return PI*r*r; } double area(float a,float b) { return a*b; } void main() { float r=2.5, a=2,b=1.2; cout<<"圆的面积为:"< cout<<"长方形的面积为:"< } 3、#include void fun(int n) { int a,b; a=n%10; b=n/10; if(b) fun(b); cout< } void main() { int m; cin>>m; cout<<"转换后的字符串为:\""; fun(m); cout<<"\""< } 实验四数组的应用(一) 一、程序设计题 1、定义一个10个整数的数组,从键盘输入数据,设计一程序,找出其中最大的偶数和最 大的奇数(若设有奇数时,输出“没有奇数!”,若没有偶数,输出“没有偶数!”)。2、输入一组非0整数(以输入0作为输入结束标志)到一维数组中。设计一程序,求出这 一组数的平均值,并分别统计出这一组数中正数和负数的个数。 参考程序: 1、 #include void main() { int a[10],b[10],c[10]; int max1,max2,j=0,k=0,m,n,t; cout<<"请输入10个整数:"; for(int i=0;i<10;i++) cin>>a[i]; for(i=0;i<10;i++) { if(a[i]%2){ b[j++]=a[i]; n=j; } else { c[k++]=a[i]; m=k; } } if(j==0) cout<<"没有奇数。"; else { max1=b[0]; cout<<"输入的奇数有:"; for(i=0;i { cout< if(b[i]>max1)max1=b[i]; } cout<<"其中最大的奇数为:"< } if(k==0) cout<<"没有偶数。"; else { max2=c[0]; cout<<"输入的偶数有:"; for(i=0;i { cout< if(c[i]>max2) max2=c[i]; } cout<<"其中最大的偶数为:"< } } 2、 #include void main() { int a[100; int,j=0,k=0,t; float avg,s=0; cout<<"请输入一组整数(0结束):"; int i=0; do{ cin>>a[i]; s+=a[i]; i++; }while(a[i-1]); t=i-1; cout<<"共输入"< for(i=0;i<=t;i++) if(a[i]>0)j++; else if(a[i]<0) k++; avg=s/t; cout<<"这组数的平均值为"< cout<<"其中输入的正整数个数为:"< cout<<"其中输入的负整数个数为:"< } 实验四数组的应用(二) 四、编程题 1、设计一程序,用cin.getline()将一个字符串输入到字符数组s(char s[200])中,删除字符串的所有空格后输出。 参考程序 //方法一: #include #include void main(){ char s[200],t[200]; int i=0,j=0; cout<<"请输入字符串(回车结束):"; cin.getline(s,200); cout<<"s="< for(;i if(s[i]!=' '&&i t[j]='\0'; cout<<"t="< } //法二: #include #include void main(){ char s[200]; int i=0; cout<<"请输入字符串(回车结束):"; cin.getline(s,200); cout<<"s="< for(;s[i]!='\0';i++) if(s[i]!=' ')cout< cout< } 下列程序是建立一个包含学生有关数据的单向链表。但该程序有2个错误,错误出现在每个注释行附近,请调试改正。调试改正中,不得改变程序结构,也不得增删语句。 #define NULL 0 struct stud { long num; char name[10]; float score; struct stud *next; }; /* …………… comment …………… */ int n; struct stud create() 序中有两处错误代码,请改正.注意,不得改变程序结构。 #include <> main() { int a[8],*p=a; int i,j; int tempmin,tempcode; printf("\n input the numbers:\n"); for (i=0;i<8;i++) scanf("%d",p+i); tempmin=*p; for (i=0;i<7;i++) { for (j=i;j<8;j++) if (j==i||*(p+j) 第12次上机程序改错第1题 【程序改错】 -------------------------------------------------------- 功能:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积。 例如:输入圆的半径值:19.527 输出为:s = 598.950017。 ------------------------------------------------------*/ #include printf ( "Enter x: "); scanf ( "%f", &x ); printf (" s = %f\n ", fun ( x ) ); } 第2题【程序改错】 功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。 例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”。 ------------------------------------------------------*/ #include (一)功能:用选择法对数组中的n个元素按从小到大的顺序进行排序。#include "stdio.h" #define N 20 void fun(int a[], int n) { int i, j, t, k; for (j = 0 ;j < n-1 ;j++) { /**********ERROR**********/ k = j for (i = j+1;i < n; i++) /**********ERROR**********/ if(a[i] >a[k]) /**********ERROR**********/ k=j; t = a[k] ; a[k] = a[j] ; a[j] = t; } } main() { int a[N]={9,6,8,3,-1},i, m = 5; printf("排序前的数据:") ; for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); fun(a,m); printf("排序后的数据:") ; for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); } 【参考答案】 k = j; 【参考答案】 if(a[i] < a[k]) if(a[k] > a[i]) 【参考答案】 k = i; (二)功能:求广义菲玻那契级数的第n项。广义菲玻那契级数的前n 项为: 1,1,1,3,5,9,17,31,…… 项值通过函数值返回 main ( )函数。 例如:若 n = 15,则应输出:The value is: 2209。 #include "conio.h" #include "stdio.h" long fun ( int n ) { long a=1, b=1, c=1, d=1, k; /**********ERROR**********/ for (k=4; k 1.【程序改错】 题目:在一个一维整型数组中找出其中最大的数及其下标。 程序中共有4条错误语句,请改正错误。 #define N 10 /**********FOUND**********/ float fun(int *a,int *b,int n) int fun(int *a,int *b,int n) { int *c,max=*a; for(c=a+1;cmax) { max=*c; /**********FOUND**********/ b=c-a;} *b=c-a;} return max; } main() { int a[N],i,max,p=0; printf("please enter 10 integers:\n"); for(i=0;i 第1题【程序改错】 功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。 例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”。 ------------------------------------------------------*/ #include 题号:1 题目:在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列 /************FOUND***********/ a[i]=a[i-1]; /************FOUND***********/ exit;} 正确答案:a[i+1]=a[i]; break;} 题号:2 题目:以下程序的功能是求如下表达式: /************FOUND***********/ print("%d",n) ; /************FOUND***********/ fun(int n) 正确答案:scanf(“%d”,&n); float fun(int n) 题号:3 题目:函数fun的功能是:根据整型形参m的值,计算如下公式的值。 /**********FOUND**********/ y-=1/(i*i); /**********FOUND**********/ return m; 正确答案:y-=1.0/(i*i); return c; 题号:4 题目:以下程序把一由小到大的有序数列放在a[1]到a[n]中,a[0]用做工作单元,程序把读入的x值插入到a数组中,插入后,数组中的数仍有序。 /************FOUND***********/ { a[i]=a[i+1]; /************FOUND***********/ for(i=0;i<=n;i++) 正确答案:{ a[i+1]=a[i]; for(i=1;i<=n;i++) 题号:5 题目:函数scopy的功能是:将一个字符串前面n个子字符送到一个字符型数组中去 ,然后再加上一个'\0'。不用系统提供的函数strcpy。请改正程序中的2个错误,使它能得出正确的结果。 /**************FOUND**************/ scanf("%d",n); /**************FOUND**************/ scopy(str1,str2); 正确答案:scanf("%d",&n); scopy(str1,str2,n); 题号:6 题目:函数fun的功能是:求n!。主函数的功能是计算: x!+y!+z!的值。请改正程 序中的错误,使它能得出正确的结果。 /**********FOUND**********/ scanf("%d,%d,%d",x,y,z); /**********FOUND**********/ printf("Sum=%d\ n",sum); 正确答案:scanf("%d,%d,%d",&x,&y,&z); printf("Sum=%ld\ n",sum); 题号:7 题目:编写函数fun求整数n以内(不包括n)3的倍数之和,在main函数中由键盘输 入n值,并输出运算结果。 /**********FOUND**********/ scanf("%d",n); /**********FOUND**********/ result=fun( ); 正确答案:scanf("%d",&n); result=fun(n); 题号:8 题目:函数fun的功能是:求1到20的阶乘的和。 /**********FOUND**********/ s+t=s; /**********FOUND**********/ printf("jiecheng=%d\n",s); 程序调试1、 #include /****** 1 ******/ i=1;// i=2; while(n>1) if(n%i==0) { printf("%d\t",i); n/=i; } else /******** 2 *******/ n++;// i++; } 3、 #include C语言程序改错及填空题
C语言程序改错题
程序改错完整版---C语言
齐齐哈尔大学C语言题库 程序改错(部分)
C语言程序改错题
C语言改错题
C语言程序改错题及答案
C语言程序改错练习题