安徽大学C语言实验平台答案(新版)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一C简单程序设计
1.以下程序用于输入长方形的长、宽,计算长方形的面积、周长和对角线长。

#include <stdio. h>
#include <math. h> mainO (
float x, y, s, 1, r;
printf (,/input x, y=");
scanf (飞&x, &y); s=x*y;
1=2*(x+y);
r=sqrt(x*x+y*y);
printf Cs=%6. 2f 1=%6. 2f r=%6. 2f \s, l,r);
)
请调试运行程序,要求:
(1)编辑、编译、链接并运行程序。

(2)将输出语句改为printf Cs=%6. 3f 1=%6. 3f r=%6. 3f 工s, 1, r);,再运行程序,结果是否有变化?
(3)将程序第 4 行float x, y, s, 1, r;与第 6 行scanf (*%f, %f&x, &y);交换位置,再编译,会如何?
(4)混淆程序中的大小写字母。

试分别将printf写为Printf,或将main写为Main
或MAIN,或将程序中语句s=x*y;写为S=x*y;再编译、链接、运行,结果如何?
(5)遗漏语句未尾分号。

如将printf ("input x, y=");的分号去掉,再编译、链
接、运行,情况如何?
(6)若遗漏scanf ()语句中的符号。

例如:若将scanf (*%f,%f&x,&y); 改为scanf (飞f, y);,或改为scanf (,%f, %f/,, &x, y);,再重新编译、链接、运行,
情况如何?
(7)将scanf ()语句中“斌,%f”改为“%的”,输入数据的格式是否要变?
(8)参考教材P360页,C.3高级调试方法,在程序中设置断点,并单步调试程序。

2.编程:要求程序运行后在屏幕上输出如下信息:My Program Is Running!
Good, and I'm very glad now!
^include <stdio. h>
^include <Windows. h>
mainO
(
printf C My Program Is Running!\n Good, and I'm very glad now! \n"); system(,z pause/z);
3.编程:输入圆的半径,计算圆的面积并输出。

^include <stdio. h>
^include <Windows. h>
^define PI 3.14
mainO
(
float s, r;
printf ("请输入r的值:\n");
scanf &r);
s=PI*r*r;
printf("s=%g", s);
system(,z pause/z);
4.编程:输出一个形如“▲”的三角图形(要求:第1行输出一个“*”,第2行输出三个,
,最后一行输出9个) o (此题为选做)。

#include<stdio. h>
# i nc1ude<wi ndows. h> mainO (
int i, j;
for(i=l;i<=5;i++)
{
for(j=l;j<=5-i;j++)
printfC 〃);
for(j=l;j<2*i;j++)
printf(〃*");
printf('\n");
)
system(/z pause,z);
5.编程:输出一个形如的三角图形(要求:共5行,第1行一个“*”,第2行二个“*”,
,最后一行5个“*” ) 0 (此题为选做)。

#include<stdio. h>
#include<windows. h>
mainO
(
int i, j;
for(i=l;i<=5;i++)
(
for(j=l;j<=i;j++)
printf C**);
printf ;
)
systemC^pause");
实验二c基本数据类型及运算
1.编程:根据需要定义相关变量,键盘输入10.0、20.6、5.0三个实数分别赋给相关三个变量,输出该3个变量的和s、乘积p和平均值a。

^include <stdio. h>
^include <Windows. h>
mainO
(
float x, y, z, s, p, a;
x=10. 0;
y=20. 6;
z=5. 0;
s=x+y+z;
p=x*y*z;
a=s/3;
printf (,z s=%g\ny=%g\nz=%g\n/z, s, p, a);
system("pause");
)
2.编程:输入球的半径,计算球体表面积和球体积。

#include <stdio. h>
#include <Windows. h>
mainO
Sdefine L 3. 14
(
float r, s, v;
printf ("请输入r的值:\n");
scanf d &r);
s=4*L*r*r;
v=4. 0/3. 0*L*r*r*r;
printf v=%f,z, s, v);
system("pause");
)
3.编程:定义5个变量,通过键盘将“10,-10, 8.123678309, a, 3.14”这五个
值分别赋给相应变量,然后在屏幕上输出变量的值(每行输出一个)。

#include <stdio. h>
^include <Windows. h>
mainO
int a,b;double c;char d;float e;
a=10, b=-10, c=8.123678309, d='a', e=3. 14;
printf (,?%d\n%d\n%, 9f\n%c\n%. 2f\n”, a, b, c, d, e); system("pause");
)
4.编程:键盘输入三个整数分别赋给整型变量a、b、c,用三目运算方法求出它们中的最小
值,并输出。

^include <stdio. h>
^include <Windows. h> mainO (
int a, b, c, min;
printf ("请输入a, b, c : \n");
&b, &c);
scanfC%d%d%d",&a
f
min=(a<b) ?a:b;
min=(min<c)?min:c;
printf("min=%d\n”,min); system(,/pause/,);
)
5.编程:调用标准库函数sin (x)计算135°的正弦值(注意:x为弧度)。

(此题为选做)
^include <math. h>
#include <stdio. h>
#include <Windows. h> #define P 3.1415926 main 0 (
float a, b;
b=135*P/180.0;
a=sin(b);
printf (〃a=%g\n”, a); system(,/pause/,); )
6.编程:键盘输入一个实数赋给变量x,计算y=x3+x的值,分别输出y值、y值的整数部分和小数部分(此题为选做)。

#include <stdio. h>
#include <Windows. h> mainO (
float x,y,b;int a;
printf(,/input x:");
scanf (“纵f', &x);
y=x*x*x+x;
a=(int)y;
b=y-a;
printf (,?%g\n%d\n%g\n/z, y, a, b);
system(,/pause/,);
)
实验三c分支结构程序设计
1.编程:从键盘输入一个字符,如是大写字母,则输出相应小写字母;如是小写字母,则原样输出:其它字符输出“Not letter!”。

#include <stdio. h>
#include<Windows. h>
void mainO
(
char x;
printf (〃请输入一个字符:\n");
scanf ("席c”, &x);
if (x>='a' &&x〈二'z )
printf (“虹\n', x);
else if(x>='A'&&x<;N)
printf("%c\n”, x+32);
else
printfCNot letter!\n");
system(,/pause/,);
)
2.编程:判断输入的正整数是否既是3又是5的整数倍。

若是,输出Yes,否则输出No。

itinclude <stdio. h>
^include <Windows. h>
void mainO
(
int a;
printf ("输入正整数a:\n");
scanf ("$d”, &a);
if (a>0)
{ if(a%3==0, a%5==0)
printf("Yes'n");
else
printf (/?No\n z/);
)
else
printf (//Error\n,"); system(z/pause,z);
3.编程:从键盘输入三个整数,分别赋给变量a, b, c,请按从大到小的顺序依次输出。

#include <stdio. h>
#include <Windows. h> int mainO
int a, b, c, d, max, min;
printf ("请输入a, b, c : \n");
scanfC%d%d%d',&a,&b,&c);
max=a>b?a:b
min=a<b?a:b
max=max>c?max:c;
min=min<c?min:c;
d=a+b+c-max-min;
printf (,z%d>%d>%d\n z,, max, d, min);
system(,/pause/,);
4.设函数f(x)如下,求f(x)的值。

1 (x > 0)
= < 0 (x =0)
-1
具体要求:
(1)用if语句编程。

(2)用scanf函数给自变量赋值,且输入前有相应提示。

(3)结果输出时采用以下形式:
工=具体值,f(x)二具体值
(4)给出你所使用的测试用例。

提示:
按C的语法规则,标识符由字母、数字、下划线组成,不能将f(x)作为变量名,本题中,函数名可起为f或y等。

但作为非格式控制字符,f(x)完全可以出现在printf函数的双引号内。

#include <stdio. h>
#include <Windows. h>
mainO
float x;
int y;
printf ("请输入任意实数x:\n");
scanf ("f", &x);
if(x>0)
y=i;
else if (x=0)
y=0;
else
y=i;
printf ("f (x) =%d, x=%. 2f\n”, y, x); system ("pause");
)
5.编程:用switch语句编写一个简单的计算器程序,输入格式为:datal op data2,其中datal 和data2为参加运算的两个数;op为运算符,取值只能是+、-、*、/。

例如:输入3*7,输出3*7=2建
#include <stdio. h>
^include <Windows. h>
mainO
(
char op;
float datal, data2;
printf ("请输入datal (+> 一, *, /)data2:\n");
scanf &datal, &op, &data2);
switch(op)
(
case ' +' : printf(线f+%g二与f\n”, datal, data2, datal+data2);break;
case ' : printf datal, data2, datal-data2) ;break;
case ' *' : printf \n/z, datal, data2, datal*data2) ;break;
case ' /' : printf \n/z, datal, data2, datal/data2) ;break;
)
system(,/pause/,);
)
6.编程:计算奖学金ss的值,己知奖学金ss与成绩s的关系为:(此题为选做)
-0 (s<80)
ss = TOO +s (80 < s, < 90)
200+s*3/2 (90<s<100)
具体要求:
(1)用if语句实现分支结构的编程。

(2) s为整型,ss要求精确到小数点后二位。

(3)用scanf函数给s赋值,且输入前有相应提示。

(4)结果输出时采用以下形式:
成绩$ =具体值,奖学金SS二具体值
^include <stdio. h>
^include <Windows. h> mainO (
int s;float ss;
printf ("请输入s: \n");
scanf (飞d〃, &s);
if(s<0 s>100)
printf ("ERROR!'、);else {if(s>=0&&s<80)
ss=0;
else if(s>=80&&s<90)
ss=100+s;
else
ss=200+s*3/2;
printf ("成绩s=%d\n 奖学金ss=%0. 2f\n”, s, ss);
system(,/pause/,);
) )
7.编程实现:由系统生成一个10以内的随机整数,用户从键盘上输入一个10以内的整数, 如果两者相等输出“0K”,否则输出“ERROR”。

(此题为选做)
注:随机数的生成必须包含头文件#include <stdlib. h>> Sinclude 必须用初始化语句srand ((unsigned) time (NULL));,表达式rand()%a+l的值为0~a内的随机整数° #include <stdio. h>
^include <Windows. h>
#include <stdlib. h>
^include <time. h> main 0 (
int a, b;
srand((uns i gned)t ime(NULL));
b=rand()%10+l;
printf ("请输入a:\n");
scanf (飞d”, &a);
printf ("a=%d,随机数b二与d\n”, a, b); if(a==b)
printfC0K!\n");
else printf("ERROR!\n");
system(,/pause/,);
实验四C循环结构程序设计
1.编程:输出100以内个位数为6且能被3整除的所有数。

^include <stdio. h>
^include <Windows. h> mainO (
int i;;
for(i=l;i<100;i++) {
if(i%10==6&&i%3==0) printf(〃与d\n〃, i);
} system(,z pause z/);
}
2.编程:求出1 ~ 1000之间能被13整除的最大的那个数。

^include <stdio. h>
^include <Windows. h> main 0 (
int i, max=0;
for(i=l;i<1000;i++) { if(i%13!=0)
continue;
if(max<i) max=i;
)
printf("max=%d\n”, max); system(,/pause/z);
}
3.编程:找出若干个非零数中的最小值m以及它们的平均值a。

要求:若干个数由键盘输入,每次输入一个赋给变量x, x为零时,结束输入。

^include <stdio.
h>
^include <Windows. h> main 0 (
a;
int i ;float x, m, s
t
scanf (飞&x);
if(x!=0)
{m=x;s=x;} for(i=l;;i++)
scanf (“%f”, &x);
if(x=O) break;
s=s+x;
if(m>x)
a=s/i;
printf ("最小值m=%f\n 平均值a=%f\n”, m, a);
system("pause");}
)
4.编程:求两个正整数m、n (含m, n值)之间所有奇数之和x与偶数之和y。

要求:
(1)m、n的值由键盘输入。

(2)输入时,允许用户随意先输入大的或小的整数。

^include <stdio. h>
^include <Windows. h>
mainO
(
int i, m, n, t, x=0, y=0;
scanf ("$d$d”, &m, &n);
if (m>n)
{
t=m;
m=n;
n=t;}
for(i=m;i<=n;i++)
if(i%2)
x+=i;
else
y+二i;
printf("x=%d\n”,x);
printf("y=%d\n”, y);
system(z/pause/z);
)
5.编程:计算丸的近似值,冗的计算公式为:。

224262(2"
1x3 3x5 5x7 (2 双- 1)x(2 力+ 1)
要求:
(1)n值由键盘输入。

(2)分别输出当n为10、100、1000时的计算结果。

(3)输出时要求每行显示一组n、兀的值,每行形式如下:。

=具体值,H=具体值^include <stdio. h> ^include <Windows. h> main 0 (
int n,i;double t;
printf ("请输入n的值:\n");
scanf (飞d”, &n); i二l;
t=2;
while(i<=n) (
t=t*(2*i)*(2*i)/(2*i-l)/(2*i+l); i=i+l;
printf (/z n=%d
t几=%f\n”, n, t);
) system("pause");
)
6.编程:计算函数y的值。

要求键盘接收自变量x的值,若x的值不为零,计算函数y的值并输出,再从键盘接收下一个x的值,……,直到x的值为零,显示“Thank You, Bye!”, 尔后结束程序,已知函数y与自变量x的关系为:(此题为选做)
务十1 (OelOO) y = <
[?一1 3 之100)
#include <stdio. h> main 0 (
float x, y;
printf ("请输入x:\n");
scanf (飞&x); for (;x>=0;) (
if(x>0&&x<100) (
y=3*x+l;
printf("y=%g\n”, y);
) else if(x>=100) (
y=x*x-l;
printf("y=%g\n”, y); ) else
printf (/?Thank you bey !\n v);break; ) scanf (线f”, &x);
) )
7.我国现有人口13亿,设年增长率为通,编写程序,计算多少年后增加到20亿。

(此题为选做)
^include <stdio. h>
#include <Windows. h> main () (
double t=13;int s=0;
while(t<20) (
t=t*(l+0. 01);
s++; ) s+=l;
printf C%d年后增加到20亿”,s); system("pause");
)
实验六c的数组
1.编程实现:输入一个正整数n (KnWlO),再输入n个整数,把这些数逆序存放到数组后输出。

例如:输入5,再输入五个数8、23、1、7、19,则输出为:19、7、1、23、8。

itinclude <stdio. h>
^include <Windows. h>
mainO
(
int a[10], n, i;
scanf ("$d”, &n);
for (i=0; i<n; i++) scanf &a[i]);
for (i=n-l; i>=0; i-)printf (,%d ", a[i]);
printf("\n");
system("pause");
2.编程实现:已知二次等差数列的前4项为2, 5, 10, 17,请定义一维整型数组存储该数列的
前20项,并且每5个数为一行输出该数列的前20项。

#include <stdio. h>
^include <Windows. h>
main 0
(
int a[21], i;
for(i=l;i<=20;i++)
{a[i]=i*i+l;
printf C%4d
if (通5=0)
printf('\n");
)
system(,/pause/,);
)
3.已知一组整型数据已按从小到大排列好,现任意输入一个整数,请按原来排序的规律将它插入到数组中(例如:原来的一组整数为1,3, 5, 8, 9,若输入的整数是7,则最终结果为:1,3,
^include <stdio. h>
^include <Windows. h>
mainO
(
int a[6] = {l, 3, 5, 8, 9}, i, j,n;
printf (“请输入1个整数:");
scanf ("$d”, &n);
for(i=0;i<6;i++)
if (ali]>n)
(
for(j=5; j>i; j-)a[j]=a[j-l];
a[i]=n;
break;
)
if(n>=a[4])
a[5]=n;
for(i=0;i<6;i++)
printf (,/%d ", a[i]);
printf (',\n ");
system ("pause");
}
4.求一个4X4的整数矩阵的副对角线(右上到左下)上所有奇数的和sum及偶数的平均值ave
u
要求:结果保留2位小数
^include <stdio. h>
^include <Windows. h>
for(j=0;j<5;j++)
(
: k;
k++;
)
)
for(i=0;i<5;i++)
(
for(j=0;j<=i;j++)
(
printf ("与d\t", a[i] [j]);
s=s+a[i] [j];
}
printf('\n");
printf("s=%d",s);
system("pause");
)
6.编程:将一个4X4的整型矩阵元素按副对角线(右上到左下)互换。

(此题为选做) 要求:
(1)使用随机函数产生16个1~100之间的整数作为矩阵各元素的值。

(2)互换前,按矩阵形式输出矩阵。

(3)互换后,按矩阵形式输出矩阵。

int main(void) (
int a [4] [4] = {0};
int b[4][4] = {0};
int i, j;
srand(time(NULL));
for(i=0;i<4;i++)
(
for(j=0;j<4;j++)
a[i][j]=rand()%100+l;
)
printf (〃原矩阵:\n〃);
for(i=0;i<4;i++)
(
for(j=0;j<4;j++)
printf (*%4d *,a[i][j]);
printf('\n");
)
for(i=0;i<4;i++)
for(j=0;j<4;j++) b[i][j]=a[3-i][3-j];
)
printf (〃交换后矩阵:\n〃);
for(i=0;i<4;i++) (
for(j=0;j<4;j++)
(
a[i] [j]=b[j][i];
printf ("%4d ", a[i] [j]);
) printf ("Xn*); ) system("pause");
)
7.定义两个N行N列的二维数组a、b,编写程序,将a数组最后一行放到b数组的第0列中,把a数组中的第0行放到b数组的最后一列中,b所指二维数组中其他元素的数据不变。

(此题为选做)
#include <time. h>
^include <Windows. h>
'define N 10 int mainO (
int i,j,a[N][N],b[N] [N];
srand(time(NULL));
printf ("原矩阵是:\n");
for(i=0;i<N;i++)
for(j=0;j<N;j++) (
a[i][j]=rand()%100+l;
)
for(i=0;i<N;i++)
(
for(j=0;j<N;j++)
( printf ("%4d", a[i] [j]);
) printf (*\n z/);
)
printf (〃第1列与第10列交换后矩阵是\n〃);
for(i=0;i<N;i++)
for(j=l;j<N-l;j++) b[i] [j]=a[i] [j];
)
for(i=0;i<N;i++)
(
b[i] [N-l]=a[O] [i];
b[i][O]=a[N-l] [i]

)
for(i=0;i<N;i++)
(
for(j=0;j<N;j++)
(
printf (/,%4d z,, b[i] [j]); )
printf (/z\n*);
)
system("pause");
实验七c字符数组和字符串函数
1.编写字符串拷贝程序,并要求拷贝过程中将字符串中的小写字母转换成大写字母。

#include <stdio. h>
#include <string. h> mainO
(
char a[80], b[80];
int i;
printf (〃输入字符串:”);
gets(a);
for(i=0;a[i]!= \0' ;i++) (
b[i]=a[i];
if(b[i]>= a &&b[i]<= z ) b[i]=b[i]-32;
)
b[i]= \0* ;
puts(b);
system(,z pause/z);
)
2.从键盘输入两个字符串a和b,要求不使用库函数strcat,把串b的前5个字符连接到串a 中:如果b中的长度小于5,则把b的所有元素都连接到a中。

^include <stdio. h>
^include <Windows. h> main 0 (
char a[80], b[80], *q=a, *p=b;int i=0;
printf(〃字符串a:");
gets(a);
printf ("字符串b:〃);
gets(b);
while(*q++); q-;
while(*p++) i++;
P=b;
if(i<5) while(i—) *q++=*p++;
else for(i=0;i<5;i++) *q++=b[i];
*q=' \0'; puts(a); system(,/pause/,);
)
3.输入一个以回车结束的字符串(少于80个字符),再输入一个字符,统计并输出该字符在字符串中出现的次数,然后输出该字符串。

#include <stdio. h>
#include <Windows. h> main 0 (
char c[80],ch;
int i,num=0;
printf(〃请输入字符串及字符:〃);gets(c);
ch=getchar0;
for(i=0;c[i]!= \0f ;i++) if(CLi]=ch) num+T;
printf (,z num(%c) =%d\n z,, ch, num);
puts(c); system(,z pause/z);
)
4.编程:键盘接收一个字符串(只含英文字母),将该字符串加密后输出。

加密规则为:若为小写字母则不变,若为大写字母则将其转换为小写后再后移一个字母,例如“A”应转换为“b”,“B”应转换为“c”,“Y”应转换为“z” ,而“Z”应转换为“a” . ^include <stdio. h>
^include <Windows. h>
main 0
(
char c [80], i;
printf(〃请输入字符串:\n");
gets(c);
for(i=0;c[i]!= \0f ;i++) (
iff a1 <=c[i]&&c[i]<= z )
c[i]=c[i]:
ifCA1 <=c[i]&&c[i]<=,Y')
c[i]=c[i]+33;
if(c[i]= Z') c[i]=c[i]+32-25;
)
puts(c); system("pause");
)
5.编程:输入一个以回车结束的字符串(少于80个字符),将该字符串倒序存放后按顺序输出。

^include <stdio. h>
^include <Windows. h>
#include <string. h>
main 0
(
char c[80], ch;
int i, 1;
gets(c);
l=strlen(c);
for(i=0;i<l/2;i++) (
ch=c[i];
c[l-i-l]=ch;
)
puts(c);
system(,z pause/z);
)
6.编程:实现对字符串的加密,要求从键盘输入一个字符串,输出加密之后的字符串。

(此题为选做) 加密规则为:
对于串中第奇数个字符,若是字母,则把该字母变为它后面的字母(若为Z则变为A),不是字母则不变:
对于串中第偶数个字符,若是字母,则把该字母变为它前面的字母(若为A则变为Z),不是字母则不变;
大小写字母都遵循此规则。

例如:
若原字符串是:AbbaZG Ha-MnnK Yzx 加密字符串为:BaczAF Gb-Nmoj Xaw ^include <stdio. h>
^include <string. h> #include <Windows. h> mainO (
char a[100];
int i, 1;
gets (a);
l=strlen(a);
for(i=0;i<l;i+=2) (
a[i]=a[i]+l;
if(a[i]= z* a[i]== Z*) a[i]=a[i]-25;
) for(i=l;i<l;i+=2) (
if (' A' ='Z' I ' a,<a[i]&&a[i]<= z')
a[i]=a[i]-l;
if(a[i]=" | a[g£) a[i]=a[i]+25;
) puts (a); system(,/pause/,);
)
7.编程:输入一行英文字符串,统计单词的个数(单词和单词以空格分隔)。

(此题为选做)
^include <stdio. h>
#include <Windows. h> int mainO (
char c[100],*q=c;
int i, word=0, num=0; gets(c);
for(i=0;*(q+i)!= \0' ;i++)
if (*(q+i)=’ ') word=0;
else if(word==0)
word=l;
num++;
)
)
printf (''There are %d words”, num);
system(,/pause/z);
)
实验九c函数的基本操作
1.编写函数:计算三角形的面积。

已知三角形三条边长,公式为:
1)9 一川(匕- 2)
其中x、y、z 为边长,c= (x+y+z)/2o
然后编写main函数进行验证该函数的正确性。

^include <math. h>
double f(double x,double y, double z)
(
double d, c;
d=(x+y+z)/2;
c=sqrt (d* (dr) * (d-y) * (d-z));
return(c);
)
^include <stdio. h>
^include <Windows. h>
mainO
(
double a, b, c, p;
printf ("请输入a、b、c:\n");
scanfC%lf%lf%lf\&a, &b, &c);
P=f (a, b, c);
printf ("p=%, 21f\n", p);
system("pause");
)
2.编写函数:用来判断一个整数是否满足“用4除余1,用5除余3,用7除余4”,满足则返回1,不满足返回0,然后编写main函数,通过调用该函数显示出200^500之间满足该条件的数。

^include <stdio. h>
^include <Windows. h> int fun(int m) (
return (m%4=l&&m%5=3&&m%7=4) ?1:0;
) mainO (
int i;
for(i=200;i<=500;i++) { if (fun(i))
♦printf ("船ld\n", i) ;}
) system(,z pause/z);
)
3.编写函数isprime(),用来判断一个整数a是否为素数。

再编写main函数,通过调用该函数打印出100~300之间所有的素数,要求一行打印10个。

^include <stdio. h>
^include <Windows. h> int isprime(int x) (
for (y = xT; y>=l; y) (
if (x%y=0) (
return y; break; )
) ) mainO ( int
for(i=100;i<=300;i++) {
m=isprime(i); if(m==l) (
printf C%5d ”, i);
j++;
if(j%10==0) printf(〃\n");
)
)
system(,/pause/,);
)
4.编写函数:判断一个整数是否为水仙花数,并编写主程序调用该函数求出所有的水仙花数, (所谓的〃水仙花数〃是指一个3位数,其各位数字的立方和等于该数本身。

例如,153 是一个"水仙花数”,因为有153=1*1*1+5*5*5+3*3*3。

)
^include <stdio. h>
^include <Windows. h>
int z;
int fun(int x)
(
int a, b, c;
for (x=100;x<1000;x++)
(
a=(x/100)%10;
b=(x/10)%10;
c=x%10;
if ( x=a*a*a+b*b*b+c*c*c) printf (,/%6d\n/z, x);
)
)
mainO
(
fun(z);
system(,z pause/z);
)
5.编写函数:判断是否满足条件的一对正整数。

条件是这对正整数的和为316,并且这两个加数分别能被13和11整除(即第一个能被13整除,第二个能被11整除).最后编写主函数调用该函数并输出这样的数。

^include <Windows. h>
int a, b;
int f (int x,int y)
(
for (x=l;x<316;x++)
(
y=316-x;
if(X%ll=0&&y%13=0)
printf (“5d"4d\n”, x, y);
mainO (
f (a, b);
system("pause");
)
6.所谓完数就是它所有因子的和等于其自身自然数,如6E+2+3, 6就是一个完数。

编写两个函数:函数factor (n)用来判断n是否是完数,函数PriFac (n)用来显示完数n的所有因子,在主函数中调用这两个函数,显示1〜30000间的所有完数。

(此题为选做) ^include <stdio. h>
#include <Windows. h>
int k;
int factor(int n)
{
int s, i;
k=0;
s=n;
for(i=l;i<n;i++) {if(n%i==0) (
k++; s=s-i;
) ) if(s==0) return 1;
else
return 0;
)
void prifac(int n) (
int i;
for(i=l;i<n;i++) (
if(n%i==0)
printf("52d", i);
)
printf (z,\n%d 是完数\n", n);
)
mainO (
int m, n;
m=factor(n);
if(m==l)
prifac(n);
)
system(,z pause z,);
)
7.编写函数打印杨辉三角的前n行,函数原型为void printyh( int n),其中n为行数, 并编写main函数调用该函数。

(此题为选做)
1
1 1
1 2 1
13 3 1
1 4 6 4 1
^include <stdio. h>
^include <Windows. h>
void printyh(int n)
(
int a=l, i, j, b;
for(i=0;i<n;i++)
{
for (b=l;b<=n-i;b++)
printf (* ");\\可删去
for(j=0;j<=i;j++)
(
if (j==0 i=0)
a=l;
else
a=a*(i-j+l)/j;
printf("$4d", a);
)
printf('\n");
)
)
mainO
(
int n;
printf(〃行数:〃);
scanf ("$d”, &n);
printyh(n);
system("pause");
3.用指针编程:将字符串赋给一个字符数组a,然后从第一个字母开始间隔地输出该串。

例如,输入的是abcdefghijkl,则输出为acegik。

^include <stdio. h>
^include <string. h>
^include <Windows. h>
mainO
(
char a[100], b[100], *p=a, *q=b;int i;
gets(a);
i=strlen(a);
while(p<a+i)
(
*q=*P;
p+二2;
Q++;
)
*q=' \0';
puts(b);
system(,/pause/,);
)
4.用指针编程:从键盘输入15个整数存入一维数组,按逆序存放后再输出。

^include <stdio. h>
#include <Windows. h>
mainO
(
int a[15], *p=a, t, i;
for(i=0;i<15;i++)
scanf (飞d”,;
for(i=0;i<15/2;i++)
(
t=* (p+i);
*(p+i)=*(p+14-i);
*(p+14-i)=t;
)
for(i=0;i<15;i++)
printf ", a[i]);
system(,z pause/z);
)
5.用指针编程:从键盘输入10个学生成绩存入一维实数数组中,统计成绩大于平均数的人数并输出。

^include <stdio. h>
^include <Windows. h>
int mainO
(
float a[10], *p=a, sum=0;
int num=0, i;
printf ("输入分数:\n");
for(i=0;i<10;i++)
(
scanf (飞;
)
for(;p<a+10;p++)
(
sum+=*p;
)
sum/-10;
printf ("平均成绩』f'n", sum);
for(i=0;i<10;i++)
(
if (ali]>sum) num+=l;
)
printf ("有先d名同学高于平均分数\n”, num);
system("pause");
)
6.用指针编程:输入一个4X5的二维整型数组,输出其中最大值、最小值以及它们所在行和列的下标。

(此题为选做) #include <stdio. h>
^include <Windows. h>
mainO
(
int i, j, aL4] [5], *p=*a, min, max, e, b, c, d;
for(i=0;i<4;i++)
for(j=0;j<5;j++) (
scanf (“%d”, p);
if(i=O&&j=O) (
max=*p;
min=*p;
e=0;
b=0;
c=0;
d=0;
if(max<*p)
(
max=*p;
C=i;
d=j;
)
if(min>*p)
(
min=*p;
e=i;
b=j;
)
p++;
)
printf ("最大值为:%d,行标:%d,列标:%d\n^, max, c, d);
printf ("最小值为:%d,行标:%d,列标:%d\n,\ min, e, b);
system("pause");
)
7.用指针编程:定义一个实数型数组,将10个实数输入到数组中,,再输入两整数m, n, 计算出数组中第m个元素(m<10)开始的后n个元素的平均值,包括第m个元素(若n值过大, 超过数组的最后一个元素,则统计到最后一个元素)。

(此题为选做)
例如:数组元素为L0,2・0,3.0,4・0,5・0,6.0,7・0,8.0,9・0,10.0,输入3, 5,则输出5. 0。

#include <stdio. h>
#include <Windows. h>
mainO
(
float a [10], *p=a, x, sum=0;
int m, n, i ;
printf (〃输入10 个数:\n〃);
for(i=0;i<10;i++)
scanf (飞f”, p+i);
printf ("输入m, n: \n");
scanf &m, &n);
if(n<10)
{for(i=m;i<=n;i++)
sum+=*(p+i);}
x=sum/(n-m+1);
if(n>=10)
{for(i=m;i<10;i++)
sum+=*(p+i) ;}
x=sum/(9-m+l);
printf (,z%g\n z/, x);
system("pause");。

相关文档
最新文档