2019年 7月12日学习记录

今天主要写了几条程序题,复习了一下make工程管理器的用法。
下面罗列一下今天写的题
1.已知 ch 是字符型变量,下面不正确的赋值语句是__a__。
a. ch=‘a+b’; b. ch=’\0’; c. ch=‘7’+‘9’; d. ch=5+9;
a是字符串要用双引号,d的解释如下c语言中“+”的优先级高于赋值号,所以先执行右边,也就是5+9=13,而13是int型,此时系统会自动通过ASCII码讲13转换为13对应的字符值。(如65对应ASCII中的’A’)
具体等价于char ch=(char*)(5+9);
2.编写一个程序,求出满足下列条件的四位数:该数是个完全平方数,且第一、三位数字之和为10,第二、四位数字之积为12

#include <stdio.h>
#include<math.h>
int main()
{
    int a=0,b=0,c=0,d=0,i=1000;
    for(i;i>999&&i<10000;i++)
    {
    if(sqrt(i)==(int)sqrt(i))       /*i开根号得到整数,(int)sqrt(i)是整形*/
        {
        d=i%10;         /*个位*/
        a=i/1000;       /*千位*/
        b=i/100%10;     /*百位*/
        c=i%100/10;     /*十位*/
        if(a+c==10&&b*d==12)
        printf("这样的数有%3d",i);
        }
    }
    return 0;
}

方法二

#include <stdio.h>

int main()
{
    int i;
    int j=32;
    int a=0,b=0,c=0,d=0;
    for(j;j<100;j++)/*31*31=961,32*32=1024*/
    {
        i=j*j;
        a=i/1000;
        b=i/100%10;
        c=i%100/10;
        d=i%10;       
            if(a+c==10&&b*d==12)
        printf("这样的四位数有:%d\n",i);

    }
    return 0;
}

3.通过编程实现,统计1~n有多少个9?

#include <stdio.h>

int main()
{
    int i;
    int n;
    int num=0;
    int tmp,a;
    printf("输入一个数:");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        tmp=i;
    while(tmp!=0)
    {
       a =tmp%10;
        tmp=tmp/10;
        if(a==9)
        {
            num++;
        }

    }
    }
    printf("1~%d有%d个9\n",n,num);
    return 0;
}

4.输入5个数(含负数、小数)将它们按由小到大的顺序排列起来
提示:需要排数的数字通过参数传递进来,
例如:输入:./a.out -1 2.1 -3 5 7 输出: -3 -1 2.1 5 7

#include <stdio.h>
#define NUMBER 5
float bosrt(float a[], int n)
{
     int i,j;
    for(i=1;i<n;i++){
        for(j=n-1;j>0;j--){
            if(a[j]<a[j-1]){
                float tmp=a[j];
                a[j]=a[j-1];
                a[j-1]=tmp;    
            }
        }
    }
}
int main()
{
    float a[NUMBER];
    int i;
    for(i=0;i<NUMBER;i++){
        printf("数%d:",i+1);
        scanf("%f",&a[i]);
    }
    bosrt(a,NUMBER);
    for(i=0;i<NUMBER;i++){
        printf("从小到大排序为a[%d]:%f\n",i+1,a[i]);
    }
    return 0;
}

5.一个数如果恰好等于它的因子之和,这个数被成为”完数”,例如:6=1+2+3.请编程找出1000以内的完数

#include <stdio.h>
int main()
{
    int i,j;
    int sum=0;
    for(i=1;i<1000;i++)
    {
       sum = 0;
        for(j=1;j<i;j++)
        {
            if(i%j==0)
        {
                sum+=j;
        }
        }
        if(sum==i)
        {
            printf("完数有:%d\n",i);
        }
     }
    return 0;
}

有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
提示:用数组完成


#include <stdio.h>

int main()
{
    int n,func(int n);//提示输入圈子的人数
    printf("请输入一个数:");
    scanf("%d",&n);
    printf("剩下的数是:%d\n",func(n)); //输出最后留下来的编号
    return 0;
 }
        
int func(int n)
{
    int group[1000];//定义存储编号的数组
    int i,nn,sum=0; //定义存储数组中元素个数的变量
     nn=n; //将1,2,3,……,n按次序存入数组
    for(i=0;i<n;i++)
    group[i]=i+1;
    for(i=0;;i++) //循环一轮后将i赋值为0以进行下一轮
{
    if(i==n)
    i=0; //记录不为零的元素的个数,为零(该元素已经被删除)则进入下一次循环
     if(group[i]!=0)
      sum++;
     else continue;
     if(sum%3==0)
       {
         group[i]=0;
         nn--;
       }//当个数为3的倍数时,将该元素赋值为零(即退出圈子),数组中元素的个数(nn)减一

     //当数组中只剩一个元素时,退出循环
     if(nn==1)
     break;
      } //寻找并返回剩下的元素的值(即编号)
     for(i=0;i<n;i++)
     if(group[i]!=0)
     return group[i];
 }


7.快速找出一个数组中的最大数、第二大数。

#include <stdio.h>
#define NUMBER 9999
int main()
{
    int a[NUMBER];
    int i;
    int n;
    printf("输入数字个数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
    scanf("%d",&a[i]);
    }
    int max=a[0];
    int max2;
    if(a[1]<max)
    {
        max2=a[1];
    }
    else
    {
        max=a[1];
        max2=a[0];
    }
    for(i=2;i<n;i++)
    {
    if(max<a[i])
    {
        max2=max;
        max=a[i];
    }
    else if(max2==max||(max!=a[i]&&max2<a[i]))
    {
        max2=a[i];
    }

    }
    printf("最大数为%d,第二大得数为%d\n",max,max2);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值