C语言-语句、位运算练习题案例
【摘要】 这篇文章列出C语言语句、位运算的基础练习题,巩固语句、位运算的应用。
这篇文章列出C语言语句、位运算的基础练习题,巩固语句、位运算的应用。
1. 输出100~200之间所有可逆素数
(除了1和本身能够整除)
比如: 3 7 13 11
示例:
#include <stdio.h>
int main(int argc, char * argv[])
{
int i,j,k;
int a,b,c;
int data;
for(i=100;i<200;i++) //范围
{
for(j=2;j<i;j++) //排除可能条件
{
if(i%j==0) //不是素数
{
break;
}
}
if(j==i) //素数判断成功
{
a=i/100;//123
b=i%100/10;
c=i%10/1;
data=c*100+b*10+a*1;
for(j=2;j<data;j++) //判断素数
{
if(data%j==0)
{
break;
}
}
if(j==data) //判断是不是素数
{
printf("%d,%d\n",i,data);
}
}
}
return 0;
}
2. 输入任意3个数,按从大到小的顺序输出
练习if语句,了解排序原理
示例:
#include <stdio.h>
int main(int argc, char * argv[])
{
int a=500,b=200,c=600,tmp;
if(a<b) //如何条件成立,就交换a和b的位置 ----a的值最大
{
tmp=a;
a=b;
b=tmp;
}
if(b<c) //如何条件成立,交换b和c的值-----b的值最大
{
tmp=b;
b=c;
c=tmp;
}
if(a<b) //如何条件成立,交换a和b的值-----a的值最大
{
tmp=b;
b=a;
a=tmp;
}
printf("%d,%d,%d\n",a,b,c); //从大到小 600,500,200
return 0;
}
3. 编程计算: 123+345….99100101的值
#include <stdio.h>
int main(int argc, char * argv[])
{
//1*2*3+3*4*5….99*100*101
int i;
int sum=0;
for(i=1;i<=99;i+=2)
{
sum+=i*(i+1)*(i+2);
}
printf("sum=%d\n",sum);
return 0;
}
4. 输出0~100以内的偶数之和
#include <stdio.h>
int main(int argc, char * argv[])
{
int i;
int sum=0;
for(i=0;i<=100;i++)
{
if(i%2==0) //判断偶数
{
sum+=i;
}
}
printf("sum=%d\n",sum);
return 0;
}
5. 打印所有的水仙花数
水仙花数是3位数—个位+十位+百位立方和等于它本身
例如: 123=111+222+333
示例:
#include <stdio.h>
int main(int argc, char * argv[])
{
int i;
int sum=0;
int a,b,c;
for(i=100;i<=999;i++)
{
a=i/100;
b=i%100/10;
c=i%10/1;
sum=a*a*a+b*b*b+c*c*c; //计算立方和
if(sum==i)
{
printf("%d ",i);
}
}
return 0;
}
6. 转换大小写 (位运算完成大小写转换)
#include <stdio.h>
int main(int argc, char * argv[])
{
char c;
printf("输入一个字符:");
scanf("%c",&c);
c=c^0x20; //0b00100000 0x123
printf("%c\n",c);
return 0;
}
7. 使用位运算交换两个变量的值
示例: (可以做加密算法)
#include <stdio.h>
int main(int argc, char * argv[])
{
/*
01000001 原文 ^
01100001 密码
--------
00100000 密文
01100001 密码
--------------
01000001 原文
*/
int a=65,b=97;
a=a^b;
b=a^b;
a=a^b;
printf("%d,%d\n",a,b);
return 0;
}
8. 完成位运算的综合运用
(1)定义一个int类型的变量。
(2)在int类型类型变量里存放4个字母(A B C D)。
(3)存放之后在将字母取出来打印出来。
(4) 在不影响其他数据的情况下将B改为K或者其他数据
#include <stdio.h>
int main(int argc, char * argv[])
{
unsigned int data=344545;
/*1. 存放数据*/
data='A'<<24;
data|='B'<<16;
data|='C'<<8;
data|='D'<<0;
/*2. 取出数据*/
printf("%c\n",data>>24);
printf("%c\n",(data>>16)&0xFF);
printf("%c\n",(data>>8)&0xFF);
printf("%c\n",(data>>0)&0xFF);
/*3. 修改数据的值*/
data&=~(0xFF<<16); //清除数据
data|='K'<<16; //赋值
/*4. 取出数据*/
printf("%c\n",data>>24);
printf("%c\n",(data>>16)&0xFF);
printf("%c\n",(data>>8)&0xFF);
printf("%c\n",(data>>0)&0xFF);
return 0;
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)