C语言[1]

时间:2024.5.8

《实验指导书》实验二

【例3】#include <stdio.h>
void main()
{
 int input_value,minutes,seconds;
 scanf("%d",&input_value);
 printf("Input the number of seconds:%d\n",input_value);
 minutes=input_value/60;
 seconds=input_value%60;
 printf("%d seconds is equivalent to %d minutes and %d seconds.\n",input_value,minutes,seconds);
}

编程作业

【1】#define PIE 3.1415926
#include <stdio.h>
void main()
{
 float r,h,L_circle,S_circle,S_ball,V_ball,V_cylinder;
 scanf("%f%f",&r,&h);
 L_circle=2*PIE*r;
 S_circle=PIE*r*r;
 S_ball=4*PIE*r*r;
 V_ball=4*PIE*r*r*r/3;
 V_cylinder=S_circle*h;
 printf("L_circle=%f\nS_circle=%f\nS_ball=%f\nV_ball=%f\nV_cylinder=%f\n",L_circle,S_circle,S_ball,V_ball,V_cylinder);
}

选做题

【1】#include <stdio.h>
#include <math.h>
void main()
{
 float x,square,root;
 printf("Please input a number:\n");
 scanf("%f",&x);
 square=x*x;
 root=sqrt(x);
 printf("square=%.2f\nroot=%.2f\n",square,root);
}

第二次 上机作业

2.1 求两个数的和与差

程序填空,不要改变与输入输出有关的语句。

输入整数 a 和b,计算并输出a、b 的和与差。

例:

输入

2 -8

输出

The sum is -6

The difference is 10

【1】#include <stdio.h>
int main()
{
 int a,b,sum,diff;
 scanf("%d%d",&a,&b);
 sum=a+b;
 diff=a-b;
 printf("The sum is %d\n",sum);
 printf("The difference is %d\n",diff);
}

2.2 求平方根

程序填空,不要改变与输入输出有关的语句。

输入 1 个实数x,计算并输出其平方根(保留1 位小数)。

例:

输入

17

输出

The square root of 17.0 is 4.1

【2】#include <stdio.h>
#include <math.h>
int main()
{
 double x,root;
 scanf("%lf",&x);
 root=sqrt(x);
 printf("The square root of %0.1f is %0.1f\n",x,root);
}

2.3 华氏温度转换为摄氏温度

程序填空,不要改变与输入输出有关的语句。

输入华氏温度f,计算并输出相应的摄氏温度c(保留2 位小数)。c = 5/9(f-32).

例:括号内是说明

输入

17.2 (华氏温度)

输出

The temprature is -8.22

【3】#include <stdio.h>
int main()
{
 double f,c;
 scanf("%lf",&f);
 c=5.0/9.0*(f-32.0);
 printf("The temprature is %0.2f\n",c);
}

2.4 计算旅途时间

程序填空,不要改变与输入输出有关的语句。

输入 2 个整数time1 和time2,表示火车的出发时间和到达时间,计算并输出旅途时间。

有效的时间范围是 0000 到2359,不需要考虑出发时间晚于到达时间的情况。

例:括号内是说明

输入

712 1411(出发时间是7:12,到达时间是14:11)

输出

The train journey time is 6 hrs 59 mins.

【4】#include <stdio.h>
int main()
{
 int time1,time2,hours,mins;
 scanf("%d%d",&time1,&time2);
 time1=time1/100*60+time1%100;
 time2= time2/100*60+time2%100;
 hours=(time2-time1)/60;
 mins=(time2-time1)%60;
 printf("The train journey time is %d hrs %d mins.\n",hours,mins);
}

2.5 数字加密

程序填空,不要改变与输入输出有关的语句。

输入 1 个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10 取余,

做为该位上的新数字,最后将第1 位和第3 位上的数字互换,第2 位和第4 位上的数字互

换,组成加密后的新数。

例:括号内是说明

输入

1257

输出

The encrypted number is 4621(每一位上的数字加9 除以10 取余后,得0146,交换后得到

4601)

【5】#include <stdio.h>
int main()
{
 int number,digit1,digit2,digit3,digit4,newnum;
 scanf("%d",&number);
 digit1=number/1000;
 digit2=number%1000/100;
 digit3=number%100/10;
 digit4=number%10;
 digit1=(digit1+9)%10;
 digit2=(digit2+9)%10;
 digit3=(digit3+9)%10;
 digit4=(digit4+9)%10;
 newnum=(digit3*1000+digit4*100+digit1*10+digit2);
 printf("The encrypted number is %d\n",newnum);
}

2.6 大写字母转换成小写字母

程序填空,不要改变与输入输出有关的语句。

输入一个大写英文字母,输出相应的小写字母。

例:

输入

G

输出

g

【6】#include <stdio.h>
int main()
{
 char ch;
 scanf("%c",&ch);
 ch=ch-'A'+'a';
 printf("%c\n",ch);
}

《实验指导书》实验三

【例1】#include <stdio.h>
void main()
{
 int x,y,t;
 printf("input x,y:\n");
 scanf("%d%d",&x,&y);
 if (x<y)
 {
  t=y;
  y=x;
  x=t;
 }
 printf("result:max=%d min=%d\n",x,y);
}

编程作业

【1】#include <stdio.h>
void main()
{
 int a=0,b=0,x;
 x=0&&(a=b=777);
 printf("%d %d %d\n",a,b,x);
 x=777||(a=++b);
 printf("%d %d %d\n",a,b,x);
}

【2】#include <stdio.h>
void main()
{
 int min,max,nFeets;
 printf("Please input the number of feets:\n");
 scanf("%d",&nFeets);
 max=nFeets/2; /*若脚全是鸡的,则动物数最多*/
 if(nFeets%4)
  min=(nFeets+2)/4; /*因为脚的总数不能被4整除,则可将其中一只鸡看成兔子*/
 else
  min=nFeets/4; /*若脚全是兔子的,则动物数最少*/
 printf("The minimum number of animals is %d.\nThe maxmun number of animals is %d.\n",min,max);
}

【3】#include <stdio.h>
void main()
{
 float x,y;
 printf("Please input a number:\n");
 scanf("%f",&x);
 if(x<1)
  y=x;
 else
  if(x>=1&&x<10)
   y=2*x-1;
  else
   y=3*x-11;

选做题

【1】#include<stdio.h>
void main()
{
 int num,x,newnum;
 printf("Please input a number\n");
 scanf("%d",&num);
 newnum=num*num;
 if(num>=10000)
  x=100000;
 else if(num>=1000)
  x=10000;
 else if(num>=100)
  x=1000;
 else if(num>=10)
  x=100;
 else
  x=10;
 /*综合考虑到该数不是两位数时的情况,比如6也为自守数*/
 if(newnum%x==num)
  printf("%d yes %d*%d=%d\n",num,num,num,newnum);
 else
  printf("您输入的数不是自守数\n");
}

【100以内的同构数】#include<stdio.h>
void main()
{
 int num,x,newnum;
 newnum=num*num;
 num=1;
 while (num<=100)
 {
  if(num>=10)
   x=10*10;
  else
   x=10;
  newnum=num*num;
  if(newnum%x==num)
   printf("%d yes %d*%d=%d\n",num,num,num,newnum);
  num++;
 } 
}

【2】#include <stdio.h>
void main()
{
 int age;
 printf("Please input the age:\n");
 scanf("%d",&age);
 switch(age)
 {
 case 2:
 case 3:printf("%d,enter Lower class\n",age);break;
 case 4:printf("%d,enter Middle class\n",age);break;
 case 5:
 case 6:printf("%d,enter Higher class\n",age);break;
 default:printf("Sorry,you can't go to our kindergarten.\n"); 
 }
}

第3次上机作业 选择结构

3.1 显示两级成绩

程序填空,不要改变与输入输出有关的语句。

输入一个学生的数学成绩,如果它低于60,输出“Fail”,否则,输出“Pass”。

输入

60

输出

Pass

【1】#include <stdio.h>
void main()
{
 int mark;
 scanf("%d",&mark);
 if(mark<60)
  printf("Fail\n");
 else
  printf("Pass\n");
}
3.2 找最小值

程序填空,不要改变与输入输出有关的语句。

输入四个整数,输出其中的最小值。

输入

12 6 1 90

输出

min is 1

【2】#include <stdio.h>
void main()
{
 int a,b,c,d,min;
 scanf("%d%d%d%d",&a,&b,&c,&d);
 min=a;
 if(b<min) min=b;
 else if(c<min) min=c;
 else if(d<min) min=d;
 printf("min is %d\n",min);
}

3.3 求三角形的面积和周长

程序填空,不要改变与输入输出有关的语句。

输入三角形的三条边a, b, c,如果能构成一个三角形,输出面积area 和周长perimeter(保

留2 位小数);否则,输出“These sides do not correspond to a valid triangle”。

在一个三角形中,任意两边之和大于第三边。

三角形的面积计算公式:

aere*area = s(s-a)(s-b)(s-c)

其中:s = (a+b+c)/2

输入

5 5 3

输出

area=7.15; perimeter=13.00

【3】#include <stdio.h>
#include <math.h>
void main()
{
 float a,b,c,area,perimeter,s;
 scanf("%f%f%f",&a,&b,&c);
 s=(a+b+c)/2.0;
 if((a+b>c)&&(b+c>a)&&(c+a>b))
 {
  area=sqrt(s*(s-a)*(s-b)*(s-c));
  perimeter=a+b+c;
  printf("area=%.2f;perimeter=%.2f\n",area,perimeter);
 }
 else
  printf("These sides do not correspond to a valid triangle.\n");
}

3.4 判断数的符号

程序填空,不要改变与输入输出有关的语句。

输入整数x,若x 大于0,y=1;若x 等于0,y=0;否则,y=-1,最后输出y。

输入

2

输出

1

【4】#include <stdio.h>
void main()
{
 int x,y;
 scanf("%d",&x);
 if(x>0) y=1;
 else if(x=0【应为x==0】) y=0;
 else y=-1;
 printf("%d\n",y);
}

3.5 计算个人所得税

输入一个职工的月薪salary,输出应交的个人所得税tax(保留2 位小数)。

tax = rate * (salary-850)

当 salary <= 850 时,rate = 0;

当 850 < salary <= 1350 时,rate = 5;

当 1350 < salary <= 2850 时,rate = 10;

当 2850 < salary <= 5850 时,rate = 15;

当 5850 < salary 时,rate = 20;

输入

1010.87

输出

tax=8.04

【5】#include <stdio.h>
void main()
{
 float rate,salary,tax;
 scanf("%f",&salary);
 if(salary<=850) rate=0;
 else if(salary<=1350) rate=5;
 else if(salary<=2850) rate=10;
 else if(salary<=5850) rate=15;
 else rate=20;
 rate=rate/100;
 tax=rate*(salary-850);
 printf("tax=%0.2f\n",tax);
}

3.6 显示水果的价格

程序填空,不要改变与输入输出有关的语句。

以下4 种水果的单价分别是3.00 元/公斤,2.50 元/公斤,4.10 元/公斤,10.20 元/公斤。

[1] apples

[2] pears

[3] oranges

[4] grapes

输入水果的编号,输出该水果的单价(保留2 位小数)。如果输入不正确的编号,显示单价为

0。

输入

3

输出

price=4.10

【6】#include <stdio.h>
void main()
{
 int choice;
 float price;
 printf("[1] apples\n");
 printf("[2] pears\n");
 printf("[3] oranges\n");
 printf("[4] grapes\n");
 scanf("%d",&choice);
 switch(choice)
 {
 case 1:price=3.00;break;
 case 2:price=2.50;break;
 case 3:price=4.10;break;
 case 4:price=10.20;break;
 default:price=0;break;
 }
 printf("price=%0.2f\n",price);
}

3.7 字母转换

程序填空,不要改变与输入输出有关的语句。

输入一个字符,如果它是大写字母,输出相应的小写字母;如果它是小写字母,输出相应的

大写字母;否则,原样输出。

输入

3

输出

3

【7】#include <stdio.h>
void main()
{
 char ch; 
 ch=getchar();
 if(ch>=65&&ch<=90)
  ch=ch+32;
 else if(ch>=90&&ch<=122)
  ch=ch-32;
 else;
 putchar(ch);
 putchar('\n');
}

3.8 判定三角形

编写程序。实现根据用户输入的三角形的三条边长判定是何种三角形。

不要改变程序中的其他部分,完成程序。

请完成下面的程序。

【8】#include <stdio.h>
void main()
{
 float a,b,c; 
 printf("输入三角形的三条边a,b,c:"); 
 scanf("%f%f%f",&a,&b,&c); 
 if ((a+b>c)&&(b+c>a)&&(c+a>b))
 {
  if(a==b&&a==c)
   printf("等边三角形\n");
  else if(a==b||b==c||c==a)
   printf("等腰三角形\n");
  else if((a*a+b*b==c*c)||(b*b+c*c==a*a)||(c*c+a*a==b*b))
   printf("直角三角形\n");
  else
   printf("一般三角形\n");
 }
 else
  printf("不能组成三角形\n");
}
【8】(下面为简单改进后的程序,综合考虑到“等腰直角三角形”情况。但由于若出现“等腰直角三角形”,斜边长必为直角边的根号二倍,边长中必有无理数的存在,而输入的数是浮点数,并不可能为一个无理数,所以该程序无太大可行性,只是全面考虑下的一种设计。)
#include <stdio.h>
void main()
{
 float a,b,c; 
 printf("输入三角形的三条边a,b,c:"); 
 scanf("%f%f%f",&a,&b,&c); 
 if ((a+b>c)&&(b+c>a)&&(c+a>b))
 {
  if(a==b&&a==c)
   printf("等边三角形\n");
  else
  {
   if(a==b||b==c||c==a)
   {
    if((a*a+b*b==c*c)||(b*b+c*c==a*a)||(c*c+a*a==b*b))
     printf("等腰直角三角形\n");
    else printf("等腰三角形\n");
   }
   else if((a*a+b*b==c*c)||(b*b+c*c==a*a)||(c*c+a*a==b*b))
    printf("直角三角形\n");
   else printf("一般三角形\n");
  }
 }
 else
  printf("不能组成三角形\n");
}

3.9 显示当前月份的最后一天

编写一个程序输入年月,输出该月的最后一天。

不要改变程序中的其他部分,完成程序。

【9】#include <stdio.h>
void main()
{
 int year,month,lastday;
 printf("Please enter year and month:");
 scanf("%d%d",&year,&month);
 switch(month)
 {
 case 2:
  if(year%4==0)【这一部分的判断可以更简化一些。可以参见教材P108的内容,用一个逻辑表达式包含所有的条件。】
  {
   if(year%100==0)
   {
    if(year%400==0) lastday=29;
    else lastday=28;
   }
   else lastday=29;
  }
  else
   lastday=28;break;
 case 1:
 case 3:
 case 5:
 case 7:
 case 8:
 case 10:
 case 12:
  lastday=31;break;
 case 4:
 case 6:
 case 9:
 case 11:
  lastday=30;break;
 }
 printf("%d %d %d\n",year,month,lastday);
}

3.10身高预测

每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后身高的因素有遗传、饮食习惯与坚持体育锻炼等。小孩成人后的身高与其父母的身高和自身的性别密切相关。

设faHeight为其父身高,moHeight为其母身高,身高预测公式为:

男性成人时身高 = (faHeight + moHeight) * 0.54(cm)

女性成人时身高 = (faHeight * 0.923 + moHeight) / 2(cm)

此外,如果喜爱体育锻炼,那么可增加身高2%,如果有良好的卫生饮食习惯,那么可增加身高1.5%。

编程从键盘输入你的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示喜爱,输入字符N表示不喜爱),利用给定公式和身高预测方法对你的身高进行预测。

不要改变程序中的其他部分,将下面的程序补充完整。

【10】#include <stdio.h>
void main()
{
 char sex;
 char sports;
 char diet;
 float myHeight;
 float faHeight;
 float moHeight;
 printf("Are you a boy(M) or a girl(F)?");
 scanf("%1s",&sex);
 printf("Please input your father's height(cm):");
 scanf("%f",&faHeight);
 printf("Please input your mother's height(cm):");
 scanf("%f",&moHeight);
 printf("Do you like sports(Y/N)?");
 scanf("%1s",&sports);
 printf("Do you have a good habit of diet(Y/N)?");
    scanf("%1s",&diet);
       if (sex=='M')
       {
     myHeight=(faHeight+moHeight)*0.54;
     if(sports=='Y') myHeight=myHeight*(1+0.02);
     if(diet=='Y') myHeight=myHeight*(1+0.015);
       }
    else
    {
     myHeight=(faHeight*0.923+moHeight)/2;
     if(sports=='Y') myHeight=myHeight*(1+0.02);
     if(diet=='Y') myHeight=myHeight*(1+0.015);
    }
       printf("Your future height will be %f(cm)\n", myHeight);
}


实验指导书

《实验四》

【例2】#include<stdio.h>
void main()
{
 int s,n,t;
 s=1;
 t=1;
 printf("Please input n:");
 scanf("%d",&n);
 while(t<=n)
 {
  s*=t;
  t+=1;
 }
 printf("%d\n",s);
}
【例3】#include<stdio.h>
void main()
{
 int i,n,s=0,t=1;
 printf("Please input n:");
 scanf("%d",&n);
 for(i=1;i<=n;i++)
 {
  t*=i;
  s+=t;
 }
 printf("%d\n",s);
}
【例4】#include<stdio.h>
void main()
{
 int s=0,t,i,j,n;
 printf("Please input n:");
 scanf("%d",&n);
 for(i=1;i<=n;i++)
 {
  t=1;
  for(j=1;j<=2*i-1;j++)
   t*=j;
  s+=t;
 }
 printf("%d\n",s);
}
【例5】#include<stdio.h>
void main()
{
 int a,n,s=0,i,j;
 printf("Please input a and n:");
 scanf("%d%d",&a,&n);
 j=a;
 for(i=1;i<=n;i++)
 {  
  s+=j;
  j=10*j+a;
 }
 printf("%d\n",s);
}
编程作业
【1】#include<stdio.h>
void main()
{
 int s,r,n,m,t;
 printf("请输入两个整数:");
 scanf("%d%d",&n,&m);
 if(m==0||n==0)
  printf("error!\n");
 else
 {
  if(m<0)
   m=(-1)*m;
  if(n<0)
   n=(-1)*n;
  if(m<n)
  if(n<m)
  {
   t=n;
   n=m;
   m=t;
  }
  s=m*n;
  while(r!=0)
  {
   r=n%m;
   n=m;
   m=r;
  }
  printf("最大公约数是:%d\n",n);
  printf("最小公倍数是:%d\n",s/n);
 }
}

【2】#include<stdio.h>
void main()
{
 int k,m,n,i,s=0;
 printf("Please input k,m,n:");
 scanf("%d%d%d",&k,&m,&n);
 for(i=m;i<=n;i++)
  i%k==0?s+=i:s;
 printf("sum=%d\n",s);
}

【3】#include<stdio.h>
void main()
{
 int i,n,s,sum=0;
 float aver;
 printf("请输入学生总数:");
 scanf("%d",&n);
 for(i=1;i<=n;i++)
 {
  printf("请输入第%d个学生的年龄:",i);
  scanf("%d",&s);
  sum+=s;
 }
 aver=sum/n;
 printf("average age=%.2f\n",aver);
}

第四次上机作业 循环

4.1 求1+1/2+1/3+……+1/n

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

读入1 个正整数 n(n<=50),计算并输出1+1/2+1/3+……+1/n (保留3 位小数)。

例:括号内是说明

输入

2 (repeat=2)

2

10

输出

1.500

2.929

【1】#include<stdio.h>

void main()

{

 int ri,repeat;

 int i,n;

 float sum;

 scanf("%d",&repeat);

 for(ri=1;ri<=repeat;ri++)

 {

  scanf("%d",&n);

  sum=0;

  for(i=1;i<=n;i++)

   sum=sum+1.0/i;

  printf("%.3f\n",sum);

 }

}

4.2 求n!

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

读入1 个正整数 n (n<=50),计算并输出 n! 。

例:括号内是说明

输入

3 (repeat=3)

1

10

5

输出

1

3628800

120

【2】#include<stdio.h>

void main()

{

 int ri,repeat;

 int i,n;

 double fact;

 scanf("%d",&repeat);

 for(ri=1;ri<=repeat;ri++)

 {

  scanf("%d",&n);

  fact=1;

  for(i=1;i<=n;i++)

   fact*=i;

  printf("%.0f\n",fact);

 }

}

4.3 求x 的n 次幂

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

读入1 个正实数x 和1 个正整数 n(n<=50),计算并输出x 的n 次幂(保留2 位小数)。

例:括号内是说明

输入

2 (repeat=2)

1.5 2

2.0 10

输出

2.25

1024.00

【3】#include<stdio.h>

void main()

{

 int ri,repeat;

 int i,n;

 double x,mypow;

 scanf("%d", &repeat);

 for(ri=1;ri<=repeat;ri++)

 {

  scanf("%lf%d",&x,&n);

  mypow=1;

  for(i=1;i<=n;i++)

   mypow=mypow*x;

  printf("%.2f\n",mypow);

 }

}

4.4 求1-1/2+1/3-1/4+……

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

读入1 个正整数 n(n<=100),计算并输出1-1/2+1/3-1/4+??的前n 项和(保留3 位小

数)。

例:括号内是说明

输入

2 (repeat=2)

10

3

输出

0.646

0.833

【4】#include <stdio.h>

void main()

{

 int ri,repeat;

 int i,n,flag;

 float sum;

 scanf("%d",&repeat);

 for(ri=1;ri<=repeat;ri++)

 {

  scanf("%d",&n);

  sum=0;

  flag=1;

  for(i=1;i<=n;i++)

  {

   sum+=flag*1.0/i;

   flag=-flag;

  }

  printf("%.3f\n",sum);

 }

}

4.5 求1+1/3+1/5+1/7+……

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

读入1 个正整数 n(n<=100),计算并输出1+1/3+1/5+1/7+……的前n 项和(保留3 位小

数)。

例:括号内是说明

输入

2 (repeat=2)

10

3

输出

2.133

1.533

【5】#include<stdio.h>

void main()

{

 int ri,repeat;

 int i,n,temp;

 float sum;

 scanf("%d",&repeat);

 for(ri=1;ri<=repeat;ri++)

 {

  scanf("%d",&n);

  sum=0;

  for(i=1;i<=2*n;i+=2)

   sum+=1.0/i;

  printf("%.3f\n",sum);

 }

}

4.6 求1-1/3+1/5-1/7+??

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

读入1 个正实数eps,计算并输出1-1/3+1/5-1/7+??,直到最后一项的绝对值小于

eps(保留6 位小数)。

例:括号内是说明

输入

2 (repeat=2)

1E-4

0.1

输出

0.785348

0.834921

【6】#include<stdio.h>

#include<math.h>

int main()

{

 int ri,repeat;

 int temp,flag;

 double eps,item,sum;

 scanf("%d",&repeat);

 for(ri=1;ri<=repeat;ri++)

 {

  scanf("%le",&eps);

  flag=1;

  temp=1.0;

  sum=0;

  item=1;

        while(fabs(item)>=eps)

  {

   sum=sum+item;

   temp=temp+2;

   flag=-flag;

   item=flag*1.0/temp;

        }

  printf("%.6f\n",sum);

 }

}

4.7 摄氏温度和华氏温度转换表

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入2 个整数begin 和end,分别代表摄氏温度的起止值,输出该范围内摄氏温度C 和华

氏温度F 的转换表。

F = 32 + C * 9 / 5

输出语句:printf("%d%10d\n", c, f);

例:括号内是说明

输入

1 (repeat=1)

5 7

输出

Celsius Fahrenheit

5 41

6 42

7 44

【7】#include<stdio.h>

void main()

{

       int ri,repeat;

       int begin,c,end,f;

       scanf("%d",&repeat);

       for(ri=1;ri<=repeat;ri++)

       {

              scanf("%d%d",&begin,&end);

              printf("Celsius Fahrenheit\n");

              for(ri=begin;ri<=end;ri++)

              {

                     c=ri;

                     f=32+c*9/5;

                     printf("%d%10d\n",c,f);

              }

       }

}

4.8 求奇数和

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

读入一批正整数(以零或负数为结束标志),求其中的奇数和。

例:括号内是说明

输入

2 (repeat=2)

1 3 90 7 0

8 7 4 3 70 5 6 101 -1

输出

11

116

【8】#include<stdio.h>

void main()

{

       int ri,repeat;

       int x,sum;

       scanf("%d",&repeat);

       for(ri=1;ri<=repeat;ri++)

       {

              scanf("%d",&x);

              sum=0;

              while(x>0)

              {

                     if(x%2!=0)

                            sum=sum+x;

                     scanf("%d",&x);

              }

              printf("%d\n",sum);

       }

}

4.9 求最大值

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入一个正整数n, 再输入n 个整数,输出最大值。

例:括号内是说明

输入

3 (repeat=3)

4 2 123 -100 0

4 9 1 -1 8

3 1 3 5

输出

123

9

5

【9】#include <stdio.h>

void main( )

{

 int ri, repeat;

 int i , max, n, x;

 scanf("%d", &repeat);

 for(ri=1; ri<=repeat; ri++)

{

  scanf("%d", &n);

  for(i=1;i<=n;i++)

  {

   scanf("%d",&x);

   if(i==1) max=x;

   else if(x>max) max=x;

  }

  printf("%d\n", max);

 }

}

4.10 求整数的位数以及各位数之和

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入一个整数,输出它的位数以及各位数之和。

例:括号内是说明

输入

4 (repeat=4)

123456 -100 -1 99

输出

number=6, sum=21 (123456 的位数是6, 各位数之和是21)

number=3, sum=1 (-100 的位数是3, 各位数之和是1)

number=1, sum=1 (-1 的位数是1, 各位数之和是1)

number=2, sum=18 (99 的位数是2, 各位数之和是18)

【10】#include <stdio.h>

void main()

{

       int ri,repeat;

       int number,sum;

       long in;

       scanf("%d",&repeat);

       for(ri=1;ri<=repeat;ri++)

       {

              scanf("%ld",&in);

              number=0;

sum=0;

              if(in<0) in=-in;

              do{

                     number++;

                     sum+=(in%10);

              }while((in/=10)!=0);

              printf("number=%d,sum=%d\n",number,sum);

       }

}

4.11 求2/1+3/2+5/3+8/5+...

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入一个正整数n,输出 2/1+3/2+5/3+8/5 +...的前n 项之和,保留2 位小数。(该序列从第

2 项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子)

例:括号内是说明

输入

3 (repeat=3)

1 5 20

输出

2.00 (第1 项是2.00)

8.39 (前5 项的和是8.39)

32.66 (前20 项的和是32.66)

【11】#include <stdio.h>

void main()

{

       int ri,repeat;

       int i,n;

       float a,b,s,t;

       scanf("%d",&repeat);

       for(ri=1;ri<=repeat;ri++)

       {

              scanf("%d", &n);

              a=2;

              b=1;

              s=0;

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

              {

                     s+=a/b;

                     t=b;

                     b=a;

                     a+=t;   

              }

              printf("%.2f\n",s);

       }

}

4.12 求a+aa+aaa+aa?a

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入2 个正整数a 和n, 求a+aa+aaa+aa?a(n 个a)之和。

例:括号内是说明

输入

2 (repeat=2)

2 3 (a=2, n=3)

8 5 (a=8, n=5)

输出

246 (2+22+222)

98760 (8+88+888+8888+88888)

【12】#include<stdio.h>

void main()

{

       int ri,repeat;

       int i,n;

       long int a,sn,tn;

       scanf("%d",&repeat);

       for(ri=1;ri<=repeat;ri++)

       {

              scanf("%ld%d",&a,&n);

              tn=a;

              sn=0;

              for(i=1;i<=n;i++)

              { 

                     sn+=tn;

                     tn=10*tn+a;

              }

              printf("%ld\n",sn);

       }

}

4.13 判断素数

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入一个正整数m,如果它是素数,输出"YES",否则,输出"NO"(素数就是只能被1 和

自身整除的正整数,1 不是素数,2 是素数)。

例:括号内是说明

输入

4 (repeat=4)

1 2 9 17

输出

NO (1 不是素数)

YES (2 是素数)

NO (9 不是素数)

YES (17 是素数)

【13】#include<stdio.h>

#include<math.h>

void main()

{

       int ri,repeat;

       int flag,i,m,n;

       scanf("%d",&repeat);

       for(ri=1;ri<=repeat;ri++)

       {

              scanf("%d",&m);

              if(m==1) flag=0;

              else if(m==2) flag=1;

              else

              {

                     for(i=2;i<m;i++)

                     if(m%i==0)

                     {

                            flag=0;

                            break;

                     }

                     else flag=1;

              }

              if(flag) printf("YES\n");

              else printf("NO\n");

       }

}

4.14 统计字符

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。

例:括号内是说明

输入

2 (repeat=2)

Reold building room 123.

Programming is fun

输出

letter=17, blank=3, digit=3, other=1

letter=16, blank=2, digit=0, other=0

【14】#include<stdio.h>

void main()

{

       int ri,repeat;

       int blank,digit,letter,other;

       char c;

       scanf("%d",&repeat);

       /*getchar();此处getchar应删去,否则会影响第一个字符的录入*/【不需要删除。此处的getchar()就是为了接收输入完repeat之后的回车。而后面的c=getchar();是进入循环的初值。你的while循环条件要改为c!='\n',循环体中再加一条c=getchar();即可!】

       for(ri=1;ri<=repeat;ri++)

       {

              c=getchar();

              blank=0;

              digit=0;

              letter=0;

              other=0;

              while((c=getchar())!='\n')

              {

                     if(c>='A'&&c<='Z'||c>='a'&&c<='z') letter++;

                     else if(c==' ') blank++;

                     else if(c>='0'&&c<='9') digit++;

                     else other++;

              }

              printf("letter=%d,blank=%d,digit=%d,other=%d\n",letter,blank,digit,other);

       }

}


第五次上机作业 数组

5.1 求平均值

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入一个正整数n (1<n<=10),再输入n 个整数,输出平均值(保留2 位小数)。

例:括号内是说明

输入

2 (repeat=2)

3 1 2 -6

5 12 2 5 4 0

输出

aver=-1.00

aver=4.60

【5.1】#include <stdio.h>

void main()

{     

       int ri,repeat;

       int i,n,sum;

       float aver;

       int a[10];

       scanf("%d",&repeat); 

       for(ri=1;ri<=repeat;ri++)

       {            

              scanf("%d",&n);         

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

                     scanf("%d",&a[i]);

              sum=0;

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

                     sum+=a[i];

              aver=sum*1.0/n;

              printf("aver=%.2f\n",aver);

       }     

}

5.2 求最大值及其下标

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入一个正整数n (1<n<=10),再输入n 个整数,输出最大值极其下标(设最大值惟一,下

标从0 开始)。

例:括号内是说明

输入

3 (repeat=3)

3 1 6 4

3 10 8 1

5 1 2 5 4 0

输出

max=6,index=1 (最大值6 的下标是1)

max=10,index=0 (最大值10 的下标是0)

max=5,index=2 (最大值5 的下标是2)

【5.2】#include <stdio.h>

void main()

{     

       int ri,repeat; 

       int i,index,n; 

       int a[10];

       scanf("%d",&repeat); 

       for(ri=1;ri<=repeat;ri++)

       {            

              scanf("%d",&n);         

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

                     scanf("%d",&a[i]);

              index=0;

              for(i=1;i<n;i++)

                     if(a[index]<a[i]) index=i;

       printf("max=%d,index=%d\n",a[index],index);      

       }     

}

5.3 逆序输出

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入一个正整数n (1<n<=10),再输入n 个整数,按逆序输出这些数。

例:括号内是说明

输入

2 (repeat=2)

4 10 8 1 2

5 1 2 5 4 0

输出

2 1 8 10

0 4 5 2 1

【5.3】#include <stdio.h>

void main()

{

 int ri,repeat;

 int i,n,temp;

 int a[10];

 scanf("%d",&repeat);

 for(ri=1;ri<=repeat;ri++)

 {

  scanf("%d",&n);

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

  scanf("%d",&a[i]);

  for(i=0;i<n/2;i++)

  {

   temp=a[i];

   a[i]=a[n-1-i];

   a[n-1-i]=temp;

  }

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

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

  printf("\n");

 }

}

5.4 交换最小值和最大值

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入一个正整数n (1<n<=10),再输入n 个整数,将最小值与第一个数交换,最大值与最后

一个数交换,然后输出交换后的n 个数。

例:括号内是说明

输入

3 (repeat=3)

5 4 3 5 1 2

4 1 5 6 7

5 5 4 3 2 1

输出

1 3 2 4 5

1 5 6 7

1 4 3 2 5

【5.4】#include <stdio.h>

int main()

{

   int ri,repeat;

   int i,index,n,t;

   int a[10];

   scanf("%d",&repeat);

   for(ri=1;ri<=repeat;ri++)

   {

      scanf("%d",&n);

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

         scanf("%d",&a[i]);

      index=0;

      for(i=1;i<n;i++) 

         if(a[i]<a[index]) index=i;

   t=a[0];

   a[0]=a[index];

   a[index]=t;

      index=n-1;

      for(i=0;i<n-1;i++) 

         if(a[i]>a[index]) index=i;

      t=a[n-1];

   a[n-1]=a[index];

   a[index]=t;

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

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

      printf("\n");

   }

}

5.5 排序

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入一个正整数n (1<n<=10),再输入n 个整数,将它们从大到小排序后输出。。

例:括号内是说明

输入

3 (repeat=3)

4 5 1 7 6

3 1 2 3

5 5 4 3 2 1

输出

7 6 5 1

3 2 1

5 4 3 2 1

【5.5】#include <stdio.h>

void main()

{

       int ri,repeat;

       int i,index,k,n,temp;

       int a[10];

       scanf("%d",&repeat);

       for(ri=1;ri<=repeat;ri++)

       {

              scanf("%d",&n);

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

                     scanf("%d",&a[i]);

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

              for(k=0;k<9-i;k++)

                     if(a[k]<a[k+1])

                     {

                            temp=a[k];

                            a[k]=a[k+1];

                            a[k+1]=temp;

                     }

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

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

              printf("\n");

       }

}

5.6 矩阵运算

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

读入 1 个正整数 n(1≤n≤6), 再读入 n 阶方阵 a , 计算该矩阵除副对角线、最后一列和

最后一行以外的所有元素之和.(副对角线为从矩阵的右上角至左下角的连线)

例:括号内是说明

输入:

1 (repeat=1)

4 (n=4)

2 3 4 1

5 6 1 1

7 1 8 1

1 1 1 1

sum=35 (2+3+4+5+6+7+8=35)

【5.6】#include <stdio.h>

void main()

{

 int ri,repeat;

 int a[6][6],i,j,n,sum;

 scanf("%d",&repeat);

 for(ri=1;ri<=repeat;ri++)

 {

  scanf("%d",&n);

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

  for(j=0;j<n;j++)

  scanf("%d",&a[i][j]);

  sum=0;

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

  for(j=0;j<n;j++)

  sum+=a[i][j];

  for(i=1;i<n;i++)

   sum-=a[i][n-1];

  for(j=1;j<n;j++)

   sum-=a[n-1][j];

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

   sum-=a[i][n-i-1];

  sum+=a[n-1][n-1];

  printf("sum=%d\n",sum);

 }

}

【5.6】#include <stdio.h>

void main()

{

 int ri,repeat;

 int a[6][6],i,j,n,sum;

 scanf("%d",&repeat);

 for(ri=1;ri<=repeat;ri++)

 {

  scanf("%d",&n);

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

  for(j=0;j<n;j++) 

  scanf("%d",&a[i][j]);

  sum=0;

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

  for(j=0;j<n;j++)

   {

    if(i+j!=n-1&&j!=n-1&&i!=n-1)

    sum+=a[i][j];

   }  

  printf("sum=%d\n",sum);  

 }

}

5.7 加法口诀表

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入 1 个正整数 n(1≤n≤10), 输出一张 20 以内的加法口诀表. 加数与被加数都不大于

n, 分列第一行和第一列.(将加数、被加数、和放入一个二维数组中, 再输出该数组)

例:括号内是说明

输入:

1 (repeat=1)

3 (n=3)

输出:

+ 1 2 3

1 2

2 3 4

3 4 5 6

【5.7】#include <stdio.h>

void main()

{

 int ri,repeat;

 int i,j,n,a[10][10];

 scanf("%d",&repeat);

 for(ri=1;ri<=repeat;ri++)

 {

  scanf("%d",&n);

  for(i=1;i<n+1;i++)

   a[0][i]=i;

  for(j=1;j<n+1;j++)

   a[j][0]=j;

  for(i=1;i<=n;i++)

  for(j=1;j<=n;j++)

   a[i][j]=a[0][i]+a[j][0];

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

  {

   for(j=0;j<=n;j++)

    if(i==0&&j==0) printf("%-4c",'+');

    else if(i==0||j<=i) printf("%-4d",a[i][j]);

   printf("\n");

  }

 }

}

5.8 判断上三角矩阵

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入1 个正整数 n (1≤n≤6)和n 阶方阵a 中的元素,如果a 是上三角矩阵, 输出"YES", 否

则, 输出"NO"。(上三角矩阵,即主对角线以下的元素都为0, 主对角线为从矩阵的左上角至右下角的连线)

例:括号内是说明

输入:

2 (repeat=2)

3 1 2 3 0 4 5 0 0 6 (n=3)

2 1 0 -8 2 (n=2)

输出:

YES

NO

【5.8】#include <stdio.h>

#include <math.h>

int main()

{

 int ri,repeat;

 int a[6][6],flag,i,j,n;

 scanf("%d",&repeat);

 for(ri=1;ri<=repeat;ri++)

 {

  scanf("%d",&n);

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

  for (j=0;j<n;j++)

  scanf("%d",&a[i][j]);

  flag=1;

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

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

  if(a[i][j]!=0) flag=0;

  if(flag)  printf("YES\n");

  else  printf("NO\n");

 }

}

5.9 求矩阵每行元素之和

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入2 个正整数 m 和 n (1≤m, n≤6),然后输入该m 行 n 列矩阵a 中的元素,分别求

出各行元素之和, 并存入一维数组row 中, 再输出row.

例:括号内是说明

输入:

1 (repeat=1)

3 2 (m=3, n=2)

6 3

1 -8

3 12

输出:

sum of row 0 is 9

sum of row 1 is -7

sum of row 2 is 15

【5.9】#include <stdio.h>

#include <math.h>

void main()

{

 int ri,repeat;

 int flag,i,j,m,n,sum;

 int a[6][6], row[6];

 scanf("%d",&repeat);

 for(ri=1;ri<=repeat;ri++)

 {

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

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

  for(j=0;j<n;j++) 

   scanf("%d",&a[i][j]);

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

  {

   row[i]=0;

   for(j=0;j<n;j++)

    row[i]+=a[i][j];

  }

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

  printf("sum of row %d is %d\n",i,row[i]); 

 }

}

5.10 找鞍点

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入 1 个正整数 n(1≤n≤6)和n 阶方阵a 中的元素,如果找到a 的鞍点(鞍点的元素值

在该行上最大, 在该列上最小), 就输出它的下标, 否则,输出"NO"(设a 最多有1 个鞍点)。

例:括号内是说明

输入:

2 (repeat=2)

4 1 7 4 1 4 8 3 6 1 6 1 2 0 7 8 9 (n=4)

2 1 7 4 1 (n=2)

输出:

a[2][1]=6

NO

【5.10】#include <stdio.h>

void main()

{

 int ri,repeat;

 int flag,i,j,k,row,col,n,a[6][6];

 scanf("%d",&repeat);

 for(ri=1;ri<=repeat;ri++)

 {

  scanf("%d",&n);

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

  for(j=0;j<n;j++)

  scanf("%d",&a[i][j]);

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

  {

   flag=1;

   col=0;

   for(j=0;j<n;j++)

    if(a[i][col]<a[i][j]) col=j;

    for(k=0;k<n;k++)

     if(a[i][col]>a[k][col])

     {

      flag=0;

      break;

     }

     if(flag)

     {

      row=i;

      break;

     }

  } 

  if(flag)

printf("a[%d][%d]=%d\n",row,col,a[row][col]);

  else

   printf("NO\n");

 }

}

第六次上机作业 函数

6.1 求1 + 1/2! +....+ 1/n!

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入1 个正整数n,计算 s 的前n 项的和(保留 4 位小数)。

s = 1 + 1/2! +....+ 1/n!

要求定义并调用函数fact(n)计算n 的阶乘。

例:括号内是说明

输入:

2 (repeat=2)

2 (n=2)

10 (n=10)

输出:

1.5000

1.7183

【6.1】#include "stdio.h"

void main()

{

       int ri,repeat;

       int i,n;

       double s;

       double fact(int n);

       scanf("%d",&repeat);

       for(ri=1;ri<=repeat;ri++)

       {

              scanf("%d",&n);

              s=0;

              for(i=1;i<=n;i++)

                     s+=fact(i);

              printf("%0.4f\n",s);

       }

}

double fact(int n)

{

       int j,t=1;

       double x;

       for(j=1;j<=n;j++)

       {

              t*=j;

              x=1.0/t;

       }

       return (x);

}

6.2 求a+aa+aaa+aa?a

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入2 个正整数a 和n, 求a+aa+aaa+aa?a(n 个a)之和。

要求定义并调用函数fn(a,n),它的功能是返回aa?a(n 个a)。例如,fn(3,2)的返回值是33。

例:括号内是说明

输入

2 (repeat=2)

2 3 (a=2, n=3)

8 5 (a=8, n=5)

输出

246 (2+22+222)

98760 (8+88+888+8888+88888)

【6.2】(定义函数不符合题意要求返回值,有待修改)

#include <stdio.h>

void main()

{

       int ri,repeat;

       int i,n;

       long a,sn;

       long fn(long a,int n);

       scanf("%d",&repeat);

       for(ri=1;ri<=repeat;ri++)

       {

              scanf("%ld%d",&a,&n);

              sn=fn(a,n);

              printf("%ld\n",sn);

       }

}

long fn(long a,int n)

{

       int j,tn;

       long sum;

       tn=a;

       sum=0;

       for(j=1;j<=n;j++)

       { 

              sum+=tn;

              tn=10*tn+a;

       }

       return (sum);

}

【修正后的程序】

#include <stdio.h>

void main()

{

       int ri,repeat;

       int i,n;

       long a,sn;

       long fn(long a,int n);

       scanf("%d",&repeat);

       for(ri=1;ri<=repeat;ri++)

       {

              scanf("%ld%d",&a,&n);

              sn=0;

              for(i=1;i<=n;i++)

                     sn+=fn(a,i);

              printf("%ld\n",sn);

       }

}

long fn(long a,int i)

{

       int j,tn=a,sum=0;

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

              sum=10*sum+tn;

       return (sum);

}

6.3 统计一个整数中数字的个数

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

读入1 个整数,统计并输出该数中2 的个数。

要求定义并调用函数countdigit(number,digit),它的功能是统计整数number 中数字digit

的个数。例如,countdigit(10090,0)的返回值是3。

例:括号内是说明

输入:

3 (repeat=3)

-21902

2

345543

输出:

count=2 (-21902 中有2 个2)

count=1 (有1 个2)

count=0 (345543 中没有2)

【6.3】#include "stdio.h"

void main()

{

       int ri,repeat;

       int count;

       long in;

       int countdigit(long number,int digit);

       scanf("%d",&repeat);

       for(ri=1;ri<=repeat;ri++)

       {

              scanf("%ld",&in);

              count=countdigit(in,2);

              printf("count=%d\n",count);

       }

}

int countdigit(long number, int digit)

{

       int i,sum;

       if(number<0)

       number=-number;

       sum=0;

       while(number!=0)

       {

              i=number%10;

              if(i==2) sum++;

              number=number/10;

       }

       return (sum);

}

6.4 判断素数

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入一个正整数n,如果它是素数,输出"YES",否则,输出"NO"(素数就是只能被1 和自

身整除的正整数,1 不是素数,2 是素数)。

要求定义并调用函数prime(m)判断m 是否为素数。

例:括号内是说明

输入

4 (repeat=4)

1 2 9 17

输出

NO (1 不是素数)

YES (2 是素数)

NO (9 不是素数)

YES (17 是素数)

【6.4】#include <stdio.h>

#include <math.h>

void main()

{

       int ri,repeat;

       int flag,n;

       int prime(int m);

       scanf("%d",&repeat);

       for(ri=1;ri<=repeat;ri++)

       {

              scanf("%d",&n);

              flag=prime(n);

              if(flag) printf("YES\n");

              else printf("NO\n");

       }

}

int prime(int m)

{

       int flag,i;

       if(m==1) flag=0;

       else if(m==2) flag=1;

       else

       {

              for(i=2;i<m;i++)

              if(m%i==0)

              {

                     flag=0;

                     break;

              }

              else flag=1;

       }

       return (flag);

}

6.5 统计素数并求和

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入2 个正整数m 和n(1<=m,n<=500),统计并输出m 和n 之间的素数的个数以及这些素

数的和(素数就是只能被1 和自身整除的正整数,1 不是素数,2 是素数)。

要求定义并调用函数prime(m)判断m 是否为素数。

例:括号内是说明

输入:

3 (repeat=3)

1 10 (m=1, n=10)

20 35 (m=20, n=35)

14 16 (m=14, n=16)

输出:

count=4, sum=17 (1 到10 之间有4 个素数:2,3,5,7)

count=3, sum=83 (20 到35 之间有3 个素数:23, 29, 31)

count=0, sum=0 (14 到16 之间没有素数)

【6.5】#include "stdio.h"

#include "math.h"

void main()

{

       int ri,repeat;

       int count,i,m,n,sum;

       int prime(int m);

       scanf("%d",&repeat);

       for(ri=1;ri<=repeat;ri++)

       {

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

              count=0;

              sum=0;

              for(i=m;i<=n;i++)

                     if(prime(i))

                     {

                            count++;;

                            sum+=i;

                     }

              printf("count=%d,sum=%d\n",count,sum);

       }

}

int prime(int i)

{

       int flag,j;

       if(i==1) flag=0;

       else if(i==2) flag=1;

       else

       {

              for(j=2;j<i;j++)

              if(i%j==0)

              {

                     flag=0;

                     break;

              }

              else flag=1;

       }

       return(flag);

}

6.6 输出 Fibonacci 序列

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入2 个正整数m 和n(1<=m,n<=10000),输出m 和n 之间所有的Fibonacci 数。

Fibonacci 序列(第1 项起):1 1 2 3 5 8 13 21 ......

要求定义并调用函数fib(n),它的功能是返回第n 项Fibonacci 数。例如,fib(7)的返回值是

13。

输出语句:printf("%d ", f);

例:括号内是说明

输入:

3 (repeat=3)

1 10 (m=1, n=10)

20 100 (m=20, n=100)

1000 6000 (m=1000, n=6000)

输出:

1 1 2 3 5 8 (1 到10 之间的Fibonacci 数)

21 34 55 89 (20 到100 之间的Fibonacci 数)

1597 2584 4181 (1000 到6000 之间的Fibonacci 数)

【6.6】#include "stdio.h"

#include "math.h"

void main()

{

       int ri,repeat;

       int i,m,n;

       long f;

       long fib(int n);

       scanf("%d",&repeat);

       for(ri=1;ri<=repeat;ri++)

       {

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

              i=1;

              while(fib(i)<=n)

              {   

                     f=fib(i);

                     if(f>=m) printf("%ld ",f);

                      i++; 

              }

              printf("\n");

       }

}

long fib(int n)

{

       int i,x1,x2,x;

       if(n==1||n==2) x=1;

       else

       {  

              x1=x2=1;

              for(i=1;i<=n-2;i++)

              {   

                     x=x1+x2;

                     x1=x2;  

                     x2=x; 

              }

       }

       return x;

}

6.7 求完数

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入2 个正整数m 和n(1<=m,n<=1000),输出m 到n 之间的所有完数(完数就是因子和

与它本身相等的数)。

要求定义并调用函数factorsum(number),它的功能是返回number 的因子和。例如,

digitsum(12)的返回值是16(1+2+3+4+6)。

输出语句:printf("%d ", i);

例:括号内是说明

输入:

2 (repeat=2)

20 500 (m=100, n=400)

1 100 (m=1, n=100)

输出:

28 496

1 6 28

【6.7】#include "stdio.h"
void main()
{
 int ri,repeat;
 int i,m,n;
 int factorsum(int number);
 scanf("%d",&repeat);
 for(ri=1;ri<=repeat;ri++)
 {
  scanf("%d%d",&m,&n);
  for(i=m;i<=n;i++)
   if(factorsum(i)==i||i==1) printf("%d ",i);
  printf("\n");
 }
}
int factorsum(int number)
{
 int j,sum=0;
 for(j=1;j<number;j++)
  if(number%j==0) sum+=j;
 return (sum);
}

6.8 求各位数字的立方和等于它本身的数

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入2 个正整数m 和n(1<=m,n<=1000),输出m 到n 之间的所有满足各位数字的立方和

等于它本身的数。

要求定义并调用函数is(number)判断number 的各位数字之立方和是否等于它本身。

输出语句:printf("%d ", i);

例:括号内是说明

输入:

2 (repeat=2)

100 400 (m=100, n=400)

1 100 (m=1, n=100)

输出:

153 370 371 (1*1*1+5*5*5+3*3*3=153; 3*3*3+7*7*7=370; 3*3*3+7*7*7+1*1*1=371)

1

【6.8】#include "stdio.h"
void main()
{
 int ri,repeat;
 int i,m,n;
 int is(int number);
 scanf("%d",&repeat);
 for(ri=1;ri<=repeat;ri++)
 {
  scanf("%d%d",&m,&n);
  for(i=m;i<=n;i++)
  {
   if(is(i));
   else printf("%d ",i);
  }
  printf("\n");
 }
}
int is(int number)

 int temp,digit,sum,flag;
 temp=number; 
 sum=0;
 while(number!=0)
 { 
  digit=number%10; 
  sum=sum+digit*digit*digit; 
  number=number/10;
 }
 if(sum==temp)
  flag=0;
 else 
  flag=1;
 return (flag);
}

6.9 将一个整数逆序输出

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:

输入一个整数,将它逆序输出。

要求定义并调用函数reverse(number),它的功能是返回number 的逆序数。例如

reverse(12345)的返回值是54321。

例:括号内是说明

输入

4 (repeat=4)

123456 -100 -2 99

输出

654321

-1

-2

99

【6.9】#include <stdio.h>
void main()
{
 int ri,repeat;
 long in,res;
 long reverse(long number);
 scanf("%d",&repeat);
 for(ri=1;ri<=repeat;ri++)
 {
  scanf("%ld",&in);
  res=reverse(in);
  printf("%ld\n",res);
 }
}
long reverse(long number)
{
 long x=0;
 while(number!=0)
 {
  x=10*x+number%10;
  number/=10;
 }
 return (x);
}

6.10 十进制转换二进制

程序填空,不要改变与输入输出有关的语句。

输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:

输入1 个正整数n,将其转换为二进制后输出。

要求定义并调用函数 dectobin(n),它的功能是输出 n 的二进制。例如,调用dectobin(10),

输出1010。

输出语句:printf("%d");

例:括号内是说明

输入:

3 (repeat=3)

15

100

0

输出:

1111

1100100

0

【6.10】#include "stdio.h"
void main()
{
 int ri,repeat;
 int i,n;
 void dectobin(int n);
 scanf("%d",&repeat);
 for(ri=1;ri<=repeat;ri++)
 {
  scanf("%d",&n);
  dectobin(n);
  printf("\n");
 }
}
void dectobin( int n )
{
 if(n>1)
 dectobin(n/2);
 printf("%d",n%2);
}

比较两数组对应数字大小的函数

#include <stdio.h>

int large(int,int);

void input_array(int a[]);

int compare(int a[],int b[]);

void output(int flag);

void main()

{

       int a[10],b[10];

       int flag;

       printf("enter array a:\n");

       input_array(a);

       printf("enter array b:\n");

       input_array(b);

       flag=compare(a,b);

       output(flag);

}

int large(int x,int y)

{

       int flag;

       if(x>y)

              flag=1;

       else if(x<y)

              flag=-1;

       else

              flag=0;

       return flag;

}

void input_array (int a[10])

{

       int i;

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

              scanf("%d",&a[i]);

       printf("\n");

}

int compare(int a[10],int b[10])

{

       int i,n=0,m=0,k=0;

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

       {

              if(1==large(a[i],b[i]))

                     n++;

              else

                     if(0==large(a[i],b[i]))

                            m++;

                     else

                            k++;

       }

       printf("array a > array b %d times\narray a = array b %d times\narray < array b %d times\n",n,m,k);

       if(n>k)

              return 1;

       else

              if(n<k) return -1;

              else

                     return 0;

}

void output(int flag)

{

       if(1==flag)

              printf("array a is larger than array b\n");

       else

              if(-1==flag) printf("array a is smaller than array b\n");

              else

                     printf("array a is equal to array b\n");

}

【适当改进后的程序】

#include <stdio.h>

int large(int,int);

void input_array(int a[]);

int compare(int a[],int b[]);

void output(int flag);

void paixu(int a[]);

void main()

{

       int a[10],b[10];

       int flag,i;

       printf("enter array a:\n");

       input_array(a);

       printf("enter array b:\n");

       input_array(b);

       flag=compare(a,b);

       output(flag);

       paixu(a);

       printf("数组 a 进行从小到大排序后为:\n");

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

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

       printf("\n");

       paixu(b);

       printf("数组 b 进行从小到大排序后为:\n");

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

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

       printf("\n");

       flag=compare(a,b);

       output(flag);

}

int large(int x,int y)

{

       int flag;

       if(x>y)

              flag=1;

       else if(x<y)

              flag=-1;

       else

              flag=0;

       return flag;

}

void input_array (int a[10])

{

       int i;

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

              scanf("%d",&a[i]);

}

int compare(int a[10],int b[10])

{

       int i,n=0,m=0,k=0;

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

       {

              if(1==large(a[i],b[i]))

                     n++;

              else

                     if(0==large(a[i],b[i]))

                            m++;

                     else

                            k++;

       }

       printf("array a > array b %d times\narray a = array b %d times\narray < array b %d times\n",n,m,k);

       if(n>k)

              return 1;

       else

              if(n<k) return -1;

              else

                     return 0;

}

void output(int flag)

{

       if(1==flag)

              printf("array a is larger than array b\n");

       else

              if(-1==flag) printf("array a is smaller than array b\n");

              else

                     printf("array a is equal to array b\n");

       puts("\n");

}

void paixu(int a[10])

{    

       int i,j,t;

       for (j=0;j<9;j++)

              for(i=0;i<10-j-1;i++)

                     if(a[i]>a[i+1])

                     {

                            t=a[i];

                            a[i]=a[i+1];

                            a[i+1]=t;

                     }

}

更多相关推荐:
C语言心得体会

计网09C语言程序设计实训C语言实训报告姓名陶艳琼班级计算机网络091班500字以内的实训体会C语言实训心得体会在初学C语言的一个学期后我们进行了C语言阶段尝试编写各种类型的程序在为期一个周时间中我的感受是C语...

C语言程序设计心得体会

在这为期半个月的时间内,通过我们小组各成员之间的相互讨论和合作,我们完成了学生信息管理系统的程序设计,更值得高兴的是我们的程序得到了大家的喜爱,在每次的简报中都得到了较好的成绩。虽然在上个学期中,我们已经学习了…

C语言上机实验心得

在科技高度发展的今天,计算机在人们之中的作用越来越突出。而C语言作为一种计算机的语言,学习它将有助于我们更好的了解计算机,与计算机进行交流,因此,我们一定要学好C语言,这对我们以后的发展是十分重要的。说到这,上…

C语言培训学习心得体会

C语言培训学习心得体会c语言是一种结构化语言,是大部分编程语言的基础,c语言学好了,以后的java,c#以及更多的编程语言才有可能学好。下面就跟南宁达内小编一起,要学好c语言必须了解的四点:1、课前认真预习,把…

学习 C语言 心得

C语言学习心得刚开始学C语言的时候,很迷茫,在此之前从没有接触过C语言,有点摸不着头脑。可是在上机过后,我觉得编程是很有趣的一件事。我知道要学好C语言不容易,可是我决定=完成这件不容易的事。要学好C语言就要先懂…

C语言心得体会作业

C语言心得体会学习C语言已经一个学期了,刚开始学习的时候老是感觉力不从心。虽然认真听课了,但是并不能理解它。这种情况到了后来才有所改变。之所以能有所改变,是因为本人找到了学习C语言的一些方法。由于C语言对于刚接…

C语言学习心得及报告

如何学习C语言学校西安航空学院系别电气系班级过控1409姓名兰敏学号1130306140913前言两个原因促使我写下这篇文章第一就是作为过来人根据我自己的经验我知道编程的初学者一般都很兴奋也都有种困惑一方面对运...

单片机c语言学习心得

单片机c语言学习心得一相信很多爱好电子的朋友对单片机这个词应该都不会陌生了吧不过有些朋友可能只听说他叫单片机他的全称是什么也许并不太清楚更不用说他的英文全称和简称了单片机是一块在集成电路芯片上集成了一台有一定规...

C语言IT大师心得体会

写给c语言初学者的心得体会这篇文章是我以前看到的认为很好对初学者应该有很大的帮助所以我转载过来希望各位看下有空的话我做几个C或者易语言的基础教程传上来本人小女孩一个初步来到网络世界的时候觉得发现什么都很好奇什么...

每个人初学C语言心得

今天我能够自称是一个混IT的人并能以此谋生将来大家能一次谋生都要感谢两个人克劳德香农和约翰冯诺依曼是他们发现了所有的数字化信息不论是一段程序一封email一部电影都是用一连串的1和0进行编码的是他们发现了我们可...

浅谈C语言程序设计教学的实践与心得

浅谈语言程序设计教学的实践与心得庞师铎摘要在21世纪的大环境下各种实践性学科都将面临着强大的冲击而作为计算机软件开发等的入门语言更显得尤为关注强调实验的重要性可以促使学生在学习C语言的基本知识之外加强编程实践使...

单片机c语言学习心得(改编)

单片机c语言学习心得一相信很多爱好电子的朋友对单片机这个词应该都不会陌生了吧不过有些朋友可能只听说他叫单片机他的全称是什么也许并不太清楚更不用说他的英文全称和简称了单片机是一块在集成电路芯片上集成了一台有一定规...

c语言心得(25篇)