1-8章习题参考答案全

#include void main()

{ int a[4][4],i,j,s=0,m=0;

float n=0;

for(i=0;i<4;i++) for(j=0;j<4;j++) a[i][j]=3*i+2*j-6; printf(\原始数组为:\\n\for(i=0;i<4;i++) { for(j=0;j<4;j++)

printf(\printf(\}

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

s+=a[1][j];

printf(\第二行4元素累加和为:%d\\n\for(j=0;j<4;j++)

n+=a[j][3];

printf(\第四列4元素平均值为:%.2f\\n\for(i=0;i<4;i++) if(a[i][i]<0) m++;

printf(\主对角线4元素中负数的个数为:%d\\n\}

10.约瑟夫环问题:编号为1,2,3,...,n的n个人按顺时针方向围坐一圈,每人持有一个正整数密码。一开始任选一个正整数m作为报数上限值,从第一个人开始按顺时针报数,报到m时停止,报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计程序求出出列顺序。

分析:设整型数组a中保存n个人的密码,对应的人出列后,数组元素置0作为标志。顺时针确定下一个人的方法,可将下标加1,再对n求余。

#include #define N 100 main()

{ int a[100];

int i,j,m,n,k=0;

printf(\输入人数n和任选的一个正整数m:\ scanf(\

printf(\输入n个人的密码: \ for (i=0;i

scanf(\ printf(\出列顺序为: \ for(i=0;i

{ j=1;

while(j

{ while(a[k]==0) /*跳过已出列的人*/ k=(k+1)%n; j++;

k=(k+1)%n; }

while(a[k]==0) /*跳过已出列的人*/ k=(k+1)%n; printf(\ m=a[k];

a[k]=0; } }

第7章习题 一、选择题

1 A 2 D 3 D 4 B 5 A 6 D 7 C 8 D 9 B 10 A 二 填空题

1. main() 2. main() 3.函数首部

4. 解决函数必须“定义在前,使用在后”的原则问题 5. int

6. 定义 调用

7. 地址传递 值传递 8. return void

9. void f(float a,float b) float f(float a,float b) 10. static

三 程序分析题

1. a=48 2. 8,17 3. 2721 4. BASIC C

COBOL

FORTRAN PASCAL Smalltalk 5. 6

1 2 3 6 5 4

四、编程题

1.写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。

#include #include void main() {int prime(int); int n;

printf(\ scanf(\ if (prime(n))

printf(\ else

printf(\ }

int prime(int n) {int flag=1,i;

for (i=2; i

2.写一个函数,用于实现函数strcmp()的功能,能将两个字符串进行比较,将两个字符串中第一个不相同字符的ASCII码值之差作为函数的返回值。

#include

int MyStrcmp(char s[], char t[]); main() {

char str1[20],str2[20]; printf(\gets(str1);

printf(\gets(str2); if (MyStrcmp(str1,str2)>0) printf(\

else if (MyStrcmp(str1,str2)<0) printf(\ else

printf(\}

int MyStrcmp(char s[], char t[]) {

int i;

for (i=0;s[i]==t[i]; i++) if (s[i]=='\\0') return 0 ; return (s[i]-t[i]); }

3. 写一个函数,用于实现函数strcat()的功能, 能将两个字符串连接。 #include void main()

{void concatenate(char string1[],char string2[],char string[]); char s1[100],s2[100],s[100]; printf(\ scanf(\

printf(\ scanf(\

concatenate(s1,s2,s);

printf(\ }

void concatenate(char string1[],char string2[],char string[]) {int i,j;

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

for(j=0;string2[j]!='\\0';j++) string[i+j]=string2[j]; string[i+j]='\\0'; }

4. 从键盘任意输入10个整数,用函数编程实现将其中最大数与最小数的位置对换后,再输出调整后的数组。

#include #define ARRSIZE 10

void MaxMinExchang(int a[], int n) {

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4