文档库 最新最全的文档下载
当前位置:文档库 › C语言

C语言

C语言
C语言

《C语言程序设计》复习提纲

一、单项选择题和填空题的知识点

1、函数是C程序的主要组成部分,函数是C程序的基本单位。一个C语言程序是由一个或多个函数组成的,其中必须包含一个main函数(且只能有一个main函数)。

2、程序总是从main函数开始执行的。C语言本身不提供输入输出语句。

3、识别不同的常量。

(1)整型常量,如100,0,-12

(2)实型常量,有两种表示形式。

第一,十进制小数形式,如12.45、-56.79。

第二,指数形式,即科学计数法。如12.34e -4,其中,字母e前面的部分称为尾数,可以用实型数据表示,后面的部分称为指数,只能用整型数据表示,而字母e既可以是小写的e,也可以是大写的E。

(3)字符常量,有两种形式:普通字符和转义字符。普通字符如’a’,注意字符常量中只能包含一个字符。转义字符是以字符\开头,如’\n’,注意它表示的是一个字符。

(4)字符串常量,如”Nanjing”。

(5)符号常量,是用#define指令定义的。如#define PI 3.1416。一旦定义以后,凡是使用PI的地方,实际上使用的3.1416。

4、合法标识符和非法标识符的识别。

5、

6、%运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数。如8%3的结果为2。

7、除%以外的运算符的操作数都可以是任何算术类型。

8、自增、自减运算符的使用。参见P53的内容和例子。(单选)

9、不同类型数据间的混合运算。参见P54的内容和例子。

10、赋值过程中的类型转换。参见P62的内容和例子。(单选)

11、o格式符的使用:以八进制整数形式输出数据。x符的使用:以十六进制整数形式输出数据。具体内容参见P73的内容和例子。

12、在程序中实现两个变量的值交换的算法。

13、a&&b&&c和a||b||c的运算过程。参见P95的具体内容和例子。

14、(m=a>b)&&(n=c>d),该式中n的值为多少。参见P95的具体内容和例子。

15、判断大写字母的表达式:(ch>=’A’&&ch<=’Z’)

16、判断小写字母的表达式:(ch>=’a’&&ch<=’z’)

15、判断数字字符的表达式:(ch>=’0’&&ch<=’9’)

17、大写字母转换为小写字母:+32

18、小写字母转换为大写字母:-32

19、P111习题3:求逻辑表达式的值。

20、除了可以用数组元素作为函数参数外,还可以用数组名作为函数参数(包括实参和形参)。如果用数组元素作为实参,则向形参变量传递的是数组元素的值;如果用数组名作为实参,则向形参变量传递的是数组首元素的地址。

21、三种局部变量的存储位置是不同的:自动变量存储在动态存储区中,静态局部变量存储在静态存储区中,寄存器变量存储在CPU的寄存器中。

22、我们将地址形象化地称为“指针”。

23、指针变量的值是地址(即指针)。

24、如果指针变量p1和p2都指向同一数组,如执行p2-p1,结果是p2-p1的值(两个地址之差)除以数组元素的长度。而两个地址不能相加,即p2+p1是无实际意义的。

25、可以引用结构体变量中成员的值,具体的引用方式为:结构体变量名.成员名。如:https://www.wendangku.net/doc/823423471.html,=”wang”;

26、结构体变量所占内存长度是各成员所占内存长度之和,而共用体变量所占的内存长度等于最长的成员的长度。

27、根据数据的组织形式,数据文件可分为ASCII文件和二进制文件。

28、用fopen函数打开数据文件。

29、使用文件的方式:见P335的表10.1。

三、名词解释

1、程序:程序就是一组计算机能识别和执行的指令,每一条指令使计算机执行特定的操作。

2、高级语言:高级语言是接近于人类习惯使用的自然语言和数学语言,又能够被计算机识别和运行的计算机语言。高级语言不依赖于具体的机器,但其不能被计算机直接识别,而必须已经“翻译”。

3、常量:常量是指在程序的运行过程中其值不能被改变的量。

4、标识符:在计算机高级语言中,用来对变量、符号常量、函数、数组、类型等命名的有效字符序列统称为标识符。

5、C算术表达式:用算术运算符和括号将运算对象(即操作数)连接起来,符合C语言语法规则的式子称为C算术表达式。

6、输出:输出是指从计算机向输出设备输出数据。

7、输入:输入是指从输入设备向计算机输入数据。

8、关系运算:所谓关系运算就是比较运算,将两个数值进行比较,判断其比较的结果是否符合给定的条件。

9、关系表达式:用关系运算符将两个数值或数值表达式连接起来的式子称为关系表达式。

10、逻辑表达式:用逻辑运算符将关系表达式或其他逻辑表达式连接起来的式子称为逻辑表达式。

11、数组:数组是一组有序数据的集合。在数组中,各个数据的排列是有一定规律的,下标代表了数据在数组中的序号。

12、函数:函数就是功能,每一个函数用来实现一个特定的功能,函数的名字应反映其代表的功能。

13、形式参数:在定义函数时函数名后面括号中的变量称为形式参数,也称为虚拟参数。

14、实际参数:在主调函数中调用一个函数时,函数名后面括号中的参数称为实际参数,简称实参。实际参数可以是常量、变量或表达式。

15、值传递:值传递是单向传递,数据只能由实参传给形参,而不能由形参传给实参。

16、局部变量:在一个函数内部定义的变量只在该函数范围内有效,在复合语句中定义的变量也只在该复合语句范围内有效,这些只能在局部范围内有效,超出其所在范围就无效的变量称为局部变量。

17、全局变量:在函数之外定义的变量称为外部变量,外部变量是全局变量。全局变量可以为文件中的其他函数所共用,其有效范围为从定义该变量的位置开始到源文件结束。

18、数据的存储类别:数据的存储类别是指数据在内存中存储的方式,有静态存储和动态存储之分。

19、自动变量:对于在函数中定义的动态局部变量,当该函数被调用时,系统会给它们分配存储空间,在函数调用结束时就自动释放存储空间,这样的局部变量称为自动变量。自动变量用关键字auto作存储类别的声明。

20、静态局部变量:对于函数中定义的静态局部变量,当该函数的调用结束后,系统并不释放它们的存储空间,在下一次调用该函数时,这些变量中已经有值了,就是上一次函数调用结束时的值。静态局部变量用关键字static进行声明。

21、寄存器变量:为了提高代码的执行效率,C语言允许将局部变量的值存放在CPU中的寄存器中,需要使用时直接从寄存器中取出,而不必再到内存中存取。这种变量称为寄存器变量。寄存器变量用关键字register进行声明。

22、变量的作用域:如果一个变量在某个文件或函数范围内是有效的,就称该范围为该变量的作用域。

23、指针:一个变量的地址称为该变量的“指针”。

24、指针变量:如果一个变量专门用于存放另一个变量的地址(即指针),则该变量就是“指针变量”。

24、结构体类型:在C语言中允许用户自己建立由若干个不同类型数据组成的组合型的数据结构称为结构体。用户使用结构体自定义的数据类型称为结构体类型。

25、数据流:输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流。

四、简答题

1、高级语言经历了哪些发展阶段?

答:高级语言经历了非结构化语言、结构化语言和面向对象语言三个不同的发展阶段。非结

构化语言没有严格的规范要求,程序中可以随意的跳转。在结构化语言中,程序必须由顺序结构、分支结构和循环结构的基本结构构成,在程序中不能随意的跳转。面向对象语言支持面向对象程序设计方法,适合于处理规模较大的复杂问题。

2、一个函数包括哪几个部分?试分别简述之。

答:一个函数包括函数首部和函数体两个部分。函数首部包括函数名、函数类型、函数属性、函数参数名和参数类型。函数体包括声明部分和执行部分,其中声明部分包括函数内部局部变量的声明和所调用的函数的声明,执行部分为若干个语句组成的语句组。

3、简述标识符的组成规则。

答:C语言规定标识符只能由字母、数字和下划线三类字符组成,且第一个字符必须是字母或下划线。

4、C语言中基本数据类型有哪些?

答:C语言中的基本数据类型包括整型类型和实型类型两大类。其中,整型类型又分为基本整型(int)、短整型(short)、长整型(long)和字符型(char);实型类型又分为单精度实型(float)和双精度实型(double)

5、什么是顺序结构?

答:在顺序结构中,程序中的各个语句是按照自上而下的顺序执行的,执行完上一个语句就自动执行下一个语句,是无条件的,不必作任何判断。

6、简述关系运算符及其优先次序。

答:C语言提供了六种关系运算符,分别为<、<=、>、>=、==、!=。其中,前四种运算符的优先级相同且为高优先级,后两种运算符的优先级相同且为低优先级。

7、C语言中逻辑值的表示方法。

答:C语言编译系统在表示逻辑运算结果时,以数值1代表“真”,以数值0代表“假”;但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。

8、什么是逻辑运算符的短路问题?

答:在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的值时,该运算符才被执行。

9、while循环和do-while循环的区别?

答:while循环是先判断循环条件,后执行循环体;而do-while循环是先执行循环体,后判断循环条件。因此,while循环的循环体有可能不执行,即while循环的循环体最少被执行0次,而do-while循环的循环体至少被执行一次。

10、for语句的执行过程?

答:for语句的一般形式为:for(表达式1;表达式2;表达式3),for语句的具体执行过程为:

(1)求解表达式1;

(2)求解表达式2,如果表达式2的值为真,则执行循环体;如果为假,则结束循环的执行

,转(5)执行。

(3)执行循环体;

(4)求解表达式3,转(2)继续执行。

(5)循环结束,执行for语句的后一个语句。

11、break语句和continue语句的区别?

答:continue语句是结束本次循环的执行,直接进入下一次循环的执行,而不是终止整个循环的执行。而break语句是结束整个循环的执行,不在判断执行循环的条件是否成立,即直接从循环体内跳转到循环体外。

12、定义一个函数应包括哪些内容?

答:定义函数应包括以下内容:

(1)指定函数的名字,以便通过该函数名调用该函数。

(2)指定函数的类型,即函数返回值的类型。

(3)指定函数的参数名和类型,以便在调用函数时通过它们传递数据。对无参函数不需要这项。

(4)指定函数应当完成的操作。

13、函数嵌套调用和递归调用的区别?

答:函数的嵌套调用是指一个函数A在其执行过程,调用了另一个函数B,依次类推,在函数B的执行过程中,又调用了另一个函数C。而函数的递归调用其实是一种特殊的嵌套调用,即在函数的嵌套调用的过程中,出现了函数A直接或间接地调用其本身(即函数A)。

14、静态存储方式和动态存储方式的区别?

答:静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式,而动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间的方式。在静态存储方式中,数据存储在静态存储区中,在整个程序的执行过程中均有效;而在动态存储方式中,数据存储在动态存储区中,只在整个程序的执行过程中的某一个时间段有效。

15、C语言中有哪些存储类别?

答:C语言中有四种不同的存储类别,分别为自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。

16、什么是共用体类型?

答:所谓共用体类型就是将多个变量的内存空间组合在一起,通过使用覆盖技术,使后一个数据的存储覆盖前一个数据的存储,从而实现多个变量共享同一段内存空间,这种逻辑结构类型称为共用体类型。

17、什么是枚举类型?

答:所谓枚举类型就是指把可能的值一一列举出来,变量的值只限于列举出来的值的范围内。

18、什么是文件?

答:所谓文件一般指存储在外部存储介质上的数据的集合。

19、文件关闭的含义是什么?

答:“关闭”文件就是撤消文件信息区和文件缓冲区,使文件指针变量不再指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其联系的文件进行读写操作,除非再次打开,使该指针变量重新指向该文件。

五、程序填空题

1、求多项式1-1/2+1/3-1/4+……+1/99-1/100的值。

程序:

#include

int main()

{

int sign=1,deno=2;

double sum=1.0,term;

while(deno<=100)

{

sign=-sign;

term=1.0*sign/deno;

sum=sum+term;

deno=deno+1;

}

printf(“%f\n”,sum);

return 0;

}

2、用数组处理求Fibonacci数列问题。P146 的例6.2

#include

int main()

{

int f[20]={1,1};

int i;

for(i=2;i<20;i++)

f[i]=f[i-1]+f[i-2];

for(i=0;i<20;i++)

{

if(i%5==0) printf("\n");

printf("%12d",f[i]);

}

printf("\n");

return 0;

}

3、有10个数,要求将它们按从小到大的顺序进行排序。P147 的例6.3 #include

int main()

{

int a[10];

int i,j,t;

printf("input 10 numbers:\n");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

printf("\n");

for(j=0;j<9;j++)

for(i=0;i<9-j;i++)

if(a[i]>a[i+1])

{t=a[i];a[i]=a[i+1];a[i+1]=t;}

printf("the sorted numbers:\n");

for(i=0;i<10;i++)

{

printf("%d ",a[i]);

}

printf("\n");

return 0;

}

4、求矩阵的转秩。即将一个矩阵的行和列互换。P152 的例6.4

#include

int main()

{

int a[2][3]={{1,2,3},{4,5,6}};

int b[3][2],i,j;

printf("array a:\n");

for(i=0;i<=1;i++)

{

for(j=0;j<=2;j++)

{

printf("%5d",a[i][j]);

b[j][i]=a[i][j];

}

printf("\n");

}

printf("array b:\n");

for(i=0;i<=2;i++)

{

for(j=0;j<=1;j++)

printf("%5d",b[i][j]);

printf("\n");

}

return 0;

}

5、有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。P153的例6.5

#include

int main()

{

int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};

int i,j,max,row,colum;

max=a[0][0];row=0;colum=0;

for(i=0;i<=2;i++)

for(j=0;j<=3;j++)

if(a[i][j]>max)

{

max=a[i][j];

row=i;

colum=j;

}

printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);

return 0;

}

6、有一个3×4的矩阵,要求编程序求出其中值最小的那个元素的值,以及其所在的行号和列号。

#include

int main()

int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};

int i,j,min,row,colum,m,n;

min=a[0][0];row=0;colum=0;

m=3;n=4;

for(i=0;i

for(j=0;j

if(a[i][j]

{

min=a[i][j];

row=i;

colum=j;

}

printf("min=%d\nrow=%d\ncolum=%d\n",min,row,colum);

return 0;

}

7、有一个3×4的矩阵,要求编程序求出其各个元素的平均值。

#include

int main()

{

int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};

int i,j,sum,m,n;

double avg=0.0;

sum=0;

m=3;n=4;

for(i=0;i

for(j=0;j

sum=sum+a[i][j];

avg=1.0*sum/(m*n);

printf("sum=%d\n",sum);

printf("avg=%f\n",avg);

return 0;

}

8、输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。#include

int main()

{

char string[81];

int i,num=0,word=0;

char c;

gets(string);

for(i=0;(c=string[i])!='\0';i++)

if(c==' ') word=0;

else if(word==0)

{

word=1;

num++;

}

printf("There are %d words in this line.\n",num);

return 0;

}

或者

#include

int main()

{

char string[81];

int i,num=0;

char c;

gets(string);

for(i=0;(c=string[i])!='\0';i++)

if((c!=' '&&i==0)||(c!=' '&&string[i-1]==' ')) num++;

printf("There are %d words in this line.\n",num);

return 0;

}

9、用递归方法求n!。

#include

int main()

{

int fac(int n);

int n,y;

printf("input an integer number:");

scanf("%d",&n);

y=fac(n);

printf("%d!=%d\n",n,y);

return 0;

}

int fac(int n)

{

int f;

if(n<0)

printf("n<0,data error!");

else if(n==0||n==1)

f=1;

else

f=fac(n-1)*n;

return f;

}

10、有一个一维数组,内放10个学生的成绩,写一个函数,当主函数调用该函数后,能求出平均分、最高分和最低分。P201的例7.14。

#include

float Max=0,Min=0;

int main()

{

float average(float array[],int n);

float ave,score[10];

int i;

printf("Please enter 10 scores:");

for(i=0;i<10;i++)

scanf("%f",&score[i]);

ave=average(score,10);

printf("max=%6.2f\nmin=%6.2f\naverage=%6.2f\n",Max,Min,ave);

return 0;

}

float average(float array[],int n)

{

int i;

float aver,sum=array[0];

Max=Min=array[0];

for(i=1;i

{

if(array[i]>Max)

Max=array[i];

else if(array[i]

Min=array[i];

sum=sum+array[i];

}

aver=sum/n;

return aver;

}

六、编程题

1、输入两个正整数m和n,求其最大公约数和最小公倍数。#include

int main()

{

int m,n,max,min,r,m0,n0;

printf("请输入两个正整数m和n:");

scanf("%d,%d",&m,&n);

m0=m;n0=n;

if(m

{int temp;temp=m;m=n;n=temp;}

do

{

r=m%n;

m=n;

n=r;

}while(r!=0);

max=m;

min=m0*n0/max;

printf("最大公约数为:%d\n",max);

printf("最小公倍数为:%d\n",min);

return 0;

}

2、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

#include

int main()

{

char str[20];

int alp=0,space=0,dig=0,other=0;

int i;

printf("请输入一行字符:");

gets(str);

i=0;

while(str[i]!='\0')

{

if((str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&str[i]<='z'))

alp++;

else if(str[i]==' ')

space++;

else if(str[i]>='0'&&str[i]<='9')

dig++;

else

other++;

i++;

}

printf("英文字母的个数为:%d\n",alp);

printf("空格的个数为:%d\n",space);

printf("数字的个数为:%d\n",dig);

printf("其他字符的个数为:%d\n",other);

return 0;

}

3、输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身。

#include

int main()

{

int gewei,shiwei,baiwei,temp;

for(int i=100;i<1000;i++)

{

temp=i;

gewei=temp%10;

temp=temp/10;

shiwei=temp%10;

baiwei=temp/10;

if(gewei*gewei*gewei+shiwei*shiwei*shiwei+baiwei*baiwei*baiwei==i) printf("%d\t",i);

}

printf("\n");

return 0;

}

4、写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。#include

float Max=0,Min=0;

int main()

{

int length(char string[]);

char string[30];

int len;

printf("Please enter a string:");

gets(string);

len=length(string);

printf("the length of string is %d.\n",len);

return 0;

}

int length(char string[])

{

int len=0;

while(string[len]!='\0')

len++;

return len;

}

补充:

1、求100之内的所有素数。

用函数实现判断一个数是否是素数。

#include

#include

int main()

{

int isSuShu(int number);

int i;

printf("100之内的素数有:");

printf("%d\t",2);

for(i=3;i<100;i=i+2)

if(isSuShu(i)) printf("%d\t",i);

return 0;

}

int isSuShu(int number)

{

int i=2,end;

end=(int)sqrt(number);

while(i<=end && number%i!=0)

i++;

return number%i;

}

2、编程实现一维数组的逆序存放。

(1)编程实现将一维数组A中所有的元素逆序,注意不能使用另一个数组,只能直接在数组A中完成。

#include

int main()

{

const len=10;

int arrayA[len]={1,2,3,4,5,6,7,8,9,10};

int i,j,temp;

printf("数组A中原来的值:\n");

for(i=0;i< len;i++)

printf("%d ",arrayA[i]);

printf("\n");

for(i=0,j= len-1;i

{

temp=arrayA[i];

arrayA[i]=arrayA[j];

arrayA[j]=temp;

}

printf("数组A中新的值:\n");

for(i=0;i< len;i++)

printf("%d ",arrayA[i]);

printf("\n");

return 0;

}

(2)编程实现将一维数组A中所有的元素逆序存放到数组B中。#include

int main()

{

const len=10;

int arrayA[len]={1,2,3,4,5,6,7,8,9,10};

int arrayB[len];

int i;

printf("数组A中的值:\n");

for(i=0;i

printf("%d ",arrayA[i]);

printf("\n");

for(i=0;i

{

arrayB[len-1-i]=arrayA[i];

}

printf("数组B中的值:\n");

for(i=0;i

printf("%d ",arrayB[i]);

printf("\n");

return 0;

}

3、顺序查找,输入下标的位置。求x在数组array中的下标位置。#include

int main()

const len=10;

int array[len]={1,2,3,4,5,6,7,8,9,10};

int i,x;

printf("请输入要查找的数据x:");

scanf("%d",&x);

i=0;

while(i

i++;

if(i

printf("%d在数组中的下标位置为%d。\n",x,i);

else

printf("在数组中不存在%d。\n",x);

return 0;

}

4、编程实现a、b、c三个数的排序。

#include

int main()

{

int a,b,c,temp;

printf("请输入要排序的三个数a、b和c:");

scanf("%d %d %d",&a,&b,&c);

printf("\n排序前的三个数为%d,%d,%d\n",a,b,c);

if(a

{

temp=a;a=b;b=temp;

}

if(a

{

temp=a;a=c;c=temp;

}

if(b

{

temp=b;b=c;c=temp;

}

printf("排序后的三个数为%d,%d,%d\n",a,b,c);

return 0;

}

5、实现一个字符串中的大小写字母的转换,其余字符不变。

(1)将一个字符串中的所有大写字母转换为小写字母,其余字符不变。#include

int main()

{

const len=30;

char array[len];

int i,c;

printf("请输入一个字符串:");

gets(array);

i=0;

while((c=array[i])!='\0')

{

if(c>='A' && c<='Z')

array[i]=array[i]+32;

i++;

}

printf("处理后的字符串为:%s\n",array);

return 0;

}

(2)将一个字符串中的所有小写字母转换为大写字母,其余字符不变。#include

int main()

{

const len=30;

char array[len];

int i,c;

printf("请输入一个字符串:");

gets(array);

i=0;

while((c=array[i])!='\0')

{

if(c>='a' && c<='z')

array[i]=array[i]-32;

i++;

}

printf("处理后的字符串为:%s\n",array);

return 0;

}

(3)将一个字符串中的所有小写字母转换为大写字母,同时将所有的大写字母转换成小写字母,其余字符不变。

#include

int main()

{

const len=30;

char array[len];

int i,c;

printf("请输入一个字符串:");

gets(array);

i=0;

while((c=array[i])!='\0')

{

if(c>='a' && c<='z')

array[i]=array[i]-32;

else if(c>='A' && c<='Z')

array[i]=array[i]+32;

i++;

}

printf("处理后的字符串为:%s\n",array);

return 0;

}

6、字符串的循环加密。P169的习题中的第12题。

#include

int main()

{

const len=30;

char array[len];

int i,c,temp;

计算机C语言趣味的程序设计——题目百例

Contest - 2011级C语言课程大作业 Start Time: 2012-02-19 16:25:00 End Time: 2012-03-01 22:00:00 Current Time: 2012-2-23 15:51:18 Status:Running Public

写在最前: 本文档中的题目;在不不同的编译器中可能会有提示错误,呵呵,小小的动动手改下变量的定义就可以运行了……………….. 由于能力不足..有题目未解决的…或者有错误的我会…认真听取大家的..意见的…. 呵呵……..有一两个….偷了下懒哦……… 提供原题目还有本人自己的解答的源代码。感谢大家的。。。。建议……………. 问题A: 趣味程序设计_狼追兔子 时间限制: 1 Sec 内存限制: 128 MB 提交: 341 解决: 63 [提交][状态][讨论版] 题目描述 一只兔子躲进了n个环形分布的洞的某一个中。狼在第一个洞没有找到兔子,就隔一个洞,到第三个洞去找;也没有找到,就隔两个洞,到第六个洞去找。以后每次多一个洞去找兔子……这样下去,如果一直找不到兔子,请问兔子可能在哪个洞中? 输入 有多组测试数据,读取到文件结尾符为止。每组测试数据输入n(2≤n≤100),即洞穴个数。输入到文件结尾符为止。 输出 兔子可能藏匿的洞。如果不止一个,按从小到大的顺序输出。如果不存在,输出空行。

样例输入 10 8 15 样例输出 2 4 7 9 2 4 5 7 8 9 11 12 14 提示 用一个数组a[10],对应的元素a[0],a[1],a[2]……a[9]对应表示10个洞,初值均置1。通过一个循环用“穷举法”找兔子,第n次查找对应第(n-1)%10个洞,如果在第(n-1)%10个洞中没有找到兔子,因此将数组元素a[(n-1)%10]置0值。循环完成后,检查a数组各元素(各个洞)的值,若其值仍为1,则兔子可能藏身该洞中。 #include #include int ok[110]; int main() { int n,s,i,find; while(scanf("%d",&n)!=EOF) { memset(ok,0,sizeof(ok)); for(i=1;i<=200;i++) if(!ok[find=(i*(i+1)/2)%n]) if(find==0) ok[n]=1; else ok[find]=1; for(s=0,i=1;i<=n;i++) s+=ok[i]; for(i=1,find=0;i<=n;i++) if(!ok[i]) { if(find!=(n-s-1)) { printf("%d ",i);find++;

C语言常用函数

C语言的常用库函数 函数1。absread()读磁盘绝对扇区函数 原形:int absread(int drive,int num,int sectnum,void *buf) 功能:从drive指定的驱动器磁盘上,sectnum指定的逻辑扇区号开始读取(通过DOS中断0x25读取)num 个(最多64K个)扇区的内容,储存于buf所指的缓冲区中。 参数:drive=0对应A盘,drive=1对应B盘。 返回值:0:成功;-1:失败。 头文件:dos.h 函数2。abswrite()写磁盘绝对扇区函数 原形:int abswrite(int drive,int nsects,int lsect,void *buffer) drive=0(A驱动器)、1(B驱动器)、 nsects=要写的扇区数(最多64K个); lsect=起始逻辑扇区号; buffer=要写入数据的内存起始地址。 功能:将指定内容写入(调用DOS中断0x26)磁盘上的指定扇区,即使写入的地方是磁盘的逻辑结构、文件、FAT表和目录结构所在的扇区,也照常进行。 返回值:0:成功;-1:失败。 头文件:dos.h 函数3。atof()将字符串转换成浮点数的函数 原形:double atof(const char *s) 功能:把s所指向的字符串转换成double类型。 s格式为:符号数字.数字E符号数字 返回值:字符串的转换值。 头文件:math.h、stdlib.h 函数4。atoi()将字符串转换成整型数的函数 原形:int atoi(const char *s) 功能:把s所指向的字符串转换成int类型。 s格式为:符号数字 返回值:字符串的转换值。若出错则返回0。 头文件:stdlib.h 函数5。atol()将字符串转换成长整型数的函数 原形:long atol(const char *s)

c语言趣味编程实例

1、编程序求5X+2Y+Z=50 的所有非负整数解。 #include int main() { int x, y, z; int count = 0; for (x = 0; 5 * x <= 50;x++) for (y = 0; 2 * y <= 50; y++) for (z = 0; z <= 50; z++) { if (5 * x + 2 * y + z == 50) { count++; printf("%d :", count); printf("x=%d,y=%d,z=%d", x, y, z); printf("\n"); } } return 0; } 2、把25个字母A、B、C、···、X、Y按如下要求打印出来:从最中间的字母M 开始打印,然后一左一右依次打印出其它字母,即M,L,N,K,O,...。 要求:初始化时按字母表顺序赋值。 #include int main() { char x[] = "ABCDEFGHIJKLMNPQRST"; int k; int n = 0; while (x[n]) { n++; if (x[n] == 'M') { k = n;break; } } printf("%c,",x[k]); for (int i = 1; i <= 12; i++) if (i <= 11) printf("%c,%c,", (x[k] - i), (x[k] + i)); else printf("%c,%c。", (x[k] - i), (x[k] + i)); printf("\n");

C语言中常见的功能函数

C语言中常见的功能函数(应掌握的编程) 1、两个变量值的交换 void exchang(float *x,float *y) /*形参为两个变量的地铁(指针)*/ {float z; z=*x; *x=*y; *y=z; } void main() {float a,b; scanf(“%f%f”,&a,&b); exchang(&a,&b); /*因为形参是指针,所以实参必须给变量的地址,不能给变量名*/ printf(“a=%f,b=%f”,a,b); } 2、判断一个整数的奇偶 int jou(int n) /*如果是奇数返回1,否则返回0*/ { if(n%2==0) return 0; return 1; } 3、小写字符转换成大写字符 根据实参传给形参的字母,判断是否是小写字母,如果是小写字母,则转换成大写字母,否则不进行转换,函数返回转换后或原来的字符。 本函数仿照toupper()库函数的功能编写(toupper(c) 是将变量c字母转换成大写字母,如果不是小写字母不转换)。 char toupper1(char ch) {if(ch>=?a?&&ch<=?z?) ch-=32; /*小写字母比对应的大写字母ASCII码值大32*/ return ch; } 4、判断一个字符是否是字母(或数字) 根据实参传给形参的字符,判断是否是字母(或数字),如果是字母(或数字)返回1,否则返回0。此函数是根据库函数isalpha()(或isdigit())来编写的。 int isalpha1(char ch) /*判断是否是字母*/ {if(ch>=?A?&&ch<=?Z?||ch>=?a?&&ch<=?z?) return 1; else return 0; } int isdigit1(char ch) /*判断是否是数字字符*/ {if(ch>=?0?&&ch<=?9?) return 1; else return 0; } 5、根据学生成绩,返回其等级 char fun(float cj) {char c; switch((int)cj/10) {case 10:

C语言源代码

剪刀石头布源代码 #include #include main() { int d,x; { printf("请输入:1是剪刀,2是石头,3是布"); scanf("%d",&d); x=rand()%3; if(d==x) printf("双方平局"); else if((d==1&&x==2)||(d==2&&x==3)||(d==3&&x==1)) printf("你赢了"); else printf("电脑赢了"); } }

简单计算器 #include main() { int a,b,d=0; char c; while(d==0) { printf("请开始计算,请输入需要运算的数字和运算法则,数字符号数字:"); scanf("%d%c%d",&a,&c,&b); switch(c) { case'+': printf("%d+%d=%d\n",a,b,a+b); break; case'-': printf("%d-%d=%d\n",a,b,a-b); break; case'*': printf("%d*%d=%d\n",a,b,a*b); break; case'/': if(0==b) printf("除法被除数不能为零!\n") ; else printf("%d/%d=%d\n",a,b,a/b); break; } } }

加油站加油问题 #include int main() { double a = 3.25, b = 3.00, c= 2.75; double d = 0.05, e = 0.10, m; int x,y,z; printf("请输入您要的加油量:"); scanf("%d",&x); printf("请输入您要的汽油种类,1-a型汽油售价3.25元/千克,2-b型汽油售价3.00元/千克,3-c型汽油售价2.75元/千克:"); scanf("%d",&y); printf("请输入您要的服务类型,1-自己加服务优惠0.05,2-协助加服务优惠0.10:"); scanf("%d",&z); switch(y) { case 1: y = a;break; case 2: y = b;break; case 3: y = c;break; } if(z == 1) m = (1 - d) * y * x; else if(z == 2) m = (1 - e) * y * x; printf("您需要支付:%f 元,谢谢惠顾,欢迎下次再来",m); return 0; }

C语言经典编程

猴子吃桃 1、题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 1.程序分析:采取逆向思维的方法,从后往前推断。 2.程序源代码: main() { int day,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/ x2=x1; day--; } printf("the total is %d\n",x1); } 回文数问题 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 1. 程序分析:学会分解出每一位数,如下解释:(这里是一种简单的算法) 2.程序源代码: main( ) { long a,b,c,d,e,x; scanf("%ld",&x); a=x/10000;/*分解出万位*/ b=x%10000/1000;/*分解出千位*/ c=x%1000/100;/*分解出百位*/ d=x%100/10;/*分解出十位*/ e=x%10;/*分解出个位*/ if (a!=0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a); else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b); else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c); else if (d!=0) printf("there are 2, %ld %ld\n",e,d); else if (e!=0) printf(" there are 1,%ld\n",e); } 杨辉三角 题目:打印出杨辉三角形(要求打印出10行如下图) 1.程序分析: 1 1 1

C语言常用IO函数

一些比较常用的io函数,总结了一下,一块贴出来了 stdin标准输入流 stdout标准输出流 stderr标准错误流 字符IO函数 1.int getchar() 说明:从stdin读取1个字符 返回值:成功,返回该字符;出错,返回EOF; 2.int fgetc(FILE fp) 说明:功能同getchar,默认从文件fp读取; 返回值:成功,返回该字符;出错,返回EOF; 可以重定向 3.int getc(FILE fp) 说明:功能与fgetc相同,但getc既可以被用作 函数实现,也可以被用作宏实现,并且它的编码效率 可能会更高. 可以重定向 4.int putchar(int ch) 说明:向stdout输出字符ch; 返回值:成功,返回该字符;出错,返回EOF; 5.int fputc(int c,FILE fp) 说明:功能同putchar,默认向fp输出字符ch; 返回值:成功,返回该字符;出错,返回EOF; 6.int putc(int c,FILE fp) 说明:功能与fputc相同,但putc与getc一样既可能被用作 函数实现,也可能被用作宏实现,并且它的编码效率可能会更高;可以重定向 字符串IO函数 1.char gets(char str) 说明:从stdin读取字符串(不包括'n')写入到字符串str中; 返回值:成功,返回str首地址;错误,返回NULL; 2.char fgets(char str,int N,FILE fp) 说明:默认从文件fp中读取N个字符(包括'n')写入到字符串str中,

如果实际输入字符串小于N,fgets自动添加'n', 返回值:成功,返回字符串首地址;错误或遇到EOF,返回NULL;可以重定向 3.int puts(const char str) 说明:向stdout输出字符串str,然受输出一个'n', 返回值:成功,返回非负值;错误,EOF; 4.int fputs(const char str,FILE fp) 说明:功能同puts,默认向文件fp写入字符串str; 返回值:成功,返回非负值;错误,EOF; 可以重定向 格式化IO函数 1.int scanf(const char format,...) 说明:根据format从stdin格式化读取N个值,并输入到... 返回值:成功,返回读取的项数;出错,返回EOF 2.int fscanf(FILE fp,const char format,...) 说明:功能同scanf,默认从文件fp读取, 返回值:成功,返回读取的项数;出错或遇到文件尾,返回EOF 可以重定向 3.int sscanf(const char buf,const char format,...) 说明:根据format从buf格式化读取N个值,并输入到... 返回值:成功,返回读取的项数;出错,返回EOF 4.int printf(const char format,...) 说明:根据format格式化数据,并输出到stdout 返回值成功,返回输出字符数;错误,返回负数; 5.int fprintf(FILE fp,const char format,...) 说明:功能同printf,默认向文件fp写入; 可以重定向 6.int sprintf(char buf,const char format,...) 说明:根据format格式化数据,并输出到buf, 返回值:成功,返回输出字符数;错误,返回负数

CC语言趣味程序设计编程百例精解

C-C++语言趣味程序设计编程百例精解() ?81.角谷猜想 日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想。猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。请编程验证。 *问题分析与算法设计 本题是一个沿未获得一般证明的猜想,但屡试不爽,可以用程序验证。题目中给出的处理过程很清楚,算法不需特殊设计,可按照题目的叙述直接进行证。 *程序说明与注释 #include<stdio.h> int main() { int n,count=0; printf("Please enter number:"); scanf("%d",&n); /*输入任一整数*/ do{ if(n%2)

n=n*3+1; /*若为奇数,n乘3加1*/ printf("[%d]:%d*3+1=%d\n",++count,(n-1)/3,n); } else { n/=2; /*若为偶数n除以2*/ printf("[%d]: %d/2=%d\n",++count,2*n,n); } }while(n!=1); /*n不等于1则继续以上过程*/ } 82.四方定理 数论中著名的“四方定理”讲的是:所有自然数至多只要用四个数的平方和就可以表示。 请编程证此定理。 *问题分析与算法设计 本题是一个定理,我们不去证明它而是编程序验证。 对四个变量采用试探的方法进行计算,满足要求时输出计算结果。 *程序说明与注释 #include<stdio.h> #include<stdlib.h> int main()

C语言常用函数手册

1.分类函数,所在函数库为ctype.h int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0 int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9'),返回非0值,否则返回0 int isascii(int ch) 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0 int iscntrl(int ch) 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F) 返回非0值,否则返回0 int isdigit(int ch) 若ch是数字('0'-'9')返回非0值,否则返回0 int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否则返回0 int islower(int ch) 若ch是小写字母('a'-'z')返回非0值,否则返回0 int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否则返回0 int ispunct(int ch) 若ch是标点字符(0x00-0x1F)返回非0值,否则返回0 int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回车符('\r'), 走纸换行('\f'),垂直制表符('\v'),换行符('\n') 返回非0值,否则返回0 int isupper(int ch) 若ch是大写字母('A'-'Z')返回非0值,否则返回0 int isxdigit(int ch) 若ch是16进制数('0'-'9','A'-'F','a'-'f')返回非0值, 否则返回0 int tolower(int ch) 若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z') int toupper(int ch) 若ch是小写字母('a'-'z')返回相应的大写字母('A'-'Z') 2.数学函数,所在函数库为math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fabs(double x) 返回双精度参数x的绝对值 long labs(long n) 返回长整型参数n的绝对值 double exp(double x) 返回指数函数ex的值 double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中double ldexp(double value,int exp); 返回value*2exp的值 double log(double x) 返回logex的值 double log10(double x) 返回log10x的值 double pow(double x,double y) 返回xy的值 double pow10(int p) 返回10p的值 double sqrt(double x) 返回+√x的值 double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度 double asin(double x) 返回x的反正弦sin-1(x)值,x为弧度 double atan(double x) 返回x的反正切tan-1(x)值,x为弧度 double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x为弧度double cos(double x) 返回x的余弦cos(x)值,x为弧度 double sin(double x) 返回x的正弦sin(x)值,x为弧度 double tan(double x) 返回x的正切tan(x)值,x为弧度 double cosh(double x) 返回x的双曲余弦cosh(x)值,x为弧度 double sinh(double x) 返回x的双曲正弦sinh(x)值,x为弧度

c语言程序代码

创作编号: GB8878185555334563BT9125XW 创作者:凤呜大王* 1.要求在屏幕上输出下一行信息。 This is a c program. 程序: #include int main() { printf(“this is a c program.\n”); return 0; } 2.求两个整数之和。 程序: #include int main() { int a,b,sum; a=122; b=234;

sum=a+b; printf(“sum is %d\n”,sum); return 0; } 3.求两个整数之间的较大者。 程序: #include int main() { int max(int x,int y); int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("max=%d\n",c); return 0; } int max(int x,int y) { int z; if(x>y)z=x; else z=y; return(z);

} 4.有人用温度计测量出华氏发表示的温度(如69°F),今要 求把她转换成以摄氏法表示的温度(如20℃)。 公式:c=5(f-32)/9. 其中f代表华氏温度,c代表摄氏温度。 程序: #include int main() { float f,c; f=64.0; c=(5.0/9)*(f-32); printf("f=%f\nc=%f\n",f,c); return 0; } 5.计算存款利息。有1000元,想存一年。有一下三种方法可 选:(1)活期:年利率为r1;(2)一年定期:年利率为r2; (3)存两次半年定期:年利率为r3。分别计算一年后按三种方法所得到的本息和。 程序: #include

C语言编程练习题绝对经典!

马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人 解方程组 编写程序,采用穷举法求出结果。 编写程序,根据以下公式求e 的值。要求用两种方法计算: 1) for 循环,计算前50项 2)while 循环,直至最后一项的值小于10-4 从键盘中输入一个数字(不限位数),用循环语句编程判断并输出这个数字的位数。 猴子吃桃子问题。猴子第一天摘下若干个桃,当即只一半,又多吃一个。第二天早上又将剩下的一半吃掉一半,双多吃一个。以后每天早上都吃了前天剩下的一半零一个,到第10天早上 只剩下最后一个桃。问第一天摘了几个桃。 编程打印九九乘法表 青年歌手参加歌曲大奖赛,有10个评委打分,试编程求选手的平均得分(去掉一个最高分和一个最低分)。 从键盘中输入一个数字(可以包含小数点,其位数在60位以下,求其整数的有效位数,如输入,返回值为整数有效位数为3) 1) 输入数据为浮点型,不用数组,不用字符串,只有变量的算术运算实现此功能。 2) 使用数组来进行编程。 使用数组,编写一个十进制正整数转换为任意进制数的转换工具。 (大进制向小进制的转换。(方法是相除去余) 10进制327转八进制: 327/8 = 40 余数为7 40/8 = 5 余数为0 于是八进制数为507(第一位5是最后的商)) 使用数组,编写一个任意进制正整数转换为十进制的转换工具。(以2,10进制互转为例,其他请举一反三: 二进制数1101转十进制: 1×2的三次幂+1×2的二次幂+0×2的一次幂+1×2的零次幂=8+4+0+1=13) 10个小孩围成一圈分糖果,老师顺次分给每个人的糖块数为12,2,8,22,16,4,10,6,14,20。然后按下列规则调整,所有小孩同时把自己的糖果分一半给右边的小孩,糖块数变为 奇数的人,再向老师补要一块,问经过多少次调整后,大家的糖块一样多,且每人多少块。 11111111!2!3!4!5!!e n ≈++++++??????+

c语言课程设计源代码

c语言课程设计源代码标准化管理处编码[BBX968T-XBB8968-NNJ668-MM9N]

学校运动会管理系统问题描述: (1) 初始化输入:N-参赛院系总数,M-男子竞赛项目数,W-女子竞赛项目数; (2) 各项目名次取法有如下几种: 取前5名:第1名得分 7,第2名得分 5,第3名得分3,第4名得分2,第5名得分 1; (3) 由程序提醒用户填写比赛结果,输入各项目获奖运动员的信息。 (4) 所有信息记录完毕后,用户可以查询各个院系或个人的比赛成绩,生成团体总分报表,查看参赛院系信息、获奖运动员、比赛项目信息等。 程序代码: #include<> #include<> #define N 3 #define M 3 #define W 3 char* n_number[3]={"1","院系2","院系3"}; char* m_number[3]={"1","男项2","男项3"};

char* w_number[3]={"女项1","女项2","女项3"}; int size=2; struct student { char num[10]; char name[20]; char xiangmu[20]; int score; char ximing[20]; }stu[100],temp; void input() um,&stu[i].name,&stu[i].xiangmu,&stu[i].score,&stu[i].ximing); iming,n_number[0])==0) iming); iming,n_number[h])==0) for(int s=0;s

趣味c语言编程100例

趣味 c 语言编程100 例 【程序 1】 题目:有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、 2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) / *以下为三重循环 */ for( j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /* 确保 i 、 j、 k 三位互不相同 */ printf("%d,%d,%d\n",i,j,k); } } 程序 2】 题目:企业发放的奖金根据利润提成。利润 (I) 低于或等于 10 万元时,奖金可提 10% ;利润高于 10 万元,低于 20 万元时,低于 10 万元的部分按 10% 提成,高于 10 万元的部分,可可提成 7.5% ; 20 万到 40 万之间时,高于 20 万元的部分,可提成 5% ; 40 万到 60 万之间时高于

40 万元的部分,可提成 3% ;60 万到 100 万之间时,高于 60 万元的部分,可提成 1.5% ,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总 数? 1. 程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2. 程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03;

PL0源代码(C语言版)

/*PL/0 编译系统C版本头文件pl0.h*/ # define norw 13 //a number of reserved word /*关键字个数*/ # define txmax 100 //length of identifier table /*名字表容量*/ # define nmax 14 //max number of digits in numbers /*number的最大位数*/ # define al 10 //length of identifier /*符号的最大长度*/ # define amax 2047 //maximum address /*地址上界*/ # define levmax 3 //max depth of block nesting /*最大允许过程嵌套声明层数[0,lexmax]*/ # define cxmax 200 //size of code array /*最多的虚拟机代码数*/ /*符号*/ enum symbol{ nul, ident, number, plus, minus, times, slash, oddsym, eql, neq, //slash斜线 lss, leq, gtr, geq, lparen, //leq :less than or equal to; gtr: great than;lparen:left parenthesis rparen, comma, semicolon,period, becomes,//comma逗号semicolon分号period句号becomes赋值号 beginsym, endsym, ifsym, thensym, whilesym, writesym, readsym, dosym, callsym, constsym, varsym, procsym, }; #define symnum 32 /*-------------*/ enum object{ //object为三种标识符的类型 constant, variable, procedur, }; /*--------------*/ enum fct{ //fct类型分别标识类PCODE的各条指令 lit, opr, lod, sto, cal, inte, jmp, jpc, //书本P23 }; #define fctnum 8 /*--------------*/ struct instruction //指令 { enum fct f; //功能码 int l; //层次差 int a; //P23 };

复试C语言常考趣味程序设计

狼追兔子 1 巧夺偶数 2 五猴分桃 3 高次方数 4 借书方案 5 过桥问题 6 数制转换7 打渔晒网8 喝酒问题9 哥德巴赫猜想10 打印日历11 抓交通肇事逃逸犯12 反序数13 新郎新娘14 称重砝码15 求车速16 谁是窃贼17 出售金鱼18 百钱百鸡19 谜语博士20 猜牌术(-)21 舍罕王的失算22 怎样存钱利最大23 猜牌术(二)24 爱因斯坦的数学题25 取火柴游戏26 平分鱼和筐27 可逆素数28 三色球问题29 抢n游戏30 问题A: 趣味程序设计_狼追兔子 时间限制: 1 Sec 内存限制: 128 MB 提交: 341 解决: 63 [提交][状态][讨论版] 题目描述 一只兔子躲进了n个环形分布的洞的某一个中。狼在第一个洞没有找到兔子,就隔一个洞,到第三个洞去找;也没有找到,就隔两个洞,到第六个洞去找。以后每次多一个洞去找兔子……这样下去,如果一直找不到兔子,请问兔子可能在哪个洞中? 输入 有多组测试数据,读取到文件结尾符为止。每组测试数据输入n(2≤n≤100),即洞穴个数。输入到文件结尾符为止。 输出 兔子可能藏匿的洞。如果不止一个,按从小到大的顺序输出。如果不存在,输出空行。 样例输入 10 8 15

样例输出 2 4 7 9 2 4 5 7 8 9 11 12 14 提示 用一个数组a[10],对应的元素a[0],a[1],a[2]……a[9]对应表示10个洞,初值均置1。通过一个循环用“穷举法”找兔子,第n次查找对应第(n-1)%10个洞,如果在第(n-1)%10个洞中没有找到兔子,因此将数组元素a[(n-1)%10]置0值。循环完成后,检查a数组各元素(各个洞)的值,若其值仍为1,则兔子可能藏身该洞中。 #include #include int ok[110]; int main() { int n,s,i,find; while(scanf("%d",&n)!=EOF) { memset(ok,0,sizeof(ok)); for(i=1;i<=200;i++) if(!ok[find=(i*(i+1)/2)%n]) if(find==0) ok[n]=1; else ok[find]=1; for(s=0,i=1;i<=n;i++) s+=ok[i]; for(i=1,find=0;i<=n;i++) if(!ok[i]) { if(find!=(n-s-1)) { printf("%d ",i);find++; } else printf("%d",i); } printf("\n"); } return 0; } 问题B: 趣味程序设计_巧夺偶数 时间限制: 1 Sec 内存限制: 128 MB

PL0-C语言源代码

//A.2 C 版本 /*编译和运行环境: *1Visual C++6.0,VisualC++.NET and Visual C++.NET 2003 *WinNT, Win 200, WinXP and Win2003 *2 gcc version 3.3.2 20031022(Red Hat Linux 3.3.2-1) *Redhat Fedora core 1 *Intel 32 platform *使用方法: *运行后输入PL/0 源程序文件名 *回答是否输出虚拟机代码 *回答是否输出名字表 *fa.tmp 输出虚拟机代码 *fa1.tmp 输出源文件及其各行对应的首地址 *fa2.tmp 输出结果 *fas.tmp 输出名字表 */ #include /*PL/0 编译系统C版本头文件pl0.h*/ #include"string.h" /*解释执行时使用的栈*/ #define stacksize 500 //typedef enum { // false, // true //}bool; # define norw 13 /*关键字个数*/ # define txmax 100 /*名字表容量*/ # define nmax 14 /*number的最大位数*/ # define al 10 /*符号的最大长度*/ # define amax 2047 /*地址上界*/ # define levmax 3 /*最大允许过程嵌套声明层数[0,lexmax]*/ # define cxmax 200 /*最多的虚拟机代码数*/ /*符号*/ enum symbol{ nul, ident, number, plus, minus, times, slash, oddsym, eql, neq, lss, leq, gtr, geq, lparen, rparen, comma, semicolon,period, becomes, beginsym, endsym, ifsym, thensym, whilesym, writesym, readsym, dosym, callsym, constsym, varsym, procsym, }; #define symnum 32

C语言常见基本词汇及词汇解释

C语言常用基本词汇及其他提示语运算符与表达式: 1.constant 常量 2. variable 变量 3. identify 标识符 4. keywords 关键字 5. sign 符号 6. operator 运算符 7. statement语句 8. syntax 语法 9. expression 表达式 10. initialition初始化 11. number format 数据格式 12 declaration 说明 13. type conversion 类型转换 14.define 、definition 定义 条件语句: 1.select 选择 2. expression 表达式 3. logical expression 逻辑表达式 4. Relational expression 关系表达式 5.priority优先

6. operation运算 7.structure 结构 循环语句: 1.circle 循环 2. condition 条件 3. variant 变量 4. process过程 5.priority优先 6. operation运算 数组: 1. array 数组 2. reference 引用 3. element 元素 4. address 地址 5. sort 排序 6. character 字符 7. string 字符串 8. application 应用函数: 1.call 调用 2.return value 返回值 3.function 函数

4. declare 声明 5. `parameter 参数 6.static 静态的 7.extern 外部的 指针: 1. pointer 指针 2. argument 参数 3. array 数组 4. declaration 声明 5. represent 表示 6. manipulate 处理 结构体、共用体、链表: 1 structure 结构 2 member成员 3 tag 标记 4 function 函数 5 enumerate 枚举 6 union 联合(共用体) 7 create 创建 8 insert 插入 9 delete 删除 10 modify 修改

C语言常用函数名及用法

字符函数和字符串函数 头文件:字符串函数头文件:#include 字符函数头文件:#include putchar:输出一个 putchar(a):输出字符变量a的值,(其中a可为字符变量,整形变量,字符常量,整形常量) getchar:输入一个字符 a=getchar(); putchar(a);结果为b printf(格式控制符,输出列表); scanf(格式控制符,地址列表); 输入形式与格式控制部分对应 1.当为两个连续输入时:scanf(“%d%d”,&a,&b); 输入量数据之间可为:一个或多个空格,也可以用enter,tab无逗号时输入时不能用逗号作分隔。 2.格式控制中两%d有两个空格,输入时两数据间应有两个空格或两个以上。 3.当为“:”时输入时应对应一样,当为:scanf(“a=%d,b=%d”,&a,&b);输入a=12,b=22。 4.当格式控制符为%c时,输入时空格与转义字符都作为有效字符记录在里面:scanf(“%c%c%c”,&a,&b,&c); 输入时:ab c↙空间不能插空格或其他符

5. Scanf(“%d%c%f”,&a,&b,&c); 输入时1234a123h26↙在输入遇到时空格回车 tab或其他非法输入就会认定输入完毕 Gets (字符数组):读入字符串函数 Gets(str)从键盘键入a b↙括号里为字符数组str的起始地址,Puts(字符数组):输出字符串函数 Strcat(字符数组1,字符数组2):字符串连接函数(2连接在1后面) Strcpy和strncpy:字符串复制函数 Strcpy(字符数组1,字符数组2):将2复制到1 数组1 要为数组名,字符串2可以为数组名或者字符串 Strncpy(str1,str2,2):将str2的前两个字符复制到str1,取代str1的前两个字符 Strcmp:字符串比较函数 Strcmp(str1,str2):相等则为0(对字符串自左向右逐个字母进行比较) Strlen(字符数组):测字符串的实际长度 Strlwr(字符串)将字符串转换为大写 Strupr(字符串)将字符串转换为小写

相关文档