b&&a>c)printf("最大值为:%d",a);elseif(b>a&&b>c)printf("最大值为:%d",b);elseprintf("最大值为:%d",c);}2给出一百分制成绩,要求输出成绩等级‘A’、‘B’,‘" />

C上机复习题及答案

C上机复习题及答案
C上机复习题及答案

1有3个整数a,b,c,由键盘输入,输出其中最大的数.

#include

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

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

main()

{

int a,b,m,n,temp;

printf("请输入两个整数:\n");

scanf("%d%d",&m,&n);

if(m

{

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

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

#include

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

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

#include

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

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

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

#include

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

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

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

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

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]

{

int k;

k=a[i];

a[i]=a[j];

a[j]=k;

}

for(i=0;i<10;i++)

printf("%d ",a[i]);

}

15.写程序,判断某一年是否闰年。

#include

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

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

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

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

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

#include

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

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)

{

pri ntf(“\n”);

j=1;

k++;

}

}

}

22、打印以下图案:

23、* * * * *

24、* * * * *

25、* * * * *

26、* * * * *

27、* * * * *

#include

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

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

#define NUM 10

double average(int [ ]);

int high,low; //全局变量,用于"返回"最分

int main()

{

int a[NUM];

int i; double aver; for (i=0; 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

{

total+=score[i];

if(score[i]>high)high=score[i];

if(score[i]

}

return total/10;

}

25 若干个学生的成绩(每个学生有4门课程),要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数来实现。#include

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

#include

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);

}

相关主题
相关文档
最新文档