“实验三
循环结构程序设计”参考答案及说明
一、必做题
1. 程序如下:
#include
main()
{ int i, n, s = 0;
printf(“n
= “); scanf(“%d”, &n);
for(i =
2; i < n;
i++)
if(n % i ==
0) s +=
i;
printf(“n
= %d\n”, n);
}
2. 程序如下:本题计算的公式为:
#include
#include
main()
{ double x0, x1 = 0.0;
do { x0 = x1;
x1 = cos(x0);
} while(fabs(x0 – x1) >=
1.0e-6);
pritnf(“x1 = %f\n”, x1);
}
3. 程序如下:
#include
main()
{ int i, j, k,
m;
char
c;
i = j = k
= m = 0;
c =
getchar();
while(c
!= ‘\n’)
{
if(c>= ‘A’ && c<= ‘Z’) i ++;
if(c>= ‘a’ && c<=
‘z’) j
++;
if(c== ‘
‘) k
++;
if(c
>= ‘0’ && c <=
‘9’) m
++;
c = getchar();
}
printf(“大写字母= %d,小写字母= %d,空格字符= %d,数字字符= %d\n”, i, j, k, m); }
4. 本题目属于“数组”一章的内容。
二、选做题
1. 程序如下:本题所计算的公式为:
#include
#include
main()
{ double fx = 1.0, x = 2.5, t;
int
n;
fx = fx
+x; t =
x; n = 1;
do { n++; t = t * (-1)* x / n; fx += t;
}while(fabs(t) >= 1.0e-6);
printf("f(%5.2f) = %lf\n", x, fx); }
2. 程序如下:
#include
main()
{ int m, n, i, j;
printf(“Plase input m, n (m > n) :
“);
scanf(“%d%d”, &m, &n);
for(i =
m+1; i < n; i++)
{ for(j = 2; j < i; j++)
if(i
% j ==
0) break;
if(j >=
i) printf(“d”, i);
}
printf(“\n”);
}
3. 程序如下:
#include
main()
{ int n,
i, t1, t2, t;
float s = 0;
printf(“Please input n :
”);
scanf(“%d”, &n);
t1 = t2 =
1;
for(i =
1; i <= n; i++)
{ t = t1 +
t2;
s = s + (float) t / t2;
t1 = t2; t2 =
t;
}
printf(“s
= %-10.2f\n”, s);
}
4. 程序如下:
#include
main()
{ int n;
float s = 100, h = 50;
for(n=1; n < 10; n++)
{ s = s + 2 * h; h /= 2; }
printf(“10次落地时,共经过%-10.2f米\n第10次反弹%-10.2f\n”, s, h);
“实验四 数组”参考答案及说明
一、必做题
1. 程序如下:
#include
main()
{ int a[1000], i, j, len = 0;
printf(“n
= “); scanf(“%d”,&n);
for(i =
3; i <= n; i++)
{ for(j = 2; j < i; j++)
if(i%j
==
0) break;
if(j < i) a[len++] = i;
}
for(i =
0; i < len; i++) printf(“�”, a[i]);
printf(“\n”);
}
2. 程序如下:
#include
main()
{ char str[81], ch;
int left, right = 0;
printf(“请输入字符串 str:”); gets(str);
while(str[right] != ‘\0’) right++;
for(left
= 0, right --; left < right; left++, right--)
{ ch = str[left]; str[left] = str[right];
str[right] = ch; }
printf(“逆置后的字符串是:%s\n”, str);
}
3. 程序如下:
#include
main()
{ int i, j, a[10], t;
printf(“请输入数组a :”);
for(i =
0; i < 10; i++) scanf(“%d”, &a[i]);
for(i=0;
i<10-1; i++)
for(j=i+1; j<10; j++)
if(a[j]>a[i]) { t = a[i]; a[i] = a[j]; a[j] =
t; }
printf(“排序后的数组a是:\n”);
for(i=0;
i<10; i++) printf(“]”,
a[i]);
printf(“\n”);
}
4. 程序如下:
#include
main()
{ int i, j, s = 0, a[5][5];
printf(“请输入数组a :”);
for(i=0;
i<5; i++)
for(j=0; j<5; j++) scanf(“%d”, &a[i][j]);
for(i=0;
i<5; i++) s += a[i][i] + a[i][5-i-1];
printf(“s
= %d\n”, s);
}
二、选做题
1. 程序如下:
#include
#include
#define M 5
main()
{ char str[M][41], s[41];
int i,
j;
printf(“请输入字符串数组str:”);
for(i=0;i
for(i=0;
i
for(j=i+1; j
if(strlen(str[i])
{ strcpy(s, str[i]);
strcpy(str[i],str[j]); strcpy(str[j],s); }
printf(“排序后的字符串依次是:\n”);
for(“i=0;i
}
2. 程序如下:
#include
#include
main()
{ char s[81], t[81], w[81];
int i=0,
j=0, k=0;
printf(“请输入字符串s:”); gets(s);
while(s[i] != ‘\0’)
if(s[i]>=’0’ &&
s[i]<=’9’) w[j++] = s[i++];
else t[k++] = s[i++];
w[j]
= '\0'; t[k]
= '\0'; strcat(t, w);
printf(“连接之后的新字符串是:%s\n”, t);
}
3. 程序如下:
#include
#define N 9
main()
{ int i, j, t, a[N];
printf(“请输入数组a:”);
for(i=0;
i
i =
0; j = N/2;
if(N%2 == 1) j++;
while(i
{ t = a[i]; a[i] = a[j]; a[j] = t;
i++; j++;
}
printf(“交换后,数组a的元素是:\n”);
for(i=0;
i
printf(“\n”);
}
4. 程序如下:
#include
#define N 4
main()
{ int i, j, k, t, a[N][N] = {{21, 12, 13, 24},
{25, 16, 47, 38}, {29, 11, 32, 54}, {42, 21, 33, 10}};
for(i=0;i
for(j=0; j<2;j++)
{ t = a[i][0];
for(k=1; k
a[i][N-1]=t;
}
printf(“移动之后的矩阵是:\n”);
for(i=0;
i
{ for(j=0; j
printf(“\n”);
}
}
1. 程序如下:
#include
Int Isprime(int n)
{ int i;
for(i=2; i
if(n%i == 0) return 0;
return ;
}
main()
{ int n;
printf(“n=”);
scanf(“%d”, &n);
if(Isprime(n)) printf(“%d is prime!\n”, n);
else printf(“%d isn\’t prime!\n”, n);
}