2月2日作业 C语言笔试题整理

1、请简述gcc的编译步骤

预处理:展开头文件、删除注释、替换宏

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

汇编:把汇编语言转换为二进制文件,生成目标文件

链接:把多个目标文件链接为可执行文件

2、C语言中基本数据类型有哪些,占用多少字节?

有无符号整行 int/unsigned int  4字节

有无符号字节型 char/unsigned char 1字节

短整型 short 2字节

有无符号长整型 long/unsigned long (32位4字节)64位8字节

单精度浮点型 float 4字节

双精度浮点型 double 8字节

3、C语言的存储类型有哪些?

auto:自动类型,局部变量默认不写存储类型就是auto

static:静态存储类型,延长生命周期

register:寄存器类型

extern:外部变量

修饰词:

const:修饰的变量特点不可以改变值

volatile:防止内存优化,保存内存的可见性

4、大小端存储的区别,判断大小端存储的方法

大端存储:地址高位存储数据低位,地址低位存储数据高位。大型网络

小端存储:地址高位存储数据高位,地址低位存储数据低位。计算机存储

int main(int argc, const char *argv[])
{
	int a = 0x12345678;
	printf("a = %d\n",a);
	short b = a;
	if(b == 0x1234)
	{
		printf("big\n");
	}
	else if(b == 0x5678)
	{
		printf("small\n");
	}
	return 0;
}

union
{
	char a;
	int b;
}u;
int main()
{
	u.b = 0x12345678;
	if(u.a == 0x12)
	{
		printf("big\n");
	}
	else if(u.a == 0x78)
	{
		printf("small\n");
	}
	return 0;
}
int main()
{
	int a = 0x12345678;
	char *p = (char *)&a;
	if(*p == 0x12)
	{
		printf("big\n");
	}
	else if(*p == 0x78)
	{
		printf("small\n");
	}
	return 0;
}

5、给定一个无序数组,使用冒泡排序或者选择排序使其形成一个有序序列

void show(int arr[10])
{
	for(int i = 0;i < 10;i++)
	{
		printf("%d ",arr[i]);
	}
	printf("\n");
}
void maopao(int arr[10])
{
	for(int i = 1;i < 10;i++)
	{
		for(int j = 0;j < 10-i;j++)
		{
			if(arr[j+1] < arr[j])
			{
				int t = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = t;
			}
		}
	}
	printf("冒泡排序结果如下:");
	show(arr);
}
void sselect(int arr[10])
{
	for(int i = 0;i < 9;i++)
	{
		int max = arr[i];
		for(int j = i+1;j < 10;j++)
		{
			if(arr[j] > max)
			{
				int t = arr[i];
				arr[i] = arr[j];
				arr[j] = t;
			}
		}
	}
	printf("简单选择排序后结果如下:");
	show(arr);
}
int main(int argc, const char *argv[])
{
	int arr[10] = {19,11,32,67,44,4,92,44,6,10};
	maopao(arr);
	sselect(arr);
	return 0;
}

6、实现strcpy函数

char *mystrcpy(char *dts,char *src)
{
	int i = 0;
	while(*(src+i) != '\0')
	{
		*(dts+i) = *(src+i);
		i++;
	}
	*(dts+i) = '\0';
	return dts;
}

7、实现strcat函数

char *mystrcat(char *dts,char *src)
{
	int i = 0;
	int j = 0;
	while(*(dts+i) != '\0')
	{
		i++;
	}
	while(*(src+j) != '\0')
	{
		*(dts+i) = *(src+j);
		i++;
		j++;
	}
	*(dts+i) == '\0';
	return dts;
}

8、实现strcmp函数

int mystrcmp(char *str1,char *str2)
{
	int i = 0;
	while(*(str1+i) != '\0' && *(str2+i) != '\0')
	{
		if(*(str1+i) != *(str2+i))
		{
			return *(str1+i)-*(str2+i);
		}
		i++;
	}
	return 0;
}

9、实现字符串逆置

#include <myhd.h>
int main(int argc, const char *argv[])
{
	char a[20] = "hello";
	int i = 0;
	int j = 0;
	while(*(a+j) != '\0')
	{
		j++;
	}
	j--;
	while(i<j)
	{
		char t = *(a+i);
		*(a+i) = *(a+j);
		*(a+j) = t;
		i++;
		j--;
	}
	printf("a = %s\n",a);
	return 0;
}

10、写一个宏函数,判断两数大小

#define MAX(a,b) ((a<b?a:b))

11、以下程序的运行结果是什么

int fun(int a,int b)
{
	return ((a&b) + (a|3));
}
int main(int argc, const char *argv[])
{
	int a = 10;
	int b = 20;
	int s = fun(a,b);
	printf("%d\n",s);
	return 0;
}

答案:11

12、下面代码的输出结果什么是

void main( )

{
    unsigned char ucNum;
    for (ucNum = 0; ucNum < 500; ucNum++)
    {
    }
    printf(“%d”, ucNum);
}

答案:无输出

13、输入一个数,判断是否为完数

int main(int argc, const char *argv[])
{
	int n;
	int sum;
	scanf("%d",&n);
	for(int i = 1;i < n;i++)
	{
		if(n%i == 0)
		{
			sum+=i;
		}
	}
	if(summ == n)
	{
		printf("ok");
	}
	else
	{
		printf("no");
	}
	return 0;
}

14、打印下面图形

_

__F

___FE

____FED

_____FEDC

______FEDCB

_______FEDCBA

for(int i=1;i<=7;i++)
{
        for(int j=1;j<=i;j++)
        {
            printf("_");

        }
        char ch='G';
        for(int j=1;j<=i-1;j++)
        {
            printf("%c",ch-j);
        }
        printf("\n");
}

15、打印九九乘法表

for(int i=1;i<=9;i++)
{
        for(int j=1;j<=i;j++)
        {
            printf("%d*%d=%-4d",j,i,j*i);
        }
        printf("\n");
}

16、循环输入10个数,计算最大差max-min

int max,min;
    for(int i=1;i<=10;i++)
    {
        printf("please enter %d num:",i);
        scanf("%d",&num);
        if(i==1)
            max=min=num;
        if(max <num)
            max=num;
        if(min >num)
            min=num;
    }

    printf("max-min=%d\n",max-min);

17、计算二维数组的最大值和最小值

int main(int argc, const char *argv[])
{
    int m,n;
    printf("please enter m,n:");
    scanf("%d %d",&m,&n);
    int arr[m][n];
    int max,min;
    //循环输入
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            scanf("%d",&arr[i][j]);
        
        }
    }
    max=min=arr[0][0];
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(max<arr[i][j])
                max=arr[i][j];
            if(min>arr[i][j])
                min=arr[i][j];
        }
    }
    printf("max=%d  min=%d\n",max,min);
    return 0;
}

18、循环输入一维数组,交换最小值,和第二大值{不允许使用排序}

int arr[]={12,34,54,76,6,76,34,2};
                         
    int n=sizeof(arr)/sizeof(arr[0]);
    //计算最大值和最小值
    int first_max=arr[0],first_min=arr[0];
    int first_maxi=0,first_mini=0;
    for(int i=0;i<n;i++)
    {
        if(first_max<arr[i])
        {
            first_max=arr[i];
            first_maxi=i;
        }
        if(first_min>arr[i])
        {
            first_min=arr[i];
            first_mini=i;
        }
    }
    //计算第二大
    int second_max=first_min;
    int second_maxi=0;
    for(int i=0;i<n;i++)
    {
        if(i==first_maxi)
            continue;
        if(second_max<arr[i])
        {
            second_max=arr[i];
            second_maxi=i;
        }
    }
    arr[first_mini]=second_max;
    arr[second_maxi]=first_min;

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

19、输入一个年月日,判断平年闰年,并确定是该年哪一天

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int year = 0;
	int month = 0;
	int day = 0;
	int i = 1;
	int sum = 0;
	printf("请输入年 月 日:");
	scanf("%d%d%d",&year,&month,&day);
	if(month>=13||month<=0)
	{
		printf("错误的月份\n");
	}
	else if((month==1||3||5||7||8||10||12) && (day>31||day<0))
	{
		printf("该日不存在\n");
	}
	else if(((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))&&(month==4||6||9||11)&&(day>30||day<0))
	{
		printf("该日不存在\n");
	}
	else if((~(year%4==0&&year%100!=0)||(year%100==0&&year%400==0))&&(month==2)&&(day>28||day<0))
	{
		printf("该日不存在\n");
	}
	else if(((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))&&(month==2)&&(day>29||day<0))
	{
		printf("该日不存在\n");
	}
	else
	{
			if(year%4==0&&year%100!=0||year%100==0&&year%400==0)
			{	
				printf("%d是闰年\n",year);
				switch
sum = day+max(month,1)*31+max(month,2)*29+max(month,3)*31+max(month,4)*30+max(month,5)*31+max(month,6)*30+max(month,7)*31+max(month,8)*31+max(month,9)*30+max(month,10)*31+max(month,11)*30;
				printf("%d年%d月%d日是今年的第%d天\n",year,month,day,sum);
			}
			else
			{			
				printf("%d是平年\n",year);
sum = day+max(month,1)*31+max(month,2)*28+max(month,3)*31+max(month,4)*30+max(month,5)*31+max(month,6)*30+max(month,7)*31+max(month,8)*31+max(month,9)*30+max(month,10)*31+max(month,11)*30;
			     	printf("%d年%d月%d日是今年的第%d天\n",year,month,day,sum);
			}
	}
	return 0;
}

20、输入4个整数,判断最大值和最小值

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

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值