每日小作业(冬)

1.6
计分系统
张三老师在计分时, 希望大家尽量不挂科, 于是想出了一套绝妙的计分方式
试卷一共有40道题目
正确数量在0~10时, 每题有6分
正确数量在11~20时, 第11~20题 每题2分
正确数量在21~40时, 第21~40题 每题1分
设计一个持续, 输入学生做对题目的数量, 输出分数
输入: 整数n(0<=n<=40), 表示张三回答正确的题目数量
输出: 一个整数, 表示张三获得的分数
样例输入:
40
样例输出
100
样例输入:
10
样例输出:
60

#include <stdio.h>
#include <stdlib.h>

int main(){
    int z=0,k=0;
    int i=0,num=0;
    //输入大于0的整数
    while(scanf("%d",&z)>0){
       //当z大于40时终止循环
        if(z>40) break;
        //正确题数大于20时
        if(z>20){
            k=z-20;
            num=80+k;
        printf("%d\n",num);
        printf("\n");
        }
        //正确题数不大于20且大于10时
        else if(z>10){
            k=z-10;
            num=60+k*2;
            printf("%d\n",num);
            printf("\n");
        }
          //正确题数不大于10时
        else{
            num=6*z;
            printf("%d\n",num);
            printf("\n");
        }
    }
}

在这里插入图片描述

1.7

  1. 简述一下switch的语法, switch支持哪些类型的值
  2. 什么是switch的穿透
  3. 实际开发中 通常哪些判断使用if 哪些判断使用switch
1.switch语句是一种多路判断语句,它测试表达式是否与一些常量整数值中的某一个值匹配,并执行相应的分支动作。switch后面的表达式语句只能是整型或者字符类型。
2.穿透性:在switch中,如果匹配上一个case的值,一直向后运行,直到遇到break;
特性:
    先判断是否有值和case 相同,相同就一直执行下去,直到遇到break;退出,或者执行到底部
    如果没有值与case相同,则执行default,再执行下去,直到遇到break;或者执行到底部
3.判断表达式内容,为真就执行语句用if。
有多个条件分支的判断,方便对大量的值进行判断。
(感觉switchelse if用法差不多,都是多路判断,相比之下,switch只是多了break语句,可以强制控制循环退出。不知道我这个看法对不对,,
)就是感觉if用的随意一些,switch用的省事一些。

1.8
设计一个程序, 给定一个整数n(0<n<100000)和一个选择, 输出对应的结果
选择1: 求n是几位数
选择2: 分别输出n的每一位数字
选择3: 将n反转后输出
样例输入:
123
1
样例输出:
3
样例输入:
123
2
样例输出
1, 2, 3
样例输入:
123
3
样例输出:
321

#include <stdio.h>
#include <stdlib.h>
//设计一个程序, 给定一个整数n(0<n<100000)和一个选择, 输出对应的结果
int main(){
    int z=0,n=0;
   int i=0;
   printf("请输入一个整数n(0<n<100000)\n");
    scanf("%d",&z);
    int a,b,c,d,e,f,g;
    a=z/10000;               //万位
    b=z%10000/1000;          //千位
    c=z%1000/100;            //百位
    d=z%100/10;              //十位
    e=z%10;                  //个位
    printf("  case 1:求n是几位数 \n");
    printf("  case 2:分别输出n的每一位数字\n ");
    printf(" case 3:将n反转后输出\n ");
    printf(" case 0:结束 \n");
    n=1;
    while( n!=0){
    scanf("%d",&n);
    switch(n)
 {
     //求n是几位数
      case 1:
      i=(int)log10(z)+1;
      printf("%d\n",i);
      printf("\n");
      break;
    //分别输出n的每一位数字
     case 2:
     f=a*10000+b*1000+c*100+d*10+e*1;
     printf("%d\n",f);
     printf("\n");
     break;
    //将n反转后输出
     case 3:
     if(a!=0)
    {   printf("%d%d%d%d%d\n",e,d,c,b,a);
        printf("\n");
    }
    else if(b!=0)
    {  printf("%d%d%d%d\n",e,d,c,b);
        printf("\n");
    }
    else if(c!=0)
    {   printf("%d%d%d\n",e,d,c);
        printf("\n");
    }
    else if(d!=0)
    {  printf("%d%d\n",e,d);
        printf("\n");
    }
    else if(e!=0)
    {
    printf("%d\n",e);
    printf("\n");
    }
    break;
    case 0:      break;
    default:
    printf("请重新输入选择case n(0<n<4)!\n");
    printf("\n");
    break;
 }
}
return 0;
}

在这里插入图片描述
1.11
张三上班
张三在上班途中, 可以选择走路和汽车两种方式
但他不清楚哪种方式比较快, 因为骑车需要找车, 开锁, 停车 需要耽搁很多时间.
设找到自行车, 开锁, 骑上自行车需要花27秒, 停车需要花23秒
步行每秒1.2米, 骑车每秒3.0米
给出张三距离公司的距离, 请问是骑车快还是走路快.
输入:
一个整数, 表示到公司的距离
输出:
如果骑车快, 输出"建议骑车"
如果走路快, 输出"建议走路"
如果一样快, 输出"骑车或走路都行"

#include <stdio.h>
#include <stdlib.h>

int main(){
  int n=0;
  double a,b;
  printf("请输入一个整数,表示到公司的距离:\n");
  scanf("%d",&n);
   //骑车
  a=(150+n)/3.0;
   //步行
  b=n/1.2;
  printf("骑车用时:%lf\n",a);
  printf("步行用时:%lf\n",b);
  if((a-b)<0.1&&-0.1<(a-b)){
      a=b;
    }
  if(a>b){
   printf("建议步行\n");
 }else if(a<b)
   {
   printf("建议骑车\n");
 }else if(a==b){
   printf("骑车或走路都行\n");
   }
return 0;
}

在这里插入图片描述
1.12
简述一下for; while; do while;的语法,
它们有什么区别, 条件和代码块的执行顺序分别是怎样的.
实际开发中, 这三种循环分别适用哪种情况
break和continue有什么作用,
怎么使用break跳出嵌套循环

一、for语句是一种循环语句,是对while语句的推广,for语句的操作更加直观一些。for语句比较适合初始化和增长步长都是单条语句并且逻辑相关的情形,因为它将循环语句放在一起,且比while语句更紧凑。
for表达式1是赋值,表达式2是关系表达式,表达式3函数调用
先表达式1后表达式2然后运行for循环语句,最后表达式3
若语句中需要执行简单的初始化或变量递增,用for更合适一些,for将循环控制语句集中放在循环的开头,结构更紧凑清晰。
二、while语句首先测试圆括号内的条件,若为真,则执行循环体,再重新测试圆括号内的条件,为真则继续执行循环体;当圆括号内条件测试结果为假,循环结束。并继续执行while语句之后的下一条语句。若没有初始化或重新初始化的操作,用while更自然些。
三、do-while语句先执行循环体语句,然后再判断,与while语句相比,前者不论条件是否成立,总会先运行一次,然后再判断是否继续循环。
比如计算某道题结果,根据结果再判断是否运行,这时候就用dowhile。
四、break可用于从forwhile、dowhile等循环语句中提前退出,如同跳出switch一样,可以立刻跳出该层循环。break无法跳出嵌套循环,只能跳出一层循环。或者每一层都用一个break可以跳出,优点是内存安全不泄露。
continue可使forwhile、dowhile语句开始下一次循环的执行。在while和dowhile中,continue意味着立刻执行测试部分。在for循环中,则意味使控制转移到递增循环变量部分。continue只用于循环语句,不用于switch语句。某个循环包含的switch语句中的continue语句,将导致进入下一次循环。

1.13
求平均年龄
老九学堂有老师若干名, 给出每个老师的年龄, 求老九学堂所有老师的平均年龄, 保留小数点后两位
输入:
第一行: 整数n(1<n<100), 表示老师人数
之后n行: 每行一个整数a(15<a<55), 表示第n个老师的年龄
输出:
一个浮点数, 保留两位小数. 表示全体老师的平均年龄
样例输入:
3
18
18
17
样例输出:
17.67

#include <stdio.h>
#include <stdlib.h>
int main(){
 int n,i;
 int num=0;//老师年龄之和
 int a;
 float age;//老师年龄平均值
 while(1){
   printf("请输入老九学堂的老师人数:");
   scanf("%d",&n);//n为老师人数
   if(n< 2){
     printf("老九学堂老师不小于2个哦!\n");
     }
    else if(n > 100)
    {
        printf("老九学堂老师不超过100个哦!\n");
    }else{
   for(i=0;i<n;i++){
    printf("请输入第%d个老师的年龄:",i+1);
    scanf("%d",&a);
    while(a<15||a>55)
    {
        printf("老九学堂老师年龄在15~55哦!\n");
        printf("请输入第%d个老师的年龄:",i+1);
       scanf("%d",&a);
    }
        num=num+a;
    }
 //continue;
 }
 break;
}
 age=1.0*num/n;
 printf("老师们的平均年龄为:%.2f",age);
 return 0;
}

在这里插入图片描述
1.14
有一口深度为h的井, 井底有一只小青蛙 它白天可以向上爬u米, 而晚上会下滑d米
设计一个程序输入高度, 白天向上爬的距离, 晚上下滑的距离 计算出小青蛙需要多少天才能从井底爬出来
样例输入:
12 3 2
样例输出:
10

#include <stdio.h>
#include <stdlib.h>
main() {
int h, u, d;
int i;
do{
printf("输入井高度, 青蛙白天向上爬的距离, 晚上下滑的距离 ");
scanf_s("%d %d %d",&h,&u,&d);
for (i = 1;; i++)
{
    if (u<d)
{
    if(u>h)
    {
printf("青蛙今天就可以爬出去啦\n");
break;
    }else{
        printf("哇,青蛙永远都爬不上去了!\n");
      break;
    }
}
if (h == u)
{
printf("青蛙%d天就可以爬出去啦\n", i);
break;
}
else
h = h - u + d;
}
}while(h>u);
return 0;
}

在这里插入图片描述
1.19
求最大值
张三有一堆数字, 他想知道这些数字中哪个数最大
输入:
第一行: n(0<n<100, 表示有n个整数)
第二行~第n+1行: 每行一个整数An(-1000<=An<=1000) 表示张三的数字
输出: 这些数字中最大的那个数
样例输入:
8
32
45
564
78
123
73
-47
3
样例输出:
564

#include <stdio.h>
#include <stdlib.h>
int main() {
int a,b=0,max=0;
int i,n;
do{
        printf("请输入n(0<n<100), 表示有n个整数:");
scanf("%d",&n);
if(n<=0||n>=100){
           printf("请输入n(0<n<100)哦!\n");
           continue;
}
for(i=0;i<n;i++){
    printf("请输入第%d行:",i+1);
        scanf("%d",&a);
     if(a>-1000&&a<1000)
     {   b= max-a;
       if(b<0){
        max=a;
       }
     }
     else{
         printf("请注意每行一个整数范围是(-1000<=An<=1000)哦!\n");
         continue;
     }
}
printf("这些数字中最大的那个数是:%d",max);
    break;
}while(-1);
return 0;
}

在这里插入图片描述
1.25
开小差的张三
张三上课时走神, 在作业上写了很多222222222222222 结果被老师发现了
张三连忙掩饰说自己在算2+22+222+2222+22222的和,
老师很欣慰, 问他算出来没有
张三很困扰, 因为草稿纸写满了2 已经不够用了
大家快帮帮张三吧
设计一个程序, 输入n和a 求Sn
Sn = a + aa + aaa + … + aaaaa(n个a)
输入: 两个整数n, a
(1<n<9), (1<=a<=9)
输出:
Sn的值
样例输入:
5 2
样例输出:
24690
样例解析: Sn = 2 + 22 + 222 + 2222 + 22222 = 24690
样例输入:
4 5
样例输出:
6170
(解析: Sn = 5 + 55 + 555 + 5555)

#include <stdio.h>
#include <math.h>
int main ()
{
    int n,a,i,m;
    int b=0,sum=0;
    do{
     hui:
    printf("请输入两个整数n(1<n<9)和a(1<=a<=9):\n");
    scanf_s("%d %d",&n,&a);
    if(n<=1||n>=9)
    {
       printf("输入错误,请重新输入 !!!\n(注意n的范围是1<n<9哦!)\n");
       goto hui;
    }
    if(a<1||a>9)
    {
        printf("输入错误,请重新输入 !!!\n(注意a的范围是1<=a<=9哦!)\n");
       goto hui;
    }
    for(i=0;i<n;i++)
    {
        b=b+a*(int)(pow(10,i)+0.5);
        sum=sum+b;
    }
   printf("%d\n",sum);
   lai:
   printf("(是否继续,继续请按1,退出请按0)\n");
   scanf_s("%d",&m);
   if(m==1)
   goto hui;
   else if(m==0)
    break;
   else{
        printf("输入错误,请重新输入0或1 !!!\n");
        goto lai;
   }
    }while(-1);
return 0;
}

在这里插入图片描述
1.26
水仙花数
某个三位数 其各位数字的立方和等于该数字本身, 这个数字便是水仙花数
例如153 = 1^3 + 5^3 + 3^3
样例输入: 无
样例输出:
153
370

#include <stdio.h>
#include <math.h>
int main ()
{
 printf("输出水仙花数:\n");
 int  i;
 int a,b,c;
 for( i=100 ; i<1000; i++){
  a = i%10;
  b= i/10%10;
  c = i/10/10%10;
  if(i==(pow(a,3)+pow(b,3)+pow(c,3)))
  printf("%d\n", i);
}
  return 0;
}

在这里插入图片描述
1.27
公因数与公倍数
设计一个程序, 输入两个整数n,m.
输出它们的最大公因数和最小公倍数
样例输入:
10, 15
样例输出:
5, 30

#include <stdio.h>
#include <math.h>
/*
公因数与公倍数
设计一个程序, 输入两个整数n,m.
输出它们的最大公因数和最小公倍数
样例输入:
10, 15
样例输出:
5, 30
*/
int main ()
{
     int m, n, a, b;
    printf("使用相减法求算\n");
    printf("请输入两个整数:\n");   // a, b不相等,大数减小数,直到相等为止
    scanf("%d%d", &a, &b);
    m = a;
    n = b;
    if (a <= 0 || b <= 0)
    {
        printf("输入有误,请重新输入:\n");
        scanf("%d%d", &a, &b);
        m = a;
        n = b;
    }
    while (a != b)
    {
        if (a > b)
            a = a - b;
        else
            b = b - a;
    }
    printf("最大公约数为:%d\n", a);
    printf("最小公倍数为:%d\n", m*n / a);
  return 0;
}

在这里插入图片描述
1.28
高空抛物
爱学习的好孩子张三为了探究神秘的物理现象, 从高楼抛下一个弹球. 但由于高空抛物被警察抓了, 请各位小伙伴完成他未实现的心愿.
小球从某一高度落下,每次落地后反跳回原来高度的一半,再落下。
输入弹球的初始高度M, 输出弹球第N次回弹时的高度 和所经过的距离(保留两位小数)
样例输入
1000 5
样例输出
31.25
2906.25

#include <stdio.h>
int main ()
{
   int i,n,b=0;
   double a=0,sum=0,c=0;
   double m;
   /*备注:开始scanf输入m用的是%f结果总是无法正确显示,一气之下新建个double型c用来计算,,
   后来发现用%lf就行,float为%f,double为%lf,平时输出用long float 就是double习惯了(%f)(也可已用)
   ,,,,记个教训,敲代码不要图省事,要严谨*/
   printf("输入弹球的初始高度M, 输出弹球第N次回弹:\n");
   scanf_s("%lf %d",&m,&n);
   c=1.0*m;
   for(i=0;i<n;i++)//计算
   {
       a=c/2;
       sum=sum+c+a;
       c=a;
       b++;
       printf("第%d次弹跳高度为:%.2f\t所经过的距离为:%.2f\n",i+1,a,sum);
   }
  printf("弹球第%d次回弹时的高度为:%.2f\n\t 所经过的距离为:%.2f\n",b,a,sum);
  return 0;
}

在这里插入图片描述
1.29
长寿的兔子
张三家里养了一对刚出生的兔子, 兔子出生第3个月起每月都会生一对小兔子. 小兔子出生后第三个月起也会每月生一对兔子
张三想知道 如果兔子不死 n月后家里会有多少对兔子
样例输入: 7
样例输出:13
样例输入: 12
样例输出: 144

#include <stdio.h>
#include <math.h>
main()
{
    int i,n;
//声明递归函数
int func();
do{
    printf("请输入第n(大于2)个月,以便求兔子对数:\n");
      scanf_s("%d",&n);
    printf("第%d个月的兔子对数:%d\n", n, func(n));
    printf("(退出请输入0)\n");
    if(n == 0){
        break;
        }
}while(-1);
return 0;
}
// 定义递归函数
int func(int x) {
if (x - 2 == 0)            return 1;//月数为2时,第二个数为1
else if(x - 1 == 0)    return 1;//月数为1时,第一个数为1
    else if(x > 2)//从第三个数开始,每一个数是前两个数的和
{
return func(x - 1) + func(x - 2);//尾递归调用函数
}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃鱼从来不吐刺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值