实验三
一:实验结论:
1:生成N个0~99之间的随机整数,并打印输出。
(1)源代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 5
int main() {
int x, n;
srand(time(0));
for(n=1; n<=N; n++) {
x = rand() % 100;
printf("%3d", x);
}
printf("\n");
return 0;
}
(2)运行结果截图:

2:一个简单的猜日期程序。
(1)源代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 3
int main (){
int x,n;
srand(time(0));
x = rand() %31+1 ;
printf("猜猜2021年5月那一天会是你的Lucky day\n");
printf("开始喽,你有三次机会,猜吧(1—31):");
for(n=1;n<=N;n++){
int a;
scanf("%d",&a);
if(a==x){
printf("你猜中了\n");
break;
}
if(a<x){
printf("你猜的日期早了,Lucky day还没到呢\n");
}
if(a>x){
printf("你猜的日期晚了,Lucky day悄悄溜到前面来啦\n");
if(n<N)
printf("再猜(1—31):");
}
}
if (n==4)
printf("\n次数用完啦,偷偷告诉你:5月,你的Lucky day是%3d号",x);
else
printf("\n");
return 0;
}
(2)运行结果截图:
3:将一个长整型数s的每一数位上的奇数依次取出,构成一个新的数,高位仍在高位,低位仍在低位。
(1)源代码:
#include<stdio.h>
#include<math.h>
int main(){
{sign:
int data;
printf("请输入你希望处理的数据:");
scanf ("%ld",&data);
int t=0,i=0;char m= 0;
int n;
if(m==data) {goto k;}
else{
while(data / 10.0 != 0) {
n = data % 10;
data /=10;
if(n % 2!=0){
t+= n*pow(10.0, i);
i++;}
}
printf("数据处理的结果: %d\n",t);
printf("\n");
goto sign;}}
{ k: return 0;}
}
(2)运行结果截图:
(3)由于不会在c语言中将crtl+z设置为结束程序的指定数据,采用0作为结束数据指令。
4:多组方程系数.
(1)源代码:
#include <math.h>
#include <stdio.h>
// 函数声明
void solve(double a, double b, double c);
// 主函数
int main() {
double a, b, c;
printf("Enter a, b, c: ");
while(scanf("%lf%lf%lf", &a, &b, &c) != EOF) {
solve(a, b, c); // 函数调用
printf("Enter a, b, c: ");
}
return 0;
}
// 函数定义
// 功能:求解一元二次方程,打印输出结果
// 形式参数:a,b,c为一元二次方程系数
void solve(double a, double b, double c) {
double x1, x2;
double delta, real, imag;
if(a == 0)
printf("not quadratic equation.\n");
else {
delta = b*b - 4*a*c;
if(delta >= 0) {
x1 = (-b + sqrt(delta)) / (2*a);
x2 = (-b - sqrt(delta)) / (2*a);
printf("x1 = %.2f, x2 = %.2f\n", x1, x2);
}
else {
real = -b/(2*a);
imag = sqrt(-delta) / (2*a);
printf("x1 = %.2f + %.2fi, x2 = %.2f - %.2fi\n", real, imag, real, imag);
}
}
}
(2)运行结果截图:

(3)问题:这个应用中,一元二次方程的根,能否设计成以函数返回值的方式返回给主调函数?
回答:重根时可以,return x1;
此外不行,函数只能有一个返回值。
5:从键盘上输入n(1<=n<=10),根据以下计算式计算s的值,并输出。 具体要求如下:
定义并实现一个函数fun()用于计算数列求和;
在main()函数中输入n,然后调用fun()完成计算,并打印输出。
(1)源代码:
#include <stdio.h>
double fun(int n);
unsigned int getfactorial (unsigned int n); // 函数声明
int main() {
int n;
double s;
printf("Enter n(1~10): ");
while(scanf("%d", &n) != EOF) {
s = fun(n); // 函数调用
printf("n = %d, s= %f\n\n", n, s);
printf("Enter n(1~10): ");
}
return 0;
}
// 函数定义
double fun(int n) {
double s=1,t=1;
int i;
if(n==1)
return s=1;
else
for(i=2;i<=n;i++)
{
t=-t*1/i;
s=s+t;
}
return s;
}
(2)运行结果截图:

6:输出101-200之间所有素数与其个数。
(1)源代码:
#include<stdio.h>
#include<math.h>
int isprime(int n); //函数的定义
int main(){
int i;
int a=1;
for(i=101;i<=200;i++)
{
if(isprime(i)){
printf("%4d",i);
a++;
}
if(a%6==0){
printf("\n");
a=1;//将n的值返回1
}
}
return 0;
}
int isprime(int n){
int k;
for(k=2;k<=sqrt(n);k++)
if(n%k == 0)
return 0;
return 1;
}
(2)运行结果截图:

二:实验总结:
1:收获:(1)通过实验更为清晰的认识到了&,for语句的用法;
(2)对函数的嵌套及调用有了更直观的了解;
(3)将系统时间作为随机种子生成指定范ctt围内的随机数的方法。
2:尚存的问题:(1)在任务三中无法做到输入ctrl+z时停止程序的运行;
(2)对算法的理解还不到位。
(3)对细节的掌握还存在不足。

浙公网安备 33010602011771号