C语言刷题-day3

简介: C语言刷题-day3

一、选择题

1、已知函数的原型是: int fun(char b[10], int *a); ,设定义: char c[10];int d; ,正确的调用语句是( )


A: fun(c,&d);         B: fun(c,d);         C: fun(&c,&d);         D: fun(&c,d);

答案解析:

正确答案:A

参数a是指针,要接收地址,BD错误。参数b可以接收的是char*,而&c的类型是char(*)[10],C错误

知识点:

1、指针的定义方式:type+*

2、指针变量,专门用来存放地址的变量

3、数组作为函数参数:数组传参实际是把数组的首元素地址传递过去了。(int arr[]本质是指针:int* arr)

4、数组名是什么?

       ①结论:数组名是数组首元素的地址

但是有两个例外:

       ②&数组名,这里的数组名是表示整个数组,&数组名取出的是数组的地址

       ③sizeof(数组名),这里的数组名是表示整个数组,计算的是整个数组的大小,单位是字节

2、请问下列表达式哪些会被编译器禁止【多选】( )

int a = 248, b = 4;

int const *c = 21;

const int *d = &a;

int *const e = &b;

int const * const f = &a;

A: *c = 32;         B: *d = 43         C: e=&a         D: f=0x321f


答案解析:

正确答案:ABCD

如果 const 位于 * 的左侧,则 const 就是用来修饰指针所指向的变量,即指针指向为常量;*c和*d不能变。

如果 const 位于 * 的右侧,则 const 就是修饰指针本身,即指针本身是常量;e和f不能变。

知识点:

       “左定值,右定向”。

cnnst在*的左边,则指针指向的变量的值不能直接通过指针改变(可以通过其他途径改变);在*的右边,则指针的指向不可变。

3、下列不能实现死循环的是( )

A: while(1){}         B: for(;1;){}         C: do{}while(1);         D: for(;0;){}

答案解析:

正确答案:D

只有条件为真时才进行循环,ABC中1为真,D中0为假

知识点:

1、C语言中:0为假,非0为真。

2、while(循环条件){循环体}---先判断,在执行。

3、for(初始化部分;循环条件部分;调整部分){循环体}

      ① 初始化部分:用来初始化循环变量的,只在循环开始时,执行一次

      ② 循环条件部分:用来判断循环什么时候终止,(每次循环都要执行,如果循环条件为true,进入循环体,如果为false,退出循环)

      ③ 调整部分:用于循环条件的调整,每次循环结束的时候执行(循环中,必须有使循环条件趋于假的语句)

4、do{}while(循环条件){循环体}---先执行,再判断(至少执行一次)

二、编程题

1、首先输入要输入的整数个数 n ,然后输入 n 个整数。输出为 n 个整数中负数的个数,和所有正整数的平均值,结果保留一位小数。


注意: 0 即不是正整数,也不是负数,不计入计算; 本题有多组输入用例。

输入描述:首先输入一个正整数 n ,然后输入 n 个整数。

输出描述:输出负数的个数,和所有正整数的平均值。

示例:

输入: 5

       1 2 3 4 5

           10

       1 2 3 4 5 6 7 8 9 0

输出: 0 3.0

       0 5.0


代码实例:

分析:这道题其实通过 scanf 捕捉数据即可,统计负数个数,以及正数个数,并且在统计正数个数的过程中求取正数总和,最后计算得出平均数即可。需要注意的是所有数字中0是不统计在内的


步骤:

       1、定义1个变量n(输入的整数个数)

       2、多组输入:while(scanf(“%d”,&n)!=EOF)

       3、循环体:

               ①定义6个变量:count1(负数个数 )   count2(正数个数)     sum(正数总和)        tmp(输入整数)      int i=0(输入次数)        float avg=0f;

               ②(嵌套循环)输入n个整数并捕捉数据:for(i=0;i<n;i++)

               ③求平均数:if(count2!=0)

                                     avg=(float)sum/count2;

               ④输出:printf("%d %.1f",count1,avg);

#include <stdio.h>
int main() 
{
    int n=0;//输入正整数n
    while(scanf("%d",&n)!=EOF)//多组输入n
    {
        int tmp=0;//输入整数
        int i=0;//循环的个数
        int count1=0;//负数个数
        int count2=0;//正数个数
        int sum=0;//正数总和
        float avg=0;//正数平均值
        //输入n个整数,并捕捉数据
        for(i=0;i<n;i++)
        {
            scanf("%d",&tmp);
            if(tmp<0)
            {
                count1++;
            }
            else if(tmp>0)
            {
                count2++;
                sum+=tmp;
            }
        }
        //求正数平均值
        if(count2!=0)
        {
            avg=(float)sum/count2;
        }
        //输出
        printf("%d %.1f",count1,avg);
    }
    return 0;
}
相关文章
|
5月前
|
C语言
【C语言刷题系列】合并两个有序数组
【C语言刷题系列】合并两个有序数组
|
3月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
5月前
|
C语言
【C语言刷题系列】删除公共元素
【C语言刷题系列】删除公共元素
|
5月前
|
存储 C语言
【C语言刷题系列】对数字添加逗号
【C语言刷题系列】对数字添加逗号
|
5月前
|
C语言
【C语言刷题系列】喝汽水问题
【C语言刷题系列】喝汽水问题
|
27天前
|
机器学习/深度学习 编译器 C语言
C语言刷题(中)(保姆式详解)
C语言刷题(中)(保姆式详解)
12 0
|
3月前
|
C语言
【C语言刷题训练】——第7节(含代码与分析思路)
【C语言刷题训练】——第7节(含代码与分析思路)
|
3月前
|
测试技术 C语言 C++
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
|
3月前
|
存储 C语言
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
|
5月前
|
C语言
C语言刷题(函数)
C语言刷题(函数)