仅供参考,请指正
1、以下程序的功能是借助一个变量交换两个已知数据的值,程序中存在一些错误,修改这些错误并调试程序。
1 #include "iostream" 2 3 using namespace std; 4 5 int main( ) 6 7 { 8 9 int x,y; 10 11 t=x; 12 13 x=y; 14 15 t=y; 16 17 cin>>x>>y>>endl; 18 19 cout<<"x="<<x<<"y="<<y<<endl; 20 21 system("pause"); 22 23 return 0; 24 25 }
1 #include "iostream" 2 using namespace std; 3 4 int main( ) 5 { 6 int x,y,t;// 1.先定义后使用,t没有定义 7 8 cin>>x>>y;// 2.先赋值再交换,endl将换行符写入输出流 9 10 // 3.交换算法,是x放到临时变量,y赋值给x,再把临时变量里的x的值赋值给y 11 t=x; 12 x=y; 13 y=t; 14 15 cout<<"x="<<x<<",y="<<y<<endl; // 4.输出最好有个逗号分隔,更清晰一些 16 system("pause"); 17 return 0; 18 }
2、编写一个计算梯形面积的程序。要求梯形的上底、下底和高在定义变量时直接赋值
1 #include "iostream" 2 using namespace std; 3 4 int main( ) 5 { 6 double a = 12,b = 15, h = 10;//初始化,即上底、下底和高在定义变量时直接赋值 7 cout<<(a+b)*h/2<<endl; //计算面积,不再定义面积变量了,直接输出 8 system("pause"); 9 return 0; 10 }
3、编写计算一个学生三门课平均成绩的程序,要求学生成绩从键盘输入
1 #include "iostream" 2 using namespace std; 3 4 int main( ) 5 { 6 double a1,a2,a3; //定义3门课的成绩double变量 7 cin>>a1>>a2>>a3; 8 cout<<(a1+a2+a3)/3<<endl; //直接输出,不再定义平均成绩变量 9 system("pause"); 10 return 0; 11 }
4、输入直角坐标系中点P的坐标(x,y),若P点落在图中的阴影区域内,输出阴影部分面积,否则输出数据0
1 #include "iostream" 2 using namespace std; 3 #include <cmath> 4 5 int main( ) 6 { 7 const double PI = 3.1415926; 8 double x,y; 9 double s = PI*(4*4 - 2*2); //阴影部分的面积 10 cin>>x>>y; 11 //如果p的坐标x,y在阴影内,直接输出阴影面积 12 if(fabs(x)>=2 && fabs(x)<=4 && fabs(y)>=2 && fabs(y)<=4) 13 cout<<s<<endl; 14 else 15 cout<<"0"<<endl; 16 system("pause"); 17 return 0; 18 }
5、任意输入3个整数数据,输出它们中最小的一个数
1 #include "iostream" 2 using namespace std; 3 4 int main( ) 5 { 6 int a,b,c; 7 cin>>a>>b>>c; 8 int min = (a<b?a:b)<c?:c; 9 cout<<min<<endl; 10 system("pause"); 11 return 0; 12 }
6、将"fly"译成密码"iob"。编码规律:将字母a变成字母d,即变成其后的第3个字母,x变成a,y变成b, z变成c。
1 #include "iostream" 2 using namespace std; 3 4 int main( ) 5 { 6 char c1 = 'f',c2 = 'l',c3 = 'y'; // fly 7 8 c1 = (c1+3-'a')%26 + 'a' ; // i 9 c2 = (c2+3-'a')%26 + 'a' ; // o 10 c3 = (c3+3-'a')%26 + 'a' ; // b 11 12 cout<<c1<<c2<<c3<<endl; // iob 13 system("pause"); 14 return 0; 15 }
7、以下程序的功能是求两个非0整数相除的商和余数。程序有几处错误,试找出它们加以修改,并上机验证修改结果
1 #include "iostream" 2 3 using namespace std; 4 5 int main() 6 7 {int x,y,r1,r2; 8 9 cin>>x>>y; 10 11 if(x=0||y=0) 12 13 cout<<”input error”<<endl; 14 15 else 16 17 { if(x>y) 18 19 r1=x/y; 20 21 r2=x%y; 22 23 else 24 25 r1=y/x; 26 27 r2=y%x; 28 29 } 30 31 cout<<”商= ”<<r1<<” 余数= ”<<r2<<endl; 32 33 system("pause"); 34 35 return 0; 36 37 }
1 #include "iostream" 2 using namespace std; 3 4 int main() 5 { 6 int x,y,r1,r2; 7 cin>>x>>y; 8 9 if(x==0||y==0)// 比较运算不是赋值 10 cout<<"input error"<<endl; // 引号英文 11 else 12 { 13 if(x>y){ 14 r1=x/y; 15 r2=x%y; 16 } 17 else{ 18 r1=y/x; 19 r2=y%x; 20 } 21 cout<<"商= "<<r1<<" 余数= "<<r2<<endl; //引号英文,不可以放到选择的外面 22 } 23 24 system("pause"); 25 return 0; 26 }
8、某商场购物时,若所选商品价值x在下述范围内,则实付金额y按如下折扣支付:用switch语句实现已知x求y
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 double x, y; 7 int n; 8 cin>>x; 9 10 if(x<1000) n = 10; 11 else if(x>=1000 && x<2000) n = 9; 12 else if(x>=2000 && x<3000) n = 8; 13 else n = 7; 14 15 switch(n) 16 { 17 case 10: 18 y = x;break; 19 case 9: 20 y = 0.9*x;break; 21 case 8: 22 y = 0.8*x;break; 23 case 7: 24 y = 0.7*x;break; 25 }; 26 27 cout<<y<<endl; 28 return 0; 29 }
9、编一模拟袖珍计算器的完整程序,运行结果见图。要求:输入两个操作数和一个操作符,根据操作符决定所做的运算
1 #include <iostream> 2 using namespace std; 3 #include <cmath> 4 5 int main() 6 { 7 char ch; 8 double x,y,result; 9 cout<<"请输入操作数1"<<" 运算符op"<<" 操作数2"<<endl; 10 cin>>x>>ch>>y; 11 12 switch(ch) 13 { 14 case '+': 15 result = x+y; break; 16 case '-': 17 result = x-y; break; 18 case '*': 19 result = x*y; break; 20 case '/': 21 if(fabs(y)<1e-6){ 22 cout<<"input error"; 23 exit(0); 24 } 25 else 26 result = x/y; 27 break; 28 }; 29 30 cout<<x<<ch<<y<<"="<<result<<endl; 31 return 0; 32 }
10、以下程序求20以内的奇数和。程序有几处错误,试找出它们加以修改,并上机验证修改结果
1 #include "iostream" 2 using namespace std; 3 int main() 4 { 5 int n,sum; 6 for(n=1; ;n+=2); 7 sum=sum+n; 8 if(n==20) break; 9 cout<<"sum="<<sum<<endl; 10 system("pause"); 11 return 0; 12 }
11、编写程序将一个十进制整数按倒序形式输出。即若输入156,则输出651
1 #include "iostream" 2 using namespace std; 3 int main() 4 { 5 int n; 6 cin>>n; 7 8 /* 9 //这段可以去掉尾部的0,比如120,输出21 10 while(n%10==0) 11 { 12 n/=10; 13 } */ 14 15 while(n) 16 { 17 cout<<n%10; 18 n/=10; 19 } 20 21 system("pause"); 22 return 0; 23 }
12、编一程序,显示出所有的水仙花数。所谓水仙花数,是指一个3位数,其各位数字立方和等于该数字本身。
1 #include "iostream" 2 using namespace std; 3 int main() 4 { 5 for(int i = 100; i<=999; ++i ) 6 { 7 int a = i%10, b = i/10%10, c = i/100; 8 if(a*a*a + b*b*b + c*c*c == i) 9 cout<<i<<" "; 10 } 11 12 system("pause"); 13 return 0; 14 }
13、
1 #include "iostream" 2 using namespace std; 3 #include<time.h> 4 int main() 5 { 6 srand((unsigned)time(NULL)); //种子 7 8 int a = rand()%9 + 1; //随机产生1~9的数字 a 9 int n = 5 + rand()%5; //随机产生 5~9的数字 n 10 //cout<<a<<","<<n<<endl; 11 12 long temp=0,sum = 0; // 数据类型 long 13 for(int i=1; i<=n; ++i)//计算sum 14 { 15 temp = temp*10+a; 16 sum += temp; 17 } 18 19 cout<<sum<<endl;//输出sum 20 21 system("pause"); 22 return 0; 23 }
14、随机产生10个30~100(包括30,100)的正整数,求它们的最大值、最小值、平均值,并显示整个数组的值和结果。
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 int main() 5 { 6 srand(time(NULL)); 7 int max=30,min=100,sum=0; 8 int arr[10] = {0}; 9 for(int i=0; i<10; ++i){ 10 arr[i] = rand()%70 + 30; 11 sum += arr[i]; 12 if(arr[i]>max) 13 max =arr[i]; 14 if(arr[i]<min) 15 min = arr[i]; 16 } 17 18 printf("max=%d,min=%d,ave=%.2f ",max,min,sum/10.0); 19 20 for(int j=0; j<10; ++j) 21 printf("%d ",arr[j]); 22 23 return 0; 24 }
15、随机产生20个学生的计算机课程的成绩(0~100),按照从大到小的顺序排序,分别显示排序前和排序后的结果
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 5 void SelectionSort(int *a,int left, int right); 6 int main() 7 { 8 srand(time(NULL)); 9 10 int arr[20] = {0}; 11 for(int i=0; i<20; ++i){ 12 arr[i] = rand()%100; 13 } 14 15 printf("排序前: "); 16 for(int j=0; j<20; ++j) 17 printf("%d ",arr[j]); 18 19 SelectionSort(arr,0,19); 20 21 printf(" 排序后: "); 22 for(int j=0; j<20; ++j) 23 printf("%d ",arr[j]); 24 25 return 0; 26 } 27 /*选择排序--递归*/ 28 void SelectionSort(int *a,int left, int right) 29 { 30 if(left<right){ 31 int j,t; 32 for(j=right; left<j; j--){ 33 if(a[j]<a[left])/*与最左边的比较*/ 34 t=a[left],a[left]=a[j],a[j]=t; 35 } 36 SelectionSort(a,j+1,right);/*递归*/ 37 } 38 }
16、随机产生10个数,输入1~10之间的正整数m,使数组元素右移m位,移出的元素再从左移入。如,假设原来的数组元素依次为:1 2 3 4 5 6 7 8 9 10,假设m为2,则右移2位后的数组元素依次为:9 10 1 2 3 4 5 6 7 8
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 int main() 5 { 6 srand(time(NULL)); 7 8 //1.随机产生1~10十个数 9 int arr1[10] = {0}; 10 for(int i=0; i<10; ++i){ 11 arr1[i] = rand()%10+1; 12 } 13 14 //2.输出产生的数组 15 printf("移动前: "); 16 for(int j=0; j<10; ++j) 17 printf("%d ",arr1[j]); 18 printf(" "); 19 20 //3.输入移动的数据m 21 printf(" 请输入移动数据(1~10): "); 22 int arr2[10] = {0}; 23 int m; 24 scanf("%d",&m); 25 26 //4.复制移动覆盖的数 27 for(int i=0,j=10-m; j<10; ++i,++j) 28 arr2[i] = arr1[j]; 29 30 //5.原数组向右移动m位 31 for(int j=10-m; j>=0; --j) 32 arr1[j+m] = arr1[j]; 33 34 //6.保存的数拷贝回数组 35 for(int j=0; j<m; ++j) 36 arr1[j] = arr2[j]; 37 38 //7.打印移动后的数组 39 printf(" 移动后: "); 40 for(int j=0; j<10; ++j) 41 printf("%d ",arr1[j]); 42 43 return 0; 44 }
17、按由大到小的顺序输入10个int类型的数据将其存放在一个一维数组中,再输入一个整数到变量x,用二分法查找x是否是数组中的元素,若是,输出其在数组中的位置,否则输出不在数组中的提示。
1 #include <stdio.h> 2 3 int fun(int *arr,int left,int right,int x); 4 int main() 5 { 6 //输入数组数据 7 printf(" 请输入10个int型数据(从大到小有序输入): "); 8 int arr[10] = {0}; 9 for(int i=0; i<10; ++i){ 10 scanf("%d",&arr[i]); 11 } 12 13 //输入要查找的数据 14 printf(" 请输入要查找的数据: "); 15 int x; 16 scanf("%d",&x); 17 18 //查找x 19 int y = fun(arr,0,9,x); 20 if(y==-1){ 21 printf("x不在数组中 "); 22 } 23 else{ 24 printf("x是数据的第%d元素 ",y+1); 25 } 26 27 return 0; 28 } 29 30 int fun(int *arr,int left,int right,int x) 31 { 32 while(left<=right) 33 { 34 int mid = (left + right)/2; 35 //int mid = left + (right - left)/2; //防止溢出 36 if(arr[mid]>x) 37 left = mid+1; 38 else if(arr[mid]<x) 39 right = mid-1; 40 else 41 return mid; 42 } 43 return -1; 44 }
18、输入一个小于10的正整数n,显示具有如下形式的n行杨辉三角形。图中n=6
1 #include <iostream> 2 #include <iomanip> 3 using namespace std; 4 #define N 100 5 6 int main() 7 { 8 int a[N][N] = {0}; 9 int i, j, n = 6; 10 cin>>n; 11 12 for(i=1;i<=n;i++){ 13 a[i][1] = a[i][i] = 1; /*1.第一列和对角线的数都是1*/ 14 } 15 16 for(i=3;i<=n;i++) 17 { 18 for(j=2;j<=i-1;j++){ 19 a[i][j]=a[i-1][j-1]+a[i-1][j]; /*2.除两边的数, 等于左上/上两数之和*/ 20 } 21 } 22 23 for(i=1;i<=n;i++) 24 { 25 cout<<setw((n-i)*3)<<' '; 26 27 for(j=1;j<=i;j++) 28 { 29 cout<<setw(6)<<a[i][j]; 30 } 31 32 cout<<endl; 33 } 34 35 return 0; 36 }
19、编写程序,将某一指定字符从一个已知的字符串中删除。假设已知字符串为“aaaasdfga”,将其中出现的'a'字母删除,删除后的字符串为“sdfg”
1 #include <iostream> 2 using namespace std; 3 #define N 100 4 5 int main() 6 { 7 char arr[N] = "aaaasdfga"; 8 char *p = arr, *q = arr; 9 char ch = 'a'; 10 11 while(*p) 12 { 13 if(*p!=ch){ 14 *q++ = *p; 15 } 16 p++; 17 } 18 *q = '