113道C语言题目
1.輸入兩個正整數,m和n,求其最大公約數和最小公倍數。
#include<stdio.h>
void main()
{
int hcf(int,int);??????
int lcd(int,int,int);??
int u,v,h,l;
printf("Please input two numbers:\n");
scanf("%d,%d",&u,&v);
h=hcf(u,v);
printf("H.C.F=%d\n",h);
l=lcd(u,v,h);
printf("L.C.D=%d\n",l);
}
int hcf(int u,int v)
{
int t,r;
if(v>u)
{t=u;u=v;v=t;}
while((r=u%v)!=0)
{u=v;v=r;}
return(v);
}
int lcd(int u,int v,int h)
{
return(u*v/h);
}
2.輸入一行字符,分別統計出其中字母、空格、數字和其他字符的個數。
#include<stdio.h>
int letter,digit,space,others;
void main()
{
void count(char[]);
char text[80];
printf("Please input string:\n");
gets(text);
printf("string:\n");
puts(text);
letter=0;
digit=0;
space=0;
others=0;
count(text);
printf("letter:%d,digit:%d,space:%d,others:%d\n",letter,digit,space,others);
}
void count(char str[])
{
int i;
for(i=0;str!='\0';i++)
??if((str>='a'&&str<='z')||(str>='A'&&str<='Z'))
?? letter++;
??else if(str>='0'&&str<='9')
?? digit++;
??else if(str==32)
?? space++;
??else
?? others++;
}
3.輸入一個正整數求出它是幾位數;輸出原數和位數。
#include<stdio.h>
int digit;
void main()
{
void count(char[]);
char text[80];
printf("Please input numbers:\n");
gets(text);
printf("Numbers:\n");
puts(text);
digit=0;
count(text);
printf("digit:%d\n",digit);
}
void count(char str[])
{
int i;
for(i=0;str!='\0';i++)
?? if(str>='0'&&str<='9')
?? digit++;
}
4.輸入一個正整數,輸出原數并逆序打印出各位數字。
#include<stdio.h>
void invertLongInt(long);
void main()
{
unsigned long iNumber;
printf("Please input a number:\n");
scanf("%ld",&iNumber);
printf("The input number is:%ld\n",iNumber);
printf("The inverse number is:");
invertLongInt(iNumber);
}
void invertLongInt(long x)
{
if(x>=0&&x<=9)
??printf("%d\n",x);
else
{
??printf("%d",x);
??invertLongInt(x/10);
}
}
5.從鍵盤上輸入若干學生的一門課成績,統計并輸出最高成績和最低成績及相應的序號,當輸入負數時結束輸入。
6.從鍵盤上輸入若干學生的一門課成績,計算出平均分,當輸入負數時結束輸入。將結果輸出。
7.求1!+2!+3!+……+20!,將結果輸出。
#include<stdio.h>
void main()
{
float s=0,t=1;
int n;
for(n=1;n<=20;n++)
{
??t=t*n;
??s=s+t;
}
printf("1!+2!+3!+……+20!=%e\n",s);
}
8.打印以下圖案:?????? *
??????????????????????***
???????????????????? *****
????????????????????*******
#include<stdio.h>
void main()
{
int i,j;
printf("The picture is:\n");
static char picture[4][7]={{' ',' ',' ','*'},
{' ',' ','*','*','*'},{' ',' *','*','*','*','*'},{'*','*','*','*','*','*','*'}};
for(i=0;i<=3;i++)
{
??for(j=0;j<=6;j++)
???? printf("%c",picture[j]);
??printf("\n");
}
}
9.打印以下圖案:????
*
**
***
****
#include<stdio.h>
void main()
{
int i,j;
printf("The picture is:\n");
????char picture[4][4]={{'*'},
{'*','*'},{' *','*','*'},{'*','*','*','*'}};
for(i=0;i<=3;i++)
{
??for(j=0;j<=3;j++)
???? printf("%c",picture[j]);
??printf("\n");
}
}
10.求下列試子的值:1-1/2+1/3-1/4+……+1/99-1/100,將結果輸出。
#include<stdio.h>
void main()
{
float sum=1.0,t,s=1;
int i;
for(i=1;i<=100;i++)
{
??t=s/i;
??sum=sum+t;
??s=-s;
}
printf("1-1/2+1/3-1/4+……+1/99-1/100=%5.4f\n",sum);
}
11.打印出100~999之間的所有水仙花數。
#include<stdio.h>
void main()
{
int i,j,k,n;
printf("100~999之間的所有水仙花數 are:\n");
for(n=100;n<1000;n++)
{
??i=n/100;
??j=n/10-i*10;
??k=n;
??if(n==i*i*i+j*j*j+k*k*k)
?? printf("%d??",n);
}
printf("\n");
}
12.求Sn=a+aa+aaa+…+aa…a之值,n,a由鍵盤輸入。
#include<stdio.h>
void main()
{
int a,n,i=1,sn=0,tn=0;
printf("a,n=:");
scanf("%d,%d",&a,&n);
while(i<=n)
{
??tn=tn+a;
??sn=sn+tn;
??a=a*10;
??++i;
}
printf("a+aa+aaa+…+aa…a=%d\n",sn);
}
13.打印以下圖案:
??*******
?? *******
????*******
???? *******
#include<stdio.h>
void main()
{
char a[7]={'*','*','*','*','*','*','*'};
int i,j,k;
char space=' ';
printf("The picture is:");
for(i=0;i<4;i++)
{
??printf("\n");
??printf("????");
??for(j=1;j<=i;j++)
?? printf("%c",space);
??for(k=0;k<7;k++)
?? printf("%c",a[k]);
}
printf("\n");
}
14.打印以下圖案:
??????1
???? 121
????12321
?? 1234321
15. 打印以下圖案:
?? 1234321
????12321
???? 121
??????1
16.編寫一個統計學生成績程序,完成以下功能:輸入4個學生的2門課成績;求出全班的總平均分,將結果輸出。
#include<stdio.h>
#define N 4
struct student
{
char num[3];
char name[4];
float score[2];
float avr;
}
stu[N];
void main()
{
int i,j;
float sum,average;
for(i=0;i<N;i++)????????????
{
??printf("input scores of student%d:\n",i+1);
??printf("name:");
??scanf("%s",stu.name);
??for(j=0;j<2;j++)
??{
?? printf("score %d:",j+1);
?? scanf("%f",&stu.score[j]);
??}
}
average=0;??????????????
for(i=0;i<N;i++)
{
??sum=0;
??for(j=0;j<2;j++)
?? sum+=stu.score[j];
??stu.avr=sum/2;
??average+=stu.avr;
}
average/=N;
printf("?? Name????score1?? score2?? average\n");
for(i=0;i<N;i++)
{
??printf("%5ss",stu.num,stu.name);
??for(j=0;j<2;j++)
?? printf("%9.2f",stu.score[j]);
??printf("?? %8.2f\n",stu.avr);
}
printf("average=%5.2f\n",average);
}
17. 打印以下圖案:
????*****
???? *****
??????*****
?????? *****
????????*****
#include<stdio.h>
void main()
{
char a[5]={'*','*','*','*','*'};
int i,j,k;
char space=' ';
printf("The picture is:");
for(i=0;i<5;i++)
{
??printf("\n");
??printf("????");
??for(j=1;j<=i;j++)
?? printf("%c",space);
??for(k=0;k<5;k++)
?? printf("%c",a[k]);
}
printf("\n");
}
18.給出年、月、日,計算該日是該年的第幾天。
#include<stdio.h>
void main()
{
int sum_day(int,int);
int leap(int year);
int year,month,day,days;
printf("input date(year,month,day):");
scanf("%d,%d,%d",&year,&month,&day);
printf("%d/%d/%d",year,month,day);
days=sum_day(month,day);
if(leap(year)&&month>=3)
??days=days+1;
printf("is the %dth day in this year.\n",days);
}
int sum_day(int month,int day)
{
int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
for(i=1;i<month;i++)
??day+=day_tab;
return(day);
}
int leap(int year)
{
int leap;
leap=year%4==0&&year0!=0||year@0==0;
return(leap);
}
19.求一個3*3的整型矩陣對角線元素之和。將原矩陣和求出的和輸出。
#include<stdio.h>
void main()
{
float a[3][3],sum=0;
int i,j;
printf("請輸入元素:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%f",&a[j]);
for(i=0;i<3;i++)
sum=sum+a;
printf("對角線之和是:%6.2f\n",sum);
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
??printf("%5.2f",a[j]);
printf("\n");
}
}
20.求一個4*3的矩陣各行元素的平均值;將原矩陣和求出的平均值全部輸出。
#include<stdio.h>
void main()??
{??
int a[4][3],s[4],i,j,k;??
for(i=0;i<4;i++)??
??for(j=0;j<3;j++)
?? scanf("%d",*(a+i)+j);
??
??for(i=0;i<4;i++)
??{
?? k=0;
?? for(j=0;j<3;j++)
????k+=a[j];
?? printf("第%d行的平均值是%d",i+1,k);
?? printf("\n");
??}
}
21.求一個3*4的矩陣各列元素的平均值;將原矩陣和求出的平均值全部輸出。
#include<stdio.h>
void main()??
{??
int a[4][3],s[4],i,j,k;??
for(i=0;i<4;i++)??
??for(j=0;j<3;j++)
?? scanf("%d",*(a+i)+j);
??
??for(i=0;i<4;i++)
??{
?? k=0;
?? for(j=0;j<3;j++)
????k+=a[j];
?? printf("第%d行的平均值是%d",i+1,k);
?? printf("\n");
??}
}
22.求一個3*5的矩陣各列元素的最大值,將原矩陣和求出的最大值全部輸出。
#include<stdio.h>
void main()??
{??
int a[3][5],s[3],i,j,k;??
for(i=0;i<3;i++)??
for(j=0;j<5;j++)
??scanf("%d",*(a+i)+j);??
??
for(i=0;i<3;i++)??
{ *(s+i)= *(*(a+j));??
for(j=1;j<5;j++)??
if(*(s+i) < *(*(a+i)+j))??
*(s+i)= *(*(a+i)+j);??
}??
??
for(i=0;i<3;i++)??
{
??printf("Line=%d Max=%d",j,s[j] );??
printf("\n");??
}??
}
23.求一個4*3的矩陣各行元素的最大值,將原矩陣和求出的最大值全部輸出。
#include<stdio.h>
void main()??
{??
int a[4][3],s[4],i,j,k;??
for(i=0;i<4;i++)??
for(j=0;j<3;j++)
??scanf("%d",*(a+i)+j);??
??
for(i=0;i<4;i++)??
{ *(s+i)= *(*(a+i));??
for(j=1;j<3;j++)??
if(*(s+i) < *(*(a+i)+j))??
*(s+i)= *(*(a+i)+j);??
}??
??
for(i=0;i<4;i++)??
{
??printf("Row=%d Max=%d",i,s );??
printf("\n");??
}??
}
24.求一個M*N的矩陣中元素的最大值,將原矩陣和求出的最大值全部輸出。
#include<stdio.h>??
#define N 10
#define M 10
void main()??
{??
int a [N],i,j,k ,max,m,n;??
????scanf("%d %d",&m,&n);
????for(i=0;i<m;i++)??
??for(j=0;j<n;j++)
?? scanf("%d",*(a+i)+j);
??for(i=0;i<m;i++)??
??{
?? for(j=0;j<n-1;j++)
?? {
????if(a[j]<=a[j+1])
???? max=a[j+1];
????else
???? max=a[j];
?? }
?? k=max;
??}
??for(i=0;i<m-1;i++)
??{
?? if(k<=k)
????max=k;
?? else
????max=k;
??}
??printf("%d",max);
}
25.判斷一個N*N的矩陣是否為對稱矩陣,將原矩陣輸出,判斷結果輸出。
#include<stdio.h>??
#define N 10
void main()??
{??
int a[N][N],i,j,k,n;
????scanf("%d",&n);
????for(i=0;i<n;i++)??
??for(j=0;j<n;j++)
?? scanf("%d",&a[j]);
??for(i=0;i<n;i++)??
??{
?? for(j=i+1;j<n;j++)
?? {
????if(a[j]==a[j])
???? k=1;
????else
???? k=0;
?? }
??}
??if(k=0)
?? printf("bushi");
??else
?? printf("shi\n");
??for(i=0;i<n;i++)??
?? for(j=0;j<n;j++)
????printf("%d",a[j]);
}
26.有一篇文章,有三行文字,每行有80個字符。要求統計出其中英文大寫字母、消協字母、數字、空格以及其他字符的個數。
#include<stdio.h>
void main()
{
int i,j,big=0,sma=0,num=0,spa=0,oth=0;
char text[3][80];
for(i=0;i<3;i++)
{
??printf("請輸入行%d:\n",i+1);
??gets(text);
??for(j=0;j<80&&text[j]!='\0';j++)
??{
?? if(text[j]>='A'&&text[j]<='Z')
????big++;
?? else if(text[j]>='a'&&text[j]<='z')
????sma++;
?? else if(text[j]>='0'&&text[j]<='9')
????num++;
?? else if(text[j]==' ')
????spa++;
?? else
????oth++;
??}
}
printf("大寫字母:%d\n",big);
printf("小寫字母:%d\n",sma);
printf("數字:%d\n",num);
printf("空格:%d\n",spa);
printf("其它:%d\n",oth);
}
27.將20個整數放到一維數組中,輸出該數組的最大值和最小值。
#include<stdio.h>
void main()
{
int i,j,min,max,a[21];
printf("請輸入數據:\n");
for(i=1;i<=20;i++)
{
??printf("a[%d]=",i);
??scanf("%d",&a);
}
for(i=1;i<=19;i++)
{
??min=i;
??for(j=2;j<=19;j++)
?? if(a >a[j]);
?? a =a[j];
}
for(i=1;i<=19;i++)
{
??max=i;
??for(j=2;j<=19;j++)
?? if(a <a[j]);
?? a =a[j];
}
printf("最大數為:%d\n",a );
printf("最小數為:%d\n",a );
}
28.將15個整數放到一維數組中,輸出該數組中的最大值它的下標,然后將它和數組中的最前面的元素對換。
#include<stdio.h>
void main()
{
int i,j,min,max,a[16],m,n;
printf("請輸入數據:\n");
for(i=1;i<=15;i++)
{
??printf("a[%d]=",i);
??scanf("%d",&a);
}
for(i=1;i<=14;i++)
{
??max=i;
??for(j=2;j<=14;j++)
?? if(a <a[j]);
?? a =a[j];
????????????m=I,n=j
}
printf("最大數下標為:%d,%d\n",m,n);
}
29.將字符數組str1種下標為偶數的元素賦給另一字符數組str2,并輸出str1和str2。
#include<stdio.h>??
#include<string.h>
#define N 10
void main()??
{??
int i,n;
char str1[N],str2[N];
???? gets(str1);
??for(n=0;n<N;n++)
??{
??i=2*n;
??str2[n]=str1;
??}
???? puts(str1);
??puts(str2);
}
30.編寫一個程序,將兩個字符串連接起來,不要使用strcat函數。
#include<stdio.h>
void main()
{
char str1[20],str2[20];
int i=0,j=0;
printf("請輸入字符串1:\n");
scanf("%s",str1);
printf("請輸入字符串2:\n");
scanf("%s",str2);
while (str1!='\0')
??i++;
while (str2[j]!='\0')
??str1=str2[j++];
str1='\0';
printf("合并之后的字符串為:%s\n",str1);
}
31.編寫一個程序,將字符數組a中的全部字符復制到字符數組b中。不要使用strcpy函數。
#include<stdio.h>
#include<string.h>
void main()
{
char a[40],b[40];
int i;
printf("請輸入a:\n");
scanf("%s",a);
for(i=0;i<=strlen(a);i++)
??b=a;
printf("b:%s\n",b);
}
32.編寫一個程序,找出3個字符串中的最大者,將它輸出。
#include<stdio.h>
#include<string.h>
void main()
{
char string[20];
char str[3][20];
int i;
for(i=0;i<3;i++)
??gets (str);
if(strcmp(str[0],str[1])>0)
??strcpy(string,str[0]);
else
??strcpy(string,str[1]);
if(strcmp(str[2],string)>0)
??strcpy(string,str[2]);
printf("最大的字符串是:\n%s\n",string);
}
33.編寫程序,輸入任意一個1~7之間的整數,將他們轉換成對應的英文單詞。例如:1轉換成Monday,7轉換成Sunday。
#include<stdio.h>
void main()
{
int a;
printf("輸入一個整數:\n");
scanf("%d",&a);
if(a==1) printf("Monday\n");
else if(a==2) printf("Tuesday\n");
else if(a==3) printf("Wendesday\n");
else if(a==4) printf("Thursday\n");
else if(a==5) printf("Friday\n");
else if(a==6) printf("Saturday\n");
else if(a==7) printf("Sunday\n");
else printf("錯誤\n");
}
34.編寫程序,輸入兩個整數,和+、-、*、/之中的任意一個運算符,輸出計算結果。
#include<stdio.h>
void main()
{
float a,b;
char c;
????????printf("請輸入一個運算符:\n");
scanf("%c",&c);
printf("請輸入兩個整數:\n");
scanf("%d,%d",&a,&b);
switch(c)
{
?? case'+':printf("%f\n",a+b);break;
?? case'-':printf("%f\n",a-b);break;
?? case'*':printf("%f\n",a*b);break;
?? case'/':printf("%f\n",a/b);break;
?? default:printf("錯誤");
????}
}
35.輸入年號,計算這一年的2月份的天數,將結果輸出。
#include<stdio.h>
void main()
{
int year,leap;
printf("請輸入年份:\n");
scanf("%d",&year);
if(year%4==0)
{
??if(year0==0)
??{
?? if(year@0==0)
????leap=1;
?? else
????leap=0;
??}
??else
?? leap=1;
}
else
??leap=0;
if(leap)
??printf("%d年的2月有29天",year);
else
??printf("%d年的2月有28天",year);
}
36.輸入三角形的三邊a,b,c,判斷a,b,c,能否構成三角形,若能,計算面積。
#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c,area;
double s;
printf("Please enter three sides of a triangle:\n");
scanf("%f,%f,%f",&a,&b,&c);
s=(a+b+c)/2.0;
area=sqrt(s*(s-a)*(s-b)*(s-c));
if(a+b<c||b+c<a||a+c<b)
??printf("They can't form a triangle.\n");
else
???? printf("The area of the triangle is:%f\n",area);
}
#include<stdio.h>??
#define N 10
#define M 10
void main()??
{????
int?? i,j,k,m,n,flag1,flag2,a[N] ,max,maxj;
printf("輸入行數n[n<10]:");
scanf("%d",&n);
printf("輸入列數m :");??
scanf("%d",&m);??
for(i=0;i<n;i++)
{??
????????printf("第%d行\n",i+1);??
??for(j=0;j<m;j++)??
????????scanf("%d",&a[j]);??
}??
37. 輸入三角形的三邊a,b,c,判斷a,b,c,能否構成三角形,何種類型的三角形:等腰、等邊、直角、等腰直角、一般。
#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c;
printf("請輸入三角形邊長:\n");
scanf("%f%f%f",&a,&b,&c);
if((a-b>=c)||(b-c>=a)||(c-a>=b)) printf("不能夠成三角形\n");
else if ((a*a+b*b==c*c)||(b*b+c*c==a*a)||(c*c+a*a==b*b))
??if ((a==b)||(b==c)||(c==a)) printf("等腰直角三角形\n");
??else printf("直角三角形\n");
else if ((a==b)&&(b==c)) printf("等邊三角形\n");
else if ((a==b)&&(b!=c)||(c==b)&&(b!=a)||(a==c)&&(c!=a)) printf("等腰三角形\n");
else printf("一般三角形\n");
}
38.輸入獎金數a,計算并輸出稅率、應繳稅款和實得獎金數。(用if語句編程)
#include<stdio.h>
void main()
{
int a;
float r,t,s;
printf("請輸入獎金數:\n");
scanf("%d",&a);
if (a<500) r=0.00;
else if (a<1000) r=0.05;
else if (a<2000) r=0.08;
else if (a<2000) r=0.10;
else r=0.15;
t=a*r;
s=a-t;
printf("稅率:%7.2f\n",r);
printf("稅款:%7.2f\n",t);
printf("實得獎金:%7.2f\n",s);
}
39.輸入獎金數a,計算并輸出稅率、應繳稅款和實得獎金數。(用switch語句編程)
#include<stdio.h>
void main()
{
int a,e;
float r,t,s;
printf("請輸入獎金數:\n");
scanf("%d",&a);
e=a/500;
switch(e)
{case 0:r=0.00;break;
case 1:r=0.05;break;
case 2:
case 3:r=0.08;break;
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:r=0.10;break;
default:r=0.15;break;
}
t=a*r;
s=a-t;
printf("稅率:%7.2f\n",r);
printf("稅款:%7.2f\n",t);
printf("實得獎金:%7.2f\n",s);
}
40.輸入學生的成績,利用計算機將學生的成績劃分出等級并輸出:
?? 90~100:A級;??80~89:B級;??70~79:C級;??60~69:D級;??0~59:E級;
#include<stdio.h>
void main()
{
float m;
printf("輸入學生成績:\n");
scanf("%f",&m);
if ((m>100)||(m<0)) printf("數據有誤\n");
else if (m>=90) printf("A級\n");
else if (m>=80) printf("B級\n");
else if (m>=70) printf("C級\n");
else if (m>=60) printf("D級\n");
else printf("E級\n");
}
41.編程序,求方程aX2+bX+c=0的解;輸入a,b,c.
#include <stdio.h>
#include <math.h>
void main()
{
float a,b,c,t;
double x1,x2;
printf("請由高次到低次順序輸入系數:\n");
scanf("%f%f%f",&a,&b,&c);
t=b*b-4*a*c;
if (t<0) printf("方程無實根\n");
if (t==0)
{
??x1=-(b/2/a);
??printf("方程有兩個相等實根,x1=x2=%5.2f\n",x1);
};
if (t>0)
{
??x1=-(b+sqrt(t))/2/a;
??x2=-(b-sqrt(t))/2/a;
??printf("方程有兩個不等實根,x1=%5.2f,x2=%5.2f\n",x1,x2);
}
}
42.編程序,輸入4個整數,按由小到大的順序輸出。
#include <stdio.h>
#define N 4
void main()
{
int a[N],t,i,j;
printf("輸入四個整數:\n");
for (i=0;i<N;i++)
??scanf("%d",&a);
printf("\n");
for (i=0;i<N-1;i++)
{
??for (j=0;j<N-i-1;j++)
?? if (a[j]>a[j+1])
?? {
????t=a[j];
????a[j]=a[j+1];
????a[j+1]=t;
?? }
}
printf("排序后:\n");
for (i=0;i<N;i++)
??printf("%d\n",a);
}
43.求滿足1+2+3+…+n<500中最大的N,并求其和,編寫程序實現。
#include <stdio.h>
void main()
{
int n=0,sum=0;
while(sum<500)
{
??++n;
??sum+=n;
}
printf("N??:%d\n",n-1);
printf("1+2+3+4+......+%d<500\n",n-1);
}
44.把100~200之間的不能被3整除的數輸出。
#include <stdio.h>
void main()
{
int a;
for (a=100;a<=200;a++)
??if (a%3!=0) printf("%d\t",a);
}
45.求Fibonacci數列前40個數,每行輸出5個,將40個Fibonacci數輸出。
#include <stdio.h>
long f(int);
void main()
{
int n,i=0;
for (n=1;n<41;n++)
{
??printf ("%ld\t",f(n));
??i++;
??if (i%5==0) printf("\n");
}
}
long f(int m)
{
if (m==0)
??return 0;
if (m==1)
??return 1;
else
??return f(m-1)+f(m-2);
}
46.按以下規律翻譯密碼:
??將每一個字母變成它后面的字母,例如,將A變成B,B變成C,…,Z變成A,非字母字符不變,“!”作為電文結束標志。
#include <stdio.h>
void main()
{
char ch;
printf("輸入字符串:\n");
while ((ch=getchar())!='!')
{
??if ((ch>='a' && ch<='z')||(ch>='A' && ch<='Z'))
?? if (ch=='z') ch='a';
?? else if (ch=='Z') ch='A';
?? else ch=ch+1;
????????printf("%c",ch);
}
printf("\n");
}
47.百元買百雞問題:公雞每只5元,母雞每只3元,小雞3只一元,問一百元買一百只雞有幾種買法。
#include <stdio.h>
void main()
{
int a,b,c,n=0;
for (a=0;a<=20;a++)
??for (b=0;b<=33;b++)
?? for (c=0;c<=100;c++)
????if (5*a+3*b+c==100) n++;
????printf("一共有%d種\n",n);
}
48.使用數組編程,計算出前20項fibonacci數列,要求一行打印5個數。
#include <stdio.h>
long f(int);
void main()
{
int n,i=0;
for (n=1;n<21;n++)
{
??printf ("%ld\t",f(n));
??i++;
??if (i%5==0) printf("\n");
}
}
long f(int m)
{
if (m==0)
??return 0;
if (m==1)
??return 1;
else
??return f(m-1)+f(m-2);
}
49.編程序求出兩個3*4矩陣的和并將原矩陣和求出的和矩陣按原矩陣的形式分別輸出。
#include <stdio.h>
void main()
{
int a[3][4],b[3][4],s[3][4],n,m;
printf("輸入數組A:\n");
for (n=0;n<3;n++)
{
??printf("第%d行\n",n+1);
??for (m=0;m<4;m++)
????scanf ("%d",&a[n] );
}
printf("輸入數組B:\n");
for (n=0;n<3;n++)
{
??printf("第%d行\n",n+1);
??for (m=0;m<4;m++)
?? scanf ("%d",&b[n] );
}
for (n=0;n<3;n++)
{
??for (m=0;m<4;m++)
?? s[n] =a[n] +b[n] ;
}
printf("原數組A:\n");
for (n=0;n<3;n++)
{
??for (m=0;m<4;m++)
?? printf("]",a[n] );
??printf("\n");
}
printf("\n");
printf("原數組B:\n");
for (n=0;n<3;n++)
{
??for (m=0;m<4;m++)
?? printf("]",b[n] );
??printf("\n");
}
printf("\n");
printf("所得數組:\n");
for (n=0;n<3;n++)
{
??for (m=0;m<4;m++)
?? printf("]",s[n] );
??printf("\n");
}
}
50.將一個4*3的矩陣轉置,并將原矩陣和求出的轉置矩陣按原矩陣的形式分別輸出。
#include <stdio.h>
void main()
{
int a[4][3],b[4][3],s[4][3],n,m;
printf("輸入數組A:\n");
for (n=0;n<4;n++)
{
??printf("第%d行\n",n+1);
??for (m=0;m<3;m++)
????scanf ("%d",&a[n] );
}
printf("輸入數組B:\n");
for (n=0;n<4;n++)
{
??printf("第%d行\n",n+1);
??for (m=0;m<3;m++)
?? scanf ("%d",&b[n] );
}
for (n=0;n<4;n++)
{
??for (m=0;m<3;m++)
?? s[n] =a[n] +b[n] ;
}
printf("原數組A:\n");
for (n=0;n<4;n++)
{
??for (m=0;m<3;m++)
?? printf("]",a[n] );
??printf("\n");
}
printf("\n");
printf("原數組B:\n");
for (n=0;n<4;n++)
{
??for (m=0;m<3;m++)
?? printf("]",b[n] );
??printf("\n");
}
printf("\n");
printf("所得數組:\n");
for (n=0;n<4;n++)
{
??for (m=0;m<3;m++)
?? printf("]",s[n] );
??printf("\n");
}
}
51.輸入一個字符,如果它是一個大寫字母,則把它變成小寫字母;如果它是小寫字母,則把它變成大寫字母;其它字符不變,請編程。
#include <stdio.h>
void main()
{
char ch;
ch=getchar();
if ((ch>=65)&&(ch<=90)) ch=ch+32;
else if ((ch>=97)&&(ch<=122)) ch=ch-32;
printf("%c\n",ch);
}
52.已知x和y存在下列對應關系,要求對輸入的每個x值,計算出y值,請編程。
?? y=x*(x+2),2<x<=10;?? y=2x, -1<x<=2;??y=x-1, x<=-1.
#include <stdio.h>
void main()
{
float x,y;
printf("輸入X值:");
scanf("%f",&x);
if (x<=-1)
{
??y=x-1;
??printf ("Y=%6.2f\n",y);
}
else if (x<=2)
{
??y=2*x;
??printf ("Y=%6.2f\n",y);
}
else if (x<=10)
{
??y=x*(x+2);
??printf ("Y=%6.2f\n",y);
}
else printf("取值范圍出錯\n");
}
53.已知x和y存在下列對應關系,要求對輸入的每個x值,計算出y值,請編程。
?? y=0,x=a||x=-a;??y=sqrt(a*a-x*x), -a<x<a;??y=x,x<-a||x>a.
#include <stdio.h>
#include <math.h>
void main()
{
float x,y,a;
printf("輸入A值[A>0]:");
scanf("%f",&a);
printf("輸入X值:");
scanf("%f",&x);
if ((x==a)||(x==-a)) y=0;
else if ((x<a)&&(x>-a)) y=sqrt(a*a-x*x);
else if ((x<-a)||(x>a)) y=x;
printf ("Y=%6.2f\n",y);
}
54.編程判斷對輸入的任何一個年份是否是閏年,將結果輸出。
#include <stdio.h>
void main()
{
int n;
printf("輸入年份:");
scanf("%d",&n);
if (n%4==0&&n0!=0||n@0==0) printf("閏年\n");
else printf ("不是閏年\n");
}
55.請編制程序要求輸入整數a和b,若a*a+b*b大于100,則輸出a*a+b*b百位以上的數字,否則輸出兩數之和。
#include <stdio.h>
void main ()
{
int a,b,c,d;
printf("請輸入兩個整數:\n");
scanf("%d,%d",&a,&b);
printf("你輸入的兩個數為:%d,%d\n",a,b);
c=a*a+b*b;
if(c>=100)
{
??d=c/100;
??printf("a*a+b*b的百位以上的數為:%d\n",d);
}
else
??printf("a*a+b*b=%d/n",c);
}
56.請編制程序判斷輸入的正整數是否既是5又是7的整倍數。若是,則輸出yes;否則輸出no.
#include <stdio.h>
void main()
{
int a;
printf("請輸入要驗證的數:\n");
scanf("%d",&a);
if(a%5==0&&a%7==0)
??printf("Yes\n");
else
??printf("No\n");
}
57.編程實現:計算1到100之間的奇數之和及偶數之和。
#include <stdio.h>
void main ()
{
int n,even=0,odd=0;
for(n=1;n<=50;n++)
{
??even+=2*n;
??odd+=2*n-1;
}
printf("1到100間的偶數的和為%d:\n",even);
printf("1到100間的奇數的和為%d:\n",odd);
}
58.請編程實現:求100個任意整數的累加和。
59.請編程實現:求1到100之間所有能被3整除,但不能被5整除的數的和。
60.請編程實現:輸入任意正整數n,計算n!并將結果輸出,輸出結果中沒有小數部分。
61.請編程實現:計算1至50中是7的倍數的數值之和。
62.請編程實現:對任意100個整數,統計0的個數及正數的累加和。
#include <stdio.h>
#define N 100
void main ()
{
int a,sum=0,i,frequency=0;
int s[N];
printf("請輸入數據:\n");
for(i=0;i<N;i++)
??scanf("%d",&s);
printf("\n原始數據為:\n");
for(i=0;i<N;i++)
??printf("%d\n",s);
for(i=0;i<N;i++)
{
??if(s==0)
?? frequency+=1;
??if(s>0)
??{
?? a=s;
?? sum+=a;
??}
}
printf("這些數中0的個數為%d\n",frequency);
printf("這些數中所有正數的和為%d\n",sum);
}
63.請編程實現:輸入兩個整數,判斷它們之間的關系(=,<,>等),并清楚地將比較結果輸出。
64.請編程實現:輸入幾個整數,判斷其中偶數的個數,并輸出結果(要求:數據的個數及原始數據由鍵盤輸入)。
#include <stdio.h>
#define N 20
void enter (int a[], int n)
{
int i;
printf("請輸入數據:\n");
for (i=0;i<n;i++)
??scanf("%d",&a);
printf("\n原始數據為:\n");
for (i=0;i<n;i++)
??printf("%d",a);
printf("\n");
}
void main()
{
void enter (int [], int );
int i;
????????int a[N],n;
????????printf("\n輸入你所要的數組元素個數:\n");
scanf("%d",&n);
????????enter (a,n);
for(i=0;i<n;i++)
{
??if (a%2==0)
???? printf ("其中的偶數是%d\n",a);
????
}
}
65.請編程實現:輸入幾個整數,判斷其中奇數的個數,并輸出奇數的累加和。(要求:數據的個數及原始數據由鍵盤輸入)
#include <stdio.h>
#define N 20
void enter (int a[], int n)
{
int i;
printf("請輸入數據:\n");
for (i=0;i<n;i++)
??scanf("%d",&a);
printf("\n原始數據為:\n");
for (i=0;i<n;i++)
??printf("-",a);
printf("\n");
}
void main()
{
void enter (int [], int );
int i;
????????int a[N],n,sum=0;
????????printf("\n輸入你所要的數組元素個數:\n");
scanf("%d",&n);
????????enter (a,n);
for(i=0;i<n;i++)
{
??if (a%2==1)
??{printf ("其中的奇數是%d\n",a);
??sum=sum+a;}
????????
????
}printf ("奇數和是%d\n",sum);
????
}
66.有一個兩位數XY,X是十位,Y是個位;給出X+Y的值和X*Y的值;編程實現讓用戶猜測這個兩位數十多少?根據猜測給出不同的提示。
#include <stdio.h>
void main()
{
printf ("x+y=2\n");
printf("x*y=1\n");
????printf("請輸入你所猜得數字\n");
int a;
scanf("%d", &a);
for (;a!=11;)
{printf("you are not right\n");
scanf("%d", &a);}
??
??printf ("you are right\n");
}
67.鍵盤輸入的一個兩位數XY,X是十位,Y是個位;請編程計算X+Y的值和X*Y的值。
#include <stdio.h>
void main ()
{
????????printf ("請輸入一個兩位數\n");
????????int a,x,y;
????????scanf ("%d",&a);
????????x=a/10;
????????y=a;
????????printf ("x+y=%d\n",x+y);
????????printf("x*y=%d\n"x*y);
}
68.用for循環語句計算1到20的和,并將結果輸出。
#include <stdio.h>
void main()
{
int i=1,sum=0;
for (;i<=20;)
{
??sum=sum+i;
??i++;
}
printf("1到20的和是%d\n",sum);
}
69.從鍵盤輸入一行字符,統計出輸入的字符個數(注:不要使用strlun函數編程)。
#include <stdio.h>
void main()
{?? int alphabet=0,i=0;
char str[100];
printf ("請輸入一個字符串\n");
gets(str);
for (i=0;str!='\0';i++)
??++alphabet;
printf ("有%d個字母\n",alphabet);
}
70.編程實現:任意輸入10個數,計算所有正數的和,負數的和以及10個數的和。
#include <stdio.h>
void main()
{?? int i;
float a[10];
printf("請輸入任意十個數\n");
for (i=0;i<10;i++)
{
printf("a[%d]=",i);
scanf("%f",&a);
}
printf("\n");
printf("\n原始數據為:\n");
for (i=0;i<10;i++)
printf("?",a);
float sum1=0, sum2=0, sum3=0;
for (i=0;i<10;i++)
{if (a>0) sum1=sum1+a;
else?? sum2=sum2+a;
sum3=sum1+sum2;}
printf("正數的和是%f",sum1);
printf("負數的和是%f",sum2);
printf("總和是%f",sum3);
}
71.編程實現:求任意20個數中的正數之和及正數的個數,并將結果輸出。
#include <stdio.h>
void main()
{?? int i;
float a[20];
printf("請輸入任意二十個數\n");
for (i=0;i<20;i++)
{
printf("a[%d]=",i);
scanf("%f",&a);
}
int m=0;
float sum=0;
for (i=0;i<20;i++)
{
if (a>0)
m++;
}
for (i=0;i<20;i++)
sum=sum+a;
printf("正數的個數是%d",m);
printf("所有數的和是%f",sum);
}
72.編程實現:對鍵盤輸入的任意一個四位正整數,計算各位數字平方和。
如:2345 則:計算2*2+3*3+4*4+5*5
#include <stdio.h>
#include <math.h>
void main ()
{
????????printf ("請輸入一個四位數\n");
????????int x,a,b,c,d,s;
????????scanf ("%d",&x);
??????
????????a=x/1000;
????????b=x/100-10*a;
????????c=x/10-100*a-10*b;
????????d=x;
????????
????????printf ("a=%d\n",a);
????????printf("b=%d\n",b);
????????printf ("c=%d\n",c);
????????printf ("d=%d\n",d);
s=a*a+b*b+c*c+d*d;
printf("各位數字的平方和是%d\n",s);
}
73.有1020個西瓜,第一天賣一半多兩個,以后每天賣剩下的一半多兩個,問幾天以后能賣完,請編程。
#include <stdio.h>
void main()
{
int a=1020,c=0;
do
{a=a/2-2;
c++;}
while (a!=0);
printf("c=%d",c);
}
74.編程實現:打印100以內個位數為6且能被3整除的所有數 。
#include <stdio.h>
void main()
{int i;
for (i=0;i<100;i++)
{if (i==6&&i%3==0)
??????printf("%d\n",i);
}
}
75.編程實現:從鍵盤輸入若干個整數(數據個數應不少于50),其值在0至4的范圍內,用-1作為輸入結束的標志,統計每個整數的個數。
76.編寫一個函數sort,將放到一維數組中的若干個數按從大到小的順序排序;在主函數中輸入若干個數到一個一維數組中,調用sort,對該數組進行排序,在主函數中將原數組和排好序的數組輸出。
77.輸入一個正整數,將其用質因子的乘積表示,并輸出結果,格式為:12=2×2×3。
78.輸入一個正整數,求出它的質因子的和,并輸出結果,格式為:12的質因子和=2+2+3=7。
79.編寫一個函數,判斷一個正整數是否為完數:如果一個數的除它本身以外的所有因數之和等于它本身,則它就是完數。主函數中找出1000以內的所有完數。
80.編寫函數GCD,求兩個正整數的最大公約數,主函數中輸入任意5個正整數,調用函數GCD,求出這5個數的最大公約數和最小公倍數。
81.編函數isprime判斷正整m是否為素數;如果是素數,返回正整數1,否則返回0;主函數中調用isprime,找出2到1000之間的所有素數。
#include<stdio.h>
#include<math.h>
int isprime(int);
void main()
{
int m;
for(m=2;m<=1000;m++)
??if(isprime(m))
?? printf("]",m);
}
int isprime(int a)
{
int i;
for(i=2;i<=sqrt(a);i++)
??if(a%i==0) return 0;
??return 1;
}
82.一維數組a中的若干個數已按從小到大的順序有序;在主函數中輸入一個數,將其插入到該數組中,使得原數組依然按原序有序,分別輸入原數組和插入新元素之后的數組。
#include<stdio.h>
void main()
{
int a[21],i,j,n,p,temp;
printf("請輸入數組元素的個數:");
scanf("%d",&n);
printf("請輸入%d個整數:\n",n);
for(i=0;i<n;i++)
??scanf("%d",&a);
for(i=1;i<=n-1;i++)
{
??for(j=0;j<=n-1-i;j++)
?? if(a[j]>a[j+1])
?? {
????temp=a[j];
????a[j]=a[j+1];
????a[j+1]=temp;
?? }
}
printf("原數組為:\n");
for(i=0;i<=n-1;i++)
??printf("]",a);
printf("\n請輸入插入的數:");
scanf("%d",&p);
for(i=0;i<=n-1;i++)
??if(p<a)
??{
?? temp=a;
?? a=p;
?? p=temp;
??
??}
a[n]=p;
printf("插入元素后的數組為:\n");
for(i=0;i<=n;i++)
??printf("]",a);
}
83.有5個國家名,編程實現按字母先后順序排序,然后分別輸出原數組和排序之后的數組。
#include<stdio.h>
#include<string.h>
void main()
{
char name[5][15],temp[15];
int i,j;
printf("請輸入國家名:\n");
for(i=0;i<5;i++)
??gets(name);
for(i=0;i<5;i++)
??for(j=0;j<4-i;j++)
?? if(strcmp(name,name[j+1])>0)
?? {
????strcpy(temp,name[j]);
????strcpy(name[j],name[j+1]);
????strcpy(name[j+1],temp);
?? }
printf("國家名排序后為:\n");
for(i=0;i<5;i++)
??printf("%s\n",name);
}
84.有一行文字,要求刪去其中的某個字符,此行文字和要刪的字符均由鍵盤輸入,分別輸出原文字和刪除之后的文字(注:原文字中的所有和要刪除字符相同的字符完全刪除)。
#include<stdio.h>
void main()
{
int i,j;
char a[10],N='n';
printf("請輸入一行9個的文字:\n");
gets(a);
printf("原文字為:\n");
puts(a);
for(i=0;i<=9;i++)
??if(a==N)
?? for(j=i;j<=9;j++)
????a[j]=a[j+1];
printf("刪除后文字為:\n");
puts(a);
}
85.打印如圖所示的楊輝三角,要求打印出n行,n由鍵盤輸入。
1
1 1
1 2 1
1 3 3??1
1 4 6??4??1
1 5 10 10 5 1
………
#include<stdio.h>
void main()
{
int i,j,N,a[21][21];
printf("請輸入打印的行數:\n");
scanf("%d",&N);
for(i=1;i<N+1;i++)
{
??a[1]=1;
??a=1;
}
for(i=3;i<N+1;i++)
??for(j=2;j<=i-1;j++)
?? a[j]=a[j-1]+a[j];
??for(i=1;i<N+1;i++)
??{
?? for(j=1;j<=i;j++)
????printf("m",a[j]);
?? printf("\n");
??}
??printf("\n");
}
86.編一個函數實現將一個整型的一維數組中的數逆序存放,不使用輔助數組。主函數輸入一個整型的一維數組,調用上述函數,將該數組逆置,將結果輸出。
#include<stdio.h>
#define N 10
void main()
{
int a[N],i,temp;
printf("enter array a:\n");
for(i=0;i<N;i++)
??scanf("%d",&a);
printf("array a:\n");
for(i=0;i<N;i++)
??printf("M",a);
for(i=0;i<N/2;i++)
{
??temp=a;
??a=a[N-i-1];
??a[N-i-1]=temp;
}
printf("\nNow,array a:\n");
for(i=0;i<N;i++)
??printf("M",a);
printf("\n");
}
87.編寫一個函數convert,求一個方陣的轉置矩陣;主函數中輸入方陣的階數和方陣,在主函數中將原矩陣和轉置矩陣按原格式輸出。
#include<stdio.h>
void main()
{
????void convert(int [10][10]);
int a[10][10],p,q,i,j;
printf("請輸入矩陣的行和列:\n");
scanf("%d",&p);
scanf("%d",&q);
????printf("請輸入矩陣的元素值:\n");
for(i=0;i<p;i++)
??for(j=0;j<q;j++)
?? scanf("%d",&a[j]);
printf("原矩陣為:\n");
????for(i=0;i<p;i++)
{
??for(j=0;j<q;j++)
?? printf("]",a[j]);
??printf("\n");
}
convert(a);
printf("轉置矩陣為:\n");
????for(i=0;i<q;i++)
{
??for(j=0;j<p;j++)
?? printf("]",a[j]);
??printf("\n");
}
????
}
void convert(int a[10][10])
{
int i,j,t;
????for(i=0;i<10;i++)
???? for(j=i+1;j<10;j++)
??{
?? t=a[j];
?? a[j]=a[j];
?? a[j]=t;
??}
}
88.求∏值,精度為10-5:∏/4≈1-1/3+1/5-1/7+……
#include<stdio.h>
void main()
{
float a=1.0,b;
int i;
????
????for(i=1;1.0/(2*i+1)>0.00001;i++)
{
??if(i%2!=0)
?? a-=1.0/(2*i+1);
??else
?? a+=1.0/(2*i+1);
}
b=4.0*a;
printf("b的值為:%f\n",b);
}
89.用公式計算:e≈1+1/1!+1/2! …+1/n!,精度為10-6。
#include<stdio.h>
float fun(int);
void main()
{
int i;
????float e=1.0;
for(i=1;fun(i)>0.00000001;i++)
???? e+=fun(i);
printf("e=%f\n",e);
}
float fun(int n)
{
int i;
????float term=1.0;
for(i=1;i<=n;i++)
??term/=i;
return term;
}
90.有一分數序列
2/1,3/2,5/3,8/5,13/8,21/13
??求該序列的前20項之和。
#include<stdio.h>
void main()
{
int i;
float a[22], b[20],p=0.0;
a[0]=1.0;
a[1]=1.0;
for(i=2;i<22;i++)
??a=a+a;
for(i=0;i<20;i++)
???? b=a/a;
for(i=0;i<20;i++)
???? p+=b;
printf("%f\n",p);
}
91.編一個子函數GCD,求兩個正整數的最大公約數,主程序輸入n個自然數,調GCD,求出這n個數的最大公約數。
#include<stdio.h>
int GCD(int,int);
void main()
{
int a[100],i,n,k;
printf("請輸入數組元素的個數:\n");
scanf("%d",&n);
printf("請輸入%d個正整數:\n",n);
for(i=0;i<n;i++)
??scanf("%d",&a);
????k=GCD(a[0],a[1]);
for(i=2;i<n;i++)
??k=GCD(k,a);
printf("輸入的%d個正整數的最大公約數是:%d\n",n,k);
}
int GCD(int x,int y)
{
int i,min,p,q,gcd;
if(x<=y)
??min=x;
else
??min=y;
for(i=1;i<=min;i++)
{
??p=x%i;
??q=y%i;
??if(p==0&&q==0)
?? gcd=i;
}
return gcd;
}
92.寫函數求sin(x)的值。計算公式為:Sin(x)=X-X3/3!+X5/5!-X7/7!+ …+(-1)n-1X2n-1/(2n-1)!。
#include<stdio.h>
float fun(float,int);
float sin(int,float);
float term(int);
void main()
{
int n;
????float x;
printf("請輸入n,x值:\n");
scanf("%d",&n);
scanf("%f",&x);
printf("sin(%f)=%f",x,sin(n,x));
}
float sin(int n,float x)
{
int i;
????float s=0.0;
????for(i=1;i<=n;i++)
s+=fun(-1.0,i-1)*fun(x,2*i-1)*term(2*i-1);
return s;
}
float fun(float x,int n)
{
int i;
float p=1.0;
for(i=0;i<n;i++)
??p=p*x;
return p;
}
float term(int n)
{
int i;
float q=1.0;
for(i=1;i<=n;i++)
??q/=i;
return q;
}
93.編一函數使用冒泡法對若干個整數按從小到大的順序排序,主函數中輸入若干個整數到一個一維數組中,調用排序函數,將其排序,最后將原數組和排好序的數組輸出。
#include<stdio.h>
#define N 10
void main()
{
int a[N],i,j,temp;
printf("請輸入10個整數:\n");
for(i=0;i<N;i++)
??scanf("%d",&a);
printf("\n");
printf("原始數據為:\n");
for(i=0;i<N;i++)
??printf("%d",a);
for(i=1;i<=N-1;i++)
{
??for(j=0;j<=N-i-1;j++)
?? if(a[j]>a[j+1])
?? {
????temp=a[j];
????a[j]=a[j+1];
????a[j+1]=temp;
?? }
}
printf("\n排序后的數據為:\n");
for(i=0;i<N;i++)
??printf("%d",a);
printf("\n");
}
94.求一個m行n列的二維數組中的這樣一個原素;它在它所在的行為最大,在它所在的列為最小。
#include<stdio.h>
#define N 4
#define M 5
void main()
{
int i,j,k,a[N] ,max,maxj,flag;
printf("please input matrix:\n");
for(i=0;i<N;i++)
??for(j=0;j<M;j++)
?? scanf("%d",&a[j]);
??for(i=0;i<N;i++)
??{
?? max=a[0];
?? maxj=0;
?? for(j=0;j<M;j++)
????if(a[j]>max)
????{
???? max=a[j];
???? maxj=j;
????}
????flag=1;
????for(k=0;k<N;k++)
???? if(max>a[k] )
???? {
??????flag=0;
??????continue;
???? }
????if(flag)
????{
???? printf("a[%d][%d]=%d\n",i,maxj,max);
???? break;
????}
??}
??if(! flag)
?? printf("It is not exist!\n");
}
95.編寫一個函數求給定字符串長度,主函數中輸入一個字符串,調用該子函數,求出該字符串的長度,輸出。
#include<stdio.h>
void main()
{
int length(char*p);
int len;
char str[20];
printf("input string:");
scanf("%s",str);
len=length(str);
printf("The length of string is %d.\n",len);
}
int length(char*p)
{
int n;
n=0;
while(*p!='\0')
{
??n++;
??p++;
}
return(n);
}
96.編寫一個函數將給定字符串復制到另一個字符串中去,主函數中輸入一個字符串,調用該子函數,復制出另一字符串,將兩個串輸出。
#include<stdio.h>
#include<string.h>
void main()
{
void copystr(char*,char*,int);
int m;
char str1[20],str2[20];
printf("\ninput string:");
gets(str1);
printf("which character that begin to copy?");
scanf("%d",&m);
if(strlen(str1)<m)
??printf("input error!");
else
{
??copystr(str1,str2,m);
??printf("result:%s\n",str2);
}
}
void copystr(char*p1,char*p2,int m)
{
int n;
n=0;
while(n<m-1)
{
??n++;
??p1++;
}
while(*p1!='\0')
{
??*p2=*p1;
??p1++;
??p2++;
}
*p2='\0';
}
97.寫函數求Cos(x)=1+X2/2!-X4/4!+X6/6!- …+(-1)nX2n/(2n)!。
#include<stdio.h>
float fun(float,int);
float cos(int,float);
float term(int);
void main()
{
int n;
????float x;
printf("請輸入n,x值:\n");
scanf("%d",&n);
scanf("%f",&x);
printf("cos(%f)=%f",x,cos(n,x));
}
float cos(int n,float x)
{
int i;
????float s=-1.0;
????for(i=1;i<=n;i++)
s+=fun(-1.0,i-1)*fun(x,2*i)*term(2*i);
return s;
}
float fun(float x,int n)
{
int i;
float p=1.0;
for(i=0;i<n;i++)
??p=p*x;
return p;
}
float term(int n)
{
int i;
float q=1.0;
for(i=1;i<=n;i++)
??q/=i;
return q;
}
98.編寫一個函數將給定字符串中的大寫字母轉換成小寫字母,主函數中輸入一個字符串,調用該子函數,進行轉換,將原字符串及轉換后的字符串輸出。
#include<stdio.h>
void main()
{
int i;
char a[11];
gets(a);
puts(a);
for(i=0;i<10;i++)
??if(a>=65&&a<=90)
?? a=a+32;
??
puts(a);
}
99.編寫一個函數將給定的兩個字符串連接成一個字符串:
??格式為:strcat(ch1,ch2);
??功能:將ch2復制到ch1的后面;
??主函數中輸入兩個字符串,調用該子函數,求出連接之后的字符串,將兩個原字符串及連接之后的結果串輸出。
#include<stdio.h>
#include<string.h>
void main()
{
char str1[20],str2[8];
gets(str1);
gets(str2);
strcat(str1,str2);
printf("%s\n",str1);
}
100.用40元錢買蘋果、西瓜和梨共100個,且三種水果都有。已知蘋果0.4元一個,西瓜4元一個,梨0.2元一個。問可以買多少個?編程輸出所有購買方案。
#include<stdio.h>
void main()
{int i=1,j,k;
??double r;
??printf("蘋果??西瓜?? 梨\n");
??while (i<=100)
??{
?? j=1;
?? while(j<=(10-i))
?? {
????k=100-i-j;
????r=2*i/5+4*j+i/5;
????if(r<=40)
??printf("%d}}\n",i,j,k);
????j++;
?? }
?? i++;
??}
}
101.編程:建立一個3×3的二維整數數組,求兩條對角線上元素值得和,并將結果輸出。(用函數調用方式編程)
102.編程計算:1*2*3+3*4*5+……+99*100*101的值。
#include<stdio.h>
void main()
{
int i,j,k,sum=0;
for(i=1,j=2,k=3;i<100,j<101,k<102;i+=2,j+=2,k+=2)
sum=sum+i*j*k;
printf("%d\n",sum);
}
103.有一個5×4的矩陣,編程實現:找出該矩陣中每行元素的最大值,并使該值成為該行的首列元素。
#include<stdio.h>
void main ()
{
int a[5][4]={6,7,8,9,2,7,8,7,4,8,9,5,2,4,6,7,2,4,1,2},b[5][4]={6,7,8,9,2,7,8,7,4,8,9,5,2,4,6,7,2,4,1,2},t,i,j,k,p;
int max[5]={6,2,4,2,2};
for(i=0;i<5;i++)
{for(j=1;j<4;j++)
????if(a[j]>max)
?? {??
????max=a[j];
?? }
}
?? for(k=0;k<5;k++)
?? {for(p=1;p<4;p++)
????if(max[k]!=b[k][p])
?????? {b[k][p]=b[k][p];}
????else
????{?? t=b[k][0];
???? b[k][0]=b[k][p];
???? b[k][p]=t;
????}
?? }
??????for(k=0;k<5;k++)
??????for(p=0;p<4;p++)
?? printf("\nb[%d][%d]=%d",k,p,b[k][p]);
?? printf("\n");
}
104.編寫一個程序,使輸入的一個字符串按反序存放在一字符數組中,然后輸出。要求:
??(1)在主調函數中輸入字符串;
??(2)寫函數完成由主調函數傳遞來的字符串按反序存放;
??(3)在主調函數中輸出結果。
#include<stdio.h>
#include<string.h>
void main()
{
void inverse(char str[]);
char str[100];
printf("輸入字符串:\n");
gets(str);
inverse(str);
printf("%s\n",str);
}
?? void inverse(char str[])
?? {char t;
???? int i,j;
??for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--)
??{t=str;
?? str=str[j-1];
?? str[j-1]=t;
??}
?? }
105.從鍵盤輸入五個字符串,分別求出字符串中長度最長和最短的字符串,請編程。(要求:不要使用strlen(_)函數編程)
106.輸入10個整數,將其中最小的數與第一個數對換,把最大的數與最后一個數對換。請編程實現。
#include<stdio.h>
#define N 10
void main()
{
int a[N],b[N],i,j,min,max,p,t;
printf("請輸入數據\n");
for(i=0;i<N;i++)
scanf("%d",&a);
for(i=0,j=0;i<N,j<N;i++,j++)
b[j]=a;
for(j=0;j<N;j++)
printf("=",b[j]);
printf("\n");
????for(i=1;i<N;i++)
{
??if(a[0]>a)
??{a[0]=a;
??min=a[0];}
}
????for(i=0;i<N-1;i++)
{
??if(a[N-1]<a)
??{a[N-1]=a;
?? max=a[N-1];}
}
for(j=0;j<N;j++)
{
??if(min!=b[j])
??{b[j]=b[j];}
?? else
?? {t=b[0];
????b[0]=b[j];
????b[j]=t;
?? }
}
????for(j=0;j<N;j++)
{if(max!=b[j])
{b[j]=b[j];}
else
{p=b[N-1];
??b[N-1]=b[j];
??b[j]=p;
}
}
????for(j=0;j<N;j++)
printf("=",b[j]);
????printf("\n");
}
107.寫一個判斷素數的函數,在主函數中調用素數的判斷函數,求出2到1000之間的素數的累加和,將結果輸出,請編程。
#include<stdio.h>
#include<math.h>
int isprime(int);
void main()
{
int i,sum=0;
for (i=2;i<=1000;i++)
if (isprime(i))
????sum=sum+i;
printf("%d\n",sum);
}
?? int isprime(int a)
?? {
????int j;
????for(j=2;j<=sqrt(a);j++)
??????if(a%j==0) return 0;
?? return 1;
?? }
108.編寫一函數,由實參傳來一個字符串,統計此字符串中字母、數字、空格和其他字符的個數,在主函數中輸入字符串以及輸出上述的結果。
#include<stdio.h>
int letter,digit,space,others;
void main()
{
void count(char[]);
char text[80];
printf("輸入字符串:\n");
gets(text);
printf("字符串是:");
puts(text);
letter=0;
digit=0;
space=0;
others=0;
count(text);
printf("letter:%d,digit:%d,space:%d,others:%d\n",letter,digit,space,others);
}
?? void count(char str[])
?? {int i;
????
??for(i=0;str!='\0';i++)
?? if((str>='a'&&str<='z')||(str>='A'&&str<='Z'))
???? letter++;
?? else if(str>='0'&&str<='9')
?? digit++;
?? else if(str==32)
?? space++;
?? else
?? others++;
?? }
109.請編程實現:將兩個字符串s1和s2比較,如果s1>s2,輸出一個正數;s1<s2,輸出一個負數;s1==s2,輸出0。
????要求:不要用strcpy函數,兩個串用gets函數讀入,輸出的正數或負數的絕對值應是相比較的兩個字符串相應字符的ASCⅡ碼的差值。
#include<stdio.h>
void main()
{
int i,resu;
char str1[100],str2[200];
printf("請輸入str1:\n");
gets(str1);
printf("請輸入str2:\n");
????????gets(str2);
i=0;
while((str1==str2)&&(str1!='\0')) i++;
if(str1=='\0'&&str2=='\0') resu=0;
else
??resu=str1-str2;
???????? printf("%d\n",resu);
}
110.編寫一個函數,由實參傳來一個字符串,把串中所有大寫字母變成相應的小寫字母;原串中所有的小寫字母變成相應的大寫字母,在主函數中輸入原字符串和輸出變換后的字符串,請編程。
#include<stdio.h>
void strupr(char str[]);
void main()
{
char text[20];
????printf("請輸入字符串:\n");
????gets(text);
printf("%s\n",text);
????strupr(text);
printf("%s\n",text);
}
??void strupr(char str[])
??{
?? int i;
?? for(i=0;str!='\0';i++)
?? if(str>='a'&&str<='z')
?? str=str+'A'-'a';
???? else if(str>='A'&&str<='Z')
??????str=str-'A'+'a';
??}
111.編程實現:由鍵盤輸入的任意一組字符中統計出大寫字母的個m和小寫字母的個數n,并輸出m、n中的較大者。
#include<stdio.h>
int fmax(int x,int y);
void main()
{
??char str[80];
??int m=0,n=0,i=0,k=0,c;
??printf("請輸入一個字符串\n");
??gets(str);
??for(i=0;str!='\0';i++)
??if('A'<=str&&str<='Z')
?? ++m;
??else if('a'<=str&&str<='z')
?? ++n;
??else
?? ++k;
??printf("有%d個大寫字母,有%d個小寫字母:\n",m,n);
??c=fmax(m,n);
??printf("max=%d\n",c);
}
int fmax(int x,int y)
??{
?? int z;
?? z=x>y?x:y;
?? return z;
??}
112.定義一個含有30個整形元素的數組,按順序分別賦予從2開始的偶數,然后按順序每五個數求出一個平均值,放在另一個數組中并輸出,請編程。
#include<stdio.h>
void main()
{
int a[30] ,i,j=0,b[6][5],p,k;
int c[6];
for(i=0;i<30;i++)
??a=2*(i+1);
????for(i=0;i<30;i++)
????
{
?? printf("=",a);
??????????j++;
??????????if(j%5==0) printf("\n");}
for(p=0;p<5;p++)
????????for(k=0;k<6;k++)
b[k][p]=a[5*k+p];
????????for(k=0;k<6;k++)
c[k]=(b[k][0]+b[k][1]+b[k][2]+b[k][3]+b[k][4])/5;
????????for(k=0;k<6;k++)
{printf("=",c[k]);}????
printf("\n");
}
113.輸入一個整數,判斷它能否被3,5,7整除,并輸出以下信息之一:
??(1)能同時被3,5,7整除;
??(2)能被其中兩數(要指出哪兩個數)整除;
??(3)能被其中一個數(要指出哪個數)整除。
#include<stdio.h>
void main()
{
int a;
printf("請輸入一個整數\n");
scanf("%d",&a);
if(a%3==0&&a%5==0&&a%7==0)
??printf("%d能同時被3,5,7整除\n",a);
else if(a%3!=0&&a%5==0&&a%7==0)
???? printf("%d能同時被5,7整除\n",a);
????else if(a%3==0&&a%5!=0&&a%7==0)
??printf("%d能同時被3,7整除\n",a);
???? else if(a%3==0&&a%5==0&&a%7!=0)
??printf("%d能同時被3,5整除\n",a);
???? else if(a%3==0&&a%5!=0&&a%7!=0)
??printf("%d能被3整除\n",&a);
???? else if(a%3!=0&&a%5==0&&a%7!=0)
?????? printf("%d能被5整除\n",a);
???? else if(a%3!=0&&a%5!=0&&a%7==0)
???? printf("%d能被7整除\n",a);
??else printf("%d不能被3,5,7整除\n",a);
#include<stdio.h>
void main()
{
int hcf(int,int);??????
int lcd(int,int,int);??
int u,v,h,l;
printf("Please input two numbers:\n");
scanf("%d,%d",&u,&v);
h=hcf(u,v);
printf("H.C.F=%d\n",h);
l=lcd(u,v,h);
printf("L.C.D=%d\n",l);
}
int hcf(int u,int v)
{
int t,r;
if(v>u)
{t=u;u=v;v=t;}
while((r=u%v)!=0)
{u=v;v=r;}
return(v);
}
int lcd(int u,int v,int h)
{
return(u*v/h);
}
2.輸入一行字符,分別統計出其中字母、空格、數字和其他字符的個數。
#include<stdio.h>
int letter,digit,space,others;
void main()
{
void count(char[]);
char text[80];
printf("Please input string:\n");
gets(text);
printf("string:\n");
puts(text);
letter=0;
digit=0;
space=0;
others=0;
count(text);
printf("letter:%d,digit:%d,space:%d,others:%d\n",letter,digit,space,others);
}
void count(char str[])
{
int i;
for(i=0;str!='\0';i++)
??if((str>='a'&&str<='z')||(str>='A'&&str<='Z'))
?? letter++;
??else if(str>='0'&&str<='9')
?? digit++;
??else if(str==32)
?? space++;
??else
?? others++;
}
3.輸入一個正整數求出它是幾位數;輸出原數和位數。
#include<stdio.h>
int digit;
void main()
{
void count(char[]);
char text[80];
printf("Please input numbers:\n");
gets(text);
printf("Numbers:\n");
puts(text);
digit=0;
count(text);
printf("digit:%d\n",digit);
}
void count(char str[])
{
int i;
for(i=0;str!='\0';i++)
?? if(str>='0'&&str<='9')
?? digit++;
}
4.輸入一個正整數,輸出原數并逆序打印出各位數字。
#include<stdio.h>
void invertLongInt(long);
void main()
{
unsigned long iNumber;
printf("Please input a number:\n");
scanf("%ld",&iNumber);
printf("The input number is:%ld\n",iNumber);
printf("The inverse number is:");
invertLongInt(iNumber);
}
void invertLongInt(long x)
{
if(x>=0&&x<=9)
??printf("%d\n",x);
else
{
??printf("%d",x);
??invertLongInt(x/10);
}
}
5.從鍵盤上輸入若干學生的一門課成績,統計并輸出最高成績和最低成績及相應的序號,當輸入負數時結束輸入。
6.從鍵盤上輸入若干學生的一門課成績,計算出平均分,當輸入負數時結束輸入。將結果輸出。
7.求1!+2!+3!+……+20!,將結果輸出。
#include<stdio.h>
void main()
{
float s=0,t=1;
int n;
for(n=1;n<=20;n++)
{
??t=t*n;
??s=s+t;
}
printf("1!+2!+3!+……+20!=%e\n",s);
}
8.打印以下圖案:?????? *
??????????????????????***
???????????????????? *****
????????????????????*******
#include<stdio.h>
void main()
{
int i,j;
printf("The picture is:\n");
static char picture[4][7]={{' ',' ',' ','*'},
{' ',' ','*','*','*'},{' ',' *','*','*','*','*'},{'*','*','*','*','*','*','*'}};
for(i=0;i<=3;i++)
{
??for(j=0;j<=6;j++)
???? printf("%c",picture[j]);
??printf("\n");
}
}
9.打印以下圖案:????
*
**
***
****
#include<stdio.h>
void main()
{
int i,j;
printf("The picture is:\n");
????char picture[4][4]={{'*'},
{'*','*'},{' *','*','*'},{'*','*','*','*'}};
for(i=0;i<=3;i++)
{
??for(j=0;j<=3;j++)
???? printf("%c",picture[j]);
??printf("\n");
}
}
10.求下列試子的值:1-1/2+1/3-1/4+……+1/99-1/100,將結果輸出。
#include<stdio.h>
void main()
{
float sum=1.0,t,s=1;
int i;
for(i=1;i<=100;i++)
{
??t=s/i;
??sum=sum+t;
??s=-s;
}
printf("1-1/2+1/3-1/4+……+1/99-1/100=%5.4f\n",sum);
}
11.打印出100~999之間的所有水仙花數。
#include<stdio.h>
void main()
{
int i,j,k,n;
printf("100~999之間的所有水仙花數 are:\n");
for(n=100;n<1000;n++)
{
??i=n/100;
??j=n/10-i*10;
??k=n;
??if(n==i*i*i+j*j*j+k*k*k)
?? printf("%d??",n);
}
printf("\n");
}
12.求Sn=a+aa+aaa+…+aa…a之值,n,a由鍵盤輸入。
#include<stdio.h>
void main()
{
int a,n,i=1,sn=0,tn=0;
printf("a,n=:");
scanf("%d,%d",&a,&n);
while(i<=n)
{
??tn=tn+a;
??sn=sn+tn;
??a=a*10;
??++i;
}
printf("a+aa+aaa+…+aa…a=%d\n",sn);
}
13.打印以下圖案:
??*******
?? *******
????*******
???? *******
#include<stdio.h>
void main()
{
char a[7]={'*','*','*','*','*','*','*'};
int i,j,k;
char space=' ';
printf("The picture is:");
for(i=0;i<4;i++)
{
??printf("\n");
??printf("????");
??for(j=1;j<=i;j++)
?? printf("%c",space);
??for(k=0;k<7;k++)
?? printf("%c",a[k]);
}
printf("\n");
}
14.打印以下圖案:
??????1
???? 121
????12321
?? 1234321
15. 打印以下圖案:
?? 1234321
????12321
???? 121
??????1
16.編寫一個統計學生成績程序,完成以下功能:輸入4個學生的2門課成績;求出全班的總平均分,將結果輸出。
#include<stdio.h>
#define N 4
struct student
{
char num[3];
char name[4];
float score[2];
float avr;
}
stu[N];
void main()
{
int i,j;
float sum,average;
for(i=0;i<N;i++)????????????
{
??printf("input scores of student%d:\n",i+1);
??printf("name:");
??scanf("%s",stu.name);
??for(j=0;j<2;j++)
??{
?? printf("score %d:",j+1);
?? scanf("%f",&stu.score[j]);
??}
}
average=0;??????????????
for(i=0;i<N;i++)
{
??sum=0;
??for(j=0;j<2;j++)
?? sum+=stu.score[j];
??stu.avr=sum/2;
??average+=stu.avr;
}
average/=N;
printf("?? Name????score1?? score2?? average\n");
for(i=0;i<N;i++)
{
??printf("%5ss",stu.num,stu.name);
??for(j=0;j<2;j++)
?? printf("%9.2f",stu.score[j]);
??printf("?? %8.2f\n",stu.avr);
}
printf("average=%5.2f\n",average);
}
17. 打印以下圖案:
????*****
???? *****
??????*****
?????? *****
????????*****
#include<stdio.h>
void main()
{
char a[5]={'*','*','*','*','*'};
int i,j,k;
char space=' ';
printf("The picture is:");
for(i=0;i<5;i++)
{
??printf("\n");
??printf("????");
??for(j=1;j<=i;j++)
?? printf("%c",space);
??for(k=0;k<5;k++)
?? printf("%c",a[k]);
}
printf("\n");
}
18.給出年、月、日,計算該日是該年的第幾天。
#include<stdio.h>
void main()
{
int sum_day(int,int);
int leap(int year);
int year,month,day,days;
printf("input date(year,month,day):");
scanf("%d,%d,%d",&year,&month,&day);
printf("%d/%d/%d",year,month,day);
days=sum_day(month,day);
if(leap(year)&&month>=3)
??days=days+1;
printf("is the %dth day in this year.\n",days);
}
int sum_day(int month,int day)
{
int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
for(i=1;i<month;i++)
??day+=day_tab;
return(day);
}
int leap(int year)
{
int leap;
leap=year%4==0&&year0!=0||year@0==0;
return(leap);
}
19.求一個3*3的整型矩陣對角線元素之和。將原矩陣和求出的和輸出。
#include<stdio.h>
void main()
{
float a[3][3],sum=0;
int i,j;
printf("請輸入元素:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%f",&a[j]);
for(i=0;i<3;i++)
sum=sum+a;
printf("對角線之和是:%6.2f\n",sum);
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
??printf("%5.2f",a[j]);
printf("\n");
}
}
20.求一個4*3的矩陣各行元素的平均值;將原矩陣和求出的平均值全部輸出。
#include<stdio.h>
void main()??
{??
int a[4][3],s[4],i,j,k;??
for(i=0;i<4;i++)??
??for(j=0;j<3;j++)
?? scanf("%d",*(a+i)+j);
??
??for(i=0;i<4;i++)
??{
?? k=0;
?? for(j=0;j<3;j++)
????k+=a[j];
?? printf("第%d行的平均值是%d",i+1,k);
?? printf("\n");
??}
}
21.求一個3*4的矩陣各列元素的平均值;將原矩陣和求出的平均值全部輸出。
#include<stdio.h>
void main()??
{??
int a[4][3],s[4],i,j,k;??
for(i=0;i<4;i++)??
??for(j=0;j<3;j++)
?? scanf("%d",*(a+i)+j);
??
??for(i=0;i<4;i++)
??{
?? k=0;
?? for(j=0;j<3;j++)
????k+=a[j];
?? printf("第%d行的平均值是%d",i+1,k);
?? printf("\n");
??}
}
22.求一個3*5的矩陣各列元素的最大值,將原矩陣和求出的最大值全部輸出。
#include<stdio.h>
void main()??
{??
int a[3][5],s[3],i,j,k;??
for(i=0;i<3;i++)??
for(j=0;j<5;j++)
??scanf("%d",*(a+i)+j);??
??
for(i=0;i<3;i++)??
{ *(s+i)= *(*(a+j));??
for(j=1;j<5;j++)??
if(*(s+i) < *(*(a+i)+j))??
*(s+i)= *(*(a+i)+j);??
}??
??
for(i=0;i<3;i++)??
{
??printf("Line=%d Max=%d",j,s[j] );??
printf("\n");??
}??
}
23.求一個4*3的矩陣各行元素的最大值,將原矩陣和求出的最大值全部輸出。
#include<stdio.h>
void main()??
{??
int a[4][3],s[4],i,j,k;??
for(i=0;i<4;i++)??
for(j=0;j<3;j++)
??scanf("%d",*(a+i)+j);??
??
for(i=0;i<4;i++)??
{ *(s+i)= *(*(a+i));??
for(j=1;j<3;j++)??
if(*(s+i) < *(*(a+i)+j))??
*(s+i)= *(*(a+i)+j);??
}??
??
for(i=0;i<4;i++)??
{
??printf("Row=%d Max=%d",i,s );??
printf("\n");??
}??
}
24.求一個M*N的矩陣中元素的最大值,將原矩陣和求出的最大值全部輸出。
#include<stdio.h>??
#define N 10
#define M 10
void main()??
{??
int a [N],i,j,k ,max,m,n;??
????scanf("%d %d",&m,&n);
????for(i=0;i<m;i++)??
??for(j=0;j<n;j++)
?? scanf("%d",*(a+i)+j);
??for(i=0;i<m;i++)??
??{
?? for(j=0;j<n-1;j++)
?? {
????if(a[j]<=a[j+1])
???? max=a[j+1];
????else
???? max=a[j];
?? }
?? k=max;
??}
??for(i=0;i<m-1;i++)
??{
?? if(k<=k)
????max=k;
?? else
????max=k;
??}
??printf("%d",max);
}
25.判斷一個N*N的矩陣是否為對稱矩陣,將原矩陣輸出,判斷結果輸出。
#include<stdio.h>??
#define N 10
void main()??
{??
int a[N][N],i,j,k,n;
????scanf("%d",&n);
????for(i=0;i<n;i++)??
??for(j=0;j<n;j++)
?? scanf("%d",&a[j]);
??for(i=0;i<n;i++)??
??{
?? for(j=i+1;j<n;j++)
?? {
????if(a[j]==a[j])
???? k=1;
????else
???? k=0;
?? }
??}
??if(k=0)
?? printf("bushi");
??else
?? printf("shi\n");
??for(i=0;i<n;i++)??
?? for(j=0;j<n;j++)
????printf("%d",a[j]);
}
26.有一篇文章,有三行文字,每行有80個字符。要求統計出其中英文大寫字母、消協字母、數字、空格以及其他字符的個數。
#include<stdio.h>
void main()
{
int i,j,big=0,sma=0,num=0,spa=0,oth=0;
char text[3][80];
for(i=0;i<3;i++)
{
??printf("請輸入行%d:\n",i+1);
??gets(text);
??for(j=0;j<80&&text[j]!='\0';j++)
??{
?? if(text[j]>='A'&&text[j]<='Z')
????big++;
?? else if(text[j]>='a'&&text[j]<='z')
????sma++;
?? else if(text[j]>='0'&&text[j]<='9')
????num++;
?? else if(text[j]==' ')
????spa++;
?? else
????oth++;
??}
}
printf("大寫字母:%d\n",big);
printf("小寫字母:%d\n",sma);
printf("數字:%d\n",num);
printf("空格:%d\n",spa);
printf("其它:%d\n",oth);
}
27.將20個整數放到一維數組中,輸出該數組的最大值和最小值。
#include<stdio.h>
void main()
{
int i,j,min,max,a[21];
printf("請輸入數據:\n");
for(i=1;i<=20;i++)
{
??printf("a[%d]=",i);
??scanf("%d",&a);
}
for(i=1;i<=19;i++)
{
??min=i;
??for(j=2;j<=19;j++)
?? if(a >a[j]);
?? a =a[j];
}
for(i=1;i<=19;i++)
{
??max=i;
??for(j=2;j<=19;j++)
?? if(a <a[j]);
?? a =a[j];
}
printf("最大數為:%d\n",a );
printf("最小數為:%d\n",a );
}
28.將15個整數放到一維數組中,輸出該數組中的最大值它的下標,然后將它和數組中的最前面的元素對換。
#include<stdio.h>
void main()
{
int i,j,min,max,a[16],m,n;
printf("請輸入數據:\n");
for(i=1;i<=15;i++)
{
??printf("a[%d]=",i);
??scanf("%d",&a);
}
for(i=1;i<=14;i++)
{
??max=i;
??for(j=2;j<=14;j++)
?? if(a <a[j]);
?? a =a[j];
????????????m=I,n=j
}
printf("最大數下標為:%d,%d\n",m,n);
}
29.將字符數組str1種下標為偶數的元素賦給另一字符數組str2,并輸出str1和str2。
#include<stdio.h>??
#include<string.h>
#define N 10
void main()??
{??
int i,n;
char str1[N],str2[N];
???? gets(str1);
??for(n=0;n<N;n++)
??{
??i=2*n;
??str2[n]=str1;
??}
???? puts(str1);
??puts(str2);
}
30.編寫一個程序,將兩個字符串連接起來,不要使用strcat函數。
#include<stdio.h>
void main()
{
char str1[20],str2[20];
int i=0,j=0;
printf("請輸入字符串1:\n");
scanf("%s",str1);
printf("請輸入字符串2:\n");
scanf("%s",str2);
while (str1!='\0')
??i++;
while (str2[j]!='\0')
??str1=str2[j++];
str1='\0';
printf("合并之后的字符串為:%s\n",str1);
}
31.編寫一個程序,將字符數組a中的全部字符復制到字符數組b中。不要使用strcpy函數。
#include<stdio.h>
#include<string.h>
void main()
{
char a[40],b[40];
int i;
printf("請輸入a:\n");
scanf("%s",a);
for(i=0;i<=strlen(a);i++)
??b=a;
printf("b:%s\n",b);
}
32.編寫一個程序,找出3個字符串中的最大者,將它輸出。
#include<stdio.h>
#include<string.h>
void main()
{
char string[20];
char str[3][20];
int i;
for(i=0;i<3;i++)
??gets (str);
if(strcmp(str[0],str[1])>0)
??strcpy(string,str[0]);
else
??strcpy(string,str[1]);
if(strcmp(str[2],string)>0)
??strcpy(string,str[2]);
printf("最大的字符串是:\n%s\n",string);
}
33.編寫程序,輸入任意一個1~7之間的整數,將他們轉換成對應的英文單詞。例如:1轉換成Monday,7轉換成Sunday。
#include<stdio.h>
void main()
{
int a;
printf("輸入一個整數:\n");
scanf("%d",&a);
if(a==1) printf("Monday\n");
else if(a==2) printf("Tuesday\n");
else if(a==3) printf("Wendesday\n");
else if(a==4) printf("Thursday\n");
else if(a==5) printf("Friday\n");
else if(a==6) printf("Saturday\n");
else if(a==7) printf("Sunday\n");
else printf("錯誤\n");
}
34.編寫程序,輸入兩個整數,和+、-、*、/之中的任意一個運算符,輸出計算結果。
#include<stdio.h>
void main()
{
float a,b;
char c;
????????printf("請輸入一個運算符:\n");
scanf("%c",&c);
printf("請輸入兩個整數:\n");
scanf("%d,%d",&a,&b);
switch(c)
{
?? case'+':printf("%f\n",a+b);break;
?? case'-':printf("%f\n",a-b);break;
?? case'*':printf("%f\n",a*b);break;
?? case'/':printf("%f\n",a/b);break;
?? default:printf("錯誤");
????}
}
35.輸入年號,計算這一年的2月份的天數,將結果輸出。
#include<stdio.h>
void main()
{
int year,leap;
printf("請輸入年份:\n");
scanf("%d",&year);
if(year%4==0)
{
??if(year0==0)
??{
?? if(year@0==0)
????leap=1;
?? else
????leap=0;
??}
??else
?? leap=1;
}
else
??leap=0;
if(leap)
??printf("%d年的2月有29天",year);
else
??printf("%d年的2月有28天",year);
}
36.輸入三角形的三邊a,b,c,判斷a,b,c,能否構成三角形,若能,計算面積。
#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c,area;
double s;
printf("Please enter three sides of a triangle:\n");
scanf("%f,%f,%f",&a,&b,&c);
s=(a+b+c)/2.0;
area=sqrt(s*(s-a)*(s-b)*(s-c));
if(a+b<c||b+c<a||a+c<b)
??printf("They can't form a triangle.\n");
else
???? printf("The area of the triangle is:%f\n",area);
}
#include<stdio.h>??
#define N 10
#define M 10
void main()??
{????
int?? i,j,k,m,n,flag1,flag2,a[N] ,max,maxj;
printf("輸入行數n[n<10]:");
scanf("%d",&n);
printf("輸入列數m :");??
scanf("%d",&m);??
for(i=0;i<n;i++)
{??
????????printf("第%d行\n",i+1);??
??for(j=0;j<m;j++)??
????????scanf("%d",&a[j]);??
}??
37. 輸入三角形的三邊a,b,c,判斷a,b,c,能否構成三角形,何種類型的三角形:等腰、等邊、直角、等腰直角、一般。
#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c;
printf("請輸入三角形邊長:\n");
scanf("%f%f%f",&a,&b,&c);
if((a-b>=c)||(b-c>=a)||(c-a>=b)) printf("不能夠成三角形\n");
else if ((a*a+b*b==c*c)||(b*b+c*c==a*a)||(c*c+a*a==b*b))
??if ((a==b)||(b==c)||(c==a)) printf("等腰直角三角形\n");
??else printf("直角三角形\n");
else if ((a==b)&&(b==c)) printf("等邊三角形\n");
else if ((a==b)&&(b!=c)||(c==b)&&(b!=a)||(a==c)&&(c!=a)) printf("等腰三角形\n");
else printf("一般三角形\n");
}
38.輸入獎金數a,計算并輸出稅率、應繳稅款和實得獎金數。(用if語句編程)
#include<stdio.h>
void main()
{
int a;
float r,t,s;
printf("請輸入獎金數:\n");
scanf("%d",&a);
if (a<500) r=0.00;
else if (a<1000) r=0.05;
else if (a<2000) r=0.08;
else if (a<2000) r=0.10;
else r=0.15;
t=a*r;
s=a-t;
printf("稅率:%7.2f\n",r);
printf("稅款:%7.2f\n",t);
printf("實得獎金:%7.2f\n",s);
}
39.輸入獎金數a,計算并輸出稅率、應繳稅款和實得獎金數。(用switch語句編程)
#include<stdio.h>
void main()
{
int a,e;
float r,t,s;
printf("請輸入獎金數:\n");
scanf("%d",&a);
e=a/500;
switch(e)
{case 0:r=0.00;break;
case 1:r=0.05;break;
case 2:
case 3:r=0.08;break;
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:r=0.10;break;
default:r=0.15;break;
}
t=a*r;
s=a-t;
printf("稅率:%7.2f\n",r);
printf("稅款:%7.2f\n",t);
printf("實得獎金:%7.2f\n",s);
}
40.輸入學生的成績,利用計算機將學生的成績劃分出等級并輸出:
?? 90~100:A級;??80~89:B級;??70~79:C級;??60~69:D級;??0~59:E級;
#include<stdio.h>
void main()
{
float m;
printf("輸入學生成績:\n");
scanf("%f",&m);
if ((m>100)||(m<0)) printf("數據有誤\n");
else if (m>=90) printf("A級\n");
else if (m>=80) printf("B級\n");
else if (m>=70) printf("C級\n");
else if (m>=60) printf("D級\n");
else printf("E級\n");
}
41.編程序,求方程aX2+bX+c=0的解;輸入a,b,c.
#include <stdio.h>
#include <math.h>
void main()
{
float a,b,c,t;
double x1,x2;
printf("請由高次到低次順序輸入系數:\n");
scanf("%f%f%f",&a,&b,&c);
t=b*b-4*a*c;
if (t<0) printf("方程無實根\n");
if (t==0)
{
??x1=-(b/2/a);
??printf("方程有兩個相等實根,x1=x2=%5.2f\n",x1);
};
if (t>0)
{
??x1=-(b+sqrt(t))/2/a;
??x2=-(b-sqrt(t))/2/a;
??printf("方程有兩個不等實根,x1=%5.2f,x2=%5.2f\n",x1,x2);
}
}
42.編程序,輸入4個整數,按由小到大的順序輸出。
#include <stdio.h>
#define N 4
void main()
{
int a[N],t,i,j;
printf("輸入四個整數:\n");
for (i=0;i<N;i++)
??scanf("%d",&a);
printf("\n");
for (i=0;i<N-1;i++)
{
??for (j=0;j<N-i-1;j++)
?? if (a[j]>a[j+1])
?? {
????t=a[j];
????a[j]=a[j+1];
????a[j+1]=t;
?? }
}
printf("排序后:\n");
for (i=0;i<N;i++)
??printf("%d\n",a);
}
43.求滿足1+2+3+…+n<500中最大的N,并求其和,編寫程序實現。
#include <stdio.h>
void main()
{
int n=0,sum=0;
while(sum<500)
{
??++n;
??sum+=n;
}
printf("N??:%d\n",n-1);
printf("1+2+3+4+......+%d<500\n",n-1);
}
44.把100~200之間的不能被3整除的數輸出。
#include <stdio.h>
void main()
{
int a;
for (a=100;a<=200;a++)
??if (a%3!=0) printf("%d\t",a);
}
45.求Fibonacci數列前40個數,每行輸出5個,將40個Fibonacci數輸出。
#include <stdio.h>
long f(int);
void main()
{
int n,i=0;
for (n=1;n<41;n++)
{
??printf ("%ld\t",f(n));
??i++;
??if (i%5==0) printf("\n");
}
}
long f(int m)
{
if (m==0)
??return 0;
if (m==1)
??return 1;
else
??return f(m-1)+f(m-2);
}
46.按以下規律翻譯密碼:
??將每一個字母變成它后面的字母,例如,將A變成B,B變成C,…,Z變成A,非字母字符不變,“!”作為電文結束標志。
#include <stdio.h>
void main()
{
char ch;
printf("輸入字符串:\n");
while ((ch=getchar())!='!')
{
??if ((ch>='a' && ch<='z')||(ch>='A' && ch<='Z'))
?? if (ch=='z') ch='a';
?? else if (ch=='Z') ch='A';
?? else ch=ch+1;
????????printf("%c",ch);
}
printf("\n");
}
47.百元買百雞問題:公雞每只5元,母雞每只3元,小雞3只一元,問一百元買一百只雞有幾種買法。
#include <stdio.h>
void main()
{
int a,b,c,n=0;
for (a=0;a<=20;a++)
??for (b=0;b<=33;b++)
?? for (c=0;c<=100;c++)
????if (5*a+3*b+c==100) n++;
????printf("一共有%d種\n",n);
}
48.使用數組編程,計算出前20項fibonacci數列,要求一行打印5個數。
#include <stdio.h>
long f(int);
void main()
{
int n,i=0;
for (n=1;n<21;n++)
{
??printf ("%ld\t",f(n));
??i++;
??if (i%5==0) printf("\n");
}
}
long f(int m)
{
if (m==0)
??return 0;
if (m==1)
??return 1;
else
??return f(m-1)+f(m-2);
}
49.編程序求出兩個3*4矩陣的和并將原矩陣和求出的和矩陣按原矩陣的形式分別輸出。
#include <stdio.h>
void main()
{
int a[3][4],b[3][4],s[3][4],n,m;
printf("輸入數組A:\n");
for (n=0;n<3;n++)
{
??printf("第%d行\n",n+1);
??for (m=0;m<4;m++)
????scanf ("%d",&a[n] );
}
printf("輸入數組B:\n");
for (n=0;n<3;n++)
{
??printf("第%d行\n",n+1);
??for (m=0;m<4;m++)
?? scanf ("%d",&b[n] );
}
for (n=0;n<3;n++)
{
??for (m=0;m<4;m++)
?? s[n] =a[n] +b[n] ;
}
printf("原數組A:\n");
for (n=0;n<3;n++)
{
??for (m=0;m<4;m++)
?? printf("]",a[n] );
??printf("\n");
}
printf("\n");
printf("原數組B:\n");
for (n=0;n<3;n++)
{
??for (m=0;m<4;m++)
?? printf("]",b[n] );
??printf("\n");
}
printf("\n");
printf("所得數組:\n");
for (n=0;n<3;n++)
{
??for (m=0;m<4;m++)
?? printf("]",s[n] );
??printf("\n");
}
}
50.將一個4*3的矩陣轉置,并將原矩陣和求出的轉置矩陣按原矩陣的形式分別輸出。
#include <stdio.h>
void main()
{
int a[4][3],b[4][3],s[4][3],n,m;
printf("輸入數組A:\n");
for (n=0;n<4;n++)
{
??printf("第%d行\n",n+1);
??for (m=0;m<3;m++)
????scanf ("%d",&a[n] );
}
printf("輸入數組B:\n");
for (n=0;n<4;n++)
{
??printf("第%d行\n",n+1);
??for (m=0;m<3;m++)
?? scanf ("%d",&b[n] );
}
for (n=0;n<4;n++)
{
??for (m=0;m<3;m++)
?? s[n] =a[n] +b[n] ;
}
printf("原數組A:\n");
for (n=0;n<4;n++)
{
??for (m=0;m<3;m++)
?? printf("]",a[n] );
??printf("\n");
}
printf("\n");
printf("原數組B:\n");
for (n=0;n<4;n++)
{
??for (m=0;m<3;m++)
?? printf("]",b[n] );
??printf("\n");
}
printf("\n");
printf("所得數組:\n");
for (n=0;n<4;n++)
{
??for (m=0;m<3;m++)
?? printf("]",s[n] );
??printf("\n");
}
}
51.輸入一個字符,如果它是一個大寫字母,則把它變成小寫字母;如果它是小寫字母,則把它變成大寫字母;其它字符不變,請編程。
#include <stdio.h>
void main()
{
char ch;
ch=getchar();
if ((ch>=65)&&(ch<=90)) ch=ch+32;
else if ((ch>=97)&&(ch<=122)) ch=ch-32;
printf("%c\n",ch);
}
52.已知x和y存在下列對應關系,要求對輸入的每個x值,計算出y值,請編程。
?? y=x*(x+2),2<x<=10;?? y=2x, -1<x<=2;??y=x-1, x<=-1.
#include <stdio.h>
void main()
{
float x,y;
printf("輸入X值:");
scanf("%f",&x);
if (x<=-1)
{
??y=x-1;
??printf ("Y=%6.2f\n",y);
}
else if (x<=2)
{
??y=2*x;
??printf ("Y=%6.2f\n",y);
}
else if (x<=10)
{
??y=x*(x+2);
??printf ("Y=%6.2f\n",y);
}
else printf("取值范圍出錯\n");
}
53.已知x和y存在下列對應關系,要求對輸入的每個x值,計算出y值,請編程。
?? y=0,x=a||x=-a;??y=sqrt(a*a-x*x), -a<x<a;??y=x,x<-a||x>a.
#include <stdio.h>
#include <math.h>
void main()
{
float x,y,a;
printf("輸入A值[A>0]:");
scanf("%f",&a);
printf("輸入X值:");
scanf("%f",&x);
if ((x==a)||(x==-a)) y=0;
else if ((x<a)&&(x>-a)) y=sqrt(a*a-x*x);
else if ((x<-a)||(x>a)) y=x;
printf ("Y=%6.2f\n",y);
}
54.編程判斷對輸入的任何一個年份是否是閏年,將結果輸出。
#include <stdio.h>
void main()
{
int n;
printf("輸入年份:");
scanf("%d",&n);
if (n%4==0&&n0!=0||n@0==0) printf("閏年\n");
else printf ("不是閏年\n");
}
55.請編制程序要求輸入整數a和b,若a*a+b*b大于100,則輸出a*a+b*b百位以上的數字,否則輸出兩數之和。
#include <stdio.h>
void main ()
{
int a,b,c,d;
printf("請輸入兩個整數:\n");
scanf("%d,%d",&a,&b);
printf("你輸入的兩個數為:%d,%d\n",a,b);
c=a*a+b*b;
if(c>=100)
{
??d=c/100;
??printf("a*a+b*b的百位以上的數為:%d\n",d);
}
else
??printf("a*a+b*b=%d/n",c);
}
56.請編制程序判斷輸入的正整數是否既是5又是7的整倍數。若是,則輸出yes;否則輸出no.
#include <stdio.h>
void main()
{
int a;
printf("請輸入要驗證的數:\n");
scanf("%d",&a);
if(a%5==0&&a%7==0)
??printf("Yes\n");
else
??printf("No\n");
}
57.編程實現:計算1到100之間的奇數之和及偶數之和。
#include <stdio.h>
void main ()
{
int n,even=0,odd=0;
for(n=1;n<=50;n++)
{
??even+=2*n;
??odd+=2*n-1;
}
printf("1到100間的偶數的和為%d:\n",even);
printf("1到100間的奇數的和為%d:\n",odd);
}
58.請編程實現:求100個任意整數的累加和。
59.請編程實現:求1到100之間所有能被3整除,但不能被5整除的數的和。
60.請編程實現:輸入任意正整數n,計算n!并將結果輸出,輸出結果中沒有小數部分。
61.請編程實現:計算1至50中是7的倍數的數值之和。
62.請編程實現:對任意100個整數,統計0的個數及正數的累加和。
#include <stdio.h>
#define N 100
void main ()
{
int a,sum=0,i,frequency=0;
int s[N];
printf("請輸入數據:\n");
for(i=0;i<N;i++)
??scanf("%d",&s);
printf("\n原始數據為:\n");
for(i=0;i<N;i++)
??printf("%d\n",s);
for(i=0;i<N;i++)
{
??if(s==0)
?? frequency+=1;
??if(s>0)
??{
?? a=s;
?? sum+=a;
??}
}
printf("這些數中0的個數為%d\n",frequency);
printf("這些數中所有正數的和為%d\n",sum);
}
63.請編程實現:輸入兩個整數,判斷它們之間的關系(=,<,>等),并清楚地將比較結果輸出。
64.請編程實現:輸入幾個整數,判斷其中偶數的個數,并輸出結果(要求:數據的個數及原始數據由鍵盤輸入)。
#include <stdio.h>
#define N 20
void enter (int a[], int n)
{
int i;
printf("請輸入數據:\n");
for (i=0;i<n;i++)
??scanf("%d",&a);
printf("\n原始數據為:\n");
for (i=0;i<n;i++)
??printf("%d",a);
printf("\n");
}
void main()
{
void enter (int [], int );
int i;
????????int a[N],n;
????????printf("\n輸入你所要的數組元素個數:\n");
scanf("%d",&n);
????????enter (a,n);
for(i=0;i<n;i++)
{
??if (a%2==0)
???? printf ("其中的偶數是%d\n",a);
????
}
}
65.請編程實現:輸入幾個整數,判斷其中奇數的個數,并輸出奇數的累加和。(要求:數據的個數及原始數據由鍵盤輸入)
#include <stdio.h>
#define N 20
void enter (int a[], int n)
{
int i;
printf("請輸入數據:\n");
for (i=0;i<n;i++)
??scanf("%d",&a);
printf("\n原始數據為:\n");
for (i=0;i<n;i++)
??printf("-",a);
printf("\n");
}
void main()
{
void enter (int [], int );
int i;
????????int a[N],n,sum=0;
????????printf("\n輸入你所要的數組元素個數:\n");
scanf("%d",&n);
????????enter (a,n);
for(i=0;i<n;i++)
{
??if (a%2==1)
??{printf ("其中的奇數是%d\n",a);
??sum=sum+a;}
????????
????
}printf ("奇數和是%d\n",sum);
????
}
66.有一個兩位數XY,X是十位,Y是個位;給出X+Y的值和X*Y的值;編程實現讓用戶猜測這個兩位數十多少?根據猜測給出不同的提示。
#include <stdio.h>
void main()
{
printf ("x+y=2\n");
printf("x*y=1\n");
????printf("請輸入你所猜得數字\n");
int a;
scanf("%d", &a);
for (;a!=11;)
{printf("you are not right\n");
scanf("%d", &a);}
??
??printf ("you are right\n");
}
67.鍵盤輸入的一個兩位數XY,X是十位,Y是個位;請編程計算X+Y的值和X*Y的值。
#include <stdio.h>
void main ()
{
????????printf ("請輸入一個兩位數\n");
????????int a,x,y;
????????scanf ("%d",&a);
????????x=a/10;
????????y=a;
????????printf ("x+y=%d\n",x+y);
????????printf("x*y=%d\n"x*y);
}
68.用for循環語句計算1到20的和,并將結果輸出。
#include <stdio.h>
void main()
{
int i=1,sum=0;
for (;i<=20;)
{
??sum=sum+i;
??i++;
}
printf("1到20的和是%d\n",sum);
}
69.從鍵盤輸入一行字符,統計出輸入的字符個數(注:不要使用strlun函數編程)。
#include <stdio.h>
void main()
{?? int alphabet=0,i=0;
char str[100];
printf ("請輸入一個字符串\n");
gets(str);
for (i=0;str!='\0';i++)
??++alphabet;
printf ("有%d個字母\n",alphabet);
}
70.編程實現:任意輸入10個數,計算所有正數的和,負數的和以及10個數的和。
#include <stdio.h>
void main()
{?? int i;
float a[10];
printf("請輸入任意十個數\n");
for (i=0;i<10;i++)
{
printf("a[%d]=",i);
scanf("%f",&a);
}
printf("\n");
printf("\n原始數據為:\n");
for (i=0;i<10;i++)
printf("?",a);
float sum1=0, sum2=0, sum3=0;
for (i=0;i<10;i++)
{if (a>0) sum1=sum1+a;
else?? sum2=sum2+a;
sum3=sum1+sum2;}
printf("正數的和是%f",sum1);
printf("負數的和是%f",sum2);
printf("總和是%f",sum3);
}
71.編程實現:求任意20個數中的正數之和及正數的個數,并將結果輸出。
#include <stdio.h>
void main()
{?? int i;
float a[20];
printf("請輸入任意二十個數\n");
for (i=0;i<20;i++)
{
printf("a[%d]=",i);
scanf("%f",&a);
}
int m=0;
float sum=0;
for (i=0;i<20;i++)
{
if (a>0)
m++;
}
for (i=0;i<20;i++)
sum=sum+a;
printf("正數的個數是%d",m);
printf("所有數的和是%f",sum);
}
72.編程實現:對鍵盤輸入的任意一個四位正整數,計算各位數字平方和。
如:2345 則:計算2*2+3*3+4*4+5*5
#include <stdio.h>
#include <math.h>
void main ()
{
????????printf ("請輸入一個四位數\n");
????????int x,a,b,c,d,s;
????????scanf ("%d",&x);
??????
????????a=x/1000;
????????b=x/100-10*a;
????????c=x/10-100*a-10*b;
????????d=x;
????????
????????printf ("a=%d\n",a);
????????printf("b=%d\n",b);
????????printf ("c=%d\n",c);
????????printf ("d=%d\n",d);
s=a*a+b*b+c*c+d*d;
printf("各位數字的平方和是%d\n",s);
}
73.有1020個西瓜,第一天賣一半多兩個,以后每天賣剩下的一半多兩個,問幾天以后能賣完,請編程。
#include <stdio.h>
void main()
{
int a=1020,c=0;
do
{a=a/2-2;
c++;}
while (a!=0);
printf("c=%d",c);
}
74.編程實現:打印100以內個位數為6且能被3整除的所有數 。
#include <stdio.h>
void main()
{int i;
for (i=0;i<100;i++)
{if (i==6&&i%3==0)
??????printf("%d\n",i);
}
}
75.編程實現:從鍵盤輸入若干個整數(數據個數應不少于50),其值在0至4的范圍內,用-1作為輸入結束的標志,統計每個整數的個數。
76.編寫一個函數sort,將放到一維數組中的若干個數按從大到小的順序排序;在主函數中輸入若干個數到一個一維數組中,調用sort,對該數組進行排序,在主函數中將原數組和排好序的數組輸出。
77.輸入一個正整數,將其用質因子的乘積表示,并輸出結果,格式為:12=2×2×3。
78.輸入一個正整數,求出它的質因子的和,并輸出結果,格式為:12的質因子和=2+2+3=7。
79.編寫一個函數,判斷一個正整數是否為完數:如果一個數的除它本身以外的所有因數之和等于它本身,則它就是完數。主函數中找出1000以內的所有完數。
80.編寫函數GCD,求兩個正整數的最大公約數,主函數中輸入任意5個正整數,調用函數GCD,求出這5個數的最大公約數和最小公倍數。
81.編函數isprime判斷正整m是否為素數;如果是素數,返回正整數1,否則返回0;主函數中調用isprime,找出2到1000之間的所有素數。
#include<stdio.h>
#include<math.h>
int isprime(int);
void main()
{
int m;
for(m=2;m<=1000;m++)
??if(isprime(m))
?? printf("]",m);
}
int isprime(int a)
{
int i;
for(i=2;i<=sqrt(a);i++)
??if(a%i==0) return 0;
??return 1;
}
82.一維數組a中的若干個數已按從小到大的順序有序;在主函數中輸入一個數,將其插入到該數組中,使得原數組依然按原序有序,分別輸入原數組和插入新元素之后的數組。
#include<stdio.h>
void main()
{
int a[21],i,j,n,p,temp;
printf("請輸入數組元素的個數:");
scanf("%d",&n);
printf("請輸入%d個整數:\n",n);
for(i=0;i<n;i++)
??scanf("%d",&a);
for(i=1;i<=n-1;i++)
{
??for(j=0;j<=n-1-i;j++)
?? if(a[j]>a[j+1])
?? {
????temp=a[j];
????a[j]=a[j+1];
????a[j+1]=temp;
?? }
}
printf("原數組為:\n");
for(i=0;i<=n-1;i++)
??printf("]",a);
printf("\n請輸入插入的數:");
scanf("%d",&p);
for(i=0;i<=n-1;i++)
??if(p<a)
??{
?? temp=a;
?? a=p;
?? p=temp;
??
??}
a[n]=p;
printf("插入元素后的數組為:\n");
for(i=0;i<=n;i++)
??printf("]",a);
}
83.有5個國家名,編程實現按字母先后順序排序,然后分別輸出原數組和排序之后的數組。
#include<stdio.h>
#include<string.h>
void main()
{
char name[5][15],temp[15];
int i,j;
printf("請輸入國家名:\n");
for(i=0;i<5;i++)
??gets(name);
for(i=0;i<5;i++)
??for(j=0;j<4-i;j++)
?? if(strcmp(name,name[j+1])>0)
?? {
????strcpy(temp,name[j]);
????strcpy(name[j],name[j+1]);
????strcpy(name[j+1],temp);
?? }
printf("國家名排序后為:\n");
for(i=0;i<5;i++)
??printf("%s\n",name);
}
84.有一行文字,要求刪去其中的某個字符,此行文字和要刪的字符均由鍵盤輸入,分別輸出原文字和刪除之后的文字(注:原文字中的所有和要刪除字符相同的字符完全刪除)。
#include<stdio.h>
void main()
{
int i,j;
char a[10],N='n';
printf("請輸入一行9個的文字:\n");
gets(a);
printf("原文字為:\n");
puts(a);
for(i=0;i<=9;i++)
??if(a==N)
?? for(j=i;j<=9;j++)
????a[j]=a[j+1];
printf("刪除后文字為:\n");
puts(a);
}
85.打印如圖所示的楊輝三角,要求打印出n行,n由鍵盤輸入。
1
1 1
1 2 1
1 3 3??1
1 4 6??4??1
1 5 10 10 5 1
………
#include<stdio.h>
void main()
{
int i,j,N,a[21][21];
printf("請輸入打印的行數:\n");
scanf("%d",&N);
for(i=1;i<N+1;i++)
{
??a[1]=1;
??a=1;
}
for(i=3;i<N+1;i++)
??for(j=2;j<=i-1;j++)
?? a[j]=a[j-1]+a[j];
??for(i=1;i<N+1;i++)
??{
?? for(j=1;j<=i;j++)
????printf("m",a[j]);
?? printf("\n");
??}
??printf("\n");
}
86.編一個函數實現將一個整型的一維數組中的數逆序存放,不使用輔助數組。主函數輸入一個整型的一維數組,調用上述函數,將該數組逆置,將結果輸出。
#include<stdio.h>
#define N 10
void main()
{
int a[N],i,temp;
printf("enter array a:\n");
for(i=0;i<N;i++)
??scanf("%d",&a);
printf("array a:\n");
for(i=0;i<N;i++)
??printf("M",a);
for(i=0;i<N/2;i++)
{
??temp=a;
??a=a[N-i-1];
??a[N-i-1]=temp;
}
printf("\nNow,array a:\n");
for(i=0;i<N;i++)
??printf("M",a);
printf("\n");
}
87.編寫一個函數convert,求一個方陣的轉置矩陣;主函數中輸入方陣的階數和方陣,在主函數中將原矩陣和轉置矩陣按原格式輸出。
#include<stdio.h>
void main()
{
????void convert(int [10][10]);
int a[10][10],p,q,i,j;
printf("請輸入矩陣的行和列:\n");
scanf("%d",&p);
scanf("%d",&q);
????printf("請輸入矩陣的元素值:\n");
for(i=0;i<p;i++)
??for(j=0;j<q;j++)
?? scanf("%d",&a[j]);
printf("原矩陣為:\n");
????for(i=0;i<p;i++)
{
??for(j=0;j<q;j++)
?? printf("]",a[j]);
??printf("\n");
}
convert(a);
printf("轉置矩陣為:\n");
????for(i=0;i<q;i++)
{
??for(j=0;j<p;j++)
?? printf("]",a[j]);
??printf("\n");
}
????
}
void convert(int a[10][10])
{
int i,j,t;
????for(i=0;i<10;i++)
???? for(j=i+1;j<10;j++)
??{
?? t=a[j];
?? a[j]=a[j];
?? a[j]=t;
??}
}
88.求∏值,精度為10-5:∏/4≈1-1/3+1/5-1/7+……
#include<stdio.h>
void main()
{
float a=1.0,b;
int i;
????
????for(i=1;1.0/(2*i+1)>0.00001;i++)
{
??if(i%2!=0)
?? a-=1.0/(2*i+1);
??else
?? a+=1.0/(2*i+1);
}
b=4.0*a;
printf("b的值為:%f\n",b);
}
89.用公式計算:e≈1+1/1!+1/2! …+1/n!,精度為10-6。
#include<stdio.h>
float fun(int);
void main()
{
int i;
????float e=1.0;
for(i=1;fun(i)>0.00000001;i++)
???? e+=fun(i);
printf("e=%f\n",e);
}
float fun(int n)
{
int i;
????float term=1.0;
for(i=1;i<=n;i++)
??term/=i;
return term;
}
90.有一分數序列
2/1,3/2,5/3,8/5,13/8,21/13
??求該序列的前20項之和。
#include<stdio.h>
void main()
{
int i;
float a[22], b[20],p=0.0;
a[0]=1.0;
a[1]=1.0;
for(i=2;i<22;i++)
??a=a+a;
for(i=0;i<20;i++)
???? b=a/a;
for(i=0;i<20;i++)
???? p+=b;
printf("%f\n",p);
}
91.編一個子函數GCD,求兩個正整數的最大公約數,主程序輸入n個自然數,調GCD,求出這n個數的最大公約數。
#include<stdio.h>
int GCD(int,int);
void main()
{
int a[100],i,n,k;
printf("請輸入數組元素的個數:\n");
scanf("%d",&n);
printf("請輸入%d個正整數:\n",n);
for(i=0;i<n;i++)
??scanf("%d",&a);
????k=GCD(a[0],a[1]);
for(i=2;i<n;i++)
??k=GCD(k,a);
printf("輸入的%d個正整數的最大公約數是:%d\n",n,k);
}
int GCD(int x,int y)
{
int i,min,p,q,gcd;
if(x<=y)
??min=x;
else
??min=y;
for(i=1;i<=min;i++)
{
??p=x%i;
??q=y%i;
??if(p==0&&q==0)
?? gcd=i;
}
return gcd;
}
92.寫函數求sin(x)的值。計算公式為:Sin(x)=X-X3/3!+X5/5!-X7/7!+ …+(-1)n-1X2n-1/(2n-1)!。
#include<stdio.h>
float fun(float,int);
float sin(int,float);
float term(int);
void main()
{
int n;
????float x;
printf("請輸入n,x值:\n");
scanf("%d",&n);
scanf("%f",&x);
printf("sin(%f)=%f",x,sin(n,x));
}
float sin(int n,float x)
{
int i;
????float s=0.0;
????for(i=1;i<=n;i++)
s+=fun(-1.0,i-1)*fun(x,2*i-1)*term(2*i-1);
return s;
}
float fun(float x,int n)
{
int i;
float p=1.0;
for(i=0;i<n;i++)
??p=p*x;
return p;
}
float term(int n)
{
int i;
float q=1.0;
for(i=1;i<=n;i++)
??q/=i;
return q;
}
93.編一函數使用冒泡法對若干個整數按從小到大的順序排序,主函數中輸入若干個整數到一個一維數組中,調用排序函數,將其排序,最后將原數組和排好序的數組輸出。
#include<stdio.h>
#define N 10
void main()
{
int a[N],i,j,temp;
printf("請輸入10個整數:\n");
for(i=0;i<N;i++)
??scanf("%d",&a);
printf("\n");
printf("原始數據為:\n");
for(i=0;i<N;i++)
??printf("%d",a);
for(i=1;i<=N-1;i++)
{
??for(j=0;j<=N-i-1;j++)
?? if(a[j]>a[j+1])
?? {
????temp=a[j];
????a[j]=a[j+1];
????a[j+1]=temp;
?? }
}
printf("\n排序后的數據為:\n");
for(i=0;i<N;i++)
??printf("%d",a);
printf("\n");
}
94.求一個m行n列的二維數組中的這樣一個原素;它在它所在的行為最大,在它所在的列為最小。
#include<stdio.h>
#define N 4
#define M 5
void main()
{
int i,j,k,a[N] ,max,maxj,flag;
printf("please input matrix:\n");
for(i=0;i<N;i++)
??for(j=0;j<M;j++)
?? scanf("%d",&a[j]);
??for(i=0;i<N;i++)
??{
?? max=a[0];
?? maxj=0;
?? for(j=0;j<M;j++)
????if(a[j]>max)
????{
???? max=a[j];
???? maxj=j;
????}
????flag=1;
????for(k=0;k<N;k++)
???? if(max>a[k] )
???? {
??????flag=0;
??????continue;
???? }
????if(flag)
????{
???? printf("a[%d][%d]=%d\n",i,maxj,max);
???? break;
????}
??}
??if(! flag)
?? printf("It is not exist!\n");
}
95.編寫一個函數求給定字符串長度,主函數中輸入一個字符串,調用該子函數,求出該字符串的長度,輸出。
#include<stdio.h>
void main()
{
int length(char*p);
int len;
char str[20];
printf("input string:");
scanf("%s",str);
len=length(str);
printf("The length of string is %d.\n",len);
}
int length(char*p)
{
int n;
n=0;
while(*p!='\0')
{
??n++;
??p++;
}
return(n);
}
96.編寫一個函數將給定字符串復制到另一個字符串中去,主函數中輸入一個字符串,調用該子函數,復制出另一字符串,將兩個串輸出。
#include<stdio.h>
#include<string.h>
void main()
{
void copystr(char*,char*,int);
int m;
char str1[20],str2[20];
printf("\ninput string:");
gets(str1);
printf("which character that begin to copy?");
scanf("%d",&m);
if(strlen(str1)<m)
??printf("input error!");
else
{
??copystr(str1,str2,m);
??printf("result:%s\n",str2);
}
}
void copystr(char*p1,char*p2,int m)
{
int n;
n=0;
while(n<m-1)
{
??n++;
??p1++;
}
while(*p1!='\0')
{
??*p2=*p1;
??p1++;
??p2++;
}
*p2='\0';
}
97.寫函數求Cos(x)=1+X2/2!-X4/4!+X6/6!- …+(-1)nX2n/(2n)!。
#include<stdio.h>
float fun(float,int);
float cos(int,float);
float term(int);
void main()
{
int n;
????float x;
printf("請輸入n,x值:\n");
scanf("%d",&n);
scanf("%f",&x);
printf("cos(%f)=%f",x,cos(n,x));
}
float cos(int n,float x)
{
int i;
????float s=-1.0;
????for(i=1;i<=n;i++)
s+=fun(-1.0,i-1)*fun(x,2*i)*term(2*i);
return s;
}
float fun(float x,int n)
{
int i;
float p=1.0;
for(i=0;i<n;i++)
??p=p*x;
return p;
}
float term(int n)
{
int i;
float q=1.0;
for(i=1;i<=n;i++)
??q/=i;
return q;
}
98.編寫一個函數將給定字符串中的大寫字母轉換成小寫字母,主函數中輸入一個字符串,調用該子函數,進行轉換,將原字符串及轉換后的字符串輸出。
#include<stdio.h>
void main()
{
int i;
char a[11];
gets(a);
puts(a);
for(i=0;i<10;i++)
??if(a>=65&&a<=90)
?? a=a+32;
??
puts(a);
}
99.編寫一個函數將給定的兩個字符串連接成一個字符串:
??格式為:strcat(ch1,ch2);
??功能:將ch2復制到ch1的后面;
??主函數中輸入兩個字符串,調用該子函數,求出連接之后的字符串,將兩個原字符串及連接之后的結果串輸出。
#include<stdio.h>
#include<string.h>
void main()
{
char str1[20],str2[8];
gets(str1);
gets(str2);
strcat(str1,str2);
printf("%s\n",str1);
}
100.用40元錢買蘋果、西瓜和梨共100個,且三種水果都有。已知蘋果0.4元一個,西瓜4元一個,梨0.2元一個。問可以買多少個?編程輸出所有購買方案。
#include<stdio.h>
void main()
{int i=1,j,k;
??double r;
??printf("蘋果??西瓜?? 梨\n");
??while (i<=100)
??{
?? j=1;
?? while(j<=(10-i))
?? {
????k=100-i-j;
????r=2*i/5+4*j+i/5;
????if(r<=40)
??printf("%d}}\n",i,j,k);
????j++;
?? }
?? i++;
??}
}
101.編程:建立一個3×3的二維整數數組,求兩條對角線上元素值得和,并將結果輸出。(用函數調用方式編程)
102.編程計算:1*2*3+3*4*5+……+99*100*101的值。
#include<stdio.h>
void main()
{
int i,j,k,sum=0;
for(i=1,j=2,k=3;i<100,j<101,k<102;i+=2,j+=2,k+=2)
sum=sum+i*j*k;
printf("%d\n",sum);
}
103.有一個5×4的矩陣,編程實現:找出該矩陣中每行元素的最大值,并使該值成為該行的首列元素。
#include<stdio.h>
void main ()
{
int a[5][4]={6,7,8,9,2,7,8,7,4,8,9,5,2,4,6,7,2,4,1,2},b[5][4]={6,7,8,9,2,7,8,7,4,8,9,5,2,4,6,7,2,4,1,2},t,i,j,k,p;
int max[5]={6,2,4,2,2};
for(i=0;i<5;i++)
{for(j=1;j<4;j++)
????if(a[j]>max)
?? {??
????max=a[j];
?? }
}
?? for(k=0;k<5;k++)
?? {for(p=1;p<4;p++)
????if(max[k]!=b[k][p])
?????? {b[k][p]=b[k][p];}
????else
????{?? t=b[k][0];
???? b[k][0]=b[k][p];
???? b[k][p]=t;
????}
?? }
??????for(k=0;k<5;k++)
??????for(p=0;p<4;p++)
?? printf("\nb[%d][%d]=%d",k,p,b[k][p]);
?? printf("\n");
}
104.編寫一個程序,使輸入的一個字符串按反序存放在一字符數組中,然后輸出。要求:
??(1)在主調函數中輸入字符串;
??(2)寫函數完成由主調函數傳遞來的字符串按反序存放;
??(3)在主調函數中輸出結果。
#include<stdio.h>
#include<string.h>
void main()
{
void inverse(char str[]);
char str[100];
printf("輸入字符串:\n");
gets(str);
inverse(str);
printf("%s\n",str);
}
?? void inverse(char str[])
?? {char t;
???? int i,j;
??for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--)
??{t=str;
?? str=str[j-1];
?? str[j-1]=t;
??}
?? }
105.從鍵盤輸入五個字符串,分別求出字符串中長度最長和最短的字符串,請編程。(要求:不要使用strlen(_)函數編程)
106.輸入10個整數,將其中最小的數與第一個數對換,把最大的數與最后一個數對換。請編程實現。
#include<stdio.h>
#define N 10
void main()
{
int a[N],b[N],i,j,min,max,p,t;
printf("請輸入數據\n");
for(i=0;i<N;i++)
scanf("%d",&a);
for(i=0,j=0;i<N,j<N;i++,j++)
b[j]=a;
for(j=0;j<N;j++)
printf("=",b[j]);
printf("\n");
????for(i=1;i<N;i++)
{
??if(a[0]>a)
??{a[0]=a;
??min=a[0];}
}
????for(i=0;i<N-1;i++)
{
??if(a[N-1]<a)
??{a[N-1]=a;
?? max=a[N-1];}
}
for(j=0;j<N;j++)
{
??if(min!=b[j])
??{b[j]=b[j];}
?? else
?? {t=b[0];
????b[0]=b[j];
????b[j]=t;
?? }
}
????for(j=0;j<N;j++)
{if(max!=b[j])
{b[j]=b[j];}
else
{p=b[N-1];
??b[N-1]=b[j];
??b[j]=p;
}
}
????for(j=0;j<N;j++)
printf("=",b[j]);
????printf("\n");
}
107.寫一個判斷素數的函數,在主函數中調用素數的判斷函數,求出2到1000之間的素數的累加和,將結果輸出,請編程。
#include<stdio.h>
#include<math.h>
int isprime(int);
void main()
{
int i,sum=0;
for (i=2;i<=1000;i++)
if (isprime(i))
????sum=sum+i;
printf("%d\n",sum);
}
?? int isprime(int a)
?? {
????int j;
????for(j=2;j<=sqrt(a);j++)
??????if(a%j==0) return 0;
?? return 1;
?? }
108.編寫一函數,由實參傳來一個字符串,統計此字符串中字母、數字、空格和其他字符的個數,在主函數中輸入字符串以及輸出上述的結果。
#include<stdio.h>
int letter,digit,space,others;
void main()
{
void count(char[]);
char text[80];
printf("輸入字符串:\n");
gets(text);
printf("字符串是:");
puts(text);
letter=0;
digit=0;
space=0;
others=0;
count(text);
printf("letter:%d,digit:%d,space:%d,others:%d\n",letter,digit,space,others);
}
?? void count(char str[])
?? {int i;
????
??for(i=0;str!='\0';i++)
?? if((str>='a'&&str<='z')||(str>='A'&&str<='Z'))
???? letter++;
?? else if(str>='0'&&str<='9')
?? digit++;
?? else if(str==32)
?? space++;
?? else
?? others++;
?? }
109.請編程實現:將兩個字符串s1和s2比較,如果s1>s2,輸出一個正數;s1<s2,輸出一個負數;s1==s2,輸出0。
????要求:不要用strcpy函數,兩個串用gets函數讀入,輸出的正數或負數的絕對值應是相比較的兩個字符串相應字符的ASCⅡ碼的差值。
#include<stdio.h>
void main()
{
int i,resu;
char str1[100],str2[200];
printf("請輸入str1:\n");
gets(str1);
printf("請輸入str2:\n");
????????gets(str2);
i=0;
while((str1==str2)&&(str1!='\0')) i++;
if(str1=='\0'&&str2=='\0') resu=0;
else
??resu=str1-str2;
???????? printf("%d\n",resu);
}
110.編寫一個函數,由實參傳來一個字符串,把串中所有大寫字母變成相應的小寫字母;原串中所有的小寫字母變成相應的大寫字母,在主函數中輸入原字符串和輸出變換后的字符串,請編程。
#include<stdio.h>
void strupr(char str[]);
void main()
{
char text[20];
????printf("請輸入字符串:\n");
????gets(text);
printf("%s\n",text);
????strupr(text);
printf("%s\n",text);
}
??void strupr(char str[])
??{
?? int i;
?? for(i=0;str!='\0';i++)
?? if(str>='a'&&str<='z')
?? str=str+'A'-'a';
???? else if(str>='A'&&str<='Z')
??????str=str-'A'+'a';
??}
111.編程實現:由鍵盤輸入的任意一組字符中統計出大寫字母的個m和小寫字母的個數n,并輸出m、n中的較大者。
#include<stdio.h>
int fmax(int x,int y);
void main()
{
??char str[80];
??int m=0,n=0,i=0,k=0,c;
??printf("請輸入一個字符串\n");
??gets(str);
??for(i=0;str!='\0';i++)
??if('A'<=str&&str<='Z')
?? ++m;
??else if('a'<=str&&str<='z')
?? ++n;
??else
?? ++k;
??printf("有%d個大寫字母,有%d個小寫字母:\n",m,n);
??c=fmax(m,n);
??printf("max=%d\n",c);
}
int fmax(int x,int y)
??{
?? int z;
?? z=x>y?x:y;
?? return z;
??}
112.定義一個含有30個整形元素的數組,按順序分別賦予從2開始的偶數,然后按順序每五個數求出一個平均值,放在另一個數組中并輸出,請編程。
#include<stdio.h>
void main()
{
int a[30] ,i,j=0,b[6][5],p,k;
int c[6];
for(i=0;i<30;i++)
??a=2*(i+1);
????for(i=0;i<30;i++)
????
{
?? printf("=",a);
??????????j++;
??????????if(j%5==0) printf("\n");}
for(p=0;p<5;p++)
????????for(k=0;k<6;k++)
b[k][p]=a[5*k+p];
????????for(k=0;k<6;k++)
c[k]=(b[k][0]+b[k][1]+b[k][2]+b[k][3]+b[k][4])/5;
????????for(k=0;k<6;k++)
{printf("=",c[k]);}????
printf("\n");
}
113.輸入一個整數,判斷它能否被3,5,7整除,并輸出以下信息之一:
??(1)能同時被3,5,7整除;
??(2)能被其中兩數(要指出哪兩個數)整除;
??(3)能被其中一個數(要指出哪個數)整除。
#include<stdio.h>
void main()
{
int a;
printf("請輸入一個整數\n");
scanf("%d",&a);
if(a%3==0&&a%5==0&&a%7==0)
??printf("%d能同時被3,5,7整除\n",a);
else if(a%3!=0&&a%5==0&&a%7==0)
???? printf("%d能同時被5,7整除\n",a);
????else if(a%3==0&&a%5!=0&&a%7==0)
??printf("%d能同時被3,7整除\n",a);
???? else if(a%3==0&&a%5==0&&a%7!=0)
??printf("%d能同時被3,5整除\n",a);
???? else if(a%3==0&&a%5!=0&&a%7!=0)
??printf("%d能被3整除\n",&a);
???? else if(a%3!=0&&a%5==0&&a%7!=0)
?????? printf("%d能被5整除\n",a);
???? else if(a%3!=0&&a%5!=0&&a%7==0)
???? printf("%d能被7整除\n",a);
??else printf("%d不能被3,5,7整除\n",a);
總結