真题四十、四十一、四十二

//数字字符顺序后移,经常考,要牢记于心
char *fun(char  *s)
{ int  i, j, k, n;    char  *p, *t;
  n=strlen(s)+1;
  t=(char*)malloc(n*sizeof(char));
  p=(char*)malloc(n*sizeof(char));
  j=0; k=0;
  for(i=0; i<n; i++)
  {  if(((s[i]>='a')&&(s[i]<='z'))||((s[i]>='A')&&(s[i]<='Z'))) {
/**********found**********/
       t[j]=s[i]; j++;}
     else
     {  p[k]=s[i]; k++; }
  }
/**********found**********/
  for(i=0; i<k; i++)  t[j+i]=p[i];//取值范围0~k,非字母元素放在字母元素后面
/**********found**********/
  t[j+k]= '\0';//字符串结束符
  return  t;
}

void fun (char  *s,  char *t1, char *t2 , char *w)
{
  char   *p , *r, *a;
  strcpy( w, s );
/************found************/
  while ( *w )
  {   p = w;   r = t1;
      while ( *r )
/************found************/
        if( *r == *p )
        { r++;  p++; }
        else  break;
        if ( *r == '\0' ) a = w;
        w++;
  }
  r = t2;
  while ( *r ){ *a = *r; a++; r++; }
}
//文件操作
void fun(char  *s, int  a, double  f)
{
/**********found**********/
  FILE* fp;//文件类型为指针
  char  str[100], str1[100], str2[100];
  int  a1;     double  f1;
  fp = fopen("file1.txt", "w");
  fprintf(fp, "%s  %d  %f\n", s, a, f);
/**********found**********/
  fclose(fp);//在fo做打开操作时,进行不同的操作前,应该将其关闭
  fp = fopen("file1.txt", "r");
/**********found**********/
  fscanf(fp,"%s%s%s", str, str1, str2);//把文本文件输出
  fclose(fp);
  a1 = atoi(str1);
  f1 = atof(str2);
  printf("\nThe result :\n\n%s %d %f\n", str, a1, f1);
}
//结构体操作
#include <stdlib.h>
#include  <conio.h>
#include  <string.h>
#include  <stdio.h>
#include  <malloc.h>
#define N 10
typedef struct ss
   { char num[10];
     int s;
   } STU;
STU *fun(STU a[], int m)
{ STU b[N],*t;
  int i, j,k;
/*************found**************/
  t=(STU*)calloc(m,sizeof(STU));//强制转换成stu类型
  for(i=0;i<N;i++) b[i]=a[i];
  for(k=0;k<m;k++)
     { for (i=j=0;i<N;i++)
          if(b[i].s>b[j].s) j=i;
/*************found**************/
      strcpy(t[k].num,b[j].num);//结构体变量的转换
      t[k].s=b[j].s;
      b[j].s=0;
     }
return t;
}
void outresult(STU a[],FILE *pf)
{ int i;
  for(i=0;i<N;i++)
  fprintf(pf, "No=%s Mark=%d\n ",
a[i].num, a[i].s);
  fprintf(pf, "\n\n ");
}
void main()
{ STU a[N]={{ "A01 ",81},{ "A02 ",89},{ "A03 ",66},{ "A04 ",87},{ "A05 ",77},
			{ "A06 ",90},{ "A07 ",79},{ "A08 ",61},{ "A09 ",80},{ "A10 ",71}};
  STU *pOrder;
  int i, m;
  system("CLS");
  printf("*****THE RESULT*****\n");
  outresult(a,stdout);
  printf("\nGive the number of the students who have better score: ");
  scanf("%d",&m);
  while(m>10)
       { printf("\nGive the number of the students who have better score: ");
  scanf("%d",&m);
}
  pOrder=fun(a,m);
  printf("***** THE RESULT*****\n");
  printf("The top :\n");
  for(i=0;i<m;i++)
     printf("%s  %d\n",pOrder[i].num, pOrder[i].s);
  free(pOrder);
}
//删除数组中相同的数,从小到大排列
//法一:
int fun(int a[], int n)
{
	int i, k,t;
	int b[80] = { 0 };
	k= a[0];
	b[0] = a[0];
	t = 1;
	for (i = 0; i < n; i++)
	{
		if (a[i] != k)
		{
			k = a[i];
			a[t++] = k;
		}
	}
	return t;
}
//法二:
int fun(int a[], int n)
{
    int i,j=1;
    for(i=1;i<n;i++)
        if(a[j-1)!=a[i]) a[j++]=a[i];
    //与前一个数不相同,则要保留

    return j;
}

 

### 嵌入式蓝桥杯2023年第十四届真题解析 嵌入式开发作为蓝桥杯竞赛的重要组成部分,涉及硬件接口编程、信号处理以及实时控制等内容。以下是关于嵌入式蓝桥杯2023年第十四届省赛的相关题目及其背景说明。 #### 题目概述 根据提供的参考资料[^2],可以了解到嵌入式部分的题目通常围绕实际应用展开,例如LED显示驱动、按键扫描逻辑以及模数转换器(ADC)的应用等。具体到本年度的比赛内容,以下是一个典型的例子: --- #### 样例题目:基于STM32的外设功能实现 ##### 描述 给定一个嵌入式平台(如STM32),完成如下任务: 1. 编写函数`Led_Disp(unsigned char c)`用于控制8位LED灯的状态,其中参数`c`代表要显示的二进制模式。 2. 实现函数`Key_Scan(void)`来检测外部按键状态并返回对应的键值。 3. 使用内置ADC模块编写函数`getADC2(void)`读取指定通道上的模拟电压值,并将其转化为无符号短整形数据类型(`uint16_t`)输出。 ##### 输入/输出要求 - **输入**: 用户通过按键触发不同的操作指令; - **输出**: LED灯按照预定模式点亮或者熄灭,同时串口打印当前ADC采样值。 ##### 参考代码片段 ```c #include "main.h" // 控制LED显示状态 void Led_Disp(unsigned char c) { GPIO_Write(GPIOA, c); // 假设GPIOA连接至LED阵列 } // 扫描按键状态 unsigned char Key_Scan(void) { if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)) { // 检查PB0端口电平 return 1; // 返回对应键值 } return 0; } // 获取ADC2通道数值 uint16_t getADC2(void) { ADC_StartConversion(ADC2); while (!ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC)); // 等待转换结束标志置位 return ADC_GetConvertedValue(ADC2); // 返回转换后的结果 } ``` 上述代码展示了如何利用标准库配置基本I/O与AD转换过程[^2]。 --- #### 技术要点总结 针对此类问题需要注意以下几个方面: - 正确初始化相关外设资源,比如时钟使能、引脚映射及时序调整。 - 结合具体的单片机型号手册理解寄存器定义及工作原理。 - 测试阶段应考虑边界条件验证程序鲁棒性。 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值