本次授课内容如下:基本类型、数组
辅助教材为 《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]等价
示例程序
#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章内容,关键点:基本类型和数组