pat乙级笔记

PAT乙级笔记

C语言

# include <stdio.h>
 main()
{
  int n;
  int num =0;
  scanf("%d",&n);
  if (n <=1000)
  {
    while (n!=1)
    {
       if(n%2)
       n =(3*n+1)/2;
       else 
       n=n/2;
       num+=1;
    }
  }
  printf("%d",num);
  return 0;
}
  • 1002
    写出这个数
    1.因为数字比较长,用整型或长整型无法满足,因此使用字符串
    2.用拼音写出时,通过数组借助数组的索引,而不需要使用switch一类较繁琐
#include <stdio.h>
#include<string.h>
void printsum();
int main()
{
  char n[100];
  char *p=n;
  scanf("%s",n);
  int sum =0;
  //求各位数之和sum
  while(*p!='\0')
  {
    sum+=(*p-'0');
    p++;
  }
  printsum(sum);
}
//输出sum的各位拼音
void printsum(int m)
{
  char *pinyin[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
  int split[10];
  int i=0;
  while(m/10)
  {
    split[i]=m%10;
    m/=10;
    i++;
  }
  split[i]=m;
  for (i;i>0;i--)
    printf("%s ",pinyin[split[i]]);
  printf("%s\n",pinyin[split[i]]);
}
  • 1003
    我要通过!
    这题的题意真的 容易让人误解。
    说一下我对这一题的理解:
    首先有且仅能有PAT三个字母,其次PAT的首尾可以加上任意数量的A,且要求数量相等
    基于第二个条件如果aPbTc是正确的,那么b一定为A,a=c,因此aPbATac即可理解为中间必为PAAT,末尾的A的数量为开头的两倍。
    综上正确的情况仅有两种:
    1.中间为PAT时,首尾的A数量相同
    2.中间为PAAT时,末尾的A数量为开头的两倍

  • 列表内容
    成绩排序
    使用结构体

 #include <stdio.h>
#include<string.h>
struct stu
{
    char name[10];
    char stnum[10];
    int grade;
}stus;
int main()
{
    int num;
    scanf("%d",&num);
    int max=0,min=100;
    int ind_max=-1,ind_min=-1;
    int i;
    struct stu st[100];
    for(i=0;i<num;i++)
    {
        scanf("%s %s %d",&st[i].name,&st[i].stnum,&st[i].grade);
    }
    for (i=0;i<num;i++)
    {
        if (st[i].grade>=max)
        {
                max=st[i].grade;
                ind_max=i;
        }
        if(st[i].grade<=min)
        {
            min=st[i].grade;
            ind_min=i;
        }
    }
    printf("%s %s\n",st[ind_max].name,st[ind_max].stnum);
    printf("%s %s\n",st[ind_min].name,st[ind_min].stnum);
    return 0;
}

报错:
a.c: In function ‘main’:
a.c:19:11: warning: format ‘%s’ expects argument of type ‘char ’, but argument 2 has type ‘char ()[10]’ [-Wformat=]
scanf(“%s %s %d”,&st[i].name,&st[i].stnum,&st[i].grade);

a.c:12:2: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf(“%d”,&num);
^~~~~~~~~~~~
a.c:19:3: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf(“%s %s %d”,&st[i].name,&st[i].stnum,&st[i].grade);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值