ASCII编码程序:
#include <stdio.h>
Int main(void)
{ char x=?(num); printf(“%c”,x); return 0; }
解码:char x=’?(字符即字母或标点)’; print(“%d”,x);~
//* typesize.c -- 打印类型大小 */
#include <stdio.h> int main(void)
{/* C99为类型大小提供%zd转换说明 */
printf("Type int has a size of %zd bytes.\n",
sizeof(int));
printf("Type char has a size of %zd bytes.\n",
sizeof(char));
printf("Type long has a size of %zd bytes.\n",
sizeof(long));
printf("Type long long has a size of %zd bytes.\n",
sizeof(long long));
printf("Type double has a size of %zd bytes.\n",
sizeof(double));
printf("Type long double has a size of %zd bytes.\n",
sizeof(long double));
return 0;}
递增运算符辅助理解程序:
#include <stdio.h>
int main(void)
{
int a=1,b=1;
int a_post,pre_b;
a_post=a++;
pre_b=++b;
printf("a a_post b pre_b \n");
printf("%1d %5d %5d\n",a,a_post,b,pre_b);
return 0; }
输出结果:a a_post b pre_b:a_post是a递增之前的值,而b_pre是b递增之后的值。
2 1 2 2
a_post = a++; // 后缀:使用a的值后,递增a
b_pre= ++b; // 前缀:使用b的值前,递增b
判断真假示例程序:
#include<stdio.h>
int main(void)
{ int true,false;
true=(10>2);//关系为真的值
false=(10==2);//关系为假的值
printf("true=%d;false=%d",true,false); return 0; }
for循环辅助理解程序:
#include <stdio.h>
int main(void)
{ const int NUMBER = 22;
int count;
for (count = 1; count <= NUMBER; count++)
printf("Be my Valentine!\n"); return 0; }
do while 循环辅助理解程序:
#include <stdio.h>
int main(void)
{ const int secret_code = 13;
int code_entered;
do{ printf("To enter the triskaidekaphobia therapy club,\n");
printf("please enter the secret code number: ");
scanf("%d",&code_entered); }
while (code_entered != secret_code);
printf("Congratulations! You are cured!\n");
return 0; }
ANSI原型声明函数辅助理解程序:
double power(double n, int p);//函数声明
xpow = power(x, exp); // 函数调用???为什么x/exp可以取代n/p
double power(double n, int p) // 函数定义
{double pow = 1;
int i;
for (i = 1; i <= p; i++)
pow *= n;
return pow; // 返回pow的值 }
continue语句辅助理解程序:
const float MIN=0.0f;
const float MAX=100.0f;
float score;
float total=0.0f;
int n=0;
float min=MAX;
float max=MIN;
printf("Enter the first score(q to quit):");
while(scanf("%f",&score)==1)
{
if(score<MIN||score>MAX)
{
printf("%0.1f is an invalid value.Try again:",score);
continue;//跳转至while循环的测试条件
}
printf("Accepting%0.1f:\n",score);
min=(score<min)?score:min;
max=(score>max)?score:max;
total+=score;
n++;
printf("Enter next score(q to quit):");
}
if(n>0)
{
printf("Average of %d scores is %0.1f.\n",n,total/n);
printf("Low=%0.1f,high=%0.1f\n",min,max);
}
else
printf("No valid scores were entered.\n");
return 0;
swich语句辅助理解程序
该表达式是刚输入给 ch的值。然后程序扫描标签(这里指,case 'a' :、case 'b' :等)列表,直到发现一个匹配的值为止。然后程序跳转至那一行。如果没有匹配的标签怎么办?如果有default :标签行,就跳转至该行;否则,程序继续执行在switch后面的语句。break语句在其中让程序离开switch语句,跳至switch语句后面的下一条语句。如果没有break语句,就会从匹配标签开始执行到switch末尾。例如,如果删除该程序中的所有break语句,运行程序后输入d,其交互的输出结果会执行从case 'd':到switch语句末尾的所有语句。
switch (ch)
{
case 'a':
printf("argali, a wild sheep of Asia\n");
break;
case 'b':
printf("babirusa, a wild pig of Malay\n");
break;
case 'c':
printf("coati, racoonlike mammal\n");
break;
case 'd':
printf("desman, aquatic, molelike critter\n");
break;
case 'e':
printf("echidna, the spiny anteater\n");
break;
case 'f':
printf("fisher, brownish marten\n");
break;
default:
printf("That's a stumper!\n"); } /* switch结束 */
重复输入,直到文件结尾程序
#include <stdio.h>
int main(void)
{ int ch;
while ((ch = getchar()) != EOF)
putchar(ch);
return 0; }
变量ch的类型从char变为int,因为char类型的变量只能表示0~255的无符号整数,但是EOF的值是-1。getchar()函数实际返回值的类型是int,所以它可以读取EOF字符。如果实现使用有符号的char类型,也可以把ch声明为char类型。使用该程序进行键盘输入,要设法输入EOF字符。不能只输入字符EOF,也不能只输入-1(输入-1会传送两个字符:一个连字符和一个数字1)。正确的方法是,必须找出当前系统的要求。例如,在大多数UNIX和Linux系统中,在一行开始处按下Ctrl+D会传输文件结尾信号。一些系统把任意位置的Ctrl+Z解释成文件结尾信号。
排除缓冲区换行符影响示例:
while (getchar() != 'y') /* 获取响应,与 y 做对比*/
{
printf("Well, then, is it %d?\n", ++guess);
while (getchar() != '\n')
continue; /* 跳过剩余的输入行 */ }
输出地址的转换说明示例:
pooh = 24;
假设pooh的存储地址是0B76(PC地址通常用十六进制形式表示)。那么,下面的语句:
printf("%d %p\n", pooh, &pooh);
将输出如下内容(%p是输出地址的转换说明):24 0B76
指针辅助理解程序示例:
#include <stdio.h>
void interchange(int * u, int * v);
int main(void)
{int x = 5, y = 10;
printf("Originally x = %d and y = %d.\n", x, y);
interchange(&x, &y); // 把地址发送给函数,该函数传递的不是x和y的值,而是它们的地址。这意味着出现在interchange()原型和定义中的形式参数u和v将把地址作为它们的值。因
此,应把它们声明为指针。
printf("Now x = %d and y = %d.\n", x, y);
return 0; }
void interchange(int * u, int * v)
{int temp;
temp = *u; // temp获得 u 所指向对象的值,u的值是&x,所以u指向x。这意味着用*u即可表示x的值,
*u = *v;
*v = temp; }
数组声明示例:
int main(void)
{ float candy[365]; /* 内含365个float类型元素的数组 */
char code[12]; /*内含12个char类型元素的数组*/
int states[50]; /*内含50个int类型元素的数组 */ ...}
初始化数组程序示例:
int powers[8] = {1,2,4,6,8,16,32,64};
用以逗号分隔的值列表(用花括号括起来)来初始化数组,各值之间用逗号分隔。在逗号和值之间可以使用空格。
数组的数组即多维数组声明示例:
float rain[5][12]; // 内含5个数组元素的数组,每个数组元素内含12个float类型的元素。说明每个元素的类型是float[12],也就是说,rain的每个元素本身都是一个内含12个float类型值的数组。rain[0]是一个数组,那么它的首元素就是 rain[0][0],第 2 个元素是rain[0][1],以此类推。
指针加一辅助理解程序示例:
#include <stdio.h>
#define SIZE 4
int main(void)
{short dates[SIZE];
short * pti;
short index;
double bills[SIZE];
double * ptf;
pti = dates; // 把数组地址赋给指
ptf = bills;
printf("%23s %15s\n", "short", "double");
for (index = 0; index < SIZE; index++)
printf("pointers + %d: %10p %10p\n", index, pti + index, ptf + index);
return 0; }
在C中,指针加1指的是增加一个存储单元。对数组而言,这意味着把加1后的地址是下一个元素的地址,而不是下一个字节的地址。在指针前面使用*运算符可以得到该指针所指向对象的值。指针加1,指针的值递增它所指向类型的大小(以字节为单位)。
dates + 2 == &date[2] // 相同的地址 *(dates + 2) == dates[2] // 相同的值
编写一个处理数组的函数示例:
阐明包含数组元素个数的信息。第一种方法:在函数代码中写上固定的数组大小
int sum(int * ar) // 相应的函数定义,对应的函数原型
{
int i;
int total = 0;
for (i = 0; i < 10; i++) // 假设数组有10个元素
total += ar[i]; // ar[i] 与 *(ar + i) 相同
return total; }
sum()从该参数获得了什么信息?它获得了该数组首元素的地址,知道要在该位置上找出一个整数。
第二种:
int sum(int * ar, int n) // 更通用的方法
{int i;
int total = 0;
for (i = 0; i < n; i++) // 使用 n 个元素
total += ar[i]; // ar[i] 和 *(ar + i) 相同
return total; }
只有在函数原型或函数定义头中,才可以用int ar[]代替int * ar。int *ar形式和int ar[]形式都表示ar是一个指向int的指针。
声明数组形参:因为数组名是该数组首元素的地址,作为实际参数的数组名要求形式参数是一个与之匹配的指针。只有在这种情况下,C才会把int ar[]和int * ar解释成一样。也就是说,ar是指向int的指针。由于函数原型可以省略参数名,所以下面4种原型都是等价的:
int sum(int *ar, int n); int sum(int *, int); int sum(int ar[], int n); int sum(int [], int);
但是,在函数定义中不能省略参数名。下面两种形式的函数定义等价:
int sum(int *ar, int n); int sum(int ar[], int n);
表现字符串的多种方式示例:
#include <stdio.h>
#define MSG "I am a symbolic string constant."
#define MAXLENGTH 81
int main(void)
{char words[MAXLENGTH] = "I am a string in an array.";
const char * pt1 = "Something is pointing at me.";//指针表示法创建字符串
puts("Here are some strings:");
puts(MSG);
puts(words);
puts(pt1);
words[8] = 'p';
puts(words);
return 0; }
自定义输入/输出函数示例:打印字符串,不添加换行符:
#include <stdio.h>
void put1(const char * string)/* 不会改变字符串 */
{while (*string != '\0')
putchar(*string++); }
判断素数:
#include <stdio.h>
#include <stdbool.h>
int main(void)
{
unsigned long num; // 待测试的数
unsigned long div; // 可能的约数
bool isPrime; // 素数标记
printf("Please enter an integer for analysis; ");
printf("Enter q to quit.\n");
while (scanf("%lu", &num) == 1)
{
for (div = 2, isPrime = true; (div * div) <= num; div++)
{
if (num % div == 0)
{
if ((div * div) != num)
printf("%lu is divisible by %lu and %lu.\n",
num, div, num / div);
else
printf("%lu is divisible by %lu.\n",
num, div);
isPrime = false; // 该数不是素数
}
}
if (isPrime)
printf("%lu is prime.\n", num);
printf("Please enter another integer for analysis; ");
printf("Enter q to quit.\n");
}
printf("Bye.\n");
return 0;
}