实验2 数据类型和标准输入与输出
(1)编写程序,输入摄氏温度,转换为华氏温度。转换公式如下:
华氏度 = 32 + 摄氏度 × 1.8
#include "stdio.h"
void main()
{ int s;
double h;
printf("请输入摄氏度");
scanf("%d",&s);
h=32+s*1.8;
printf("%lf",h);
}
(2)编写一个程序,输入大写字符,转换成对应的小写后输出。
#include "stdio.h"
void main()
{ char a,b;
printf("请输入一个大写字母");
scanf("%c",&b);
a=b+32;
printf("%c",a);
}
升级版:
#include "stdio.h"
void main()
{ char a,b;
printf("请输入一个大写字母");
scanf("%c",&b);
if(b>'Z')
printf("请重新输入");
else
a=b+32;
printf("%c",a);}
升级版:
#include "stdio.h"
void main()
{
char a,b1;
printf("请输入一个字母");
scanf("%c",&b1);
if('a'<=b1&&b1<='z');
a=b1-32;
if('A'<=b1&&b1<='Z')
a=b1+32;
printf("%c",a);
}
(3)输入一元二次方程的三个系数,计算该方程的根。
/* Note:Your choice is C IDE */
#include "stdio.h"
#include<math.h>
void main()
{
double a,b,x1,x2,d,c;
printf("请输入一元二次方程的三个系数a,b,c");
scanf("%lf,%lf,%lf",&a,&b,&c);
d=b*b-4*a*c;
x1=(-b+sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
printf("第一个根是%lf,第二个根是%lf",x1,x2);
}
加强版:
#include "stdio.h"
#include<math.h>
void main()
{
double a,b,x1,x2,d,c;
printf("请输入一元二次方程的三个系数a,b,c\n");
scanf("%lf,%lf,%lf",&a,&b,&c);
d=b*b-4*a*c;
if(d<0)
printf("你输入的方程没有根");
else
{ x1=(-b+sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
printf("第一个根是%lf,第二个根是%lf",x1,x2) ;}
}
(4)请编一程序,用赋初值的方法使c1、c2、c3、c4、c5 五个变量的值分别
为’c’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5 分别变为’G’、’l’、’m’、’r’、’e’,并输出,分析是否符合要求。
源代码:
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
char c1,c2,c3,c4,c5;
c1='c';
c2='h';
c3='i';
c4='n';
c5='a';
printf("%c%c%c%c%c" ,c1,c2,c3,c4,c5);
c1=c1-28;
c2=c2-28;
c3=c3+4;
c4=c4+4;
c5=c5+4;
printf("%c\n",c1);
printf("%c\n",c2);
printf("%c\n",c3);
printf("%c\n",c4);
printf("%c\n",c5);
}
3、编程判断从键盘上输入的正整数是否既是5又是7的倍数,若是,则输出yes,否则输出no
#include "stdio.h"
void main()
{
int a,b;
printf("请输入一个正整数");
scanf("%d",&a);
if(a%5==0&&a%7==0)
printf("yes");
else
printf("no");
}
4、输入一个年份,判断是否是闰年?
闰年的条件
能被4整除,但不能被100整除。
能被4整除,又能被400整除
#include
void main()
{
int a;
printf("请输入一个年份");
scanf("%d",&a);
if((a%4==0&&a%100!=0)||(a%4==0&&a%400==0))
printf("是闰年");
else
printf("不是闰年");
}
5、编写一个程序,从键盘输入三个数a,b,c,编程输出最大的数和最小的数。
#include
void main()
{
int a,b,c,max;
printf("请输入三个数字");
scanf("%d%d%d",&a,&b,&c);
max=(a>b?a:b);
max=(max>c?max:c);
printf("%d",max);
用?表达式计算四级成绩是否通过,大于425分则输出通过,否则输出不通过。
源代码:
#include
void main()
{
int a;
printf("请输入四级成绩");
scanf("%d",&a);
printf("%s",a>425?"通过":"不通过");
}
2、用?表达式对输入的一个字母进行判断,如果是大写则转换为小写,如果是小写则转换为大写输出。
#include "stdio.h"
void main()
{
char a,b;
printf("请输入一个字母");
scanf("%c",&a);
if(64<a&&a<123)
{b=(a<97?a+32:a-32);
printf("%c",b);}
else
printf("请重新输入");
}
3、从键盘上输入x的值,按下式计算y的值。(要求用两种if结构实现,一种是串行if结构,无论什么数都必须比较三次;一种是多分枝if结构,可以减少比较次数)
#include "stdio.h"
void main()
{
double x,y;
printf("请输入一个x");
scanf("%lf",&x);
if(x<1)
y=x;
if(1<=x&&x<10);
y=2*x-1;
if(x>=10)
y=3*x-11;
printf("%lf",y);
}
第二种结构
#include "stdio.h"
void main()
{
double x,y;
printf("请输入一个x");
scanf("%lf",&x);
if(x<1)
y=x;
else if(1<=x&&x<10)
y=2*x-1;
else if(x>=10)
y=3*x-11;
printf("%lf",y);
}
4、编写程序,给出一个百分制成绩,要求输出相应的等级A、B、C、D、E。90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。(要求用多分枝if结构实现)
#include "stdio.h"
void main()
{
int x;
char y;
printf("请输入你的成绩");
scanf("%d",&x);
if(x>90)
y='A';
if(x>80&&x<90)
y='B';
if(x>70&&x<80)
y='C';
if(x>60&&x<70)
y='D';
if(x<60)
y='E';
printf("你的成绩是%c",y);
5、输入三个数,如果能构成三角形,则输出三角形的类型(钝角、锐角、直角),否则输出不能构成三角形。
#include "stdio.h"
void main()
{
double a,b,c;
printf("请输入三角形的三个边");
scanf("%lf%lf%lf",&a,&b,&c);
if(a>b+c||b>a+c||c>a+c)
printf("不是三角形");
else if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==b*b+a*a)
printf("是直角三角形");
else if(a*a>b*b+c*c||b*b>a*a+c*c||c*c>b*b+c*c)
printf("是钝角三角形");
else if(a*a<b*b+c*c||b*b<a*a+c*c||c*c<b*b+c*c)
printf("是锐角三角形");
}
6、输入三个数a,b,c,要求按由小到大的顺序输出。
#include "stdio.h"
void main()
{
int a,b,c,t;
printf("请输入三个数");
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
t=a;
a=b;
b=t;
}
if(a>c)
{t=a;
a=c;
c=t;}
if(b>c)
{t=b;
b=c;
c=t;}
printf("%d %d %d",a,b,c);
1、运输公司对用户计算运费。
路程(s)越远,每公里运费越低。标准如下:
s<250km 没有折扣
250≤s<500 2%折扣
500≤s<1000 5%折扣
1000≤s<2000 8%折扣
2000≤s<3000 10%折扣
3000≤s 15%折扣
设每公里每吨货物的基本运费为p,货物重为w,距离为s,
折扣为d,则总运费f的计算公式为:
f=p*w*s*(1-d)
要求分别用if else if多分支选择结构和switch多分支结构实现。
#include "stdio.h"
void main()
{
int p,w,s;
double f;
printf("请由此输入基本运费为p,货物重为w,距离为s");
scanf("%d %d %d", &p,&w,&s);
if(s<250)
f=p*w*s;
else if(s<500)
f=p*w*s*(1-0.02);
else if(s<1000)
f=p*w*s*(1-0.05);
else if(s<2000)
f=p*w*s*(1-0.08);
else if(s<3000)
f=p*w*s*(1-0.10);
else if(s>3000)
f=p*w*s*(1-0.15);
printf("%f",f);
}
方法2
#include "stdio.h"
void main()
{
double p,w,d,f;
int s;
scanf("%lf%lf%d",&p,&w,&s);
switch(s/250)
{
case 0:d=0;break;
case 1:d=0.02;break;
case 2:
case 3:d=0.05;break;
case 4:
case 5:
case 6:
case 7:d=0.08;break;
case 8:
case 9:
case 10:
case 11:d=0.1;break;
default:d=0.15;
}
f=p*w*s*(1-d);
printf("总运费=%f",f);
}
2、编写程序,判断一个学生成绩的R 优、良、中、差R : 假如从键盘输入的字母是’ A’ ,
输出评语”You are Excellent!”; 如果输入 ‘B’ ,输出评语”You are well!” ; 如
果输入’ C’ ,输出评语”You are passing!” ; 如果输入‘ D’ ,输出评语“You are notpassing!“ 。 如果输入的不是这四个字母,则出现提示“Input error!” 请编写一个程序,实现该判断功能。要求必须使用switch-case 结构实现。
#include "stdio.h"
void main()
{
char a;
int b;
printf("请输入你成绩的等级");
scanf("%c",&a);
switch(a)
{ case 'A':
printf("You are Excellent!");
break;
case 'B':
printf("You are well!");
break;
case 'C':
printf("You are passing!");
break;
case 'D':
printf("You are notpassing!");
break;
default:
printf("Input error!");
break;
}
}
3、编写一个简单计算器程序,输入格式为:data1 op data2。其中data1
和data2 是参加运算的两个数,op 为运算符,它的取值只能是+、-、*、/。要求必须使用switch-case 语句实现。
4、用while 完成计算自然数1-N之间的和。要求N从键盘输入,并输出结果。
#include "stdio.h"
void main()
{ double s=0;
int n,i=0;
printf("请输入一个整数");
scanf("%d",&n);
while(i<=n)
{s=i+s;
i++;}
printf("%f",s);
}
实验6-7 循环结构程序设计
1、分别用while,do while 和for完成计算n!。要求N从键盘输入,并输出结果。
#include "stdio.h"
void main()
{ double s=1;
int n,i=1;
printf("请输入一个整数");
scanf("%d",&n);
while(i<=n)
{s=i*s;
i++;}
printf("%f",s);
}
2、输入一个正整数n,统计不大于n值的所有偶数的和。(要求必须用do while实现)
#include "stdio.h"
void main()
{
int n,i=1;
double s=0;
printf("请输入一个正整数");
scanf("%d",&n);
do
{ s=2*i+s;
i=i+2;
}
while(2*i<=n);
printf("偶数项和%lf",s);
}
3、计算 s=1-1/3 + 1/5- 1/7+…1/(2n-1) 的值并输出,(必须使用do while实现)
#include "stdio.h"
void main()
{
int n,i=1,t=1;
double s=0;
printf("请输入一个正整数");
scanf("%d",&n);
do
{
s=t*(1.0/i)+s;
t=-1;
i=i+2;
}
while(i<=(2*n-1));
printf("和为%lf",s);
}
4、从键盘输入10个实型数,求其倒数的和并输出。
#include "stdio.h"
void main()
{
int i;
double s=0,a;
printf("请输入10个正整数");
for(i=0;i<10;i++)
{
scanf("%lf",&a);
s=1/a+s;
}
printf("和为%lf",s);
}
5、编写程序,求S=1/(1*2)+1/(2*3)+1/(3*4)+…前50 项之和。要求必须
使用for 语句实现。
#include "stdio.h"
void main()
{
int i;
double s=0;
for(i=1;i<=50;i++)
{
s=(1.0)/(i*(i+1))+s;
}
printf("S=1/(1*2)+1/(2*3)+1/(3*4)+…前50 项之和为%f",s);
}
6、输入10 个整数,统计同时能被3 和7 整除的个数,结果存放在变量nCount
中,将nCount 输出。要求必须使用do-while 语句实现。
do While源码:
#include "stdio.h"
void main()
{
int i=1,nCount=0,n;
printf("请输入10个整数");
do
{
scanf("%d",&n);
if(n%3==0&&n%7==0) nCount=nCount+1;
i++;
}
while(i<=10);
printf("能被3和7整除的个数是%d",nCount);
}
1、打印出所有的“水仙花数”,所谓“水仙花数”是指一个3 位数,其各位数字立方和等于该数本身。例如:153 是一水仙花数,因为153=1^3+5^3+3^3.
#include "stdio.h"
void main()
{
int i,g,s,b,n=0;
for(i=100;i<999;i++)
{ b=i/100;
s=i/10-(10*b);
g=i-100*b-10*s;
if(i==b*b*b+s*s*s+g*g*g)
{ n=n+1;
printf("水仙花数是%d\n",i);}
}
}
2、 从键盘任意输入一个整数,判断它是否为素数。
#include "stdio.h"
void main()
{
int i,n,k=0;
printf("请输入一个整数");
scanf("%d",&n);
for(i=2;i<n;i++)
{ if(n%i==0)
k=k+1;}
{if(k!=0)
printf("%d不是素数",n);
else
printf("%d是素数",n);}
}
方法2;
#include "stdio.h"
void main()
{
int i,m;
scanf("%d",&m);
for(i=2;i
{
if(m%i==0)
break;
}
if(i==m)
printf("是素数");
else printf("不是素数");
}
3、用循环结构程序设计方法,输出一个九九乘法表.
源码:#include "stdio.h"
void main()
{
int i,j,s;
for(i=1;i<9;i++)
{
for(j=1;j<9;j++)
{
s=i*j;
printf("%d*%d=%d ",i,j,s);
}
printf("%d*%d=%d\n",i,j,s);}
}
4、从键盘输入10 个整数,统计其中正数、负数和零的个数,并在屏幕上依次输出。要求必须使用while 语句。
#include "stdio.h"
void main()
{
int i=1,j=0,s=0,n=0,m;
while(i<=10)
{
scanf("%d",&m);
if(m>0) j=j+1;
else if(m<0) s=s+1;
else n=n+1;
i++;
}
printf("%d,%d,%d",j,s,n);
}
5、编程求1+(1+2)+..+(1+2+..+n),n 的值由键盘输入。要求使用for 语句实现
源码:
#include "stdio.h"
void main()
{
int i,s,t,n;
s=0;t=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s=s+i;
t=t+s;
}
printf("%d",t);
}
实验8-9 数组的应用(一)
1、从键盘输入10 学生的成绩至数组中,将最低分和最高分的成绩输出,并输出所有成绩。
源码:
#include "stdio.h"
void main()
{
int i,n[10],max,min;
printf("请输入10个整数");
for(i=0;i<10;i++)
scanf("%d",&n[i]);
max=n[0];min=n[0];
for(i=0;i<10;i++)
if(max<n[i]) max=n[i];
if(min>n[i]) min=n[i];
for(i=0;i<10;i++)
{
printf("n[%d]=%d\n",i,n[i]);
}
printf("max=%d,min=%d\n",max,min);
}
2、定义含有300 个元素的数组x,x[i]=10* tan ((3.0+I*I)/ 5) (i=0,1,2..299),计算该一维数组的平均值,并求出此数组中大于平均值的数据之和,最后输出此数组的平均值及大于平均值的数据之和。
#include "stdio.h"
#include "math.h"
void main()
{
int i;
double s,n,a,x[300];
for(i=0;i<300;i++)
{x[i]=10*tan((3.0+i*i)/5);}
s=0;
for(i=0;i<300;i++)
{
s=s+x[i];
a=s/300;
}
n=0;
for(i=0;i<300;i++)
{if(x[i]>a)
n=n+x[i];
}
printf("a=%f,n=%f",a,n);
}
3、定义含有300 个元素的数组y,y[i]=10* cos ((3.0+i*i) / 5) (i=0,1,2,…,299),计算一维数组的最大值及其所在位置(即下标),并输出此数组的最大值及其所在位置。
#include "stdio.h"
#include "math.h"
void main()
{
int i,max_i;
double y[300],max;
for(i=0;i<300;i++)
{y[i]=10*cos((3.0+i*i)/5);}/*由于数据类型原因3必须写成3.0*/
max=0;
for(i=0;i<300;i++)
{
if(max<y[i])
max=y[i];
max_i=i;
}
printf("max=%d",max);
printf("max_i=%d",max_i);
}
4、编写程序求出555555 的约数中最大的三位数是多少。要求必须使用do-while 语句实现。
源码:
#include "stdio.h"
#include "math.h"
void main()
{
int n=555555,i=999;
do
{
if(n%i==0)break;
else i--;
}
while(i>=100);
printf("555555的最大三位数的公约数是i=%d",i);
}}
5、输入一个正整数,要求以相反的顺序输出该数。例如输入12345,输出54321。注:1 不得使用数组;2 必须使用while 语句实现。
#include "stdio.h"
void main()
{
int n,k;
printf("请输入整数");
scanf("%d",&n);
while(n)
{
k=n%10;
printf("%d",k);
n=n/10;
}
}
1、从键盘输入10个整数,用起泡法进行排序。
源码:
#include "stdio.h"
void main()
{
int a[10],i,j,t;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf("\n");
}
2、有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。 二维数组如下:
4 4 34 5
37 3 12 6
5 6 5 7
源码:
#include "stdio.h"
void main()
{
int max,i,j,im,jm;
int a[3][4]={{4,4,34,5},{37,3,12,6},{5,6,5,7}};
max=a[0][0];
im=0;
jm=0;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
{
if(max<a[i][j])
{
max=a[i][j];
im=i;
jm=j;
}
}
printf("max=%d,im=%d,jm=%d",max,im,jm);
}
3、将一个二维数组行和列元素互换,存到另一个二维数组中并输出这两个矩阵。
原始矩阵如下:
1 4 5 6
3 2 7 8
7 9 0 3
源码:
#include "stdio.h"
void main()
{
int a[3][4]={{1,4,5,6},{3,2,7,8},{7,9,0,3}};
int i,j,b[4][3];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
b[j][i]=a[i][j];
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%d ",b[j][i]);
printf("\n");}
}
4、从键盘输入一个整数,把转换得到的二进制位存放在一维数组中并输出。
源码:
#include "stdio.h"
void main()
{
int n,i,j,a[100],t;
scanf("%d",&n);
t=n;
i=0;
while(t)
{
a[i]=t%2;
t=t/2;
i++;
}
for(j=i-1;j>=0;j--)
{
printf("%d",a[j]);
}
}
5、把200以内的所有素数存放到一维数组中并输出。
源码:
#include "stdio.h"
void main()
{
int i,m,j,k;
int a[200];
k=0;
for(m=199;m>1;m--)
{ for(i=2;i
{
if(m%i==0) break;
}
if(i>=m)
a[k++]=m;
}
for(j=k-1;j>=0;j--)
printf("%d ",a[j]);
}
1、从键盘输入长方形的长和宽,计算长方形的面积并输出用*表示的长方形图形。要求面积计算和图形输出分别用函数实现。
源码:
/* Note:Your choice is C IDE */
#include "stdio.h"
int mianji(int w,int l) //此处的int与return有关,需要携带一个整数返回
{ //形参的作用相当于定制式客户提供的尺寸等信息
int area; //函数体内部可以自由使用形参
area=w*l;
return area;
}
//函数的定义只是一个静态功能,此时不会做任何工作,具体使用要看调用者的函数调用
void printstar(int w,int l)
{
//void表示函数执行完毕不需要带任何结果回来,不能出现在等号后面,只能单独一条调用语句
int i,j;
for(i=1;i<=w;i++)
{ for(j=1;j<=l;j++)
{printf("*");}
printf("\n");
}
}
void main()
{int len,wid,area;
scanf("%d%d",&wid,&len);
//mianji(wid,len);
//函数名(实参1,实参2)的方式使用函数,就叫函数调用,此时形参分配空间;
//实参的值拷贝给形参;执行函数体语句;最后用return携带结果返回。
area=mianji(wid,len);
//把return返回的结果赋值给area变量。只要函数有返回结果,它可以当作表达式来使用,
//可以出现在等号后面任何相容的表达式中。
printf("area=%d",area);
printf("\n");
printstar(wid,len);//单独一条调用语句,void函数的标准使用格式
}
2、从键盘输入长方体的长和宽和高,计算长方体的表面积和体积,并在main函数中输出。要求面积计算和体积计算分别用函数实现。
源码:
#include "stdio.h"
int bmj(int w,int l,int h) //此处的int与return有关,需要携带一个整数返回
{ //形参的作用相当于定制式客户提供的尺寸等信息
int area; //函数体内部可以自由使用形参
area=(w*l+w*h+l*h)*2;
return area;
}
int tj(int w,int l,int h)
{//形参中的每个变量要分别进行类型定义
int tj=w*l*h;
return tj;
}
void main()
{int len,wid,high,area,vol;
scanf("%d%d%d",&wid,&len,&high);
area=bmj(wid,len,high);
vol=tj(wid,len,high);
printf("area=%d,vol=%d",area,vol);
}
3、编写一个具有两个整形形参的函数max,返回较大值。在main函数中接受从键盘输入的两个整数,输出较大者。
源码:
#include "stdio.h"
int maxli(int x,int y)
{ int max;
if(x>y)
max=x;
else
max=y;
return max;
}
void main()
{
int max=1,a,b;
printf("请输入两个整数");
scanf("%d%d",&a,&b);
max=maxli(a,b);
printf("最大数为%d",max);
}
4、编写一个无参且无返回值的函数,用来打印出所有的“水仙花数”,在、main函数中调用该函数。
所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如:153是一水仙花数,因为153=1^3+5^3+3^3.
源码:#include "stdio.h"
void shuixian()
{
int i,g,s,b,n=0;
for(i=100;i<999;i++)
{ b=i/100;
s=i/10-(10*b);
g=i-100*b-10*s;
if(i==b*b*b+s*s*s+g*g*g)
{ n=n+1;
printf("水仙花数是%d\n",i);}
}
}
void main()
{
shuixian();
}
5、通过调用自定义函数来完成求圆柱体的体积(v=3.14*r2*h),要求圆柱体的高和底半径在主函数中做输入,圆柱体的体积在主函数中做输出。
源码:
#include "stdio.h"
double yuanzhutiji(int r,int h)
{
double v;
v=3.14*r*r*h;
return v;
}
void main()
{ int r,h;
double v;
printf("请输入圆柱体的半径和高");
scanf("%d%d",&r,&h);
v=yuanzhutiji(r,h);
printf("圆柱的体积是%f",v);
}
6、通过函数调用求华氏温度,要求在主函数中输入摄氏温度,在主函数中输出华氏温度。(公式f=5/9*c+32)
源码:
#include "stdio.h"
double huashidu(int c)
{
double h;
h=32+c*1.8;
return h;
}
void main()
{ int c;
double h;
printf("请输入摄氏度");
scanf("%d",&c);
h=huashidu(c);
printf("%d摄氏度变成华氏度是%f",c,h);
}
4、有两个数组a和b,各有10个元素,将它们对应地逐个相比(即a[0]与b[0]比,a[1]与b[1]比……)。如果a数组中的元素大于b数组中的相应元素的数目多于b数组中元素大于a数组中相应元素的数目(例如,a[i]>b[i]6次,b[i]>a[i]3次,其中i每次为不同的值),则认为a数组大于b数组,并分别统计出两个数组相应元素大于、等于、小于的次数。 要求用函数实现比较并返回结果。
源码:
#include "stdio.h"
int great(int a,int b)
{
int f;
if(a>b) f=1;
else if(a==b) f=0;
else f=-1;
return f;
}
void main()
{
int a[10],b[10],i,j=0,k=0,m=0;
printf("请输入第一个数组10个元素\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("请输入第二个数组10个元素\n");
for(i=0;i<10;i++)
scanf("%d",&b[i]);
for(i=0;i<10;i++)
{
if(great(a[i],b[i])==1) j++;
else if(great(a[i],b[i])==0) k++;
else if(great(a[i],b[i])==-1) m++;
}
printf("a[i]大于b[i]的元素为%d\n",j);
printf("a[i]等于b[i]的元素为%d\n",k);
printf("a[i]小于b[i]的元素为%d\n",m);
if(j>m) printf("数组a大于数组b");
else printf("数组b大于数组a");
}
界面截图:
5、用选择法对数组中10个整数按由小到大排序。要求主函数输入10个元素存入数组,调用排序函数实现数组元素的排序。
源码:
#include
void main()
{
int s[10];
for (i=0;i<10;i++)
scanf("%d",&s[i]);
printf("函数调用前数组元素值");
for(i=0;i<10;i++)
printf("%d,s[i]");
sort(s);
printf("函数调用后数组元素值");
for (i=0;i<10;i++)
printf("%d,s[i]");
}
void sort(int a[10] )
{int i,j,t,b;
for(i=0;i<9;i++)
{b=i;
for(j=i+1;j<10;j++)
{if(a[n]>a[j])b=j;}}
t=a[i];
a[i]=a[b];
a[b]=t;
}
1、编一函数,统计一维整数组小于数组元素平均值的元素的个数;主函数定义x[50],x[i]=600*cos(i*0.35), 调用函数,输出小于数组元素平均值的元素的个数。
(注:此程序不允许使用全局变量,不允许在avernum函数中输出)
源码:
#include "stdio.h"
#include "math.h"
void main()
{int avernum(double a[],int n);
double x[50];
int i,num;
for(i=0;i<50;i++)
x[i]=600*cos(i*0.35);
num=avernum(x,50);
printf("小于平均值元素的个数为%d",num);
}
int avernum(double a[],int n)
{int i,count;
double sum,ave; sum=0;
for(i=0;i
count=0;ave=sum/n;
for(i=0;i
{ if(a[i]
}
return count;}
2、求一维整型数组中的最小元素。 要求:主函数定义数组y[50],y[j]=600*sin(j*0.16) (j=0,1,2……49),调用自定义函数qmin求出最小元素,最后在主函数中输出结果。
源码:
#include "stdio.h"
#include "math.h"
void main()
{
double qmin(double a[],int n);
double y[50],min;
int j;
for(j=0;j<50;j++)
y[j]=600*sin(j*0.16);
min=qmin(y,50);
printf("最小值为%f",min);
}
double qmin(double a[],int n)
{int i;
double min;
min=a[0];
for(i=0;i
{ if(min>a[i]) min=a[i];
}
return min;}
3、求一维整型数组中正数的和。 要求:主函数定义数组a[10],从键盘输入十个数,调用自定义函数求出正数的和,然后在主函数中输出结果
源码:
#include "stdio.h"
#include "math.h"
void main()
{
double qsum(double a[],int n);
double a[10],sum;
int j;
for(j=0;j<10;j++)
scanf("%lf",&a[j]);
sum=qsum(a,10);
printf("正整数之和是%f",sum);
}
double qsum(double a[],int n)
{ int i;
double sum;
sum=0;
for(i=0;i
{ if(a[i]>0) sum+=a[i];
}
return sum;
}
4、编写程序求下式的值:S=2^1*1!+2^2*2!+……+2^n*n!(n<10)(^表示乘方),要求不使用数学函数而采用如下方法:先编写两个函数分别求解2^n 和n!,再编写求解S的函数,求解过程中调用前两个函数。最后在主函数中输入n,调用求解S的函数完成任务。
源码:
5、编程验证歌德巴赫猜想:一个大于等于4的偶数都是两个素数之和,要求用函数实现(选作)
源码:
界面截图:
6、用户从键盘输入一个1—99999之间的数,编写一个函数判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、3223都是回文数。。(选作)
源码:
1、编一通用函数avermax,计算含有n个数据的一维数组的平均值,并求出此数组中大于平均值的数据之和;主函数中定义含有300个元素的数组x,x[I]=10* cos ((3.0+I*I) / 5) (I=0,1,2……299),调用上述函数,输出此数组的平均值及大于平均值的数据之和。(注:此程序不允许使用全局变量,不允许在avermax函数中输出)
源码:
#include
#include
double avermax(double a[],int n,double *m)
{
int i;
double s,aver;
aver=0;
for(i=0;i
{aver=aver+a[i];}
aver=aver/n;
s=0;
for(i=0;i
{
if(a[i]>aver)
s+=a[i];
}
*m=s;
return aver;
}
void main()
{
double x[300],s,a;
int i;
for(i=0;i<300;i++)
x[i]=10*cos((3.0+i*i)/5);
a=avermax(x,300,&s);
printf("平均值是%f\n",a);
printf("大于平均值的和是%f",s);
}
界面截图:
2、编一通用函数avernum,计算含有n个数据的一维数组的平均值,并统计此数组中大于平均值的数据的个数; 主函数中定义含有100个元素的数组x,x[I]=200*cos(I*0.875)(I=0,1,2……99),调用上述函数,输出此数组的平均值及大于平均值的数据的个数。 (注:此程序不允许使用全局变量,不允许在avernum函数中输出)
源码:
#include
#include
double avernum(double a[],int n,double *m)
{
int i;
double s,aver;
aver=0;
for(i=0;i
{aver=aver+a[i];}
aver=aver/n;
s=0;
for(i=0;i
{
if(a[i]>aver)
s=s+1;
}
*m=s;
return aver;
}
void main()
{
double x[100],s,a;
int i;
for(i=0;i<100;i++)
x[i]=200*cos(i*0.875);
a=avernum(x,100,&s);
printf("平均值是%f\n",a);
printf("大于平均值的和是%f",s);
}
界面截图:
3、编一通用函数maxsub,求出含有n个数据的一维数组的最大值及其所在位置(即下标);主函数中定义含有300个元素的数组x,x[I]=10* cos ((3.0+I*I) / 5) (I=0,1,2……299),调用上述函数,输出此数组的最大值及其所在位置。(注:此程序不允许使用全局变量,不允许在avermax函数中输出)
源码:
#include
#include
double maxsub(double a[],int n,double *m)
{
int i,t,max=a[0];
for(i=0;i
{
if(a[i]>max)
{max=a[i];
t=i;}
}
*m=t;
return max;
}
void main()
{
double x[300],s,a;
int i;
for(i=0;i<300;i++)
x[i]=10*cos((3.0+i*i)/5);
a=maxsub(x,300,&s);
printf("最大值%f\n",a);
printf("位置%f",s);
}
界面截图:
4、编写函数,实现任何整形数组元素的逆置。在主函数调用该函数,完成10个数组元素的逆置。
源码:#include "stdio.h"
void inverse(int a[],int n)
{
int i,j,m,t;
j=n-1;
m=(n-1)/2;
for(i=0;i<=m;i++,j--)
{
t=a[i];
a[i]=a[j];
a[j]=t
};
}
void main()
{
int b[10];
int *q,i;
q=b;
for(i=0;i<10;i++)
scanf("%d",(q+i));
inverse(b,10);
for(i=0;i<10;i++)
printf("%d ",*(q+i));
}
界面截图:
5、编写程序求下式的值:S=2^1*1!+2^2*2!+……+2^n*n!(n<10)(^表示乘方),要求不使用数学函数而采用如下方法:先编写两个函数分别求解2^n 和n!,再编写求解S的函数,求解过程中调用前两个函数。最后在主函数中输入n,调用求解S的函数完成任务。
源码:
#include "stdio.h"
int nj(int n)
{
int i=1,s=1;
while(i<=n)
{
s=s*i;
i++;
}
return s;
}
int nf(int n)
{
int i,s=1;
for(i=1;i<=n;i++)
{s=s*2;}
return s;
}
void main()
{
int i,s=0,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{s=s+nj(i)*nf(i);}
printf("s=%d",s);
}
界面截图:
1、复制下面的程序并运行,观察程序运行的结果,并分析原因(注意程序第2行中有些单引号之间是空格)。
/* c8-1.c 字符数组的输出*/
#include "stdio.h"
void main( )
{ char a[10]={ ’I’, ’ ’, ’a’, ’m’, ’ ’, ’a’, ’ ’, ’b’, ’o’, ’y’};
printf("%s\n",a);
}
将字符数组a的大小改为11,再运行程序,并将结果与修改前的结果进行比较,分析原因。
界面截图:
结果不一致的原因:%s只针对字符串有效,以’\0’结束的串或字符数组
2、用gets函数从键盘接收一行字符串,自定义函数strlength计算字符串的长度。
源码:
#include
#include
int strlength(char t[]);
void main()
{
char s[80];
int len;
gets(s);
len=strlength(s);
printf("len=%d",len);
}
int strlength(char t[])
{
int i;
i=0;
while(t[i]!='\0')
{i++;}
return i;
} 界面截图:
调用字符串库函数完成同样的功能。
源码:
#include
#include
void main()
{
char s[80];
int len;
gets(s);
len=strleng(s);
printf("len=%d",len);
}
界面截图:
3、按照要求编写程序:有一行文字,不超过80个字符,分别统计出其中英文大写字母、小写字母、数字、空格、及其它字符的个数。
源码:
#include
#include
void count(char *t);
void main()
{
char s[80];
gets(s);
count(s);
}
void count(char *t)
{
int u,l,b,d,q ;
u=l=b=d=q=0;
while(*t!='\0')
{
if(*t>='A'&&*t<='Z') u++;
else if(*t>='a'&&*t<='z') l++;
else if(*t>='0'&&*t<='9') d++;
else if(*t==' ') b++;
else q++;
t++;
}
printf("大写字母个数是%d\n", u );
printf("小写字母个数是%d\n",l);
printf("数字个数是%d\n", d);
printf("空格个数是%d\n", b);
printf("其他个数是%d\n",q);}
4、自己定义一个函数strconnect,实现字符串的连接。在主函数中进行测试。
源码:
#include
#include
void stringcopy(char *s,char *t);
void main()
{
char s[80],t[40];
gets(s);
gets(t);
stringcopy(s,t);
printf("链接后的字符串为%s",s);
}
void stringcopy(char *s,char *t)
{
while(*s++!='\0');
s--;
while(*t='/0')
*s++=*t++;
*s='\0';
}
5、编写一个函数,把字符串的所有小写字符转换成大写字符。并在主函数中测试。
源码:
界面截图:
6、自己定义一个函数stringcopy,实现字符串的复制。在主函数中进行测试。
源码:
界面截图:
调用字符串库函数完成同样的功能。
源码:
界面截图:
1、用结构体数组建立一张班级成绩单,包括每个学生的姓名、英语、数学、语文三门课程的成绩。用函数编程实现下列功能:
(1) 输入每个学生的各项信息。
函数源码:
#include
#include
typedef struct grade
{char name[20];
int yw;
int sx;
int yy;
} student;
void input(student s[],int n)
{
int i;
for(i=0;i
{ printf("please input name");
scanf("%s",s[i].name);
printf("please input yw");
scanf("%d",&s[i].yw);
printf("please input sx");
scanf("%d",&s[i].sx);
printf("please input yy");
scanf("%d",&s[i].yy);
printf("\n");
}
}
void print(student s[],int n)
{ int i;
printf("\t姓名\t语文\t数学\t英语\n");
for(i=0;i
printf("\t%s\t%d\t%d\t%d\n",s[i].name,s[i].yw,s[i].sx,s[i].yy);
}
void main()
{
student stu[5];
int i;
input (stu,5);
print(stu,5);
界面截图:
(2) 输出每个学生的各项信息。
函数源码:
界面截图:
(3) 修改指定学生的指定数据项的内容。
函数源码:
界面截图:
(4) 统计每个同学的平均成绩(保留2位小数)。
函数源码:
界面截图:
(5) 输出各位同学的学号、姓名、三门课程的总成绩和平均成绩。
函数源码:
界面截图:
本文来源:https://www.2haoxitong.net/k/doc/3f36618449649b6649d7470d.html
文档为doc格式