c语言 每日一练题目总结

每日一练9月份总结

1.2020年物联网大事件有哪些?
2020年2月,华为安防官宣,华为智能安防正式更名为“华为HoloSens机器视觉“。这一句简单发声,却是无声惊雷,激起行业千层浪。2020年,在加速进入“5G+AI”的时代背景下,以“视频+AI”为核心的华为智能安防也不再局限于“安”与“防”,而是用“机器视觉”,助力千行百业数字化转型。
2020年3月,海康威视向外首次推出了自家的智能安检系统,希望通过智能安检分析仪、安检机、安检门以及各类辅助产品,打造出一个集安检联网、智能识别、信息融合为一体的智能安检生态系统。胡扬忠曾透露,目前海康威视的案件团队有150人左右,未来还将会增加到200多人,这也在预示着不久将来海康威视将一举进军智能安检市场。近年来,随着国际会议频繁召开与全球反恐的需求之下,全球安检市场迅猛发展,预测在2020年市场规模突破10亿美元
在2019年—2020年期间,全国多地政府出台相关支持政策,通过支持5G网络建设,促进智慧灯杆产业迎来新的落地潮。目前,华为、中兴等企业纷纷布局智慧路灯赛道,智慧灯杆项目成功落地。预测未来在5G网络全面搭建商用后,将催生千亿级智慧灯杆市场。
2.找一份2020年物联网前沿技术,从技术角度谈谈你的看法?
5G每天都在创造着新的历史,在其发展之路上,无论是高光时刻或者是艰难时刻,我们都在一同亲历——新一代通信技术的萌芽、崛起,并期待着未来将会发生的巨大变革。伴随今年新基建的风口,5G行业应用出现井喷式发展,有力拉动中国以5G为龙头的大基建经济的投资、布局,在可预期的不久将来,新基建必然在各个方面都将持续发挥支柱性作用。总的来说,5G技术正在日益成熟,而一个互联网万物互联、融入人工智能、大数据等多项技术的5G新时代正在悄然开启,让我们坐看各大巨头竞相抢滩布局5G市场,百花争鸣可谓好不热闹!

3.请问以下循环体中哪个效率更高,为什么?

for(i=0;i<10000000,i++{ 
  for(j=0;j<5,j++)
  {
     Action();
  }
}
--------------------------------------------------------------
for(i=0;i<100,i++{ 
  for(j=0;j<10000000,j++)
  {
     Action();
  }
}

究竟是小套打比较快还是大套小比较快?实践检验真理,
上机测试一下就一目了然了。

#include <stdio.h>
#include <time.h>

int k=0;

int Action()
{
    return 0;
}

int main()
{
    clock_t start, finish;

    int i, j;

    start = clock();
    for (i = 0; i < 10000000; i++)
    {
        for (j = 0; j < 5; j++)
        {
            Action();
        }
    }
    finish = clock();

    printf("b2s:%ld\n",finish - start);
}
b2s:91
#include <stdio.h>
#include <time.h>

int k=0;

int Action()
{
    return 0;
}

int main()
{
    clock_t start, finish;

    int i, j;

    start = clock();
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 10000000; j++)
        {
            Action();
        }
    }
    finish = clock();

    printf("b2s:%ld\n",finish - start);
}

b2s:78

结果很明显啦,小套大效率更高

4.请设计一段程序,输入某年某月某天,输出是这一年的第几天?

#include <stdio.h> 
int main(int argc,char *argv[])
{
    int label1;
    int y,m,d,days,February; 
        printf("请输入年份:");
        scanf("%d",&y);
        printf("请输入月份:");
        scanf("%d",&m);
        printf("请输入日期:");
        scanf("%d",&d);
        if (y<1||m>12||m<1||d>31||d<1)
        {
            printf("输入错误\n");
                return label1;
        }
       else
       if (y%400==0||(y%4==0&&y%100!=0)) //解决办法首先判断是平年还是闰年,确定二月份的天数
    
        February=29;//闰年二月29天
    
      else 
        February=28;//平年二月28天
 
    
        switch (m)
         {
            case 1:
                days=0;
                printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
                break;
            case 2:
                days=February; 
                printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
                break;
            case 3:
                days=31+February;
                printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
                break;
            case 4:
                days=62+February;
                printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
                break;
            case 5:
                days=92+February;
                printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
                break;
            case 6:
                days=122+February;
                printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
                break;
            case 7:
                days=153+February;
                printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
                break;
            case 8:
                days=183+February;
                printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
                break;
            case 9:
                days=214+February;
                printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
                break;
            case 10:
                days=244+February;
                printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
                break;
            case 11:
                days=275+February;
                printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
                break;
            case 12:
                days=305+February;
                printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
                break;
                
         }
                system("PAUSE");
                return 0;
}

5.请设计一款加减乘除计算器,要求能输入小数,并对非数字的输入进行报警,同时编写代码规范整洁。

#include<stdio.h>
#include<stdlib.h>
int main()
{
 
	int a=0;
	int b=0;
	int ret;
	char m;
	int result=0;
	printf("请输入数字:");
	ret=scanf("%d",&a);
	getchar();
    if(0 == ret)
{
    printf("输入错误\n");
    system("pause");
    return 0;
}
	printf("请输入运算符:+ - * / \n");
	scanf("%c",&m);
	getchar();
	printf("请输入数字:");
	ret=scanf("%d",&b);
	getchar();
	if(0 == ret)
{
    printf("输入错误\n");
    system("pause");
    return 0;
}   getchar();
	switch (m)
	{
	case '+':{
		result=a+b;
			 }break;
	case '-':{
		result= a-b;
			 }break;
	case '*':{
		result=a*b;
			 }break;
	case '/':{
		result=a/b;
			 }break;
	default:
		result=-1;//异常情况
		break;
	}
	printf("运算结果:%d",result);
	printf("\r\n");
	system("pause");
}

6.简述下变量的作用范围,以及你们对变量的理解。
C语言中所有变量都有自己的作用域,变量的类型不同,其作用域也不同,按照作用域的范围可分为两种, 即局部变量和全局变量。
(1)、局部变量:主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。
(2)、全局变量:在函数外部定义的变量,它不属于哪一个函数,它属于一个源程序文件;其作用域是整个源程序,在函数中使用全局变量,一般应作全局变量说明。 只有在函数内经过说明的全局变量才能使用。
7.if 语句和三目运算符的的比较,简述各自的优缺点
If语句优点:
(1)、更加灵活(三目运算符的两个结果类型必须一致)
(2)、可以使用多重if-else语句
三目运算符优点:
(1)、写法简洁,可用于宏定义
(2)、可以将条件表达式的值直接赋予某个变量
8.写出 float A 和“零值”比较的 if语句

const float EPSINON = 0.00001; 
if ((x >= - EPSINON) && (x <= EPSINON)
/*不可将浮点变量用“==”或“!=”与任何数字比较。
千万要留意,无论是float还是double类型的变量
都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,
应该设法转化成“>=”或“<=”形式。*/
假设浮点变量的名字为x,应当将 
if (x == 0.0) // 隐含错误的比较转化为 
if ((x>=-EPSINON) && (x<=EPSINON))
//其中EPSINON是允许的误差(即精度)。

9.以下代码有什么问题?该怎么改?

int main(){
char a;
char *str = &a;
strcpy(str,"how are you");
printf(str);
return 0;
}

头文件缺失
没有为str分配内存空间

#include <stdio.h>
#include <string.h>
int main()
{
   char a[10];
   char *str = a;
   strcpy(str,"how are you");
   printf(str);
   return 0;
}

10.main函数的参数和返回值有什么意义?
必须存在一个main函数,该函数可以在任意一个cpp里定义
main函数是程序的入口,即第一个被执行的函数,不能有两个main函数
main函数有3种形式
int main()
int main(int argc)
int main(int argc,char * argv[])
或int main(int argc,char ** argv)
argc表示命令行参数的个数
argv表示命令行参数的值

#include <stdio.h>
 int main(int argc,char * argv[])
 {
     for(int i=0;i<argc;i++)
     {
         printf("%s\n",argv);
     }
 }

在命令行方式下运行程序,各个参数以空间分开
注:当参数本身含有空间时,需要用双引号括起来
main函数的返回值int
一般来说,当程序返回0表示该任务成功完成。非0表示遇到错误或异常情况
问题:
返回给谁了?
谁调用了它,就返回给了谁。
使用system函数来测试

int ret=system(D:\Cpp\Test\Debug\t.exe 12 8);
printf(“ret=%d\n”,ret);

11.调用main函数之前发生了什么?
(1)先通过编译链接生成.exe文件(.exe文件在磁盘中存储,且.exe文件中是机器语言)
(2).exe文件通过mmap函数映射到虚拟内存上
(3)再通过分段分页机制把需要的指令和数据加载到内存
编译链接的过程
预处理:将所有的”#define”删除,并且展开所有的宏定义.处理所有的条件编译指令,比如:”#if”处理”#include”预编译指令,将包含的文件插入到该预编译指令的位置(拷贝一份),该过程是递归的可能会重复包含.删除所有的注释,添加行号和文件名标识,保留所有的#pragma编译器指令,编译:生成.s文件(汇编代码文件)。

12. 谈谈结构体和数组的相似点和区别
数组是相同数据类型的元素按一定顺序排列而成的集合,是一种顺序表结构体。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。
数组又可分为数值数组、字符数组、指针数组、结构体数组等各种类别。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。结构体在函数中的作用最主要的就是封装。
数组和结构体相似的地方是都不再是单一的原子类型,而是一个集合。区别在于数组是相同类型元素(元素可以是原子类型的整型、浮点型、字符型或者结构体体、数组等)的集合,而结构体是不同类型元素(元素可以是原子类型的整型、浮点型、字符型或者结构体体、数组等)的集合。
在取地址方面两者也有不同,数组的数组名就代表首地址,依次+1,+2……就可以表示其他元素的地址,不需要使用取地址运算符&;而结构体本身只是一系列不同类型元素的集合,本质上只是把很多类型的元素放在一起,以适应具体问题中数据(例如一个学生的成绩信息、商家的顾客信息等)的存储方式,所以取地址依然需要采用取地址运算。
两者的访问方式也不同,数组可以直接利用下标访问,而结构体必须使用结构体中成员的变量名。
结构体的定义一般放在主函数外面,这样其他函数就可以使用这种类型的结构体定义具体的结构体;而数组则由于定义和使用都较为简单,可以直接在需要使用的函数中定义即可。

13.执行下面代码后,数组里存放的值是什么

  int m[5] = {1,2,3,4,5};
  int i = 2;
  int y = 10;
  m[i++] += y;   

思考这个题目时我也遇到了想复杂了的一个小问题,就是我一开始认为m[i++]+=y是m[i++] = m[i++]+y;那么优先计算右边的m[i++]为m[2],值为3,所以=右侧为13,但是经过了i++,=左侧的i的初值就变成了3,所以变成了m[3] = m[2]+y;原数组中4被替换成了13。但我编译验证之后发现并不像我一开始想的那样,所以我就又去了解了一下+=这个运算符的作用,发现他和拆开的表达式还是有区别的,简单来说就是他直接就是m[2]=m[2]+y;一个加数和=左边的变量一定是一样的。

14.对于多维数组,是否能用单循环遍历所有的数据?
例:arr[5][5];

#include <stdio.h>
#include <stdlib.h>

int main(int argv, char *argc[])
 {

	int arr[5][5] = {0};
	//单循环便利二维数组“赋值”
	int i = 0;
	do
	{
		*(arr[0] + i) += 1 + i;
		i++;
	} while (i < sizeof(arr) / sizeof(int));
	//单循环便利二维数组“输出”
	int j = 0;
	do
	{
		printf("%d	", *(arr[0] + j));
		if ((j + 1) % 5 == 0) 
		{
			printf("\n");
		}

		j++;
	} while (j < sizeof(arr) / sizeof(int));
	system("PAUSE");
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值