C语言家教记录(四)

C语言家教记录(四)

  • 导语
  • 基本类型
    • 整数
    • 浮点数
    • 字符
    • 类型转换
    • 类型定义
  • 数组
    • 一维数组
    • 多维数组
  • 总结和复习

导语

本次授课内容如下:基本类型、数组

辅助教材为 《C语言程序设计现代方法(第2版)》

基本类型

整数

介绍基本类型,short int,unsigned short int,int,unsigned int,long int,unsigned long int

整数常量,八进制只有0~7,必须0开头,十六进制包括字母,以0x开头,强制把常量作为长整数处理加L

整数溢出

u,o,x,hd,ld,lld

浮点数

float,double,long double

浮点常量表示,看书的例子

lf,f

字符

字符被当成整数处理,取值范围为0000000-1111111

char ch;
ch = 'a'; /* lower-case a */
ch = 'A'; /* upper-case A */
ch = '0'; /* zero */
ch = ' '; /* space */

if ('a' <= ch && ch <= 'z')
 ch = ch - 'a' + 'A';

ch=toupper(ch);
ch=tolower(ch);

char ch;
scanf("%c", &ch); 
printf("%c", ch); 
scanf(" %c", &ch);//跳过零个或者多个空白符

putchar(ch);
putchar('\n');
ch=getchar();

do {
 scanf("%c", &ch);
} while (ch != '\n');
//等价于
do {
 ch = getchar();
} while (ch != '\n');
//等价于
while ((ch = getchar()) != '\n');

字符转义序列,a,b,f,n,r等
进制转义序列,\33,\x1B

示例程序

#include 
int main(void)
{
 int len = 0;
 printf("Enter a message: ");
 while (getchar() != '\n')
 len++;
 printf("Your message was %d character(s) long.\n", len);
 return 0;
}

类型转换

short->int->long long int
float->double->long double
int->float

计算的时候小就大

char c=10000;
int i=1e20;
float f=1.0e100;
float x=3.1415f;//不加f会认为是double


float f, frac_part;
frac_part = f - (int) f;

i = (int) f;

float quotient;
int dividend, divisor;
quotient = dividend / divisor;

i = (long) j * j;

类型定义

#define carrier int
typedef int carrier;
carrier a=100;

typedef long long int lli;
typedef unsigned long long int ulli;

printf("Size of int: %lu\n", (unsigned long) sizeof(int));//sizeof

数组

一维数组

int a[10];//从0~9的下标

#define N 10
int a[N];

for (i = 0; i < N; i++)
 	a[i] = 0;
for (i = 0; i < N; i++)
 scanf("%d", &a[i]);
for (i = 0; i < N; i++)
 scanf("%d", a+i);
for(int i=0;i<N;i++)
	printf("%d",a[i]);
for (i = 0; i < N; i++)
	 sum += a[i];

a[i+j*2]=10;

int a[10]={0,1,2,3,4,5,6,7,8,9};
int b[10]={0};//未赋值全为0
int c[10]={[0]=1,[3]=7};//顺序无所谓
int d[]={[4]=1,[2]=[3],[20]={54}};//最大为长度
int c[10] = {5, 1, 9, [4] = 3, 7, 2, [8] = 6};

sizeof(a),sizeof(a[0]),sizeof(a)/sizeof(a[0])

示例程序

#include 
#define N 10
int main(void)
{
 int a[N], i;
 printf("Enter %d numbers: ", N);
 for (i = 0; i < N; i++)
 scanf("%d", &a[i]);
 printf("In reverse order:");
 for (i = N - 1; i >= 0; i--)
 printf(" %d", a[i]);
 printf("\n");
 return 0;
}

#include  /* C99 only */
#include 
int main(void)
{
 bool digit_seen[10] = {false};
 int digit;
 long n;
 printf("Enter a number: ");
 scanf("%ld", &n);
 while (n > 0) {
 digit = n % 10;
 if (digit_seen[digit])
 break;
 digit_seen[digit] = true;
 n /= 10;
 }
 if (n > 0)
 printf("Repeated digit\n");
 else
 printf("No repeated digit\n");
 return 0;
}

多维数组

解释一下基层的存储原理

#define N 10
double ident[N][N];
int row, col;
for (row = 0; row < N; row++)
 for (col = 0; col < N; col++)
 if (row == col)
 ident[row][col] = 1.0;
 else
 ident[row][col] = 0.0;

a[i][j]和a[(i-1)*n+j]等价

C语言家教记录(四)_第1张图片

示例程序

#include  /* C99 only */
#include 
#include 
#include 
#define NUM_SUITS 4
#define NUM_RANKS 13
int main(void)
{
 bool in_hand[NUM_SUITS][NUM_RANKS] = {false};
 int num_cards, rank, suit;
 const char rank_code[] = {'2','3','4','5','6','7','8',
 '9','t','j','q','k','a'};
 const char suit_code[] = {'c','d','h','s'};
 srand((unsigned) time(NULL));
 printf("Enter number of cards in hand: ");
 scanf("%d", &num_cards);
 printf("Your hand:");
 while (num_cards > 0) {
 suit = rand() % NUM_SUITS; /* picks a random suit */
 rank = rand() % NUM_RANKS; /* picks a random rank */
 if (!in_hand[suit][rank]) {
 in_hand[suit][rank] = true;
 num_cards--;
 printf(" %c%c", rank_code[rank], suit_code[suit]);
 }
 }
 printf("\n");
 return 0;
}

总结和复习

本次授课讲述第7章和第8章内容,关键点:基本类型和数组

你可能感兴趣的:(C语言家教记录,c语言,算法,开发语言)