0402_C基础练习

练习1:

  1. 请简述什么大端存储和小端存储?

大端存储:地址高位存储数据高位,地址低位存储数据低位

小端存储:地址低位存储数据高位,地址高位存储数据低位

例如:

0X12345678

 练习2:

请简述gcc得分步编译:

1:预处理

展开头文件,替换宏,删除注释

格式:gcc -E ****.c -o  ****.i

vim file1.i显示 

2:编译:

检查语法的正确性,生成汇编文件

格式:gcc -S ****.i -o  ****.s

vim file1.s显示

3:汇编

将汇编文件转换成二进制文件

格式:gcc -c ****.s -o ****.o

vim file1.o显示

4:链接

将二进制文件链接为可执行文件

格式:gcc ****.o -o 可执行文件

file1.o 被链接为可执行文件

5:运行

./可执行文件

 练习3:

请回答文件剪切、赋值的指令,并说明/etc   /usr   /mnt分别表示什么意思?

剪切:mv

1.文件剪切文件

        mv 文件1 文件2          把文件1重名为到文件2

                 如果文件2不存在,把文件1重命名为文件2        

                 如果文件2存在,把文件1重命名为文件2,替换原来的文件2

2.文件剪切到目录

        mv 文件 目录              把文件剪切到目录中,目录必须存在

                 如果目录中不存在同名文件,把文件剪切到目录中   

                如果目录中存在同名文件,把文件剪切到目录中,替换目录中同名文件

3.目录剪切到目录

        mv 目录1 目录2          把目录1重名为目录2

                如果目录2不存在.把目录1重命名为目录2

                如果目录2存在且没有同名目录,把目录1剪切到目录2里面

                如果目录2存在且有同名目录且非空, 报错:不可以剪切目录实现替换

                如果目录2存在且有同名目录且空,把目录1剪切到目录2里面,替换同名目录

复制:cp

1.文件拷贝文件

        cp 文件1 文件         把文件1拷贝到文件2  

                 如果文件2不存在,把文件1拷贝一份,命名为文件2

                 如果文件2存在,把文件1拷贝一份,命名为文件2,替换原来的文件2

2.文件拷贝目录

        cp 文件 目录 把文件拷贝到目录中,目录必须存在

                如果目录中不存在同名文件,把文件拷贝到目录中

                如果目录中存在同名文件,把文件拷贝一份,替换目录中同名文件

3.目录拷贝目录

        cp 目录1 目录2 -r 把目录拷贝给目录

                如果目录2不存在.把目录1拷贝一份,命名为目录2

                如果目录2存在且没有同名目录,把目录1拷贝一份。存到目录2里面

                如果目录2存在且有同名目录,把目录1拷贝一份。存到目录2里面,替换同名目录

/etc:存放系统所有配置文件

/usr:存放系统应用程序

/mnt:用于被挂载得文件系统得挂载点

练习4: 

请问一下代码的输出结果是?

unsigned int  i;  

for(i=5;i>=0;i--)

{

printf(“hello\n”);

}

分析:

1.定义了一个无符号整型变量i

2.for循环,将i初始化为5

3.5>=0进入循环

4.输出一行hello、

5.i--;

6.重复进行,直至i>=0不成立

7.但是i为无符号整型,当i=-1时,数据溢出,i为最大值

8.结果输出为:

                        hello

                        hello

                        hello

                        hello

                        hello

                        hello

                        .......

                        无限循环

 练习5:

请回答以下问题

分析:

1.定义了一个有符号整型a并赋予初始化180;

2.定义了一个字符变量c;

3.运算()大于++,所以先将a强制转换为char数据类型,在++ 

4.所以c=-75 a=181

5.定义了一个字符变量d并赋值初始化为4;

6.定义了一个短整型e;

7.先算括号,之后算++d,之后++,之后=

8.所以d=6 e=5

练习6:

设有以下语句:int a=3,b=6,c; c=a^b<<2; 则c的二进制值是

分析:

1.定义了整型a初始化为3,整型b初始化为6,整型c;

2.a得二进制为:

                        0000 0000 0000 0000 0000 0000 0000 0011

  b得二进制为:

                        0000 0000 0000 0000 0000 0000 0000 0110

3.<< 优先级 > ^   ,所以先算b<<2  之后再算a^b   之后=

4.b<<2:

                        0000 0000 0000 0000 0000 0000 0001 1000

5.a^b:

                        0000 0000 0000 0000 0000 0000 0001 1011

6.所以c得二进制结果为:

                        0000 0000 0000 0000 0000 0000 0001 1011

 练习7:

请回答以下程序

分析:

1.定义了一个整型变量a初始化为3;

2.a=a+(3!=3);首先()运算优先度最高,其次!=,在其次+,最后=

3.a=3;

4.a=a(++a+a);首先()运算符优先级最高,其次++,在其次+,在其次a* ,最后=

5.a=32;

练习 8:

  1. 输入年月日,使用switch编程实现计算这是这一年的第几天?

     Eg  输入:2024  4  1

 输出:这是这一年的第92天

程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    //输入年月日计算这是当前年份的第几天
    //1.计算闰年
    //2.使用switch实现
    //3.考虑用户输入错误情况
    while(1)
    {
        int year;
        int month;
        int day;
        printf("请输入需要计算的年份:");
        //判断用户输入是否为整型
        while(scanf("%d",&year)==0)
        {
            printf("非法输入,请重新输入:");
            int gg;
            while(gg=getchar()!='\n'&&gg!=EOF){}
        }
        //判断用户输入是否符合常识
        if(0>=year)
        {
            printf("输入年份不符合现实生活常识,程序强制退出,请重新启动程序\n");
            return -1;
        }
        int leapyear_sign;//闰年标志位0平年 1闰年
            if(year%4==0&&year%100!=0||year%400==0)
            {
                leapyear_sign=1;//闰年
            }
            else
            {
                leapyear_sign=0;//平年
            }

        printf("请输入需要计算截止月份:");
        //判断用户输入是否为整型
        while(scanf("%d",&month)==0)
        {
            printf("非法输入,请重新输入:");
            int zz;
            while(zz=getchar()!='\n'&&zz!=EOF){}
        }
        //判断用户输入是否符合常识
        if(0>=month||12<month)
        {
            printf("输入月份不符合现实生活常识,程序强制退出,请重新启动程序\n");
            return -1;
        }
        printf("请输入需要计算的日子:");
        //判断用户输入是否为整型
        while(scanf("%d",&day)==0)
        {
            printf("非法输入,请重新输入:");
            int kk;
            while(kk=getchar()!='\n'&&kk!=EOF){}
        }
        //判断用户输入是否符合常识
        if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&(31<day))
        {
            printf("输入日子不符合现实生活常识,程序强制退出,请重新启动程序\n");
            return -1;
        }
        else if((month==4||month==6||month==9||month==11)&&30<day)
        {
            printf("输入日子不符合现实生活常识,程序强制退出,请重新启动程序\n");
            return -1;
        }
        else if(month==2&&leapyear_sign==1&&28<day||month==2&&leapyear_sign==0&&29<day)
        {
            printf("输入日子不符合现实生活常识,程序强制退出,请重新启动程序");
            return -1;
        }
        else if(0>=day)
        {
            printf("输入日子不符合现实生活常识,程序强制退出,请重新启动程序\n");
            return -1;
        }
        //计算当前输入日期天数
        int total_days=0;
        switch(month-1)
        {
        case 12:
            total_days+=31;
        case 11:
            total_days+=30;
        case 10:
            total_days+=31;
        case 9:
            total_days+=30;
        case 8:
            total_days+=31;
        case 7:
            total_days+=31;
        case 6:
            total_days+=30;
        case 5:
            total_days+=31;
        case 4:
            total_days+=30;
        case 3:
            total_days+=31;
        case 2:
            if(leapyear_sign==0)
            {
                total_days+=29;
            }
            else
            {
                total_days+=28;
            }
        case 1:
            total_days+=31;
            break;
        }
        printf("%d年%d月%d日是当年的第%d天\n",year,month,day,total_days+day);
        printf("退出:ctrl+c\n");
    }
    
    return 0;

 练习9:

简述以下程序

分析:

1.定义了一个整型变量x初始化为5;

2.while()不能加;否则系统会认为这里已经结束;

 练习10:

请简述以下程序的区别

分析:

#include"stdio.h":

                当要调用某个函数时先在用户自已编写的文件中查找,如果找不到再到库文件里去找。

#include<stdio.h>:

                直接到库文件里去找。

练习11:

 请简述以下程序

分析:

1.定义了一个整型变量n并初始化为0;

2.因为=为赋值,所以n=1;

3.n++

4.无限循环

 练习12:

请编程实现

程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
int main(int argc, const char *argv[])
{
    int a=0;
    int b=0;
    printf("请输入两个数字:");
    scanf("%d %d",&a,&b);
    int c=MIN(a,b);
    printf("%d\n",c);
    return 0;
}

 练习13:

请编程实现输出起始值到终止值之间的素数

程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    int a;
    printf("请输入一个数:");
    scanf("%d",&a);
    int i;
    for(i=1;i<=a;i++)
    {
        if(a%i==0)
        {
            printf("%d ",i);
        }
    }
    return 0;
}

练习14:

请编程实现输出起始值到终止值之间的完美数

 程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    int a,b;
    printf("请输入一个起始值:");
    scanf("%d",&a);
    printf("请输入一个终止值:");
    scanf("%d",&b);
    int n;
    int m;
    if(a>b)
    {
        n=a;
        m=b;
    }
    else
    {
        n=b;
        m=a;
    }
    int i;
    int k;
    int p=0;
    for(i=m;i<=n;i++)
    {
        p=0;
        for(k=2;k<i;k++)
        {
            if(i%k==0)
            {
                p=1;
                break;
            }
        }
        if(p==0)
        {
            printf("%d ",i);
        }

    }
    return 0;
}

 练习15:

请变成实现图形打印

程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    int i;
    int j;
    char k='F';
    for(i=1;i<=6;i++)
    {
        k='F';
        for(j=1;j<=i;j++)
        {
            printf("_");
        }
        for(j=1;j<=i;j++)
        {
            printf("%c",k);
            k-=1;
        }
        putchar(10);
    }
        return 0;
}

 练习16:

循环输入10个成绩,请计算最大值,最小值

程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    int i=1;
    int a;
    int b=0;
    int c=0;
    while(i<=10)
    {
        printf("请输入第%d个值:",i);
        scanf("%d",&a);
        if(a>b)
        {
            b=a;
        }
        if(i==1)
        {
            c=a;
        }
        if(a<c)
        {
            c=a;
        }
        i++;
        putchar(10);
    }
    printf("最小值为%d 最大值为%d\n",c,b);
        return 0;
}

  • 13
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值