C语言-循环、数组习题

题目一:计算一个整数的位数。

输入在一行中给出一个绝对值不超过109的整数N,输出N的位数。

#include <stdio.h>
#include <math.h>

int main()
{
    int n,i;
    scanf("%d",&n);
    int m = abs(n);
    if(n==0)
    {
        printf("%d",1);}
    else{
            
    for(i=0;m>0;i++)
    {
        m=m/10;
    }
    printf("%d",i);
}
    return 0;
}
题目二:计算平均成绩并统计不及格人数
#include <stdio.h>
int main()
{
    int a[205],n=0,i=0,h=0;//i需要初始化
    double sum=0;
    
    while(~scanf("%d",&a[i])){
            if(a[i]>=0){
                n++;
                sum=sum+a[i];
                i++;//这一步超级关键!!!
                //没有的话 数组只在a[0]处有数据 往后都是随机值
            }            
            else{
                break;
                }
    }
    double t=sum*1.0/n;
printf("Average = %.2f\n",t);    

    for(i=0;i<n;i++)
    {
    if(a[i]<60){
    
        h++;
        }
    }
    printf("Count = %d",h);
return 0;
    
}

👆 这样写的话少考虑 (1)没有不及格(2)输入的第一个数是负数时 只输出Average

题目三:查找整数

题目要求:

**因为查找需要使用循环一一比对,那么在比对之后发现没有这个数如何输出Not Found呢??**

#include <stdio.h>
int main()
{
    int x,y;
    scanf("%d%d",&x,&y);
    int a[25]={0};
    for(int i=0;i<x;i++){
        scanf("%d",&a[i]);
    }
    
    int t=1,f=1;
    for(int i=0;i<x;i++){
        if(a[i]==y){
            f=0;    
            break;    //一定要写break!!不然循环会走else 
        }
        else{
            t++;
            }
    }
    if(f==0){
        printf("%d",t);
    }
    else{
        printf("Not Found");
    }
    
    return 0;
}

but!!

实际上是我没有审清楚题目,要求输出的是该数组的数组序号,所以11行把t的初始值定为0即可

题目四:计算矩阵两个对角线之和

题目要求也不难 我写了一个这样的函数

#include <stdio.h>
int main()
{
    int a[15][15]={0},n;
    int t=0;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if((j==i)||j+i==n-1){//主要就是这一步!!右上角到左下角的这一条对角线满足行数和列数求和是n-1!!!
                t=t+a[i][j];            
            }
        }
    }
    printf("sum = %d",t);
    return 0;
}
题目五:交换最小值和最大值(PTA 7-5)

这题需要注意的就是只把最大值和最小值放在首位,其他的顺序是不能改变的

#include <stdio.h>

int main()
{
    int n,i,j,x;
    scanf("%d",&n);
    int a[15];
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    int max,min;
    min=a[0];
    //找最小值
    for(i=1;i<n;i++){
    
        if(min>a[i])
        {
            min=a[i];
            j=i;
        }
        }    
        a[j]=a[0];
        a[0]=min;//有了这一步就可以保证数据的顺序不改变了
                 //而不是我之前想的遇到比min小的就交换 顺序会发生改变
         
    max=a[0];
    for(int i=1;i<n;i++){
        if(max<a[i]){
            max=a[i];
            j=i;
        }
    }
    a[j]=a[n-1];
    a[n-1]=max;         
         
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
}

题目六:矩阵顺时针旋转90度
#include <stdio.h>
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    int a[105][105],b[105][105];
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            scanf("%d",&a[i][j]);
        }
    }
    //行列交换
    for(int j=0;j<m;j++){
        for(int i=0;i<n;i++){
            int t=a[i][j];
            a[i][j]=b[j][i];
            b[j][i]=t;
        }
    }
    //行不变 列交换
    for(int j=0;j<m;j++){
        for(int i=0;i<n/2;i++){
            int t=b[j][i];
            b[j][i]=b[j][n-i-1];
            b[j][n-1-i]=t;
            
        }
    }
    for(int j=0;j<m;j++){
        for(int i=0;i<n;i++){
            printf("%d ",b[j][i]);
        }
        printf("\n");
    }
    return 0;
}

注意好for循环的条件就好啦!!!(自己写出来咯!!奖励一个大拇指👍)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值