码迷,mamicode.com
首页 > 编程语言 > 详细

006_stdc_C语言基础

时间:2020-05-16 09:25:11      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:can   flush   32位   第一个   条件   元素   怎么   fflush   解决   

回顾:

在同一函数里面 写在前面的语句先执行

学完 分支 和循环语句 不一是上面的情况

/*
 * 输入一个数,输出其二进制
 */

//先输出一个二进制数的高位   不用循环的写法

    //先输出一个二进制数的高位
    char c = 0x53;//0101 0011
    //1次
    if(c & 0x80){   //0x80  -> 1000 0000
        printf("1");
    }
    else{
        printf("0");
    }
    //2次
    if(c & 0x40){
        printf("1");
    }
    else{
        printf("0");
    }
    //3次
    if(c & 0x20){
        printf("1");
    }
    else{
        printf("0");
    }
    //4次
    if(c & 0x10){
        printf("1");
    }
    else{
        printf("0");
    }
    //5次
    if(c & 0x08){
        printf("1");
    }
    else{
        printf("0");
    }
    //6次
    if(c & 0x04){
        printf("1");
    }
    else{
        printf("0");
    }
    //7次
    if(c & 0x02){
        printf("1");
    }
    else{
        printf("0");
    }
    //8次
    if(c & 0x01){
        printf("1");
    }
    else{
        printf("0");
    }

循环写法

    //先输出一个二进制数的高位
    char c = 0x53;//0101 0011
    for (int i =7;i>=0;i--)
    {
        if(c & 0x1<<i){   //0x80  -> 1000 0000      1<<7
            printf("1");
        }
        else{
            printf("0");
        }
    }

32位机器中的二进制

    int j=0;
    int c = 0x53; //0101 0011
    printf("输入一个数:");
    scanf("%x",&c);
    for(int i = 31;i>=0;i--)
    {
        if(c & 0x1<<i)  //1<<7   0000 0001 <<
        {                    //1000 0000
            printf("1"); 
            j++;
        }
        else
        {
            printf("0"); 
        }
    }
    printf("\n");
    printf("1的个数%d\n",j);


break;跳出循环 后的语句不会被执行

continue; 结束本次循环,后面语句不执行

#include <stdio.h>
#include <windows.h>
int main(){
    int sec = 10;
    for(;;)
    {
        //printf("%d\n",sec); 
        Sleep(1000);
        sec--;
        if(sec %3 == 0)
        {
            continue;  //3的整数倍
        }
        printf("sec=%d\n",sec); // 
    }
    getchar();
    return 0;
}

time(0);
返回 当前系统的秒数
1970 1.1 0:0:0

#include <stdio.h>
#include <time.h>
#include <windows.h> 
int main(){
    for(;;)
    {
        printf("sec = %lu\n",time(0));
        Sleep(1000);
    }
    getchar();
    return 0;
}
/*
 * 随机数 产生函数 rand()
 * 设置随机的种子   srand();
 * 把系统的秒数  设置为随机数的种子 srand(time(0));
 */
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(){
    srand(time(0));//设置系统的时间为随机种子
    for(int i = 0;i<7;i++)
    {
        //printf("%d\n",rand()%10);  //0 - 9
        printf("%d\n",rand()%32+1);  //0 - 31 //0 - 32
    }
    getchar();
    return 0;
}
 * 随机生产一部iphone 手机的价格 
 * 8000 - 9000
    srand(time(0));
    price = rand()%100*10+8000;       //8000 - 8990
    //实现让用户不断猜这个价格,直到用户猜对为止
    //如果猜的数,大于价格,提示用户 "猜高了"
    //如果猜的数,小于价格,提示用户 "猜低了"
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(){
    int price = 0;
    int guess = 0;

    srand(time(0));
    price = rand()%100*10+8000;       //8000 - 8990
    //printf("%d\n",price);//打印随机价格,仅用于测试 

    //编写下面代码
    //实现让用户不断猜这个价格,直到用户猜对为止
    //如果猜的数,大于价格,提示用户 "猜高了"
    //如果猜的数,小于价格,提示用户 "猜低了"
    for(;;)    
    {
        printf("输入您猜的价格:");
        scanf("%d",&guess);

        if(guess == price)
        {
            printf("猜对了\n"); 
            break;
        }
        if(guess > price)
        {
            printf("猜高了\n"); 
            continue; 
        }

        else
        {
            printf("猜低了\n"); 
        }
    }
    getchar();
    return 0;
}

多重循环

#include <stdio.h>
int main(){
    for (int i=0;i<6;i++)
    {
        for (int j=0;j<i;j++)
        {
            printf("%d",j);
        }
        printf("\n");
    }
    getchar();
    return 0;
}

0
01
012
0123
01234

九九乘法表

#include <stdio.h>
int main(){
    for (int i=1;i<=9;i++)
    {
        for (int j=1;j<=i;j++)
        {
            printf("%d * %d = %d ",j,i,i*j);
        }
        printf("\n");
    }
    getchar();
    return 0;
}

1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81

 /* [应用]
 *     已知  i + j = 40
 *           2i + 4j = 100
 *
 *     请输出 i j 的取值
*/
    for(int i=0;i<=40;i++)
    {
        for(int j=0;j<=40;j++)
        {
            if((i+j == 40)&&(2*i+4*j)==100)   
            {
                printf("i = %d  j = %d\n",i,j); 
            }
        }
    }
 /*     早饭 20圆   有若干2圆  若5圆  
 *     输出  付费方案
 *     输出  共有几种
 */
    for(int i=0;i<=10;i++)
    {
        for(int j=0;j<=4;j++)
        {
            if(i*2+j*5 == 20)   
            {
                printf("2元的张数 = %d  5元的张数 = %d\n",i,j); 
            }
        }
    }

2元的张数 = 0 5元的张数 = 4
2元的张数 = 5 5元的张数 = 2
2元的张数 = 10 5元的张数 = 0

while语句

while(条件表达式) //相当于for 中间的语句
{
        //条件为真 循环执行的语句

}

    int score = -1;
    while(score<0 || score>100)
    {
        printf("输入成绩:"); 
        scanf("%d",&score);
    }
    int score = -1;
    while(1) //死循环
    {
        printf("输入成绩:"); 
        scanf("%d",&score);
        if(score >=0 && score <=100)
        {
            break;//跳出while循环
        }
    }
do  while 语句
/*
 * do  while 语句  注意后面的分号
 * 跟 if for  while  区别 先执行循环体
 * 再判断循环条件
 */
    int score = 80;
    do 
    {
        printf("输入成绩:"); 
        scanf("%d",&score);
    }while(score<0 || score>100);
/*
 * goto 语句 演示
 * goto + if 实现循环
 */
    int i = 0;
label:
    if(i<5)
    {
        printf("hello\n"); 
        i++;
        goto label;
    }
over:
    int x = 0;
    for(int k = 0;k<=20;k++)
    {
        for(int i=0;i<=10;i++)    //i 代表2圆的张数
        {
            for(int j=0;j<=4;j++) //j 代表5圆的张数
            {
                if(i*2+j*5+ k== 20)   
                {
                    x++;
                    printf("1圆=%d 2圆的张数=%d 5圆的张数=%d\n",k,i,j); 
                    goto  over;//直接跳出所有循环
                }
            }
        }
    }
over:
    printf("共%d种方案\n",x);
/*
 *  内核 有输出缓冲区
*/

linux系统下执行以下代码

/*
 *  内核 有输出缓冲区
 *  1. \n  会将 缓冲区内容 推送到屏幕
 *  2. 程序结束,缓冲区内容 推送到屏幕
 *  3. 缓冲区满
 *  4. fflush(stdout);
 */

#include <stdio.h>
#include <unistd.h>

int main(){
    int x = 0;
    for(int i=0;i<5;i++)
    {
        printf("i=%d ",i);
        sleep(1);//一次性输出,不能依次输出
} 
return 0;
}
int main(){
    int x = 0;
    for(int i=0;i<5;i++)
    {
        printf("i=%d ",i);
        fflush(stdout);//能依次输出
        sleep(1);
    }
    return 0;
}
 

windows 系统下则相反,执行一次会延时设定的时间

#include <stdio.h>
#include <windows.h>
int main(){
    int x = 0;
    for(int i=0;i<5;i++)
    {
        printf("i=%d ",i);
        Sleep(1500);//依次输出
    }
    getchar();
    return 0;
}
/*
 *  输入缓冲区
 *   
 *   */
#include <stdio.h>
#include <windows.h>
int main(){
    int c = 0;
    for(int i=0;i<5;i++)
    {
        printf("输入一个字符:");
        scanf("%c",&c);
        printf("c = %c\n",c);

        Sleep(1);
    }
    getchar();
    return 0;
}

技术图片

c=怎么东西?
第一次读的时候a,
但回车还在里面,
它把回车也当输入了,这是输入缓冲区引起的
解决:

//清输入缓冲区
        scanf("%*[^\n]"); //清\n前的内容
        scanf("%*c");     //清\n
#include <stdio.h>
#include <windows.h>
int main(){
    char c = 0;
    for(int i=0;i<5;i++)
    {
        printf("输入一个字符:");
        scanf("%c",&c);
        printf("c = %c\n",c);

        //清输入缓冲区
        scanf("%*[^\n]"); //清\n前的内容
        scanf("%*c");     //清\n

        Sleep(1);
    }
    getchar();
    return 0;
}

技术图片

数组

C的数据成分 数组
      连续 大小 的某一种类型 存储空间

如果声明 一个数组
变量名 (合法标示符)
存储元素的数据类型
元素的个数

int a[5];  --> 存储5个整型数据的数组

a[0] --> 第一个元素
....
a[4] --> 第五个元素

a[0]   等价 int 变量
/*
 *    从键盘上输入一个单词 (多个字符) hello
 *       输出该单词
*/
#include <stdio.h>
#include <windows.h>
int main(){
    char c[5];
    for(int i=0;i<5;i++)
    {
        printf("输入一个字符:");
        scanf("%c",&c[i]);

        //清输入缓冲区
        scanf("%*[^\n]"); //清\n前的内容
        scanf("%*c");     //清\n
        Sleep(1);
    }
    for(int i = 0;i<5;i++)
    {
        printf("%c",c[i]);
    }
    getchar();
    return 0;
}
 *  数组
 *    [练习]
 *       输入 5 个整数 , 
 *       打印他们的和
 *       然后 再输出这5个数
#include <stdio.h>
#include <windows.h>
int main(){
    int c[5];
    int sum=0;
    for(int i=0;i<5;i++)
    {
        printf("输入一个字符:");
        scanf("%d",&c[i]);
        sum += c[i];
        //清输入缓冲区
        scanf("%*[^\n]"); //清\n前的内容
        scanf("%*c");     //清\n
        Sleep(1);
    }
    printf("%d\n",sum);
    for(int i = 0;i<5;i++)
    {
        printf("%d",c[i]);
    }
    getchar();
    return 0;
}

方法2

    int a[5] ;
    int i=0;
    for(i = 0;i<5;i++)
    {
        printf("输入一个数:");
        scanf("%d",&a[i]);
    }

    printf("i = %d\n",i);  //5

    int sum = 0;
    for(i = 0;i<5;i++)
    {
       sum = sum + a[i];
    }
    printf("sum = %d\n",sum);

    for(i = 0;i<5;i++)
    {
        printf("%d\n",a[i]);
    }
    
    return 0;

 

 

 

006_stdc_C语言基础

标签:can   flush   32位   第一个   条件   元素   怎么   fflush   解决   

原文地址:https://www.cnblogs.com/tanzizheng/p/12898116.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!