C语言习题~day10

简介: C语言习题

1.函数调用exec((vl,v2),(v3,v4),v5,v6);中,实参的个数是:( )

A.3


B.4


C.5


D.6


答案解析:


exec((vl,v2),(v3,v4),v5,v6) 总共有四个参数


(v1, v2)属于第一个实参,逗号表达式,真实的参数时v2


(v3,v4)属于第二个实参,逗号表达式,真实的参数是v4


v5属于第三个实参


v6属于第四个实参


因此选择:B

2.关于实参和形参描述错误的是:( )

A.形参是实参的一份临时拷贝


B.形参是在函数调用的时候才实例化,才开辟内存空间


C.改变形参就是改变实参


D.函数调用如果采用传值调用,改变形参不影响实参


答案解析:


A:正确,传参时不论是按照值还是指针方式传递,形参拿到的都是实参的一份拷贝


B:正确,函数没有调用时,新参没有空间


C:错误,如果是按照值的方式传递,形参和实参各自有各自的空间,改变形参不能改变外部的实参


D:正确,因为形参和实参是两个不同的变量

3.在函数调用时,以下说法正确的是:( )

A.函数调用后必须带回返回值


B.实际参数和形式参数可以同名


C.函数间的数据传递不可以使用全局变量


D.主调函数和被调函数总是在同一个文件里


答案解析:


A:错误,函数可以没有返回值,如果没有返回值也就不需要带回任何结果


B:正确,形参和实参在不同的函数中,即不同的作用域,因此形参和实参可以同名


C:错误,可以使用全局变量传参


D:错误,不一定,函数的定义可以放在任意的文件中,使用时只需要包含头文件即可


因此,选择B  

4.关于函数的声明和定义说法正确的是:( )

A.函数的定义必须放在函数的使用之前


B.函数必须保证先声明后使用


C.函数定义在使用之后,也可以不声明


D.函数的声明就是说明函数是怎么实现的


A:错误,函数的定义可以放在任意位置,函数的声明必须放在函数的使用之前


B:正确


C:错误,函数定义在使用之后,使用之前没有声明时,编译器编译时识别不了该函数


D:错误,函数的声明只是告诉编译器函数返回值类型、函数名字以及函数所需要的参数,函数定义才是说明函数是怎么实现的

5.关于return语句说法正确的是哪个?

A.函数中必须有return语句


B.在函数中return语句必须返回值,不能使用return;


C.return语句执行后,return语句后边还有代码则不在执行。


D.return可以返回函数中定义的数组


A: 函数中可以没return语句,只有需要返回值,或者提前结束函数的是才使用retutrn


B:函数中需要提前结束,但是函数的返回类型是void,不需要返回任何值的时候,就使用return;


C: 正确


D: 函数中创建的数组,只能在函数内部使用,函数中返回数组,其实是将数组的地址返回给主调函数,等函数返回后,数组空间还给操作系统了,主调函数得到的地址就是野指针了。

6.二分查找-函数实现   功能:在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回-1.

int bin_search(int arr[], int left, int right, int key)
// arr 是查找的数组
//left 数组的左下标
//right 数组的右下标
//key 要查找的数字
int bin_search(int arr[], int left, int right, int key)
{
  int mid = 0;
  while(left<=right)
  {
        mid = left+(right-left)/2;
 
    if(arr[mid]>key)
    {
      right = mid-1;
    }
    else if(arr[mid] < key)
    {
      left = mid+1;
    }
    else
      return mid;//找到了,返回下标
  }
  return -1;//找不到
}

7.实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定

/*
思路:
1. 设计函数原型,不需要返回值,参数N表示乘法口诀表总共有多少行
2. 设定两个循环,外层循环控制总共有多少行
             内层循环控制每行有多少个表达式以及表达式中的内容
*/
void PrintMulTable(int N)
{
  for (int i = 1; i <= N; ++i)
  {
    for (int j = 1; j <= i; ++j)
    {
      printf("%d*%d=%2d  ", j, i, j*i);
    }
    printf("\n");
  }
}

8.实现函数判断year是不是润年。

/*
思路:
  0. 函数原型设计
    返回值:必须要有返回值,返回结果为0说明不是闰年,为非0说明时闰年
    参数:年份
    
  1. 十年一闰百年不闰:即如果year能够被4整除,但是不能被100整除,则year是闰年
  2. 每四百年再一闰:如果year能够被400整除,则year是闰年
具体实现:请参考以下代码
*/
int is_leap_year(int year)
{
  if(((0 == year%4)&&(0!=year%100))||(0==year%400))
  {
    return 1;
  }
  else
  {
    return 0;
  }
}

9.实现一个函数is_prime,判断一个数是不是素数。利用上面实现的is_prime函数,打印100到200之间的素数。

#include <stdio.h>
#include<math.h>
 
int is_prime(int n)
{
  int i = 0;
  for (i = 2; i <= sqrt(n); i++)
  {
    if (0 == n % i)
    {
      return 0;
    }
  }
  return 1;
}
 
 
int main()
{
  int i = 0;
  for (i = 100; i <= 200; i++) {
    if (is_prime(i) == 1) {
      printf("%d ", i);
    }
  }
  return 0;
}
 

10.使用函数实现数组操作

创建一个整形数组,完成对数组的操作

  1. 实现函数init() 初始化数组为全0
  2. 实现print()  打印数组的每个元素
  3. 实现reverse()  函数完成数组元素的逆置。
void Init(int arr[], int sz, int set)
{
  int i = 0;
  for(i=0; i<sz; i++)
  {
    arr[i] = set;
  }
}
 
 
void Print(int arr[], int sz)
{
  int i = 0;
  for(i=0; i<sz; i++)
  {
    printf("%d ", arr[i]);
  }
  printf("\n");
}
 
 
void Reverse(int arr[], int sz)
{
  int left = 0;
  int right = sz-1;
 
 
  while(left<right)
  {
    int tmp = arr[left];
    arr[left] = arr[right];
    arr[right] = tmp;
    left++;
    right--;
  }
}
 
int main()
{
  int arry[] = { 0,1,2,3,4,5,6,7,8,9 };
  int sz = sizeof(arry) / sizeof(arry[0]);
  Print(arry, sz);
  Reverse(arry, sz);
  Print(arry, sz);
  Init(arry, sz,0);
  Print(arry, sz);
  return 0;
}


目录
相关文章
TU^
|
6月前
|
存储 C语言
C语言习题~day35
C语言习题~day35
TU^
31 1
|
4月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
96 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
TU^
|
6月前
|
编译器 C语言
C语言习题~day31
C语言习题~day31
TU^
24 2
TU^
|
6月前
|
算法 程序员 C语言
C语言习题~day36
C语言习题~day36
TU^
43 1
TU^
|
6月前
|
存储 C语言
C语言习题~day34
C语言习题~day34
TU^
35 1
TU^
|
6月前
|
算法 C语言
C语言习题~day33
C语言习题~day33
TU^
31 1
TU^
|
6月前
|
C语言
C语言习题~day32
C语言习题~day32
TU^
19 1
TU^
|
6月前
|
C语言
C语言习题~day30
C语言习题~day30
TU^
24 1
TU^
|
6月前
|
自然语言处理 C语言 C++
C语言习题~day29
C语言习题~day29
TU^
25 1
TU^
|
6月前
|
存储 C语言
C语言习题~day28
C语言习题~day28
TU^
22 1