江苏省C语言二级备考(3/20)

目录

理论题

1.USB接口

2.局域网

3.标准ASCII码是7位码

4.CPU卡 和 IC卡

非理论题

1.逗号表达式

2.输出字符数组的三种方法

3.结构体类型属于用户自定义类型不支持自增运算

4.结构体

5.冒泡排序

6. isalpha

7.写个自定义函数:库函数sprintf  让十进制转换成十六位进制

                              不知道sprintf的笨方法



理论题

1.USB接口

带有USB接口的I/O设备可以有自己的电源,也可以通过USB接口由主机提供电源,但电压是+5V,不是+12v

  1. USB接口是一种通用总线式串行接口,所以数据以串行方式进行传输,而不是高速并行方式进行传输
  2. 使用4线连接器,规格有标准型、小型和微型,符合“即插即用”规范
  3. 最高有效数据传输速率
    USB 2.0480Mb/s(60MB/s)
    USB 3.03.2Gb/s(400MB/s)

2.局域网

属于一个单位,由一个单位自建自管

  1. 局域网有多种不同的类型,不同类型的局域网(例如以太网、令牌网等)采用不同的网卡和协议
  2. 局域网一般使用专门铺设的传输介质进行连网和数据通信,其传输速率高、延迟时间短
  3. 局域网一般采用分组交换技术包交换技术),而不是报文交换技术

        分组交换技术是将用户传送的数据划分成—定的长度,每个部分叫做一个分组,通过传输分组的方式传输信息的一种技术。


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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值