嵌入式C笔试题[转]

2019-07-13 09:17发布

1、整数求反 如123456求反之后变654321 思路:定义两个变量,一个变量保存原来的数,另外一个保存取反之后的数。然后利用对10求余的方法将要取反的数的最低位首先取出来,然后利用除法(除以10)将最低位去掉。利用num>0不断的循环一位一位的取出来即可。 关键:***对10求余是取出最低位***             ***除以10是去除最低位*** int main(void) { int num = 123456; int r_num = 0; while(num > 0) { r_num = r_num*10 + (num%10); num = num/10; } printf("%d ", r_num); } 2、字符串求反(逆序) 思路1:先算出字符串的长度,然后记录中间的位置,循环交换第一个字符和最后一个字符 思路2:函数接口设计成要char *ReverseString(char *s, int start, int end) char *ReverseString(char *s) { if(s == NULL) { return s; } int len = strlen(s); int i = 0; char temp; for(i=0; i char *ReverString(char *str, int start, int end) { if(str == NULL) { return str; } cahr temp; while(start < end) { temp = str[start]; str[start] = str[end]; str[end] = temp; start++; start--; } return str; }   3、递归求n的阶乘 思路:注意递归结束的条件即可 int recursion(int n) { if(n <= 0) { return 0; } else if(n == 1) { return 1; } else { n= n*recursion(n-1) } return n; } 4、不用库函数比较两个字符串的大小 int strcmp(const char*src, const char *dst) { if(src==NULL || dst==NULL) { return -1; } while(*src && *dst && *src==*dst) { src++; dst++; } return *src-*dst; } 5、写一个程序读入一个文件判断文件中字母a的个数 #include #include int main(void) { FILE *fp = NULL; char ch; int count = 0; //打开文件 fp = open("test.txt", "r"); if(fp == NULL) { printf("oepn error "); return -1; } //循环读取文件的字符 while((ch = fgetc(fp)) != EOF) { if(ch == 'a') { count++; } } printf("%d ", count); //关闭文件 close(fp); return 0; } 6、求0--3000中含有9和2的全部数之和 思路:从29循环到3000,然后将每个数转换成字符串,写一个函数检测这个字符串有没有含有‘9’,‘2’的字符,如果含有则返回1 没有则返回0,如果成立则将此数叠加起来。 需要的函数:数字转字符串的函数char * myitoa(char *buf, int num, int radix) char *myitoa(int num, char *str, int radix) { char index[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int temp; int i = 0, j, k; if(radix==10 && num<0) { temp = -num; str[i++] = '-'; } else { temp = num; } while(temp) { str[i++] = index[temp%radix]; temp = temp/radix; } str[i] = '