目录
7.写个自定义函数:库函数sprintf 让十进制转换成十六位进制
理论题
1.USB接口
带有USB接口的I/O设备可以有自己的电源,也可以通过USB接口由主机提供电源,但电压是+5V,不是+12v
- USB接口是一种通用总线式串行接口,所以数据以串行方式进行传输,而不是高速并行方式进行传输
- 使用4线连接器,规格有标准型、小型和微型,符合“即插即用”规范
- 最高有效数据传输速率
USB 2.0 480Mb/s(60MB/s) USB 3.0 3.2Gb/s(400MB/s)
2.局域网
属于一个单位,由一个单位自建自管
- 局域网有多种不同的类型,不同类型的局域网(例如以太网、令牌网等)采用不同的网卡和协议
- 局域网一般使用专门铺设的传输介质进行连网和数据通信,其传输速率高、延迟时间短
- 局域网一般采用分组交换技术(包交换技术),而不是报文交换技术。
分组交换技术是将用户传送的数据划分成—定的长度,每个部分叫做一个分组,通过传输分组的方式传输信息的一种技术。
3.标准ASCII码是7位码
用7位二进制数表示一个字符的编码。ASCII码有7位码和8位码两种版本。
4.CPU卡 和 IC卡
SIM卡是CPU卡 |
银行卡以前是磁条卡现在是IC卡 |
非理论题
1.逗号表达式
int f(int a,int b)
{
if(a < b)
return (a,b);
else
return (b,a)
}
Q:main函数执行printf("%d",f(2,3));
A:f函数中的return的是逗号表达式,所以是3. 而不是2,3
2.输出字符数组的三种方法
#include<stdio.h>
char s [10] = "Thank you";
int i;
Q:要求输出 "Thank you"
A:
法一:
for(i = 0; s[i]!= '\0'; i++)
printf ("%c", s[i]); // %s 是打印地址
法二:
for(i = 0; s[i] != '\0'; i++)
putchar(s[i]);
法三:
puts(s);
3.结构体类型属于用户自定义类型不支持自增运算
结构体类型里面的有的成员可以进行自增运算,例如,结构体x中有个称作age变量整型数据,你可以这样进行自增运算x.age++
4.结构体
#include<stdio.h>
#include <string.h>
typedef struct
{
char title[20]; //书名
int type; //类别
double price; //价格
}BOOK;
typedef struct
{
char c_name[10]; //类别名
int num; //数量
double sum; //金额
}STATISTICS;
void statis(BOOK sx[], int n, STATISTICS sy[], char c_name[][10])
{
int i,k;
for(i = 0;i < 3;i++)
strcpy(sy[i].c_name, c_name[i]);
for(i = 0; i < n;i++)
{
k = sx[i].type;
sy[k].num++;
sy[k].sum += sx[i].price;
}
}
int main()
{
BOOK s[6]={{"A",0,30},{"B",1,15},{"C",2,25},{"D",2,32},{"E",1,20},{"F",0,10}};
STATISTICS result[3]={0};
char type_name[3][10] = {"math","poem","music"};
int i;
statis(s, 6, result, type_name);
for(i = 0;i < 3;i++)
printf("%10s %d %.0f\n", result[i].c_name, result[i].num, result[i].sum);
return 0;
}
5.冒泡排序
#include <stdio.h>
#define N 9
#define SWAP(x, y) {int tmp = (x); (x) = (y); (y) = tmp;}
void fun (int*arr, int n)
{
int i,j, flag = 1;
for(i = 0; i < n - 1 && flag; i++)
{
flag = 0;
for(j = 0;j < n - 1 - i; j++)
{
if (arr[j+1] > arr[j])
{
SWAP(arr[j + 1],arr[j]);
flag = 1;
}
}
}
}
int main()
{
int data[] = {1,0,6,9,3,5,2,7,5};
int i,j = 1;
fun(data, N);
for(i = 0; i < N; ++i)
{
printf("%d", data[i]);
if(!(j%3))
printf("\n");
j++;
}
return 0;
}
6. isalpha
for( isalpha(s[i]); )这个函数是判断 s [ i ]这个元素是不是字母
7.写个自定义函数:库函数sprintf 让十进制转换成十六位进制
1.编写 void dtoh( char b [ ] , char c [ ])函数
将 b数组 中一个整数的十进制字符串 转换成 该整数的十六进制字符串 并保存在c指向的数组中
(要求:十六进制字符串自左向右依次保存在C[0]开始的数组元素中)。
例如,b数组中字符串为“26”,调用该函数后,C[0]中字符为"1",C[1]中字符为"A"。
2.编写main函数
声明 2个 5×6 的二维数组并用测试数据初始化其中—个数组(每行存储一个待转换的整数十进制字符串),用2个数组作实参调用dtoh函数,将所有转换后的十六进制字符串输出到显示器屏幕
#include<stdio.h>
#include <string.h>
void dtoh(char b[], char c[])
{
int i, j = 0;
long n = 0;
for (i = 0; i < strlen(b); i++)
{
n = n*10 + b[i]-'0';
} //得到了十进制的整数
//sprintf比printf对应的参数前面 多一个参数 (多一个要写入的存储单元 这样的一个地址
//他会相对于printf函数 它会把写出到 终端显示的信息 存放到第一个参数里面(第一个参数指向的存储单元里面
//所以我们要完成目的的话,我们可以直接对十六进制的调用printf函数
sprintf(c, "%X", n);//因为要存入c数组,所以把c的地址当作参数传进来
//格式字符 (X是ABCD, x是abcd)
return;
}
int main()
{
int i;
FILE *fp;
char b[5][10] = {"26", "32", "129", "2345", "12345"};
char c[5][10];
fp = fopen("myf2.out", "w");
if (fp == NULL)
{
printf("can not open file!");
return 0;
}
for (i = 0; i < 5; i++)
{
printf("%s ", b[i]);
fprintf(fp, "%s ", b[i]);
dtoh(b[i], c[i]);
}
printf("\n");
fprintf(fp, "\n");
for (i = 0; i < 5; i++)
{
printf("%s ", c[i]);
fprintf(fp, "%s ", c[i]);
}
printf("\n");
fprintf(fp, "\n");
return 0;
}
不知道sprintf的笨方法
#include<stdio.h>
int dtoh(char b [], char c [])
{
long bit,n = 0;
int i,j = 0;
for(i = 0;b[i] != '\0' ; i++ )//另一种判断方式:i < strlen(b)
{
n = n * 10 + b[i] - '0';
}
while(n)
{
bit = n % 16;
switch (bit)
{
case 10:
c[j++] = 'A';
break;
case 11:
c[j++] = 'B';
break;
case 12:
c[j++] = 'C';
break;
case 13:
c[j++] = 'D';
break;
case 14:
c[j++] = 'E';
break;
case 15:
c[j++] = 'F';
break;
default:
c[j++] = bit + '0';
break;
}
n = n / 16;
}
c [j] = '\0';
for(i = 0,j--;i < j; i++,j--)
{
char ch = c[i];
c[i] = c[j];
c[j] = ch;
}
}
int main()
{
int i;
FILE *fp;
char b[5][10] = {"26", "32", "129", "2345", "12345"};
char c[5][10];
fp = fopen("myf2.out", "w");
if (fp == NULL)
{
printf("can not open file!");
return 0;
}
for (i = 0; i < 5; i++)
{
printf("%s ", b[i]);
fprintf(fp, "%s ", b[i]);
dtoh(b[i], c[i]);
}
printf("\n");
fprintf(fp, "\n");
for (i = 0; i < 5; i++)
{
printf("%s ", c[i]);
fprintf(fp, "%s ", c[i]);
}
printf("\n");
fprintf(fp, "\n");
return 0;
}