软件设计大赛二

3)、请补充函数fun(),该函数的功能是:从‘a’‘z’统计一个字符串中所有字母字符各自出现的次数,结果保存在数组alf中。注意:不区分大小写,不能使用字符串库函数。

例如,输入:A=abc+5*c”,结果为:a=2,b=1,c=2

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#define N 100

void fun(char *tt,int alf[])

{

        int i;

        char *p=tt;

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

              【1】alf[i]=0;;

        while(*p)

        {

              if(*p>='A'&&*p<='Z')

                     【2】*p+=32;

              if(*p>='a'&&*p<='z')

                     alf[*p-'a']++;

              p++;      

        }

}

 

main()

{

        char str[N];

        char a='a';

        int alf[26],k;

        clrscr();

        printf("\nPlease enter a char string:");

        scanf("%s",str);

        printf("\n**The original string**\n");

        puts(str);

        fun(str,alf);

        printf("\n**The number of letter**\n");

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

        {

              if(k%5==0)

                     printf("\n");

              printf("%c=%d ",a+k,alf[k]);

        }

        printf("\n");

}

4)、从键盘上输入两个整数m和n,求其最大公约数。

main()

{int a,b,num1,num2,temp;

scanf("%d,%d",&num1,&num2);

if( 1 num1>num2)

{ temp=num1;

num1=num2;

num2=temp;

}

a=num1;b=num2;

while(b!=0)

{ temp=【2】a%b;

a=b;

b=temp;

}

printf("%d,%d",a,num1*num2/a);

}

二、智力题(30分)

1、单选题:(每小题4分,5小题,共20分)

1)给你8颗小石头和一架托盘天平。有7颗石头的重量是一样,另外一颗比其它石头略重,除此之外,这些石头完全没有分别。你不得假设那颗石头到底比其它的石头重了多少。请问:最少要称量几次,你才能把那颗较重的石头找出来?B先比六棵

A 1次  B 2次  C 3次  D 4次   

2)一个人花8块钱买了一只鸡,9块钱卖掉了,然后他觉得不划算,花10块钱又买回来了,11块卖给另外一个人。问他赚了多少?

A 1块  B 2块  C 3块  D 4块     B

3) 1块钱一瓶汽水,喝完后两个空瓶换一瓶汽水。问:你有20块钱,最多可以喝到几瓶汽水?C

A 37瓶  B 38瓶  C 39瓶  D 40瓶     

4) 有一牧场,已知养牛27头,6天把草吃尽;养牛23头,9天把草吃尽。如果养牛21头,那么几天能把牧场上的草吃尽呢?并且牧场上的草是不断生长的。A

A 12天  B 13天  C 14天  D 15天   

5)有四个人要在深夜通过一座桥。这座桥最多只能承受两个人的重量,而且必须打着手电筒才能通过。四个人只有一把手电筒,并且每个人的行走速度也不一样:第一个人通过这座桥要花1分钟,第二个人要花2分钟,第三个人要花5分钟,第四个人要花10分钟;如果两人同行,他们就只能以比较慢的那个人的速度前进。这四个人全部通过这座桥的最短时间是多少?B

A 15分钟  B 17分钟  C 19分钟  D 21分钟   

2、推理 (共10分)

假设有一个池塘,里面有无穷多的水。现有2个空水壶,容积分别为5升和6升。问题是如何只用这2个水壶从池塘里取得3升的水。

好办。用小的那个一直往大的那个里面倒水。

三、编程题(20分`二选一)

1、在西方,星期五和数字 13 都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的十三日又恰逢星期五就叫“黑色星期五”。

要求:输入年份,输出是:判断该年是否包含黑色星期五,如包含,给出具体日期

2、小明去银行存钱,拿了一堆硬币。已知1角的硬币厚度为1.8mm ,5 角的硬币厚1.5mm ,1元的硬币为2.0mm 。小明将1 角的硬币放成一摞,将5 角的硬币硬币放成一摞,将1元的硬币放成一摞,发现3 摞硬币一样高。银行正好把这些硬币换成若干张面值为10 元的纸币。问小明至少带了多少钱的硬币(元为单位),每种面值的硬币有多少个?  

要求输出格式为: 1 角的数量,5 角的数量,1 元的数量,总金额。(例如:20,30,40,50)

说明在结果中只输出各个对应的数字即可

1、参考答案:

#include<stdio.h>

typedef struct 

{

  int month;

  int day;

}Data; 

int main()

{

  Data data[10];

  int a[13]={0,12,43,71,102,132,163,193,224,255,285,316,346};

  int b[13]={0,12,43,72,103,133,164,194,225,256,286,317,347};//闰年时

  int n=0,i,year;

  scanf("%d",&year);

  if(((year%4==0)&&(year%100!=0))||(year%400==0))//闰年时

  {

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

    {

      if((year*365+(year-1)/4-year/100+year/400+b[i])%7==5)

      {

        data[n].month=i;

        data[n].day=13;

        n++;

      }

    }

  }

  else//平年

  {

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

    {

      if((year*365+year/4-year/100+year/400+a[i])%7==5)

      {

        data[n].month=i;

        data[n].day=13;

        n++;

      }

    }

  }   

  if(n==1)

  {

    printf("There is %d Black Friday in year %d.\nIt is:\n",n,year);

    printf("%d/%d/%d\n",year,data[0].month,data[0].day);

  }

  else

  {

    printf("There are %d Black Fridays in year %d.\nThey are:\n",n,year);

    for(i=0;i<n;i++)printf("%d/%d/%d\n",year,data[i].month,data[i].day);

  }

  return 0;

}

2参考答案

#include<stdio.h>

void main()

{

  int yijiao;

  int wujiao;

  int yiyuan;

  int sum;

  for(yiyuan=0;yiyuan<100;yiyuan++)

  {

    for(wujiao=0;wujiao<100;wujiao++)

    {

      for(yijiao=0;yijiao<100;yijiao++)

      {

        sum=yijiao+wujiao*5+yiyuan*10;

    

  if((sum>=100)&&(sum%100==0)&&(18*yijiao==15*wujiao)&&(15*wujiao==20*yiyu

        {

          printf("%d,%d,%d,%d\n",yijiao,wujiao,yiyuan,sum/10);

          break;

        }

      }

    }

  }

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值