【打印ASCII码】输入一个除空格以外的可见字符(可以用键盘输入的字符),输出其ASCII码。
#include<stdio.h>
int main()
{
char a;
while(scanf("%c",&a)!=EOF)
printf("%d\n",a);
return 0;
}
【判断一个数是否同时被3和5整除】判断一个数n 能否同时被3和5整除,如果能同时被3和5整除输出YES,否则输出NO。例如当n=30,输出:YES;当n=81,输出:NO。
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
if (n%3==0&&n%5==0)
printf("YES");
else printf("NO");
return 0;
}
【幂的末尾】a^b的末3位数是多少?
#include<stdio.h>
#include<string.h>
int main()
{
int a,b,i;
long long m=1; //定义一个初始值为1的long long类型变量m,用于存储a的b次方的结果
scanf("%d %d",&a,&b);
for(i=1;i<=b;i++)
{
m=m*a; //m每次乘以一次a
m=m%1000; //每循环一次就对1000取模,防止m的值过大,其值为除去千位数的余数
}
if(m>=100)
printf("%d",m);
else if(m>=10)
printf("0%d",m);
else
printf("00%d",m);
return 0;
}
- 试编写程序求S=1+1*2+1*2*3+1*2*3*4+…+1*2*3*…*10的值
#include <stdio.h>
void main()
{ int i;
float s=0,term=1;
for(i=1;i<=10;i++)
{ s=s+term;
term=term*(i+1);
}
printf("sum%10.1f\n",s);
}
2. 编程利用以下公式求π的值。(取n=10000)
#include <stdio.h>
void main()
{ int i;
float e=1,term=1;
for(i=1;i<=100;i++)
{ term=term*i;
e=e+1./term;
}
printf("e=%10.6f\n",e);
}
3. 计算s=1+1/2+1/3+…+1/n的值,其中n的值由键盘输入。
#include <stdio.h>
void main()
{ int i,n;
float s=0;
printf("input n\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
s=s+1./i;
printf("s=%10.6f\n",s);
}
4. 编写程序,在屏幕上输出下面的图案(要求用for循环实现)。
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
#include <stdio.h>
void main()
{ int i,j,k;
for(i=1;i<=5;i++)
{ for(k=1;k<=2*i;k++)
printf(" ");
for(j=1;j<=5;j++)
printf("* ");
printf("\n");
}
}
5. 编写程序,输入整数n,并根据n的值打印图案(要求用for循环实现)。n为中间一行的*号个数。例如,当n=4时,图案为
*
* *
* * *
* * * *
* * *
* *
*
#include <stdio.h>
void main()
{ int i,j,n;
printf("input n\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{ for(j=1;j<=i;j++)
printf("* ");
printf("\n");
}
for(i=n-1;i>=1;i--)
{ for(j=1;j<=i;j++)
printf("* ");
printf("\n");
}
}
6. 从键盘输入若干个学生的成绩,-1作为结束标志,求出平均成绩及最高成绩并输出其结果。
#include <stdio.h>
void main()
{ int i,score,sum=0,max;
i=0;
printf("please input score:\n");
scanf("%d",&score);
max=score;
while (score!=-1)
{ sum=sum+score;
if(score>max)max=score;
i++;
scanf("%d",&score);
}
printf("max=%d\n",max);
printf("average=%f\n",(float)sum/i);
}
7. 编写一程序,从键盘输入n个数,输出其最大数和最小数,并输出它们在序列中的序号。
答案:
#include <stdio.h>
void main()
{ int i, n,x,max,min,maxi=1,mini=1;
printf("please input n:\n");
scanf("%d",&n);
printf("please input x:\n");
scanf("%d",&x);
max=x;min=x;
for(i=2;i<=n;i++)
{ scanf("%d",&x);
if(x>max) { max=x;maxi=i;}
if(x<min) { min=x;mini=i;}
}
printf("max=%d;maxi=%d\n",max,maxi);
printf("min=%d;mini=%d\n",min,mini);
}
8. 编程实现:输出由0、1、2、3组成的所有的各位数字均不相同的三位数,输出时每8个数占一行。
答案:
#include <stdio.h>
void main()
{ int i,j,k,n=0;
for(i=1;i<=3;i++)
for(j=0;j<=3;j++)
for(k=1;k<=3;k++)
if(i!=j&&i!=k&&j!=k)
{ n++;
printf("%5d",i*100+j*10+k);
if(n%8==0) printf("\n");
}
}
9. 输入一行字符,回车作为结束,分别统计出其中英文字母、空格、数字和其它字符的个数。
#include <stdio.h>
void main()
{ int shuzi=0,zimu=0,kge=0,qita=0;
char ch;
ch=getchar();
while(ch!='\n')
{ if(ch==' ') kge++;
else if(ch>='0'&&ch<='9') shuzi++;
else if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z') zimu++;
else qita++;
ch=getchar();
}
printf("数字=%d;字母=%d;空格=%d;其它%d",shuzi,zimu,kge,qita);
}
10. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
#include<stdio.h>
void main()
{ int Sn=0,a,n,i=0,t;
printf("Sn=a+aa+aaa+…+aaa…a\nplease input a,n:");
scanf("%d,%d",&a,&n);t=a;
while(i<n)
{ Sn=Sn+t;
t=10*t+a;
i++;
}
printf("%ld\n",Sn);
}
11. 编程实现:任意输入两个正整数,求它们的最大公约数和最小公倍数。要求最大公约数通过自定义函数来输出。
#include <stdio.h>
int GreatComDiv(int m,int n);
int LeaseComMul(int m,int n);
void main()
{ int m,n,t;
printf("请输入m和n的值:");
scanf("%d%d",&m,&n);
if((m<=0)||(n<=0))
{ printf("输入错误!请重新输入!\n");
scanf("%d%d",&m,&n);
}
if(m<n) {t=m;m=n;n=t;}
printf("m和n的最大公约数是: %d\n",GreatComDiv(m,n));
printf("m和n的最小公倍数是: %d\n",LeaseComMul(m,n));
}
int GreatComDiv(int m,int n)
{ int r;
r=m%n;
while(r!=0) /*利用辗除法,直到b为0为止*/
{ m=n;
n=r;
r=m%n;
}
return n;
}
int LeaseComMul(int m,int n)
{ int greatcomdiv;
greatcomdiv=GreatComDiv( m, n);
return m*n/greatcomdiv;
}
12. 编程实现:求出10~10000之内的所有素数。要求素数判断通过自定义函数来实现。
#include <stdio.h>
int sushu(int n);
void main()
{ int n;
for(n=10;n<=10000;n++)
if (sushu(n)) printf("%d是素数\n",n);
}
int sushu(int n)
{ int i;
for(i=2;i<n;i++)
if(n%i==0) return 0;
return 1;
}
13. 编程实现:输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为 。要求水仙花数的判断通过自定义函数来实现。
#include <stdio.h>
int fun(int n);
void main()
{ int i;
for(i=100;i<=999;i++)
if (fun(i)) printf("%d\n",i);
}
int fun(int n)
{int a,b,c;
a=n/100;
b=n/10%10;
c=n%10;
if (a*a*a+b*b*b+c*c*c==n) return 1;
return 0;
}
14. 编程实现:打印出2~1000之间的所有完数。所谓完数,是指这样的数,该数的各因子之和正好等于该数本身,例如:6=1+2+3;28=1+2+4+7+14;因此,6、28都是完数。要求完数的判断通过自定义函数来实现。
#include <stdio.h>
int wanshu(int n);
void main()
{ int n;
for(n=2;n<=1000;n++)
if (wanshu(n)) printf("%d是完数\n",n);
}
int wanshu(int n)
{ int i,s=0;
for(i=1;i<=n/2;i++)
if(n%i==0) s+=i;
if(s==n) return 1;
else return 0;
}
15. 编程实现:打印出10~9999之间的所有回文数,要求每10个数一行输出。要求回文数的判断通过自定义函数来实现。
#include <stdio.h>
int rev(int a);
void main()
{ int x, y,i=0;
for(x=10;x<10000;x++)
{ y=rev(x);
if(x==y)
{ printf("%6d",x);
i++;
if(i%10==0) printf("\n");
}
}
}
int rev(int a)
{ int m, b=0;
while(a!=0)
{ m=a%10;
b=b*10+m;
a=a/10;
}
return b;
}
16. 编程实现:打印出1~9999之间的所有同构数,所谓同构数是指一个数如果出现在该数平方的右端,该数就是同构数。如5,25都是同构数。要求同构数的判断通过自定义函数来实现。
#include <stdio.h>
int tgshu(int n);
void main()
{ int n;
for(n=1;n<=9999;n++)
if (tgshu(n)) printf("%d是同构数\n",n);
}
int tgshu(int n)
{ int d=1,nn,k=0,t;
nn=n*n;
t=n;
while(t!=0)
{ d=d*10;
t=t/10;
}
if(nn%d==n) return 1;
else return 0;
}
17. 给定一5*5的整型矩阵,求所有正对角线元素之和,并以矩阵的形式输出矩阵的值。要求:对角线元素之和及矩阵输出分别通过两个自定义函数来实现。
#include <stdio.h>
#define n 5
void out(int a[n][n] );
int he(int a[n][n]);
void main()
{ int a[n][n],i,j,s;
printf("input 5*5 elements\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
printf("\n");
s=he(a);
printf("he=%d\n",s);
out(a);
}
void out(int a[n][n])
{ int i,j;
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
printf("%6d",a[i][j]);
printf("\n");
}
}
int he(int a[n][n])
{ int i,sum=0;
for(i=0;i<n;i++)
sum+=a[i][i];
return sum;
}
18. 编程实现:输入一4*4的矩阵的值,求出每行的最大值并输出其所在列号。要求:通过通过自定义函数实现矩阵的输入输出。
#include <stdio.h>
#define n 4
void out(int a[n][n] );
void inp(int a[n][n]);
void main()
{ int a[n][n],i,j,k;
printf("input 5*5 elements\n");
inp(a);
for(i=0;i<n;i++)
{ k=0;
for(j=1;j<n;j++)
if(a[i][j]<a[i][k]) k=j;
printf(" 第%d行最小值为:%5d,它是第%2d列\n",i+1,a[i][k],k+1);
}
printf("\n");
out(a);
}
void inp(int a[n][n])
{ int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
void out(int a[n][n])
{ int i,j;
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("%6d",a[i][j]);
printf("\n");
}
}
19. 编程实现:任意给定一个十进制的整数,将其转换成二进制,按位将其存放到数组中,然后输出,要求数制转换通过自定义函数来实现。
#include <stdio.h>
int change(int x,int a[]) //返回值为二进制的位数
{ int n=-1;
while(x!=0)
{ n++;
a[n]=x%2;
x=x/2;
}
return n;
}
void main()
{ int x,a[20],i,n;
printf("input x\n");
scanf("%d",&x);
n=change(x,a);
for(i=n;i>=0;i--)
printf("%1d",a[i]);
printf("\n");
}
20. 编程实现:任意输入一个正整数,编程求出它是几位数并将其逆序输出。要求通过自定义函数实现求是几位数,该函数原形为:int ni(int x,int a[]);函数返回值是该数是几位数,x为给定的数,a中存放该数的各个位。
#include <stdio.h>
int ni(int x,int a[]) //返回值为数的位数
{ int n=-1;
while(x!=0)
{ n++;
a[n]=x%10;
x=x/10;
}
return n;
}
void main()
{ int x,a[20],i,n;
printf("input x\n");
scanf("%d",&x);
n=ni(x,a);
for(i=0;i<=n;i++)
printf("%1d",a[i]);
printf("\n");
}
21. 编写程序从键盘输入x和n的值,求xn (n为大于等于零的整数),要求用递归函数求xn 。
#include <stdio.h>
int exp(int x,int n);
void main()
{ int x,n;
printf("input x,n:\n");
scanf("%d%d",&x,&n);
printf("%d\n",exp(x,n));
}
int exp(int x,int n)
{ if (n==1) return x;
return x*exp(x,n-1);
}
22. 编写实现:输入两个正整数m,n(m>n),计算从m个元素中任意取n个元素的组合,计算机公式为:
要求通过递归函数求阶乘。
#include <stdio.h>
long int jch(int n)
{ if(n==1) return 1;
else return n*jch(n-1);
}
void main()
{ int m,n,zuhe;
printf("input two integers m,n(m>n)\n");
scanf("%d,%d",&m,&n);
if(m>=n) zuhe=jch(m)/(jch(n)*jch(m-n));
printf("%d,%d的组合为:%d",m,n,zuhe);
}
23. 编程实现:从键盘任意输入10个不相同的整数,然后,输入要查找的数x,如果在这10个数中找到x,则打印“Found!”;如果找不到,则打印“Not found!”。要求通过自定义函数实现查找功能。
#include <stdio.h>
void serach(int a[],int x)
{ int i;
for (i=0;i<10;i++)
if(a[i]==x)
{ printf("Found\n");
return ;
}
printf("Not found!\n");
}
void main()
{ int i,a[10],x;
printf("input 10 integers \n");
for (i=0;i<10;i++)
scanf("%d",&a[i]);
printf("input x\n");
scanf("%d",&x);
serach(a,x);
}
24. 从键盘输入某班20个学生的成绩和学号,然后从键盘任意输入一个学生的学号,查找出他的成绩并输出,若未找到,给出相应提示。要求通过自定义函数实现查找功能。
#include <stdio.h>
#include <string.h>
typedef struct
{ char no[10];
int score;
}studtype;
void search(studtype a[],char xno[])
{ int i;
for (i=0;i<20;i++)
if(strcmp(a[i].no,xno)==0)
{ printf("%d\n",a[i].score);
return ;
}
printf("Not found!\n");
}
void main()
{ studtype stu[20];
char xno[10];
int i;
printf("input 20 no,score\n");
for (i=0;i<20;i++)
scanf("%s%d",stu[i].no,&stu[i].score);
printf("input xno\n");
scanf("%s",xno);
search(stu,xno);
}
25. 编程实现:从键盘任意输入某班20个学生的姓名和成绩,输出最高分及不及格学生的人数。要求分别用两个自定义函数求最高分和不及格人数。
#define N 20
#include<stdio.h>
typedef struct
{ char name[10]; /*姓名*/
int score; /*成绩*/
}datatype;
int max(datatype stu[]); /*最高分函数声明*/
int num(datatype stu[]); /*不及格人数函数声明*/
void main()
{ datatype stu[N];
int i,max_score,n;
printf("请输入 %d 名职工姓名 成绩:\n", N);
for(i=0;i<N;i++)
scanf("%s%d",stu[i].name,&stu[i].score);
max_score=max(stu);
n=num(stu);
printf("最高分:%d;不及格人数%d",max_score,n);
}
int max(datatype stu[]) /*最高分函数定义*/
{ int m,i;
m=0;
for(i=1;i<N;i++)
if(stu[i].score>stu[m].score) m=i;
return stu[m].score;
}
int num(datatype stu[]) /*不及格人数函数定义*/
{ int i,n=0;
for(i=0;i<N;i++)
if(stu[i].score<60) n++;
return n;
}
26. 编程实现:输入2个降序排列的整数数列,将这两个数列合并存放到另一个数组中,要求每个数都一次到位,不得在新数组中重新排序。要求数列合并通过自定义函数来实现。
#define M 4
#define N 5
#include<stdio.h>
void merge(int a[],int b[],int c[]);
void main()
{ int i,a[M],b[N],c[M+N];
printf("请输入 %d 个降序排列的整数:\n", M);
for(i=0;i<M;i++)
scanf("%d",&a[i]);
printf("请输入 %d 个降序排列的整数:\n", N);
for(i=0;i<N;i++)
scanf("%d",&b[i]);
merge(a,b,c);
for(i=0;i<M+N;i++)
printf("%5d",c[i]);
}
void merge(int a[],int b[],int c[])
{ int i,j,k;
i=0;j=0;k=0;
while(i<M && j<N)
if(a[i]>b[j]) c[k++]=a[i++];
else c[k++]=b[j++];
while(i<M)
c[k++]=a[i++];
while(j<N)
c[k++]=b[j++];
}
27. 编程实现:输入N名职工的姓名及计算机水平考试的成绩,输出及格人数和及格的职工信息。要求:职工信息的输入和输出分别通过自定义函数来实现。
#define N 10
#include<stdio.h>
//#include<stdlib.h>
typedef struct
{ char name[10]; /*姓名*/
float score; /*成绩*/
}datatype;
void input(datatype work[]); /*input函数声明*/
void print(datatype work[]); /*print函数声明*/
void main()
{ datatype work[N];
input(work);
print(work);
}
void input(datatype work[]) /*input函数定义*/
{ int i;
printf("请输入 %d 名 学生的姓名 成绩:\n", N);
for(i=0;i<N;i++)
scanf("%s%f",work[i].name,&work[i].score);
}
void print(datatype work[]) /*print函数定义*/
{ int i;
for(i=0;i<N;i++)
if(work[i].score>60)printf("%10s\n",work[i].name);
}
28. 编程实现:从键盘输入10名学生的信息,包括学号、姓名、成绩,用一个排序函数sort完成学生成绩降序排列,并输出学生排序后的结果。
#define N 10
#include<stdio.h>
//#include<stdlib.h>
typedef
{ char num[20]; /*学号*/
char name[20]; /*姓名*/
float score; /*成绩*/
}stutype;
void input(stutype stu[]); /*input函数声明*/
void sort(stutype stu[]); /*sort函数声明*/
void print(stutype stu[]); /*print函数声明*/
int main()
{ stutype stu[N];
input(stu);
sort(stu);
print(stu);
return 0;
}
void input(stutype stu[]) /*input函数定义*/
{ int i;
printf("请输入 %d 名学生信息(学号 姓名 成绩):\n", N);
for(i=0;i<N;i++)
scanf("%s%s%f",stu[i].num,stu[i].name,&stu[i].score);
}
void sort(stutype stu[]) /*sort函数定义*/
{ int i,k,j;
stutype t;
for(i=0;i<N-1;i++)
{ k=i;
for(j=i+1;j<N;j++)
if(stu[k].score<stu[j].score) k=j;
if(k!=i)
{ t=stu[i];
stu[i]=stu[k];
stu[k]=t;
}
}
}
void print(stutype stu[]) /*print函数定义*/
{ int i;
printf("****名次 学号 姓名 成绩****\n");
for(i=0;i<N;i++)
printf("%6d%8s%8s%8.2f\n",i+1,stu[i].num,stu[i].name, stu[i].score);
}
29. 编程实现:任意输入一组不多于20个的升序排列的若干个整数,任意输入不多于10个的整数(-1作为输入结束标志),将其插入到该序列中,使其依然有序。要求:通过自定义函数实现将一个整数插入到一个有序序列中,使其依然有序。
#include <stdio.h>
void ins(int a[],int*n,int x);
void main()
{ int a[30],x,m,i;
m=-1;
printf("输入一组不多于20个的升序排列的若干个整数,-1作为输入结束标志\n");
scanf("%d",&x);
while(x!=-1)
{ m++;
a[m]=x;
scanf("%d",&x);
}
printf("输入一组不多于10个的升序排列的若干个整数,-1作为输入结束标志\n");
scanf("%d",&x);
while(x!=-1)
{ ins(a,&m,x);
scanf("%d",&x);
}
for(i=0;i<=m;i++)
printf("%5d",a[i]);
}
void ins(int a[],int*n,int x)
{ int i=*n;
while(a[i]>x&&i>=0)
{ a[i+1]=a[i];
i--;
}
a[i+1]=x;
(*n)++;
}
30. 一个班级有30个学生,每个学生有学号、姓名及数学、语文、计算机成绩、平均成绩。
要求编程实现以下功能:
1) 从键盘上输入30个学生的信息,平均成绩通过公式:平均成绩=(数学+语文+计算机)/3计算得出。
2) 输出所有平均成绩大于等于85的学生姓名(要求用自定义函数实现该功能)。
#include <stdio.h>
#define n 30
typedef struct
{ char no[11], name[9];
int math,chiness,comp;
float ave;
}studtype;
void out(studtype a[])
{ int i;
for (i=0;i<n;i++)
if(a[i].ave>=85)printf("%10s\n",a[i].name);
}
void main()
{ studtype stu[n];
int i;
printf("input no,name,math,chiness,computer\n");
for (i=0;i<n;i++)
{ scanf("%s%s%d%d%d",stu[i].no,stu[i].name,&stu[i].math,&stu[i].chiness,&stu[i].comp);
stu[i].ave=(stu[i].math+stu[i].chiness+stu[i].comp)/3.0;
}
out(stu);
}