C语言程序设计课后习题1-8参考答案 习题1参考答案 一、简答题 1、冯 诺依曼计算机模型有哪几个基本组成部分?各部分的主要功能是什么? 答:冯 诺依曼计算机模型是由运算器、控制器、存储器、输入设备、输出设备五大功能部件组成的。 运算器又称算术逻辑部件,简称ALU,是计算机用来进行数据运算的部件。数据运算包括算术运算和逻辑运算。 控制器是计算机的指挥系统,计算机就是在控制器的控制下有条不紊地协调工作的。 存储器是计算机中具有记忆能力的部件,用来存放程序和数据。 输入设备是用来输入程序和数据的部件。 输出设备正好与输入设备相反,是用来输出结果的部件。 2、简述计算机的工作原理。 答:计算机的工作原理可简单地概括为:各种各样的信息,通过输入设备,进入计算机的存储器,然后送到运算器,运算完毕把结果送到存储器存储,最后通过输出设备显示出来。整个过程由控制器进行控制。 3、计算机软件系统分为哪几类? 答:软件内容丰富,种类繁多,通常根据软件用途将其分为两大类:系统软件和应用软件。 系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的软件。这类软件一般与具体应用无关,是在系统一级上提供的服务。系统软件主要包括以下两类:一类是面向计算机本身的软件,如操作系统、诊断程序等。另一类是面向用户的软件,如各种语言处理程序(像BC、VC等)、实用程序、字处理程序等。 应用程序是指某特定领域中的某种具体应用,供最终用户使用的软件,它必须在操作系统的基础上运行。 4、什么叫软件?说明软件与硬件之间的相互关系。 答:软件是指计算机程序及有关程序的技术文档资料。两者中更为重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。在不太严格的情况下,认为程序就是软件。硬件与软件是相互依存的,软件依赖于硬件的物质条件,而硬件则需在软件支配下才能有效地工作。在现代,软件技术变得越来越重要,有了软件,用户面对的将不再是物理计算机,而是一台抽象的逻辑计算机,人们可以不必了解计算机本身,可以采用更加方便、更加有效地手段使用计算机。从这个意义上说,软件是用户与机器的接口。 二、填空题 1、算术 逻辑 2、键盘 鼠标 3、控制器 运算器 4、10 2 5、0 0x 6、原码 反码 补码 7、00010111 11101001 8、127 -128 三、选择题 1、C 2、A 3、B 4、A 5、B 6、B 7、D 8、A 9、A 10、B 11、A 12、B 习题2参考答案 一、简答题 1、C语言有哪些特点? 答:(1)简洁紧凑、灵活方便;(2)运算符丰富;(3)数据结构丰富;(4)C语言是结构式语言;(5)C语言的语法限制不太严格、程序设计自由度大;(6)C语言允许直接访问物理地址,可以直接对硬件进行操作;(7)C语言程序生成代码质量高,程序执行效率高;(8)C语言使用范围大,可移至性好;(9)具有预处理功能;(10)具有递归功能。 2、C语言的主要应用有哪些? 答:(1)许多系统软件和大型应用软件都是用C语言编写的,如UNIX、Linux等操作系统。(2)在软件需要对硬件进行操作的场合,用C语言明显优于其他高级语言。例如,各种硬件设备的驱动程序(像显卡驱动程序、打印机驱动程序等)一般都是用C语言编写的。(3)在图形、图像及动画处理方面,C语言具有绝对优势,特别是游戏软件的开发主要就是使用C语言。(4)随着计算机网络飞速发展,特别是Internet的出现,计算机通信就显得尤其重要,而通信程序的编制首选就是C语言。(5)C语言适用于多种操作系统,像Windows、UNIX、Linux等绝大多数操作系统都支持C语言,其他高级语言未必能得到支持,所以在某个特定操作系统下运行的软件用C语言编制是最佳选择。 3、列举几种程序设计语言。 答:C语言、Java语言、Pascal语言、BASIC语言、LOGO语言等。 二、填空题 1、机器语言 汇编语言 高级语言 2、机器语言 3、ALGOL 60 4、多个函数 5、main 6、#include 7、定义 使用 8、声明部分 执行部分 声明部分 执行部分 三、选择题 1、D 2、B 3、B 4、C 5、C 6、C 7、D 8、C 9、D 10、A 11、B 12、 A 13、B 14、C 15、A 习题3参考答案 一、填空题 1、整型 字符型 实型 2、字母 数字 下划线 字母 下划线 3、直接 符号 符号 4、0 0x 5、1 2 6、4 8 7、-32768~32767 8、-16 9、x+=1; 10、26 11、(m/10)%10*100+m/100(100*10)+m%10 二、选择题 1、D 2、C 3、A 4、B 5、B 6、D 7、B 8、C 9、A 10、A 11、C 12、B 13、B 14、D 15、B 16、D 17、B 18、D 19、C 20、A 21、B 22、D 23、D 24、D 25、D 26、D 27、C 28、A 29、C 30、B 习题4参考答案 一、填空题 1、scanf printf 2、按指定的输出格式将信息输出到屏幕上 常规字符 格式控制符 3、X、E、G 4、getche输入的字符回显,而getch输入的字符不回显 5、fflush 6、解决某个问题的具体的方法和步骤 7、自然语言描述 伪代码 流程图 N-S图 8、顺序 分支 循环 二、选择题 1、B 2、C 3、D 4、C 5、B 6、C 7、D 8、C 9、B 10、B 11、D 12、C 13、D 14、D 15、A 三、编程题 1、编写一程序要求任意输入四位十六进制整数,以反序的方式输出该十六进制数。例如:输入9AF0,则输出0FA9。 #include<stdio.h> void main() { unsigned short a, b; scanf(“%4x”, &a) //输入4位十六进制数给变a b=(a & 0X000F)<<12; //取a的最低一位十六进制数并左移12位后赋值给b b+=(a & 0X00F0)<<4; //取a的次第一位十六进制数并左移4位后与b相加再赋值给b b+=(a & 0X0F00)<<4; //取a 的次高一位十六进制数并右移4位后与b相加再赋值给b b+=(a & 0XF000)<<12; //取a的最高一位十六进制数并右移12位后与b相加再赋值给b printf(“%4x\n”, b); //输出变化后的十六进制数 } 2、编程从键盘输入两个整数分别给变量a和b,要求在不借助于其他变量的条件下,将变量a和b的值实现交换。 #include<stdio.h> void main() { int a, b; scanf(“%d%d”, &a, &b); printf(“before swap: a=%d b=%d\n”, a,b); a=a+b; b=a-b; a=a-b; printf(“after swap: a=%d b=%d\n”, a, b); } 3、编程从键盘输入圆的半径r,计算出圆的周长和面积。 #include<stdio.h> #define PI 3.14159 void main() { float r, c, s; scanf(“%f”, &r); c=2*r*PI; s=PI*r*r;c语言游戏编程题经典100例 printf(“c=%f s=%f\n”, c, s); } 4、编程从键盘输入任意一个十六进制负整数,以输入的形式输出。例如:输入-FA98,输出-FA98。 #include<stdio.h> void main() { short int a; scanf(“%x”, &a); printf(“-%hx\n”, -a); } 5、已知一元二次方程ax2+bx+c=0,编一程序当从键盘输入a、b、c的值后,计算x的值。 #include<stdio.h> #include<math.h> void main() { float a, b, c; float d; float x1, x2; printf(“input a, b, c: ”); scanf(“%f%f%f”, &a, &b, &c); d=sqrt(b*b-4*a*c); x1=(-b+d)/(2*a); x2=(-b-d)/(2*a); printf(“x1=%.2f x2=%.2f\n”, x1, x2); } 6、假设从键盘输入某日午夜零点到现在已经历的时间(单位:s),遍一程序计算到现在为止已近过了多少天,现在的时间是多少? #include<stdio.h> void main() { unsigned long t, r; int d, h, m, s; printf(“second=”); scanf(“%d”, &t); d=t/(24*3600); r=t%(24*3600); h=r/3600; m=(r%3600)/60; s=(r%3600)%60; printf(“have passed days is %d, current time is %02d:%02d:%02d\n”, d, h, m, s): } 习题5参考答案 编程题 1、编一程序判断输入整数的正负性和奇偶性。 #include<stdio.h> void main() { int a; scanf(“%d”, &a); if (a>=0) printf(“the number %d is positive number\n”, a); else printf(“the number %d is negative number\n”, a); if (a%2==0) printf(“the number %d is even number\n”, a); else printf(“the number %d is odd number\n”, a); } 2、编程判断输入数据的符号属性。 #include<stdio.h> void main() { int x, sign; scanf(“%d”, &x); if (x>0) sign=1; else if (x==0) sign=0; else sign=-1; printf(“sign= %d\n”, sign); } 3、输入任意三个数num1、num2、num3,按从小到大的顺序排序输出。 #include<stdio.h> void main() { int num1, num2, num3; scanf(“%d%d%d”, &num1, &num2, &num3); if (num1<=num2) if (num2<=num3) printf(“%d %d %d\n”, num1, num2, num3); else if (num1>=num3) printf(“%d %d %d\n”, num3, num1, num2); else printf(“%d %d %d\n”, num1, num3, num2); else if (num2>=num3) printf(“%d %d %d\n”, num3, num2, num1); else if (num1>=num3) printf(“%d %d %d\n”, num2, num3, num1); else printf(“%d %d %d\n”, num2, num1, num3); } 4、在屏幕上显示一张如下所示的时间表。 #include<stdio.h> void main() { char c; printf(“*****Time*****\n”); printf(“1 morning\n”); printf(“2 afternoon\n”); printf(“3 night\n”); printf(“Please enter your choice: ”); c=getcahr(); switch (c) { case ‘1’: printf(“Good morning\n”); brenk; case ‘2’: printf(“Good afternoon\n”); break; case ‘3’: printf(“Good night\n”); break; default: printf(“Selection error!\n”); } } 5、输入一个年份和月份,打印出该月份有多少天(考虑闰年),用switch语句编程。 #include<stdio.h> void main() { int year, month; printf(“Input year, month: ”); scanf(“%d %d”, &year, &month); switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf(“31 days\n”); break; case 4: case 6: case 9: case 11: printf(“30 days\n”); break; case 2: if ((year%4==0 && year%100!=0)|| (year%400==0)) printf(“29 days\n”); else printf(“28 days\n”); break; default: printf(“Input error!\n”); } } 习题6参考答案 编程题 1、编程计算2+4+6+…+98+100的值。 (1)利用for循环语句实现,在循环体外为sum赋初值0。 #include<stdio.h> void main() { int i, sum=0; for(i=2; i<=100; i+=2) sum+=i; printf(“sum= %d\n”, sum); } (2)利用while循环语句实现,在循环体外为i和sum赋初值。 #include<stdio.h> void main() { int i=2, sum=0; while(i<=100) { sum+=i; i+=2; } printf(“sum= %d\n”, sum); } 2、编程计算1*2*3+4*5*6+…+99*100*101的值。 #include<stdio.h> void main() { int i; long term, sum=0; for(i=1; i<=99; i+=2) { term=i*(i+1)*(i+2); sum+=term; } printf(“sum= %d\n”, sum); } 3、编程计算1!+2!+3!+…+10!的值。 (1)用累加和算法,累加项为term=term*i; i=1,2,…,10。Term的初始值为1,使用单重循环完成。 #include<stdio.h> void main() { long term=1, sum=0; int i; for(i=1; i<=10; i++) { term*=i; sum+=term; } printf(“1!+2!+3!+…+10! = %ld\n”, sum); } (2)用内层循环求阶乘,外层循环控制累加的项数。 #include<stdio.h> void main() { long term, sum=0; int i, j; for(i=1; i<=10; i++) { term=1; for(j=1; j<=i; j++) term*=j; sum+=term; } printf(“1!+2!+3!+…+10! = %ld\n”, sum); } 4、编程计算a+aa+aaa+…+aa..a(n个a)的值,n和a的值由键盘输入。 #include<stdio.h> void main() { long term=0, sum=0; int a, i, n; printf(“Input a, n:\n”); scanf(“%d,%d”, &a, &n); for(i=1; i<=n; i++) { term=term*10+a; sum+=term; } printf(“sum=%ld\n”, sum); } 5、参考答案: #include<stdio.h> void main() { float term, result=1; int n; for(n=2; n<=100; n+=2) { term=(float)(n*n)/((n-1)*(n+1)); result*=term; } printf(“result=%f\n”, 2*result); } 6、参考答案: #include<stdio.h> #include<math.h> void main() { int n=1, count=0; float x; double sum, term; printf(“Input x: ”) scanf(“%f”, &x); sum=x; term=x; do { term=-term*x*x/((n+1)(n+2)); //计算相应项,并改相应符号 sum+=term; n+=2; count++; }while(fabs(term)>=le-5); printf(“sin(x) = %f, count= %d\n”, sum, count); } 7、参考答案: #include<stdio.h> void main() { int i, j, k, n; printf(“result is: ”); for(n=100; n<1000; n++) { i=n/100; //分出百位 j=(n-i*100)/10 //分出十位 k=n%10; //分出个位 if(n==i*i*i+j*j*j+k*k*k) printf(“%d ”, n); } printf(“\n”); } 8、参考答案: #include<stdio.h> #include<math.h> void main() { int i1, i2, i3, i4, k, n; printf(“Input data is: ”); scanf(“%d”, &n); k=abs(n); i1=k/1000; //分离出千位 i2=(k-i1*1000)/100 //分离出百位 i3=(k-i1*1000-i2*100)/10 //分离出十位 i4=k%10; //分离出个位 printf(“The sum of the total bit is %d\n”, i1+i2+i3+i4); } 9、参考答案: #include<stdio.h> void main() { int n, m=0, s, r; printf(“Input data is: ”); scanf(“%d”, &n); s=n; While(s!=0) { r=s%10; //从低位到高位逐一分离 m=10*m+r; //重新组合一正数 s=s/10; //求其商 } if(m==n) printf(“yes\n”); else printf(“no\n”); } 10、参考答案: #include<stdio.h> void main() { int x, y, z, count=0; //x,y,z分别表示5分、2分和1分硬币的数量 for(x=1; x<=28; x++) //5分硬币最多不超过28枚 for(y=1; y<=73; y++) //2分硬币最多不超过73枚 { z=100-x-y; //共有100枚硬币,减去5分和2分硬币后为1分硬币数量 if(5*x+2*y+z==150) { count++ //增加一种方案 printf(“%02d, %02d, %02d ”, x, y, z); //输出每一种方案 if (count%6==0) printf(“\n”); //没输出6种方案后,换行 } } printf(“count=%d\n”, count); } 11、设计思想:将A、B、C、D4个人的回答用一条件表达式来表示,对于A的回答:thisman!=’A’;对于B的回答:thisman==’C’;对于C的回答:thisman==’D’;对于D的回答:thisman!=’D’;然后,采用枚举的方法,一个人一个人的去试,如果这4个条件表达式中有3个为真,即4个条件表达式的值相加为3,则可判定是其中某人做的好事。 参考答案: #include<stdio.h> void main() { int k=0; sum=0; g=0; char thisman=’’; for (k=0; k<=3; k++) //循环控制变量为k,循环共进行4次 { thisman=’A’+k; //初始认为A做好事,依次为B、C、D sum=(thisman!=’A’)+(thisman==’C’)+(thisman==’D’)+(thisman!=’D’); if (sum==3) { printf(“This man is %c\n”, thisman); g=1; } } if (g!=1) printf(“Can’t found\n”); } 12、参考答案(1): #include<stdio.h> void main() { int i, j; for (i=1; i<=3; i++) //先显示前三行 { for (j=1; j<=i-1; j++) //输出每行前的空格 printf(“ ”); for (j=1; j<=5-2*(i-1); j++) //输出每行的*号 printf(“*”); printf(“\n”); } for (i=1; i<=2; i++) //接着显示后两行 { for (j=1; j<=2-i; j++) printf(“ ”); for (j=1; j<=2*i+1; j++) printf(“*”); printf(“\n”); } } 参考答案(2): #include<stdio.h> void main() { int i, j, k; for (i=1; i<=5; i++) //i控制行数 { for (j=1; j<=5-i; j++) //随行数的增加,输出递减数目的空格 printf(“ ”); for (k=1; k<=5; k++) //每行输出5个*字符 printf(“*”); printf(“\n”); //将光标移到下一行起始位置处 } } 参考答案(3): #include<stdio.h> void main() { int i, j; for (i=1; i<=5; i++) { for (j=1; j<=2*(i-1)+1; j++) printf(“*”); printf(“\n”); } } 习题7参考答案 编程题 1、参考答案: #include<stdio.h> void main() { int i, sum=0; a[20]; for (i=0; i<20; i++) Scanf(“%d”, &a[i]); //输入20个整数 for (i=0; i<20; i++) //对非负数进行统计 { if (a[i]<0) continue; //为负数,进入下一轮循环 sum+=a[i]; //非负数累计 } printf(“sum= %d\n”, sum); } 2、参考答案 #include<stdio.h> void main() { int i, j, odd, even, n, t, a[10]; odd=0; even=9; for(i=0; i<10; i++) //将键盘输入的数据存入数组中 { scanf(“%d”, &n); if (n%2!=0) a[odd++]=n; //将奇数放置在数组的左边 else a[even--]=n; //将偶数放置在数组的哟边 } for (i=0; i<odd-1; i++) //通过选择排序对奇数进行升序排列 { n=j; for (j=i+1; j<odd; j++) if (a[j]<a[n]) n=j; if (n!=i) { t=a[i]; a[i]=a[n]; a[n]=t; } } for (i=odd; i<9; i++) //通过选择排序对偶数进行升序排列 { n=i; for (j=i+1; j<10; j++) if (a[j]<a[n]) n=j; If (n!=i) { t=a[i]; a[i]=a[n]; a[n]=t; } } for (i=0; i<10; i++) printf(“%d”, a[i]); 输出排序结果 printf(“\n”); } 3、参考答案: #include<stdio.h> void main() { int i, max, min, a[10]; printf(“Input 10 integer number: ”); //输入10个整数 for(i=0; i<10; i++) scanf(“%d”, &a[i]); max=0; min=0; for(i=1; i<10; i++) { if (a[i]>a[max]) max=i; if (a[i]<a[min]) min=i; } i=a[max]; a[max]=a[min]; a[min]=i; for(i=0; i<10; i++) printf(“%d ”, a[i]); printf(“\n”); } 4、参考答案: #include<stdio.h> void main() { int i, j, t, a[6]; printf(“Input 6 integer number: ”); for(i=0; i<6; i++) scanf(“%d”, &a[i]); printf(“\n”); for(i=0; i<6; i++) { for (j=0; j<6; j++) printf(“%d ”, a[j] ); printf(“\n”); t=a[5]; for (j=5; j>0; j--) a[j]=a[j-1]; a[0]=t; } } 5、参考答案: #include<stdio.h> void main() { int i, j, sum=0, mul=1, a[5][5]; printf(“Input 5*5 array:\n”); for(i=0; i<5; i++) for(j=0; j<5; j++) scanf(“%d”, &a[i][j]); printf(“\n”); for(i=0; i<5; i++) { sum+=a[i][j]; if(i!=2) sum+=a[i][4-i]; if(i%2!=0) continue; mul*=a[i][i]; if(i!=2) mul*=a[i][4-i]; } printf(“sum = %d mul = %d\n”, sum, mul); } 6、参考答案: #include<stdio.h> #define N 6 void main() { int i, j, a[N][N]; for(i=0; i<N; i++) { a[i][0]=1; a[i][i]=1; for(j=1; j<i; j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; } for(i=0; i<N; i++) { for(j=0; j<N-i-1; j++) printf(“ ”); for(j=0; j<=i; j++) printf(“%2d ”, a[i][j]); printf(“\n”); } } 7、参考答案: #include<stdio.h> #include<string.h> #define N 80 void main() { char str[N]; int i; printf(“Input a string: ”); gets(str); printf(“After reverse: ”); for(i=strlen(str)-1; i>=0; i--) printf(“%c”, str[i]); printf(“\n”); } 8、参考答案: #include<stdio.h> #include<string.h> #define N 80 void main() { char str[N], strtemp[N]; unsigned int i, j; printf(“Input a string: ”); gets(str); for(i=0, j=0; i<strlen(str); i++) if(str[i]!=’c’) strtemp[j++]=str[i]; strtemp[j]=’\0’; strcpy(str, strtemp); printf(“After delete character \’c\’: ”); printf(“%s\n”, str); } 9、参考答案: #include<stdio.h> #define N 80 void main() { char s1[N], s2[N]=”abcdefg\0hijk”; unsigned int i; i=0; while(1) { s1[i]=s2[i]; if(s2[i]==’\0’) break; i++; } printf(“After string copy: %s\n”, s1); } 10、参考答案: #include<stdio.h> void main() { char dstStr[20]=’12345’, srcStr[20]=’67890’; unsigned int i, j; printf(“Before strcat: dstStr=%s srcStr=%s\n”, dstStr, srcStr); for(i=0; dstStr[i]!=’\0’; i++) ; for(j=0; srcStr[j]!=’\0’; j++) dstStr[i+j]=srcStr[j]; dstStr[i+j]=’\0’; printf(“After strcat: dstStr=%s\n”, dstStr); } 11、参考答案: #include<stdio.h> void main() { int a[10]={1,3,5,7,9}, num=5, i, n; printf(“Before insert: ”); for(i=0; i<num; i++) printf(“%d ”, a[i]); printf(“\n”); printf(“Input a number: ”) scanf(“%d”, &n); for(i=num-1; i>=0; i--) if(a[i]>n) a[i+1]=a[i]; else break; a[i+1]=n; printf(“After insert: ”); for(i=0; i<num+1; i++) printf(“%d”, a[i]); printf(“\n”);s } 习题8参考答案 编程题 1、设计一个函数,用来判断一个整数是否为素数。 参考答案: #include<stdio.h> #include<math.h> int IsPrimeNumber (int number ); void main() { int a; printf(“Input a integer number: ”); scanf(“%d”, &a); if(IsPrimeNumber(a)) printf(“%d is prime number.\n”, a); else printf(“%d isn’t prime number.\n”, a); } int IsPrimeNumber(int number) { int I; if(number<=-1) return(0); for(i=2; i<sqrt(number); i++) if(number%i==0) return(0); return(i); } 2、设计函数MaxCommonFactor(),计算两个正整数的最大公约数。 参考答案: #include<stdio.h> int MaxCommonFactor(int a, int b); void main() { int a,b,c; printf(“Input two integer number: ”); scanf(“%d%d”, &a,&b); c=MaxCommonFactor(a,b); if(c!=-1) printf(“The biggest common factor of %d and %d is %d\n”, a,b,c); else printf(“The biggest common factor of %d and %d isn’t exist\n”, a,b); } int MaxCommonFactor(int a, int b) { if(a<=0||b<=0) return(-1); while(a!=b) { if(a>b) a=a-b; else if(b>a) b=b-a; } ruturn(a); } 3、定义函数GetData()用于接收键盘输入的一组整型数据,并放入一数组中;另外再定义一个函数Sort()用于对输入的这一组数据按照降序排列。主函数向后调用GetData和Sort函数,输出最后的排序结果。 参考答案: #include<stdio.h> #define N 10 void GetData(int a[],int n); void Sort(int a[],int n); void main() { int i,a[N]; GetData(a,N); Sort(a,N); printf(“After sort: ”); for(i=0;i<n;i++) printf(“%d”,a[i]); printf(“\n”); } void GetData(int a[],int n) { int i; printf(“Input number: ”); for(i=0;i<n;i++) scanf(“%d”,&a[i]); } void Sort(int a[],int n) { int i,j,k,t; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(a[j]>a[k]) k=j; if(k!=i) { t=a[i]; a[i]=a[k]; a[k]=t; } } } 4、参考答案: #include<stdio.h> #include<string.h> void JsSort(char str[]); void main() { char str[80]; printf(“Input a string: ”) gets(str); JsSort(str); printf(“After sort: %s\n”, str); } void JsSort(char str[]) { int i,j,k,len; char ch; len=strlen(str); for(i=1;i<len-1;i+=2) { k=i; for(j=i+2;j<len;j+=2) if(str[j]>str[k]) k=j; if(k!=j) { ch=str[i]; str[i]=str[k]; str[k]=ch; } } } 5.参考答案: #include<stdio.h> #include<string.h> #define N 30 void Josegh(int p[],int n, int s,int m); void main() { int i,p[N]; Josegh(p,N,1,10); for(i=N-1;i>=0;i--) { printf(“ %4d”,p[i]); if(i%10==0) printf(“\n”); } } void Josegh(int p[],int n,int s,int m) { int i,j,s1,w; s1=s; for(i=1;i<=n;i++) p[i-1]=i; for(i=n;i>=2;i--) { s1=(s1+m-1)%i; if(s1==0) s1=i; w=p[s1-1]; for(j=s1;j<i;j++) p[j-1]=p[j]; p[i-1]=w; } } 6、参考答案: #include<stdio.h> #include<string.h> int StrLoc(char str1[],char str2[]); void main() { int loc; char str1[]={“do”}; char str2[]={“how do you do?”}; loc=StrLoc(str1,str2); if(loc==-1) printf(“The string \”%s\” not in the string \”%s\”.\n”,str1,str2); else printf(“Location of the string \”%s\” in the string \”%s\” is %d.\n”,str1,str2,loc); } int StrLoc(char str1[],char str2[]) { unsigned int i,len1,len2; len1=strlen(str1); len2=strlen(str2); if(len1>len2) return(-1); for(i=0;i<=strlen(str2)-strlen(str1);i++) if(strncmp(str1,str2+i,len1)==0) return (i); return(-1) } 7、参考答案: #include<stdio.h> long count(int n,int k); void main() { int n,k; n=10; k=2; printf(“Result=%ld\n”,count(n,k)); } long count(int n,int k) { for(i=1;i<=n;i++) { item=1; for(j=1;j<=k;j++) item*=i; sum+=item; } return(sum); } 8、参考答案: #include<stdio.h> long F(int n); void main() { int i; for(i=1;i<=40;i++) { printf(“F(%2d)=%-9ld ”,i,F(i)); if(i%4==0) printf(“\n”); } } long F(int n) { if(n<=2) return(1); return(F(n-1)+F(n-2)); } 9、参考答案: #include<stdio.h> long fun(int m,int n); void main() { int m,n; long c; printf(“Input m and n (m>=n): ”); scanf(“%d%d”,&m,&n); c=fun(m,n); printf(“c=%ld\n”,c); } long fun(int m,int n) { if(m==n||n==0) return(1L); else return(m*fun(m-1),n)/(m-n)); } 10、参考答案: #include<stdio.h> #include<string.h> void IntToStr(int n); char str[80]={0}; void main() { int num; printf(“Input an Integer number: ”); scanf(“%d”,&num); IntToStr(num); printf(“The string is : %s\n”, str); } void IntToStr(int n) { int i; if(n==0) return; for(i=strlen(str)-1;i>=0;i--) str[i+1]=str[i]; str[0]=n%10+0x30; IntToStr(n/10) } |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论