个人主页:平行线也会相交
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创
收录于专栏【C语言基础习题】
1.函数可以传值调用,传值调用的时候形参是实参的一份临时拷贝。
2.函数可以传址调用,传址调用的时候,可以通过形参操作实参。
3.函数可以嵌套调用,但是不可以嵌套定义。
4.形参和实参可以同名。
5.函数定义是说明函数是怎么实现的。
6.形参在函数调用的时候才实例化,才开辟内存空间。
7.函数调用如果采用传值调用,改变形参不影响实参。
8.函数设计应追求高内聚低耦合(即模块化)。是衡量程序的模块之间独立性的标准。要保证模块(函数,方法)内部高内聚,之间低耦合。比如一个程序有50个函数,这个程序执行得非常好;然而一旦你修改其中一个函数,其他49个函数都需要仍然可以不需要修改,这就说明程序的函数之间保持了较好的独立性,即:低耦合。同时各个模块的变量也是和自己模块保持着紧密的联系。说明也是高内聚的。可以这样理解,一个企业的管理, 最理想的情况就是各个部门各司其职,井然有序,互不干涉, 但是需要沟通交流的时候呢, 各个部门都可以找到接口人专门负责部门沟通以及对外沟通。
9.要尽量少的使用全局变量。(因为全局变量在整个工程中哪里、到处都可以使用,这个地方可以改,那个地方也可以改,此时就乱套了。少的去使用全局变量不至于让代码失控。)
10.函数的参数不易过多。
11.设计函数时,尽量做到谁申请的资源就由谁来释放。
12.库函数的使用必须包含对应的头文件。
13.在不同的函数中可以使用相同名字的变量。
14.函数中的形式参数是在栈中保存的。
15.在一个函数内定义的变量只能在本函数范围内有效。
16.在一个函数内复合语句中定义的变量在本函数范围内无效。
1.函数调用fun((v1,v2),(v3,v4),v5,v6)中,实参的个数是4。(逗号表达式算一个)。
//冒泡排序
void bubble_sort(int arr[], int sz)
{int i = 0;for (i = 0; i < sz - 1; i++){int j = 0;for (j = 0; j < sz - 1 - i; j++){if (arr[j] > arr[j + 1]){int tmp = 0;tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}
}
#include
int main()
{int arr[] = { 4,5,6,3,7,2,8,1,9,10 };int sz = sizeof(arr) / sizeof(arr[0]);//进行排序bubble_sort(arr, sz);//打印数据int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}return 0;
}
1.实现函数Init()初始化为全0。
2.实现Print()打印数组的每一个元素
3.实现reverse()函数完成数组元素的逆置。
#include
void Init(int arr[], int sz)
{int i = 0;for (i = 0; i < sz; i++){arr[i] = 0;}
}
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--;}
}
void Print(int arr[], int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");
}
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int sz = sizeof(arr) / sizeof(arr[0]);//Init(arr, sz);//把数组初始化为0Print(arr, sz);//打印Reverse(arr,sz);//实现数组逆置Print(arr, sz);//打印return 0;
}
//交换数组
//通过创建临时变量的方式
#include
int main()
{int arr1[5] = { 1,2,3,4,5 };int arr2[5] = { 6,7,8,9,10 };int tmp = 0;int sz = sizeof(arr1) / sizeof(arr1[0]);int i = 0;for (i = 0; i < sz; i++){tmp = arr1[i];arr1[i] = arr2[i];arr2[i] = tmp;}return 0;
}
#include
int i;//全局变量-不初始化-默认是0
int main()
{i--;if (i > sizeof(i))//sizeof()-计算变量/类型所占内存的大小{printf(">\n");}else{printf("<\n");}return 0;
}
#include
double Pow(int n, int k)
{if (k == 0)return 1;else if (k > 0){return n * Pow(n, k - 1);}else{return 1.0 / Pow(n, -k);}
}
int main()
{int n = 0;int k = 0;double ret = 0.0;scanf("%d %d", &n, &k);ret = Pow(n, k);printf("%lf", ret);return 0;
}
#include
int Digitsum(n)
{if (n > 9){return Digitsum(n / 10) + n % 10;}else{return n;}
}
int main()
{int n = 0;scanf("%d", &n);int sum = Digitsum(n);printf("%d", sum);return 0;
}
#include
#include
void reverse_string(char arr[])
{int l = 0;int r = strlen(arr) - 1;while (l < r){char tmp = arr[l];arr[l] = arr[r];arr[r] = tmp;l++;r--;}
}
int main()
{char arr[] = "abcdef";reverse_string(arr);printf("%s", arr);return 0;
}
#include
#include
int Strlen(char *str)
{int count = 0;while ((*str) != '\0'){count++;str++;}return count;
}
void reverse_string(char *str)
{int l = 0;int r = Strlen(str) - 1;while (l < r){char tmp = *(str + l);//char tmp = str[l];*(str + l) = *(str + r);//str[l]=str[r];*(str + r) = tmp;//str[r]=tmp;l++;r--;}
}
int main()
{char arr[] = "abcdef";reverse_string(arr);printf("%s", arr);return 0;
}
//注意此算法不能解决n是负数的问题
#include
int count_bit_one(int n)
{int count = 0;while (n){if (n % 2 == 1){count++;}n /= 2;}return count;
}
int main()
{int n = 0;scanf("%d", &n);int count = count_bit_one(n);printf("%d", count);return 0;
}
当输入为负数时:
#include
int count_bit_one(unsigned int n)
{int count = 0;while (n){if (n % 2 == 1){count++;}n /= 2;}return count;
}
int main()
{int n = 0;scanf("%d", &n);int count = count_bit_one(n);printf("%d", count);return 0;
}
#include
int count_bit_one(int n)
{int count = 0;int i = 0;for (i = 0; i < 32; i++){if (((n >> i) & 1) == 1){count++;}}return count;
}
int main()
{int n = 0;scanf("%d", &n);int count = count_bit_one(n);printf("%d", count);return 0;
}
#include
int count_bit_one(int n)
{int count = 0;while (n){n = n & (n - 1);count++;}return count;
}
int main()
{int n = 0;scanf("%d", &n);int count = count_bit_one(n);printf("%d", count);return 0;
}
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入样例:
1999 2299
输出样例:
7
//求二进制位中不同位的个数
#include
int get_diff_bit(m, n)
{int tmp = m ^ n;return count_bit_one(tmp);
}
int count_bit_one(int n)
{int count = 0;while (n){n = n & (n - 1);count++;}return count;
}
int main()
{int m = 0;int n = 0;scanf("%d %d", &m, &n);int count = get_diff_bit(m, n);printf("%d", count);return 0;
}
获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列。
//12.打印二进制中的奇数和偶数位。
#include
void print(int n)
{int i = 0;printf("奇数位:\n");for (i = 30; i >= 0; i -= 2){printf("%d ", (n >> i) & 1);}printf("\n偶数位:\n");for (i = 31; i >= 1; i -= 2){printf("%d ", (n >> i) & 1);}
}
int main()
{int n = 0;scanf("%d", &n);print(n);return 0;
}
#include
int main()
{int m = 0;int n = 0;scanf("%d %d", &m, &n);m = m ^ n;n = m ^ n;m = m ^ n;printf("%d %d", m, n);return 0;
}
实现一个函数,判断一个数不是素数
利用上面的函数打印100到200之间的素数。
//函数判断素数
#include
#include
int is_prime(int n)
{int i = 2;for (i = 2; i <= sqrt(n); i++){if (n % i == 0)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;
}
实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定。
如:输入9,输出9^9口诀表,输入12,输出,…
//实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定。
#include
void print_table(int n)
{int i = 0;for (i = 1; i <= n; i++){int j = 0;for (j = 1; j <= i; j++){printf("%-2d*%-2d=%-3d ", i, j, i * j);}printf("\n");}
}
int main()
{int n = 0;scanf("%d", &n);print_table(n);return 0;
}