1.从键盘上输入若干个学生成绩(百分制整数),直到输入-1结束,求平均分并保留一位小数输出。
分析:定义score存储学生成绩,由题意知为整型数,范围0-100。
定义平均分ave,因为需要小数输出,定义为float型。
#include "stdio.h"
main()
{
int score,i=0;
float sum=0,ave;
printf("\nPlease input scores(end of -1):\n");
do
{
scanf("%d",&score);
if(score>=0 && score<=100)
{ sum+=score;
i++;
}
}while(score!=-1);
ave=sum/i;
printf("\nAverage of %d students is %.1f",i,ave);
}
2.从键盘上输入若干个学生成绩(百分制,含一位小数),直到输入负数结束。
统计优(90分及以上)、良(80-89)、中(70-79)、及格(60-69)人数。
分析:定义score存储学生成绩,由题意知数组为float型,范围0-100。
定义int型变量:excellent,good,middle,pass存储各级人数。
#include "stdio.h"
main()
{
float score;
int excellent,good,middle,pass;
int i=0;
excellent=good=middle=pass=0;
printf("\nPlease input scores:(负数结束)\n");
do
{
scanf("%f",&score);
if(score>=60 && score<=69) pass++;
else if(score>=70 && score<=79) middle++;
else if(score>=80 && score<=89) good++;
else if(score>=90 && score<=100) excellent++;
}while(score>=0);
printf("\nexcellent=%d,good=%d,middle=%d,pass=%d",excellent,good,middle,pass);
}
3.从键盘上输入若干字符,直到输入'#'结束。统计英文字母、数字、空格、其他字符的个数并输出。
分析:整型变量letter,number,space,other存个数。
#include "stdio.h"
main()
{
char c;
int letter,number,space,other;
letter=number=space=other=0;
printf("\nPlease input some characters:(end of '#')\n");
while((c=getchar())!='#')
{ if(c>='a' && c<='z') letter++;
else if(c>='A' && c<='Z') letter++;
else if(c>='0' && c<='9') number++;
else if(c==' ') space++;
else other++;
}
printf("\nletter=%d,number=%d,space=%d,other=%d\n",letter,number,space,other);
}
4.从键盘输入任意自然数N(N>10),要求:1)筛选出3-N之间的素数;2)输出素数,每个数占6宽度,左对齐。
#include "stdio.h"
#include "math.h"
main()
{ int N,i,k,sqr,flag=1;
printf("\nN=");
scanf("%d",&N);
while(N<=10)
{ printf("ERROR,input again:");
scanf("%d",&N);
}
for(k=3;k<=N;k++)
{ sqr=sqrt(N);
for(i=2;i<=sqr;i++)
if(k%i==0)
{ flag=0;
break;
}
if(flag==1)
printf("%-6d",k);
flag=1;
}
}
5.有一个分数系列:2/1,3/2,5/3,8/5,13/8,21/13,...从键盘输入自然数N(N>1),计算该数列的前N项和。
分析:此系列的分子和分母均为斐波那契数列,可设一个整型数组a[M]存该数列:
a[0]=a[1]=1,a[i]=a[i-1]+a[i-2],再设实型数组b[M]存分数:b[i]=a[i+1]/(float)a[i]。
#include "stdio.h"
#define M 100
main()
{ int N,i,a[M];
float b[M],sum=0;
printf("\nN=");
scanf("%d",&N);
a[0]=a[1]=1;
for(i=1;i<=N;i++)
{ a[i+1]=a[i]+a[i-1];
b[i]=a[i+1]/(float)a[i];
sum+=b[i];
}
printf("sum=%.2f",sum);
}
6.输入3×3的行列式(整数构成),找出其中的最大值以及它所在的行标和列标。
#include "stdio.h"
main()
{ int a[3][3],i,j,max,l,c;
printf("\na[3][3]=\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
max=a[0][0];l=0;c=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(max<a[i][j])
{ max=a[i][j];
l=i;
c=j;
}
printf("MAX: a[%d][%d]=%d",l,c,max);
}
7.输入3×3的行列式(整数构成),找出其中的最小值以及它所在的行标和列标。
#include "stdio.h"
main()
{ int a[3][3],i,j,min,l,c;
printf("\na[3][3]=\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
min=a[0][0];l=0;c=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(min>a[i][j])
{ min=a[i][j];
l=i;
c=j;
}
printf("MIN: a[%d][%d]=%d",l,c,min);
}
8.从键盘输入本班同学的程序设计课程分数保存在数组中(人数不超过45人,分数为整数),找出最高分及其所在的下标,并输出。
#include "stdio.h"
#define N 45
main()
{ int s[N],k,i;
printf("\nInput scores:");
k=0;
for(i=0;i<N;i++)
{ scanf("%d",&s[i]);
if(s[k]<s[i])
k=i;
}
printf("The highest score is s[%d]=%d",k,s[k]);
}
9.从键盘输入5组(每组3个)浮点数作为三条边的长度,若它们能够构成三角形,则计算出三角形的面积,否则给出"不能构成三角形"的提示。
分析:三边构成三角形的条件是:两边之和大于第三边,并且两边之差小于第三边。
#include "stdio.h"
#include "math.h"
main()
{ float a[5][3],s,area[5];
int i,j;
for(i=0;i<5;i++)
{ printf("\nNo.%d:",i);
for(j=0;j<3;j++)
scanf("%f",&a[i][j]);
if((a[i][0]+a[i][1]>a[i][2]) && (a[i][0]+a[i][2]>a[i][1])
&& (a[i][1]+a[i][2]>a[i][0]) && abs(a[i][0]-a[i][1])<a[i][2]
&& abs(a[i][0]-a[i][2])<a[i][1] && abs(a[i][1]-a[i][2])<a[i][0])
{ s=(a[i][0]+a[i][1]+a[i][2])/2;
area[i]=sqrt(s*(s-a[i][0])*(s-a[i][1])*(s-a[i][2]));
printf("AREA[%d]=%f",i,area[i]);
}
else printf("Can't been a triangle!");
}
}
10.从键盘输入本班同学的程序设计课程分数保存在数组中(人数不超过45人,分数为整数),
将百分制成绩转换成等级'A'-'E'('A'90及以上,'B'80分数段,'C'70分数段,'D'60分数段,
'E'不及格),并输出成绩及其对应的等级数据。
#include "stdio.h"
#define N 45
main()
{ int s[N],i;
char grade[N];
printf("\nScores:");
for(i=0;i<N;i++)
{ scanf("%d",&s[i]);
if(s[i]>=90 && s[i]<=100) grade[i]='A';
else if(s[i]>=80 && s[i]<=89) grade[i]='B';
else if(s[i]>=70 && s[i]<=79) grade[i]='C';
else if(s[i]>=60 && s[i]<=69) grade[i]='D';
else if(s[i]>=0 && s[i]<=59) grade[i]='E';
else grade[i]='w'; /*wrong score*/
}
for(i=0;i<N;i++)
{ if(i%5==0) printf("\n");
printf("%4d:%c",s[i],grade[i]);
}
}
11.计算1-1/2+1/3-1/4+...+1/99-1/100的前N项的值,N从键盘输入,N大于1,小于100。
分析:第i项为:1/i,加减号交替出现,可以用flag存+1和-1来决定加减。
注意i需要转换为float型计算,否则结果不正确?
N为题目给定的数,所以一般不自行改名。?
这里没有讨论N的取值范围,可自行添加。
#include "stdio.h"
main()
{ int N,i,flag=1;
float sum=0;
printf("\nN=");
scanf("%d",&N);
for(i=1;i<=N;i++)
{ sum+=flag/(float)i;
flag=-flag;
}
printf("Sum=%.2f",sum);
}
12./*从键盘输入一个字符串存入数组s[80],统计该字符串的长度并将其中所有小写字母
改为大写字母,然后再将结果输出。
#include "stdio.h"
main()
{ char s[80];
int len,i;
printf("\nInput a string:");
gets(s);
len=0;
i=0;
while(s[i]!='\0')
{ if(s[i]>='a' && s[i]<='z')
s[i]-=32;
len++;
i++;
}
printf("String:%s,length:%d",s,len);
}