嵌入式培训笔记-day4(C语言基础)

复习:
数据类型:
int     %d 
long    %ld 
short   %hd

float   %f 
double  %lf  
char    %c 

循环语句:
重复 
for 

for(i=0;i<5;i++)
{
    
}
while 
while(条件)
{
    
}
do-while 
do 
{
    ;
}while(条件);


选择:
if 
if()
{
    
}
else if 
{
    
}

switch()
{
    case 常量:
        语句;
        break;
        ...
    default:    
}

运算符:
算术运算 + - *
 / %
关系运算:
>= <= < > != ==  
逻辑运算符:
&& || !
三目运算符:
a>b?a:b

变量自增自减
int z=x++; 
int w = ++x;

赋值运算符:
+= -= *= /= %=

常量:
整型
浮点
字符
字符串

字符常量
'a'
ascii 

新知识:
一、宏定义
1.常量 
#define N 5

#define 定义宏
N 宏名 是常量 一般是大写
5  宏值

2.
宏是预处理阶段实现机械替换 用宏值替换掉宏名
宏优点:
(1)一改全改 
(2)可以增强代码的可读性

 130  2:10
 90   1:30
    #include<stdio.h>
    #define PER_HOUR 60
    int main()//90  1:30  90/60  90%60
    {

        int time;
        while(1)
        {
            printf("input time:\n");
            scanf("%d",&time);
            if(time==0)
            {
                break;
            }
            printf("%d:%d\n",time/PER_HOUR,time%PER_HOUR);
        }

    }
    

    练习:设圆的半径r  求圆周长及面积 用scanf输入半径 求结果 
    3.14  PI 用宏表示
    #include<stdio.h>
    #define PI 3.14
    int main()
    {
        float r,s,c;
        printf("please input r:\n");
        scanf("%f",&r);
        c=  2*PI*r;
        s = PI*r*r;

        printf("%f %f\n",s,c);
        return 0;

    }

二、数组:相同数据类型的集合
1.定义数组 
类型 数组名[数组元素个数];
int arr[5];//
arr[0]=10 
arr[1]=20
arr[2]=30
arr[3]
arr[4]

2.数组初始化
    int arr[5]={10,20,30,40,50};//全部初始化
    int arr[5]={10,20,30};//部分初始化 没被初始化的自动清0
    int arr[5]={0};//清零
    int arr[]={10,20,30,7};//默认初始化
    //数组个数可以缺省  具体个数由初始化的值个数决定 
    //注意 只限于初始化
    

3.输出
    #include<stdio.h>
    int main()
    {
        int arr[5]={0};
        
        int i;
        for(i=0;i<5;i++)
        {
            printf("%d ",arr[i]);
        }
        return 0;

    }

4.scanf 输入数据    
    #include<stdio.h>
    #define N 3
    int main()
    {
        int arr[N];
        
        int i;
        for(i=0;i<N;i++)
        {
            scanf("%d",&arr[i]);
        }
        
        for(i=0;i<N;i++)
        {
            printf("%d ",arr[i]);
        }
        return 0;
    }

    练习:键盘获取5个学员成绩 求和及平均值
    #include<stdio.h>
    #define N 5
    int main()
    {
        int stu[N];
        int i,sum=0,avg;

        for(i=0;i<N;i++)
        {
            scanf("%d",&stu[i]);
            sum += stu[i];
        }

        printf("sum:%d avg:%d\n",sum,sum/N);
        return 0;

    }

    练习:输入5个学生成绩 如果成绩>100或者<0 要重新输入 
    保证5个正确值
    方法1:
    #include<stdio.h>
    #define N 5
    int main()
    {
        int stu[N];
        int i;
        for(i=0;i<5;i++)
        {
        
            do 
            {
                scanf("%d",&stu[i]);
                
            }while(stu[i]<0||stu[i]>100);
        }
        
        for(i=0;i<5;i++)
        {
            printf("%d\n",stu[i]);
        }
        return 0;

    }

    方法2:
    #include<stdio.h>
    #define N 5
    int main()
    {
        int stu[N];
        int i;
        for(i=0;i<5;i++)//130  
        {
            scanf("%d",&stu[i]);
            if(stu[i]<0||stu[i]>100)
            {
                i--;//
            }
        }
        
        for(i=0;i<5;i++)
        {
            printf("%d\n",stu[i]);
        }
        return 0;
    }

    练习,计算斐波那契数列 
    已知前两项分别是1 从第三项开始 每项是前两项之和  
    1 1 2 3 5.... 程序实现计算前20项
    #include<stdio.h>
    int main()
    {
        int a[20]={1,1};
        int i;
        for(i=2;i<20;i++)
        {
            a[i] = a[i-1]+a[i-2];
        }
        
        for(i=0;i<20;i++)
        {
            printf("%d ",a[i]);
        }    
        return 0;
    }
        
5.找数组中最大值
    #include<stdio.h>

    int main()
    {
        int a[6]={45,23,67,89,12,9};
        int max=a[0];
        
        int i;
        for(i=1;i<6;i++)
        {
            if(max<a[i])
            {
                max = a[i];
            }
        }
        
        printf("%d\n",max);
        return 0;

    }    
    练习: int a[6]={45,23,67,89,12,9};
    找到最大值 最小值及所在的位置
    
    #include<stdio.h>

    int main()
    {
        int a[6]={45,23,67,89,12,9};
        int max=a[0];
        int min=a[0];
        int m=0,n=0;
        
        int i;
        for(i=1;i<6;i++)
        {
            if(max<a[i])
            {
                max = a[i];
                m = i;
            }
            
            if(min>a[i])
            {
                min = a[i];
                n = i;
            }
        }
        printf("max:%d min:%d m:%d n:%d\n",max,min,m,n);
        return 0;
    }

6.冒泡排序
实现过程:从小到大 
(1)比较数据中的前两个数 将大数放后面 较小数放前面  然后比较第二个数和
第三个数
(2)依次类推
(3)如果n个数据排序 需要排n-1趟
#include<stdio.h>

int main()
{
    int a[6]={23,45,12,67,78,89};
    int tmp,i,j;
    for(i=0;i<5;i++)//排6-1趟
    {
        for(j=0;j<5-i;j++)//每趟比较5-i次
        {
            if(a[j]>a[j+1])
            {
                tmp = a[j];
                a[j] = a[j+1];
                a[j+1] = tmp;
            }
        }
    }
    
    for(i=0;i<6;i++)
    {
        printf("%d ",a[i]);
    }

    return 0;

}

二、字符数组
 1.定义字符数组
 char a[50];
 
 2.赋值 
 a[0]='a'
 a[1]-'x'
 a[2]
 ...

 3.循环赋值 
 #include<stdio.h>

    int main()
    {
        char a[10];
        int i;
        for(i=0;i<10;i++)
        {
            scanf("%c",&a[i]);
        }
        
    }
4.使用字符输入函数    
    #include<stdio.h>

    int main()
    {
        char ch;    
        ch = getchar();//getchar()  从键盘获取字符 并返回
        printf("%c\n",ch);    
        return 0;
    }
5.初始化
char a[5]={'a','b','c','d','e'};//全部初始化 
char a[5]={'a','b','c'};//部分初始化 未初始化的自动清零
char a[5]={'\0'};//将数组清零
    
6.使用字符输出函数
#include<stdio.h>

    int main()
    {
        char ch;    
        ch = getchar();//getchar()  从键盘获取字符 并返回
        putchar(ch);//输出ch的值
        putchar('a');//输出字符'a'
        return 0;
    }        
7.字符常量和字符串常量 
字符串常量:以‘\0’结尾的一组字符
(1)特点:
    a、由双引号引起来 "a"等价于'a' '\0'   -->'\0'是系统自动加的 占空间
    b、字符串存在字符数组中
(2)
定义 
    char str[20]={'l','o','v','e','\0'};
    char str[20]={"love"};
    char str[20]="love";
    
    数组长度?

(3)打印输出
方法1:%c 
    #include<stdio.h>

        int main()
        {
            char str[20]="love";
            int i;
            for(i=0;str[i]!='\0';i++)
            {
                printf("%c ",str[i]);
            }
            return 0;
        }
    方法2:%s 字符串格式控制符 整体操作字符串
    #include<stdio.h>

    int main()
    {
        char str[20]="love";
        
        int i;
        
    /*    
        for(i=0;str[i]!='\0';i++)
        {
            printf("%c ",str[i]);
        }
    */
    
        printf("%s\n",str);    //从str首地址开始(数组名代表数组首地址) 逐个字符打印输出 直到\0
        return 0;
    }

    练习:键盘输入一组字符 将输入的字符排序
    char s[6]={'a','c','b','g','d','f'}
    #include<stdio.h>
    #define N 10
    int main()
    {    
        char str[N]="\0";
        printf("input 10 char:\n");
    
        int i,j;
        char tmp;
        for(i=0;i<N;i++)
        {
            str[i] = getchar();
            getchar();//取回车
        }

        for(i=0;i<N-1;i++)
        {
            for(j=0;j<N-1-i;j++)
            {
                if(str[j]>str[j+1])
                {
                    tmp = str[j];
                    str[j] = str[j+1];
                    str[j+1] = tmp;
                }
            }
        }

        printf("%s\n",str);
        return 0;
    }
    
作业1:
    歌唱比赛 10个评委打分 统计结果:将10个评分去掉一个最高分 去掉一个最低分
    统计出剩下8个评委分数的平均分
    
    a#include<stdio.h>
    #define N 5
    int main()
    {
        int max,min,sum=0;

        int i;
        int score[N];
        for(i=0;i<N;i++)
        {
            scanf("%d",&score[i]);        
        }
        min = score[0];
        max = score[0];

        for(i=0;i<N;i++)
        {
            if(max<score[i])
            {
                max = score[i];
            }

            if(min>score[i])
            {
                min = score[i];
            }
            sum += score[i];
        }

        printf("%d %d %d\n",max,min,(sum-max-min)/(N-2));
        return 0;

    }
作业2:输入一个字符串 判断输入的字符串是不是"hello"
#include<stdio.h>

int main()
{    int i;    
    char str[100];
    char str2[]="hello";
    puts("input a string:");
    gets(str);

    for(i=0;str2[i]!='\0';i++)
    {
        if(str2[i]==str[i])
        {
            if(i==4)
            {
                puts("equal!");
            }
            continue;
        }
        puts("not equal!");
        break;
    }
    
    
}

作业3:输入一个字符 再输入一个字符串 判断这个字符是否在这个字符串中
#include<stdio.h>

int main()
{    int i=0;
    char ch;    
    char str[100];
    puts("input a string:");
    gets(str);

    puts("input a char:");
    ch = getchar();
    
    while(str[i]!='\0')
    {
        if(ch==str[i])
        {
            puts("exist!");
            break;
        }
        i++;
    }
        
}

作业4:输出一个字符串中所有的元音字母(a e i o u A E I O U)
#include<stdio.h>

int main()
{    int i=0;    
    char str[100];
    puts("input a string:");
    gets(str);
    while(str[i]!='\0')
    {
        if(str[i]=='a'||str[i]=='e'||str[i]=='i'||str[i]=='o'\
                ||str[i]=='u'||str[i]=='A'||str[i]=='E'||str[i]=='I'\
                ||str[i]=='O'||str[i]=='U')
        {
            putchar(str[i]);
        }
        i++;
    }
}
作业5:删除字符串中所有的字母'c'
#include<stdio.h>
#define N 5
int main()
{
    
    char str[100];
    gets(str);    
    int i=0,j=0;
    while(str[i]!='\0')
    {
        if(str[i]=='c')
        {
            j = i;
            while(str[j]!='\0')
            {
                str[j] = str[j+1];
                j++;
            }
        }    
            
            if(str[i]!='c')
            {
                i++;
            }
    }

    printf("%s\n",str);    
        
        
    return 0;
}

    
    
    
    
    
    
    
    
 

猜你喜欢

转载自blog.csdn.net/daojuedi1023/article/details/81121853