考研C语言操作数以及函数刷题基础刷题

目录

第一题 两数交换不用第三个参数(面试题)

 方法一:使用算数方法

方法二:异或

 第二题:将0000 0000 0000 0000 0000 0000 1010 改为 0000 0000 0000 0000 0000 0001 1010

第三题 判断闰年

 第四题:最大公约数

第五题:输出100-200之间的素数

 第六题:乘法口诀表

第七题: 完成对数组的操作

第八题:冒泡排序

第九题:统计二进制中1的个数

 方法一:%与/方法

注意 :负数的情况

方法二: 移位运算和位运算,循环32位

方法三: 只循环1的个数的次数(难)

第十题:获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列 

第十一题 :比较二进制位数不同个数


第一题 两数交换不用第三个参数(面试题)

不用引用第三个参数,实现两个数交换。

 方法一:使用算数方法

#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>//不用第三个参数实现两个数交换//方法一:算数方法int main()
{int a = 5;int b = 3;a = a + b;b = a-b;a = a-b;printf("%d\n", a);printf("%d\n", b);return 0;}

方法二:异或

 ^异或操作符的意思是,相同为0,相异为1;所以可以实现交换。

    a = a ^ b;    //0011^0101=0110=6
    b = a ^ b;    //0110^0101=0011=3
    a = a ^ b;    //0110^0011=0101=5

//方法二:逻辑异或
int main()
{int a = 3;int b = 5;a = a ^ b;	//0011^0101=0110=6b = a ^ b;	//0110^0101=0011=3a = a ^ b;	//0110^0011=0101=5printf("%d\n", a);printf("%d\n", b);return 0;

 第二题:将0000 0000 0000 0000 0000 0000 1010 改为 0000 0000 0000 0000 0000 0001 1010

将0000 0000 0000 0000 0000 0000 1010 改为 0000 0000 0000 0000 0000 0001 1010

//将10:0000 0000 0000 0000 0000 0000 1010 改为 0000 0000 0000 0000 0000 0001 1010
int main()
{int a = 10;//10 = 0000 0000 0000 0000 0000 0000 1010//或上 0000 0000 0000 0000 0000 0001 0000//0000 0000 0000 0000 0000 0001 0000 由0000 0000 0000 0000 0000 0000 0001左移四位获得a |= (1 << 4);printf("%d\n", a);return 0;
}

 

 将26:0000 0000 0000 0000 0000 0001 1010 改为 0000 0000 0000 0000 0000 0000 1010

//将26:0000 0000 0000 0000 0000 0001 1010 改为 0000 0000 0000 0000 0000 0000 1010int main()
{int a = 26;//26 = 0000 0000 0000 0000 0000 0001 1010 //与上 1111 1111 1111 1111 1111 1110 1111//1111 1111 1111 1111 1111 1110 1111由1111 1111 1111 1111 1111 1111 1111 1110向左移动4位//1111 1111 1111 1111 1111 1111 1111 1110可由 0000 0000 0000 0000 0000 0001取反获得a &= ~(1 << 4);printf("%d\n", a);return 0;
}

第三题 判断闰年

 闰年:

1. 能被4整除,但不能被100整除

2.或者能被400整除的年叫闰年

3. 闰年必须是400的倍数,否则为平年

//打印打印1000年到2000年之间的闰年int main()
{int i = 1000;for (i = 1000; i <= 2000; i++){if(i%4==0&&i%100!=0||i%400==0){printf("%d ", i);}}return 0;
}

判断是不是闰年

int main()
{/*int i = 1000;for (i = 1000; i <= 2000; i++){if(i%4==0&&i%100!=0||i%400==0){printf("%d ", i);}}*/int i = 0;scanf("%d", &i);if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0){printf("是闰年\n");}else{printf("不是闰年\n");}return 0;
}

 第四题:最大公约数

注意:

1. 两个scanf后面不要加空格或\n要不然编译器不知道什么时候为输入完。

2. 两个for循环是可以合并成一个的。 

//最大公约数int main()
{int n = 0;int m = 0;scanf("%d", &n);scanf("%d", &m);int i = 0;int sum = 0;for(i=1;i<n&&i<m;i++){if(n%i==0&&m%i==0){sum = i;}}printf("最大公约数为%d\n", i);return 0;
}

第五题:输出100-200之间的素数

注意:

1.先遍历100-200

2.在遍历2——(n-1)

3.如果2——(n-1)之间存在不是素数的就break;

4.如果循环到最后,如果i=n-1,那么就是素数。

//打印100-200素数int main()
{int i = 0;int j = 0;for(i=100;i<200;i++){for(j=2;j<i;j++){if (i % j == 0){break;}}if(i==j){printf("%d ", i);}}return 0;
}

 第六题:乘法口诀表

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

如:输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表。

//在屏幕上输出9*9乘法口诀表
void mul(int n)
{for (int i = 1; i <= n; i++){for (int j = 1; j <= i; j++){printf("%d*%d=%d ", j, i, j * i);}printf("\n");}
}
int main()
{int n = 0;scanf("%d", &n);mul(n);return 0;
}

第七题: 完成对数组的操作

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

  1. 实现函数init() 初始化数组为全0
  2. 实现print()  打印数组的每个元素
  3. 实现reverse()  函数完成数组元素的逆置。

要求:自己设计以上函数的参数,返回值。

//初始化为0
void init(int arr[], int n)
{for(int n=0;n<10;n++){arr[n] = 0;}for(int j=0;j<10;j++){printf("%d", arr[j]);}printf("\n");
}
//打印数组
void print(int arr[], int n)
{for (int j = 0; j < 10; j++){printf("%d", arr[j]);}printf("\n");}
//置逆数组
void reverse(int arr[],int n)
{int left = 0;int right = n - 1;int sum = 0;while(left<right){sum = arr[right];arr[right] = arr[left];arr[left] = sum;left++;right--;}for (int j = 0; j < 10; j++){printf("%d", arr[j]);}printf("\n");}
int main()
{int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };/*init(arr, 10);*///print(arr, 10);reverse(arr, 10);return 0;
}

 

第八题:冒泡排序

 

//冒泡排序
void bubble(int arr[], int n)
{int i = 0;int j = 0;int tmp = 0;for(i=0;i<n-1;i++){for(j=0;j<n-1-i;j++){if(arr[j] > arr[j+1]){tmp = arr[j ];arr[j] = arr[j+1];arr[j+1] = tmp;}}}}
int main()
{int arr[10] = { 10,9,8,7,6,5,4,3,2,1 };bubble(arr, 10);for(int i=0;i<10;i++){printf("%d ", arr[i]);}return 0;
}

第九题:统计二进制中1的个数

 方法一:%与/方法

用%2,/2的方法。

例如15的二进制 0000.......0000 1111。四个1

注意 :负数的情况

如 -1:在计算机中是以补码的情况存储。 

-1的补码为:1111 1111 1111 1111 1111 1111 1111 1111 

-1%2=-1;-1模2余-1

-1/2=0;  -1除2,不够除,所以整数为0;所以会导致i不会++。结果为0;

 

所以我们需要用无符号整形 unsigned int,让-1的每一位都是有效位。 

//统计二进制中1的个数void fun(unsigned int n)
{int sum = 0;int i = 0;while(n){sum = n % 2;n = n / 2;if (sum == 1)i++;}printf("%d", i);
}
int main()
{int n = 0;scanf("%d", &n);fun(n);return 0;
}

方法二: 移位运算和位运算,循环32位

//方法二
void fun(int n)
{int count = 0;for(int i=0;i<32;i++){if((n>>i)&1==1){count++;}}printf("%d", count);
}
int main()
{int n = 0;scanf("%d", &n);fun(n);return 0;
}

 每一位都与1做与运算,双1为1。i从0开始,到32位结束。

因为,int是4字节,字节8位。计算机中都是以补码存储。

方法三: 只循环1的个数的次数(难)

用n&(n-1),这样在二进制可以每次都减少一个1,循环了几次就有几个1。

 

//方法三void fun(int n)
{int i = 0;while(n){n = n & (n - 1);i++;}printf("%d", i);
}
int main()
{int n = 0;scanf("%d", &n);fun(n);return 0;
}

第十题:获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列 

 

void fuc(int n)
{for(int i=30;i>=0;i -=2){printf("%d ", (n >> i) & 1);}printf("\n");for(int j=31;j>=0;j-=2){printf("%d ", (n >> j) & 1);}}
int main()
{int n = 0;scanf("%d", &n);fuc(n);return 0;
}

第十一题 :比较二进制位数不同个数

编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? 

输入例子:

1999 2299

输出例子:7

 分别将这两个数的每一位取出来比较。

//比较二进制位数
void func(int n,int m)
{int count = 0;for(int i=0;i<32;i++){if (((n >> i) & 1) != ((m >> i) & 1))count++;}printf("%d", count);
}
int main()
{int n = 0;int m = 0;scanf("%d %d", &n, &m);func(n, m);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/448626.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

幻兽帕鲁能在Mac上运行吗?幻兽帕鲁Palworld新手攻略

幻兽帕鲁能在Mac上运行吗&#xff1f; 《幻兽帕鲁》目前还未正式登陆Mac平台&#xff0c;不过通过一些方法是可以让游戏在该平台运行的。 虽然游戏不能在最高配置下运行&#xff0c;但如果你安装了CrossOver这个软件&#xff0c;就可以玩了。这是为Mac、Linux和ChromeOS等设计…

Iceberg从入门到精通系列之二十三:Spark查询

Iceberg从入门到精通系列之二十三&#xff1a;Spark查询 一、使用 SQL 查询二、使用 DataFrame 进行查询三、Time travel四.Incremental read五、检查表六、History七、元数据日志条目八、Snapshots九、Files十、Manifests十一、Partitions十二、所有元数据表十三、参考十四、使…

CSS要点总结

一、CSS 快速入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css 快速入门</title><!-- 解读1. 在 head 标签内&#xff0c;出现了 <style type"text/css"></style…

华为通过流策略实现策略路由(重定向到不同的下一跳)

通过流策略实现策略路由&#xff08;重定向到不同的下一跳&#xff09; 组网图形 图1 配置策略路由组网图 策略路由简介配置注意事项组网需求配置思路操作步骤配置文件 策略路由简介 传统的路由转发原理是首先根据报文的目的地址查找路由表&#xff0c;然后进行报文转发。但…

Weblogic反序列化漏洞分析之CVE-2021-2394

目录 简介 前置知识 Serializable示例 Externalizable示例 联系weblogic ExternalizableLite接口 ExternalizableHelperl类 JdbcRowSetImpl类 MethodAttributeAccessor类 AbstractExtractor类 FilterExtractor类 TopNAggregator$PartialResult类 SortedBag$Wrappe…

python3支持在通过requests库调试django后台接口写测试用例

python测试用例库使用 unittest库可以支持单元测试用例编写和验证。 基本使用方法 运行文件可以将文件中的用例全部执行一遍 import unittestclass TestBasicFunc(unittest.TestCase):def test_basic_asert(self):self.assertEqual(1, 1)if __name__"__main__":u…

ESU毅速丨为什么增材制造广受关注?

随着科技的飞速发展&#xff0c;增材制造3D打印技术逐渐成为制造业的新宠。包括航空航天、汽车、家电、电子等各行业都在积极拥抱3D打印&#xff0c;为什么3D打印能引起制造业广泛关注与应用&#xff1f;它的主要优势有哪些&#xff1f; 首先&#xff0c;3D打印减少浪费。3D打印…

2001-2022年各省农产品进出口数据

2001-2022年各省农产品进出口数据 1、时间&#xff1a;2001-2022年 2、来源&#xff1a;商务部、农业年鉴 3、指标&#xff1a;年份、省份、农产品出口额&#xff08;亿元&#xff09;、农产品进口额&#xff08;亿元&#xff09;、农产品出口额&#xff08;万美元&#xff…

linux基础学习(9):用户与组

1.三个用户文件 1.1用户信息文件&#xff1a;/etc/passwd 打开这个文件后&#xff0c;可以看到系统内所有的用户的信息&#xff0c;其中每一行是一个用户 列数含义1用户名2 密码位。 x代表该用户有密码 3 用户uid。 超级用户为0&#xff08;就是root用户&#xff09;&#x…

LeetCode:206反转链表

206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 不难&#xff0c;小细节是单写一个循环&#xff0c;把特殊情况包含进去&#xff0c; 单链表核心&#xff1a;上一个结点&#xff0c;当前结点&#xff0c;下一个结点&#xff0c; 代码&#xff1a;注释&#xff08;算是…

AI数字人训练数据集汇总

唇读&#xff08;Lip Reading&#xff09;&#xff0c;也称视觉语音识别&#xff08;Visual Speech Recognition&#xff09;&#xff0c;通过说话者口 型变化信息推断其所说的内容&#xff0c;旨在利用视觉信道信息补充听觉信道信息&#xff0c;在现实生活中有重要应用。例如&…

Python学习03 -- 函数相关内容

1.def --- 这个是定义函数的关键字 \n --- 这个在print()函数中是换行符号 1.注意是x, 加个空格之后再y 1.形式参数数量是不受限制的&#xff08;参数间用&#xff0c;隔开&#xff09;&#xff0c;传实参给形参的时候要一一对应 返回值 --- 函数返还的结果捏 1.写None的时…