2021bupt秋季计算导论第四次上机实验

      ***BUPT2021秋计算导论第四次实验***

第四次实验

4.1 打印图形(一)

4.1
实验3_6_打印图形一 (100 分)
用’-‘(减号)、’+’(加号)、’|’(竖线)、’*’星号和空格打印方格。

输入格式:
只有一行,为用空格分隔的两个整数l,c(0<l,c<10)。其中l和c分别代表格子的行数和列数。请看输入样例。

输出格式:
每组测试用例输出一组(请看输出样例)。

输入样例:
2 3
输出样例:
在这里插入图片描述
下面是我写的代码,我的思路是将图案排列相同的行归纳在一起,依次从第一行到最后一行循环。代码如下,若有错误,望告知。

int main()
{
    int c,l;//c代表行,l代表列
    scanf("%d %d",&c,&l);
    int i,j;//我的想法是从0 —— n-1 ,因为这样if判断条件写起来比较简洁,仔细体会就可以知道。
    for (i=0;i<4*c+1;i++)//观察总行数与c的关系
        {
            if(i%4==0)//由于第一行与最后一行是相同规律,归纳在一起。
              {
                j =0 ;//初始化j ,通过j的数值来判断该打印什么字符
                while(j<l+1+5*l)//我采用的while循环
                     {
                         if(j%6==0)//对第一类行进行观察,即首末为0和6的倍数就打印“|”;
                           {
                               printf("|");
                               if(j==6*l)//末尾时,应该加上换行符
                                 {
                                     printf("\n");
                                 }
                               j++;
                           }
                           else if((j-1)%6==0)//依此了推,我才用for循环打印“*”;
                                  {
                                      int p =j;
                                      for(;p<j+5;p++)
                                         {
                                             printf("*");
                                         }
                                      j=j+5;
                                  }
                     }
              }
              else if(i%2==0&&i>0)//second
                     {
                          int j =0 ;
                          while (j<6*l+1)
                                {
                                    if(j%6==0)
                                      {
                                          printf("|");
                                          if(j==6*l)
                                            {
                                                printf("\n");
                                            }
                                          j++;
                                      }
                                      else if((j-1)%6==0)
                                             {
                                                 int p =j;
                                                 for(;p<j+5;p++)
                                                    {
                                                        if(p==j+2)
                                                          {
                                                              printf("+");
                                                          }
                                                          else {
                                                              printf("-");
                                                          }
                                                    }
                                                 j=j+5;
                                             }
                                }
                     }
                    else if((i+1)%2==0)//third
                           {
                              int j =0;
                              while(j<6*l+1)
                                   {
                                       if(j%3==0)
                                        {
                                            printf("|");
                                            if(j==6*l)
                                              {
                                                  printf("\n");
                                              }
                                            j++;
                                        }
                                        else {
                                            printf(" ");
                                            j++; 
                                        }
                                   }
                           }
        }
                           return 0;
 }
在这里插入代码片

暴力法解决这类打印问题,思路很简单,但是比较麻烦。

4.2简单问题

4.2

/*实验3_1_简单问题 (100 分)
任意给定n个整数,求这n个整数序列的和、最小值和最大值。

输入格式:
第一行为一个整数n(0<n<100),代表要输入的整数个数;第二行为用空格分隔的n个整数。测试用例保证所有整数及求和结果等均可以用int存储。

输出格式:
只有一行,为三个空格分隔的,依次代表整数序列的和、最大值和最小值。

输入样例:
5
10 20 30 40 50
输出样例:
150 50 10*/
下面展示一些
源码如下,很简单,不接用解释了。

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int i ;
    int num;
    int a[100]={0};
    for(i=0 ; i<n;i++)
       {
           scanf("%d",&num);
           a[i]=num;
       }
    int sum = 0;
    int max= a[0];
    int min =a[0];
    for(i= 0;i<n;i++)
       {
           sum = sum +a[i];
           if(a[i]>max)
            {
                max = a[i];
            }
            if(a[i]<min)
              {
                  min = a[i];
              }
       }
    printf("%d %d %d\n",sum,max,min);
    return 0;
}

4.3 密码文

4.3
/*实验3_2_密码文 (100 分)
已知一个英文单词,该单词中只包含大写字母“A—Z”与小写字母“a—z”。你的任务是将英文单词翻译成密码文。翻译规则是把所有字母用它后面的第三个字母替换,并假设字符a接在字符z后面,字符A接在字符Z后面。例如:zero将被翻译成chur。

输入格式:
只有一行,为一个长度不超过100,只包含英文大小写字母的字符串(以回车换行符‘\n’结尾)。

输出格式:
只有一行,为对应字符串的密码文。

输入样例:
AZazbf
输出样例:
DCdcei*/

#include<stdio.h>
int main()
 {
     char x;
     int a[100]={0};
     scanf("%c",&x);
     while(x!='\n')
          {
              if(x>='a'&&x<'x')
                {
                   x=x+3;
                   printf("%c", x);
                }
                else if(x>='A'&&x<'X')
                       {
                           x=x+3;
                           printf("%c", x);}
                        else  if(x>='x'&&x<='z')
                               {
                                 x= x-23;
                                 printf("%c", x);
                                }
                                else if(x>='X'&& x<='Z')
                                    {
                                        x=x-23;
                                        printf("%c", x);
                                    }
            scanf("%c",&x);
          }
    return 0;
 }

此处需要注意的是,字符所以对应的acsii码值,并且对于x,y,z三个字符的特殊处理。

4.4确定成绩等级

将百分制成绩score按下列原则划分其等级:

score≥90等级为A;

80 ≤score<90,等级为B;

70≤score<80,等级为C;

60≤score<70,等级为D;

score<60,等级为E。

输入格式:
只有一个整数,代表成绩score。测试用例保证所有整数可以用int存储。

输出格式:
只有一行,当成绩小于0或大于100时为"The score is out of range!"(不包括引号),否则为输入的学生成绩对应的等级。

输入样例:
89
输出样例:
B*/

#include<stdio.h>
int main()
{
    int score;
    scanf("%d",&score);
    if(score<0||score>100)
      {
          printf("The score is out of range!\n");
      }
    else {
           if(score>=90)
             {
              printf("A\n");
             }
              else if(score>=80&&score<90)
                    {
                    printf("B\n");
                    }
                   else if (score>=70&&score<80)
                          {
                          printf("C\n");
                           }
                         else if (score>=60&&score<70)
                                {
                                  printf("D\n");
                                }
                                 else if(score<60)
                                  {
                                      printf("E\n");
                                  }
    }
    return 0;

}

4.5质数统计

4.5
/*实验3_4_质数统计 (100 分)
现有若干行正整数,请你写一段程序分别统计每一行中有多少个质数。

输入格式:
第一行为一个整数n(0<n<=10),代表测试用例行数。后边是n行,每行为若干个用空格分隔的正整数。这些正整数的最后是-1,表示此行结束。

输出格式:
为n行,每行一个整数,对应于输入的每一行中质数的个数。

测试用例保证输入合法,且所有整数可以用int存储

输入样例:
2
37 54 18 92 39 45 8 84 75 15 33 83 85 54 81 33 89 -1
17 19 60 77 2 92 38 63 92 69 91 94 11 -1
输出样例:
3
4*/

#include<stdio.h>
int IsPrime(int );
int main()
{
    int n ;
    scanf("%d",&n);
    int i = 0;
    int a[10]={0}; 
    int num;
    for (;i<n;i++)
        {
          scanf("%d", &num);
          while(num!= -1)
               {
                   if(IsPrime(num))
                     {
                         a[i]++;
                     }
                     scanf("%d",&num);
               }
        }
    for(i =0;i<n ;i++)
       {
           printf("%d\n", a[i]);
       }
    return 0;
}
int IsPrime (int n )
{
    int i =2;
    for ( ;i<= n-1;i++)
        {
            if(n%i ==0)
              {
                  return 0;
              }
        }
        return 1;
 }
 我写这道题时,使用数组和子函数的方法,所以写起来很简单。如果没有学到数组和子函数的话,可一次采用下面这种写法。

```c
#include<stdio.h>
int main()
{
    int n ;
    scanf("%d",&n);
    int i ;
    int a == 0; 
    int num;
    for (i=0;i<n;i++)
        {
          scanf("%d", &num);
          while(num!= -1)
               {
                  int  j ;
                  for ( j = 2 ; j < num ; j++ )
                  {
                      if(num %j == 0)
                      {
                      break ;
                      }
                   } 
                   if ( j == num )
 					{
 						a ++ ;
					}    
                        
                     scanf("%d",&num);
               }
                printf("%d\n", a) ;
        }
   
    return 0;
}

4.6整除与平方

4.6
/* 实验3_5_整除与平方 (100 分)
已知一个自然数,求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方s。s保证在int范围之内。

输入格式:
只有一行,为自然数n。

输出格式:
只有一行,为一个自然数,代表计算结果。

输入样例:
43
输出样例:
3969*/

#include<stdio.h>
int main()
{
    int n ;
    scanf("%d",&n);
    int i ;
    int sum=0;
    for(i =1 ;i<n;i++)
        {
            if((i%3==0)&&(i%7==0))
              {
                sum = sum +i;
              }
        }
    printf("%d", sum*sum);
    return 0;
    
}

注意是和的平方,而不是平方的和。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

影不在遗忘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值