C语言_语句与位运算基本练习

166 阅读5分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

总结C语言语句的几个基本练习题,计算素数、排序、求偶数和、可逆素数、水仙花数、交换大小写、交换变量的值、位运算、语法特性等知识点。

1. 输出100~200之间所有可逆素数

 1.输出100~200之间所有可逆素数(除了1和本身能够整除)。----练习for的控制
 比如: 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个数,按从大到小的顺序输出

 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的值

 ​
 3.编程计算: 1*2*3+3*4*5.99*100*101的值
 示例:
 #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以内的偶数之和。

 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. 打印所有的水仙花数

 5.打印所有的水仙花数。水仙花数是3位数---个位+十位+百位立方和等于它本身
 例如: 123=1*1*1+2*2*2+3*3*3
   示例:
 #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. 转换大小写

 位作业:------处理数据都得使用二进制
 1.转换大小写 (位运算完成大小写转换)
 示例:
 #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. 使用位运算交换两个变量的值

 2.使用位运算交换两个变量的值。(规定: 只有两个变量)
 示例:   (可以做加密算法)
 #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. 完成位运算的综合运用

 3.完成位运算的综合运用。
 (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;
 }

9. 显示中文

   通过*号打印出自己的名字。
 1.颜色转换的例子:  RGB888  RGB565  RGB66…. 
    int data=12345; //RGB888的颜色
    要求将data转为RGB565    -去掉高位
 2.实际的运用
 ​
 short  c1=1234; //R占11~15位  G占2~7位
 short  c2=4567; //B占 11~15位
 要求:  将以上RGB分量提取出来,存在另一个变量(16位的变量)中—RGB565  。
 ​
 unsigned int data_1;   //整型   4个字节
     unsigned short data_2; //短整型 2个字节
    unsigned long data_3;  //长整型 4个字节
    unsigned long long data_3;  //双长整型  8个字节

10. C语言的特性:

 C语言的特性:
 (1) C语言程序顺序控制语法---执行顺序是从上到下。
 (2) C语言程序基本组成:  函数组成---->专用的工具包。
 (3) C语言语法: 变量、常量、函数、语句、关键字
 (4) C语言技术关键: 数据结构、算法
 C语言的基本框架:
 #include <stdio.h>  //头文件--->引用
 int main(int argc, char *argv[])  //主函数…..入口
 {
     printf("hello!\n"); 
     return 0;
 }
 学习开始:  输入(scanf)和输出(printf)

11. C语言规则约定

 C语言编程约定
 (1)每条语句分号;结束;  int data;
 (2), 逗号  分隔符号。比如: int a,b,c,d;
 (3)程序里不能出现中文符号。(,   ,)
 (4)基本逻辑程序都是在函数内部编写{  }之间。
 ​
 int main(int argc, char *argv[])
 {
    …………………
    …………………
 }
 (5) 编写每条语句,或者变量,每换一次行都需要对齐。(距离左边距4个空格---一个TAB键的距离)
 (6) 编写代码时,括号要连打
 ​
 ​
 基本单位
 1个字节------8位------------->计算机存储只能是二进制----------->
 1kb-------------1024字节
 1mb------------1024kb
 数据类型----决定每一个空间的大小。
 int : 整型(0,12,45565,56565), 占4字节
 char :字符类型(‘A’,’6’,’7’,’D’) ,占1字节
 float: 单精度浮点类型(12.454678), 占4字节
 double:双精度浮点类型,占8字节
 long  :长整型 , 占4字节
 long long :双长整型 ,占8字节
 怎么计算?
 #include <stdio.h>
 int main(int argc, char *argv[])
 {
     printf("int=%d 字节\n",sizeof(int));
     printf("char=%d 字节\n",sizeof(char));
     printf("float=%d 字节\n",sizeof(float));
     printf("double=%d 字节\n",sizeof(double));
     return 0;
 }
 ​
 变量语法:  <数据类型>  变量的名称;
                 Int           data;   
   变量名字命名规则:
 (1)数字不能开头
 (2)A~Z  a~z  0~9  _
 格式化打印
 ​
 printf(“格式1,格式2…..\n”,变量1,变量2……….);
 格式化输入
 scanf(“格式1,格式2……”,&变量1,&变量2………….);
 格式:
    %d 整型
    %c  字符类型
    %f  符点类型
     %s 字符串类型
    %o  8进制
 %x  16进制
 %p  打印地址
 无符号声明:  unsigned      只能针对整型和字符类型有效  
 示例:  unsigned char data2=255;
 测试变量的数据存放范围:
 #include <stdio.h>
 int main(int argc, char *argv[])
 {
     char data1=128; //范围+127 ~ -128
     unsigned char data2=256; //范围 +0 ~ +255
     printf("datat1=%d\n",data1);
     printf("datat2=%d\n",data2);
     return 0;
 }
 ​
 基本运算符
    +  -  *  \  
 %表示取余运算符  8%4=0  
 =表示赋值运算符
 ​
 结合运算符:
 +=  -=  *=   =
 ​
 比如: a=a+b;  -------->a+=b;