C++上机复习题及答案

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

1有3个整数a,b,c,由键盘输入,输出其中最大的数.
#include<stdio.h>
void main()
{
int a,b,c;
printf("输入三个数:");
scanf("%d%d%d",&a,&b,&c);
if(a>b&&a>c)
printf("最大值为:%d",a);
else if(b>a&&b>c)
printf("最大值为:%d",b);
else
printf("最大值为:%d",c);
}
2给出一百分制成绩,要求输出成绩等级‘A’、‘B’,‘C’,‘D’,‘E’。

90分以上为‘A’,80~89为‘B’,70~79为‘C’,60~69为‘D’,60分以下为‘E’。

#include<stdio.h>
void main()
{
float grade;
scanf("%f",&grade);
if (grade>=90&&<=100)
printf("A");
else if(grade>=80&&<90)
printf("B");
else if("grade>=70&&grade<80)
printf("C");
else if(grade>=60&&<70)
printf("D");
else
printf(("E");
}
3. 输入两个正整数m和n,求其最大公约数和最小公倍数。

(辗转相除法)
#include <stdio.h>
main()
{
int a,b,m,n,temp;
printf("请输入两个整数:\n");
scanf("%d%d",&m,&n);
if(m<n)
{
temp=m;
m=n;
n=temp;
}
a=m;b=n;
while(b!=0)
{
temp=a%b;
a=b;
b=temp;
}
printf("最大公约数是:%d\n",a);
printf("最小公倍数是:%d\n",n*m/a);
}
4、计算100至999之间有多少个数,其各位数字之和是5。

例如:122、131是满足要求的数的两个例子。

(穷举法)
#include<stdio.h>
void main()
{
int num=100,s=0;
while (num<1000)
{
{
if((num/100+num%100/10+num%100%10)== 5)
printf("%d\n",num);
s=s+1;
num++;
}
}
printf("输出满足条件的数字的个数:%d\n",s);
}
5.打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。

例如,153是一水仙花数,因为153=13+53+33。

#include<stdio.h>
#include<math.h>
void main()
{
int number;
for(number=100;number<1000;number++) {
if(pow(number/100,3)+pow(number%100/10,
3)+pow(number%100%10,3)==number) printf( “%d\n”,number);
}
}
6. 求Sn=a+aa+aaa+…+aa…a(n个a)之值,其中a是一个数字。

例如:2+22+222+2222+22222(此时n=5),n由键盘输入。

#include<stdio.h>
void main()
{
int s=0,i,a,n;
printf("请输入两个数:");
scanf("%d%d",&a,&n);
for(i=1;i<=n;i++)
{
s=s+a;
a=10*a+a;
}
printf("s=%d\n",s);
}
7求100~200间的全部素数。

#include <stdio.h>
#include <math.h>
void main()
{
int m,k,i,n=0;
int num=0;
for(m=101;m<=200;m=m+2)
{
k=sqrt(m);
for(i=2;i<=k;i++)
{
if(m%i==0)
break;
}
if(i>=k+1)
{
printf("%d ",m); n=n+1;
num++;
if(n%5==0)
printf("\n");
}
}
printf("\n全部素数有:%d\n",num);
}
8.定义一个2*3矩阵,输入/输出数值
#include<stdio.h>
void main()
{
int i,j,a[2][3];
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
9. 求一个3*3矩阵对角线元素之和。

#include<stdio.h>
main()
{
int a[3][3],i,j,sum=0;
printf("请输入数组元素:(3*3)\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("\n");
printf("数组为:\n");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("\n");
printf("对角线的和:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j||2-i==j)
sum+=a[i][j];
printf("%d\n",sum);
}
10. 用二分法求下面方程在(-10,10)之间的根。

2x3-4x2+3x-6=0
#include <stdio.h>
#include <math.h>
void main()
{
float x0,x1,x2,f0,f1,f2;
do
{
printf("please enter x1 & x2:\n");
scanf("%f,%f",&x1,&x2);
f1=((2*x1-4)*x1+3)*x1-6;
f2=((2*x2-4)*x2+3)*x2-6;
}
while ((f1*f2)>0);
do
{
x0=(x1+x2)/2;
f0=((2*x0-4)*x0+3)*x0-6;
if ((f0*f1)<0)
{
x2=x0;
f2=f0;
}
else
{
x1=x0;
f1=f0;
}
}
while(fabs(f0)>=1e-5);
printf("the root of equation is :%f\n",x0);
}
11. 求Fibonacci数列前40个数。

这个数列有如下特点:第1,2两个数为1,1。

从第3个数开始,该数是其前面两个数之和。

即:F1=1 (n=1)
F2=1 (n=2)
F n=F n-1+F n-2( n>=3)
#include <stdio.h>
void main()
{
int a[40],i;
a[0]=1;a[1]=1;
for(i=2;i<=40;i++)
{
a[i]=a[i-1]+a[i-2];
}
for(i=0;i<=40;i++)
printf("%d\n",a[i]);
}
12. 这是一个有趣的古典数学问题:有一对兔子,从出生后第3个月起每个月都生一对兔子。

小兔子长到第3个月后每个月又生一对兔子。

假设所有兔子都不死,问每个月的兔子总数为多少?
#include <stdio.h>
void main()
{
int a[40],i;
a[0]=1;a[1]=1;
for(i=2;i<=40;i++)
{
a[i]=a[i-1]+a[i-2];
}
for(i=0;i<=40;i++)
printf("%d\n",a[i]);
}
13 用起泡法对十个数排序(由小到大)
#include<stdio.h>
void main()
{
int a[10];
/*定义数组、变量,初始化*/
int i,j,t;
printf("input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++)
/*开始进行排序*/
for(i=0;i<9-j;i++)
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("the sorted mumbers:\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}
14.用选择法对输入的10个整数排序。

#include <stdio.h>
void main()
{
int a[10],i,j;
for(i=0;i<10;i++)
{
printf("请输入第%d个:",i+1);
scanf("%d",&a[i]);
}
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(a[i]<a[j])
{
int k;
k=a[i];
a[i]=a[j];
a[j]=k;
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
15.写程序,判断某一年是否闰年。

#include<stdio.h>
void main()
{
int year,leap;
printf("请输入一个年份:");
scanf("%d",&year);
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0)
leap=1;
else
leap=0;
}
else
{
leap=1;
}
}
else
{
leap=0;
}
if(leap)
printf("%d是一个闰年",year);
else
printf("%d 不是一个闰年",year);
}
16.将一个二维数组行和列元素互换,存到另一个二维数组中
#include<stdio.h>
void main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("array a:\n");
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("array b:\n");
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("\n");
}
}
17.有一个3*4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。

#include<stdio.h>
void main()
{
int
a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int i,j,c,d,max;
max=a[0][0];
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
if(max<=a[i][j])
{
max=a[i][j];
c=i;
d=j;
}
}
printf("最大数是%d\n行号是%d\n列号是%d\n",max,c,d);
}
18.输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

#include <stdio.h>
void main()
{
char string[81]; /*定义一个字符型数组*/
int i,num=0,word=0; /*定义几个整型常量,i用来控制循环次数,num表示单词个数,word相当于一个标志*/
char c; /*定义一个字符型变量*/
gets(string); /*获取用户输入的一句话,在这句话的末尾系统会自动添加一个结束标志'\0'*/
for (i=0;(c=string [i] )!='\0';i++) /*从string[0]开始判断,只要它不是结束标志,就执行下面的语句*/
if(c==' ') /*判断当前字符是不是空格,比如I am a boy,第一个I不是空格,所以就不执行word=0,而执行下一句
判断word是不是等于0(word=0表示把0赋给word,word==0表示判断word等不等于0),显然是的,因为
开始时赋给word的值是0,所以执行语句:“把1赋给word;num++”,此时num为1。

再判断第二个,是空格,
所以再把0赋给word。

再判断第三个a,不是空格,所以执行else if(word==0),因为刚才把0赋给word了,
所以执行“把1赋给word;num++”,此时num为2,再判断第四个m,不是空格,但此时word为1,所以
else if(word==0)语句不再执行,可以看出word的目的就是防止num重复相加,此后以此类推*/
word=0;
else if(word==0)
{
word=1;
num++;
}
printf("There are %d words in the line. \n" , num);
}
19.用递归方法求n!。

#include <stdio.h>
void main()
{
int num;
scanf("%lf",&num);
printf("%ld",jiecheng(num));
}
long jiecheng(int a)
{
long s;
int i;
for(i=1,s=1;i<=a;i++)
s=s*i;
return s;
}
20 有3个字符串,要求找出其中最大者
#include<stdio.h>
#include<string.h>
void main()
{
char string[20];
char str[3][20];
int i;
for(i=0;i<3;i++)
gets (str[i]);
if(strcmp(str[0],str[1])>0)
strcpy(string,str[0]);
else
strcpy(string,str[1]);
if(strcmp(str[2],string)>0)
strcpy(string,str[2]);
printf("最大的字符串是:\n%s\n",string);
}
21..打印出以下的杨辉三角形(要求打印出10行)。

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
#include<stdio.h>
void main()
{
int i,j,k=2,n=3,a[60]={0,1,1,1};
while(n<55)
{
a[n+1]=1;
for(j=2;j<=k;j++)
a[n+j]=a[n-k+j-1]+a[n-k+j];
a[n+k+1]=1;
k++;
n=n+k;
}
for(i=1,j=1,k=1;i<=55;i++)
{ printf(“%d,”,a[i]);
if(j++>=k)
{
printf(“\n”);
j=1;
k++;
}
}
}
22、打印以下图案:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
#include<stdio.h>
void main()
{
int i,j,k;
j=5;
for(i=1;i<6;i++)
{
for(k=1;k<=i-1;k++)
{
printf(" ");
}
printf("* * * * *");
printf("\n");
}
}
23anoi(汉诺)塔问题。

这是一个古典的数学问题,是一个只有用递归方法(而不可能用其他方法)解决的问题。

问题是这样的:古代有一个梵塔,塔内有3个座A、B、C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上(图8.13)。

有一个老和尚想把这64个盘子从A座移到C座,但每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。

在移动过成中可以利用B座,要求编程序打印出移动的步骤。

程序如下:
# include<stdio.h>
void main()
{
void hanoi(int n,char one,char two,char three); /*对hanoi函数的声
明*/
int m;
printf(“input the number of disker:”);
scanf(“%d”,&m);
printf(“The step to moveing %d
diskes:\n”,m);
hanoi(m,’A’,’B’,’C’);
}
void hanoi(int n,char one,char two,char three) /*定义hanoi函数*/
/*将n
个盘从one座借助two座,移到three座*/ {
void move(char x,char y);
/*对move函数的声明*/
if(n==1)
move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
void move(char x,char y)
/*定义move函数*/
{
printf(“%c――>%c\n”,x,y);
}
24有一个一维数组,内放10个学生成绩,写一个函数,求出平均分,最高分和
最低分
#include<stdio.h>
#define NUM 10
double average(int [ ]);
int high,low; //全局变量,用于"返回"最分
int main()
{
int a[NUM];
int i; double aver; for (i=0; i<NUM; i++)
{
printf("please input No.%d's score: ",i+1); scanf("%d",&a[i]);
}
aver = average(a); //调用average()求均分printf("average score = %4.1f\n",aver);
printf("high score = %d\n",high);
printf("low score = %d\n",low);
}
double average(int score[ ])
{
int i; double total;
total=high=low=score[0];
for(i=1;i<NUM;i++)
{
total+=score[i];
if(score[i]>high)high=score[i];
if(score[i]<low) low=score[i];
}
return total/10;
}
25 若干个学生的成绩(每个学生有4门课程),要求在用户输入学生序号以后,能输出该学生的全部成绩。

用指针函数来实现。

#include<stdio.h>
float *s(float pointer[][4],int n) {
float *pt;
pt = *(pointer + n);
return(pt);
}
void main() {
float score[][4] =
{{45,65,65,88},{77,88,99,87},{54,78,65,54}, {45,45,78,99}};//如果考到这里请改写成绩
float *p;
int i,m;
printf("输入学号: ");
scanf("%d",&m);
printf("No.%d are :\n",m);
p = s(score,m);
for(i = 0;i < 4;i++)
printf("%5.2f\t",*(p + i));
printf("\n");
}
26对候选人得票的统计程序。

设有3个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果
#include <string.h>
#include <stdio.h>
struct person
{ char name[20];
int count;
}leader[3]={"Li",0,"Zhang",0,"Fun",0}; main() { int i,j;
char leader_name[20];
for (i=1;i<=10;i++)
{ scanf("%s",leader_name);
for(j=0;j<3;j++)
if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;
}
printf("\n");
for(i=0;i<3;i++)
printf("%5s:%d\n",leader[i].name,leader[i].co unt);
}。

相关文档
最新文档