C语言经典编程:
1.打印输出hello world
#include<stdio.h>
int main(){
printf("hello world");
return 0;
}
2.一个整数加上100是一个完全平方数,加上168又是一个完全平方数,输出该数
#include<stdio.h>
int main(){
int x;
int n,m;
int i,j;
for(i=1;i<168/2+1;i++){
if(168%i==0){
j=168/i;
if(i>j&&(i+j)%2==0&&(i-j)%2==0)
{
m=(i+j)/2;
n=(i-j)/2;
x=m*n-100;
printf("%d+100=%d*%d\n",x,n,n);
printf("%d+168=%d*%d\n",x,m,m);
}
}
}
return 0;
}
3.判断输入日期是一年中的第几天
#include<stdio.h>
int main(){
int year,month,day,sum;
scanf("%d %d %d",&year,&month,&day);
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
sum=sum+day;
if(year%400==0||(year%4==0&&year%100!=0)){
if(month>2){
sum++;
}
}
printf("这是这一年的第%d天。",sum);
printf("\n");
return 0;
}
4.三个数由大到小排序输出
#include<stdio.h>
int main(){
int x,y,z,t;
scanf("%d %d %d",&x,&y,&z);
if(x>y){
t=x;
x=y;;
y=x;
}
if(x>z){
t=x;
x=z;
z=x;
}
if(y>z){
t=y;
y=z;
z=t;
}
printf("从小到大排序:%d %d %d\n",x,y,z);
return 0;
}
5.打印输出图不能用形(C语言字符乘法运算)
#include<stdio.h>
int main(){
int i,j;
for(j=1;j<=5;j++){
for(i=1;i<=j;i++){
printf("*");
}
printf("\n");
}
return 0;
}
6.打印101-200之间的素数
#include<stdio.h>
#include<math.h>
int main(){
int i,j;
int count=0;
for(i=101;i<=200;i++){
for(j=2;j<i;j++){
if(i%j==0) break;
}
if(j>=i){
count++;
printf("%d ",i);
if(count%5==0)
printf("\n");
}
}
return 0;
}
7.打印水仙花数
#include<stdio.h>
#include<math.h>
int main(){
int i,j,k;
int x;
for(x=100;x<=999;x++){
i=x/100%10;
j=x/10%10;
k=x%10;
if(i*i*i+j*j*j+k*k*k==x)
printf("%d ",x);
}
return 0;
}
8.将一个正整数分解质因数
#include<stdio.h>
int main(){
int i,n;
printf("请输入一个整数:");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++){
while(n%i==0){
printf("%d",i);
n/=i;
if(n!=1) printf("*");
}
}
printf("\n");
return 0;
}
9.成绩输出:将数字成绩转换为等级成绩
方法一:
#include<stdio.h>
int main(){
int score;
scanf("%d",&score);
if(score>=90)
printf("A");
else if(score>=60)
printf("B");
else
printf("C");
return 0;
}
方法二(使用条件运算符(a>b)?a:b):
#include<stdio.h>
int main()
{
int score;
char grade;
printf("请输入分数: ");
scanf("%d",&score);
grade=(score>=90)?'A':((score>=60)?'B':'C');
printf("%c\n",grade);
return 0;
}
10.求两个数的最大公约数和最小公倍数(辗转相除法)
#include<stdio.h>
int main(){
int m,n,t,x,y;
printf("请输入两个整数(空格隔开):");
scanf("%d %d",&m,&n);
if(m<n){
t=m;
m=n;
n=t;
}
x=m%n;
y=m*n;
while(x!=0){
m=n;
n=x;
x=m%n;
}
printf("这两个数的最大公约数是%d,最小公倍数是%d\n",m,y/m );
return 0;
}
11.统计输入字符中各种字符的个数
#include<stdio.h>
int main(){
//a,b,c分别统计字符串中英文字母、空格、数字和其他字符的个数
int a,b,c,d;
char x;
a=0;
b=0;
c=0;
d=0;
printf("请输入一行字符:\n");
while((x=getchar())!='\n'){
if((x>='a'&&x<='z')||(x>='A'&&x<='Z'))
a++;
else if(x>='0'&&x<='9')
b++;
// C语言中双引号表示字符串,这里只能是单引号
else if(x==' ')
c++;
else
d++;
}
printf("字母个数=%d,数字=%d,空格=%d,其他=%d",a,b,c,d);
return 0;
}
12.计算s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字
#include<stdio.h>
int main()
{
int s=0,a,n,i,t;
printf("请输入a和n:");
scanf("%d%d",&a,&n);
t=a;
for(i=n;i>0;i--){
s+=t;
a=a*10;
t+=a;
}
printf("a+aa+...=%d\n",s);
return 0;
}
13.打印1000以内的缩影完数(一个数恰好等于它的因子之和)
#include<stdio.h>
#define N 1000
int main()
{
int i,j,k,n,sum;
int a[256];
for(i=2;i<=N;i++)
{
sum=a[0]=1;
k=0;
for(j=2;j<=(i/2);j++)
{
if(i%j==0)
{
sum+=j;
a[++k]=j;
}
}
if(i==sum)
{
printf("%d=%d",i,a[0]);
for(n=1;n<=k;n++)
printf("+%d",a[n]);
printf("\n");
}
}
return 0;
14.小球从100米高度下落,每次反弹回原高度的一半;再落下。计算第n次落地时,共经过了多少米及反弹高度
#include<stdio.h>
int main()
{
float s,h,i;
int n;
s=h=100;
h=h/2;
printf("请输入次数:\n");
scanf("%d",&n);
for(i=2;i<=n;i++){
s=s+2*h;
h=h/2;
}
printf("第%d次落地时,共经过%f米,第%d次反弹高%f米\n",n,s,n,h);
return 0;
}
15.猴子吃桃问题
#include<stdio.h>
int main()
{
int day,x1=0,x2;
day=9;
x2=1;
while(day>0){
x1=(x2+1)*2;
x2=x1;
day--;
}
printf("总数为%d\n",x1);
return 0;
}
16.求1+2!+3!+...+20!的和。
#include<stdio.h>
int main()
{
long double s,a;
s=0;
a=1;
int i;
for(i=1;i<=20;i++){
a*=i;
s+=a;
}
printf("%Lf\n",s);
return 0;
}
17.递归输出至5!
#include<stdio.h>
int main(){
int i;
int fact(int);
for(i=0;i<6;i++){
printf("%d!=%d\n",i,fact(i));
}
return 0;
}
int fact(int j){
int s;
if(j==0){
s=1;
}
else{
s=j*fact(j-1);
}
return s;
}
18.利用递归调用方式将输入的5个字符反序打印输出
#include<stdio.h>
int main(){
int i=5;
printf("请输入5个字符:\n");
//注意输入不能有空格
fun(i);
printf("\n");
return 0;
}
void fun(int j){
char n;
if(j<=1){
n=getchar();
printf("反序输出结果为:");
putchar(n);
}
else{
n=getchar();
fun(j-1);
putchar(n);
}
}
19.递归求age
#include<stdio.h>
int main(){
int n;
printf("请输入一个整数:\n");
scanf("%d",&n);
printf("%d\n",age(n));
return 0;
}
int age(int n){
int a;
if(n==1) a=10;
else{
a=age(n-1)+2;
}
return (a);
}
20.给一个不多于5位的正整数,求它是几位数并逆序打印出各位数字
#include<stdio.h>
int main(){
long a,b,c,d,e,x;
printf("请输入一个5位数:\n");
scanf("%ld",&x);
a=x/10000;/*分解出万位*/
b=x%10000/1000;/*分解出千位*/
c=x%1000/100;/*分解出百位*/
d=x%100/10;/*分解出十位*/
e=x%10;/*分解出个位*/
if(a!=0) printf("5位数,逆序为:%ld %ld %ld %ld %ld\n",e,d,c,b,a);
else if(b!=0) printf("4位数,逆序为:%ld %ld %ld %ld\n",e,d,c,b);
else if(c!=0) printf("3位数,逆序为:%ld %ld %ld\n",e,d,c);
else if(d!=0) printf("2位数,逆序为:%ld %ld %ld %ld\n",e,d);
else if(e!=0) printf("1位数,逆序为:%ld %ld %ld %ld\n",e);
return 0;
}
21.判断一个5位数是否为回文数
#include<stdio.h>
int main(){
long n;
printf("请输入一个5位数:\n");
scanf("%ld",&n);
int a,b,c,d,e;
a=n/10000;
b=n%10000/1000;
d=n%100/10;
e=n%10;
if(a==e&&b==d) printf("这是回文数\n");
else printf("这不是回文数\n");
return 0;
}
22.输入星期的第一个字母判断是星期几
#include<stdio.h>
int main()
{
char i,j;
printf("请输入第一个字母:\n");
scanf("%c",&i);
getchar();
//scanf("%c",&j);的问题,第二次是读入的一个换行符,
//而不是输入的字符,因此需要加一个getchar() 吃掉换行符
switch(i)
{
case 'm':
case 'M':
printf("Monday\n");
break;
case 'w':
case 'W':
printf("Wednesday\n");
break;
case 'f':
case 'F':
printf("Friday\n");
break;
case 't':
case 'T':
printf("请输入下一个字母\n");
scanf("%c",&j);
if (j=='u') {printf("Tuesday\n");break;}
if (j=='h') {printf("Thursday\n");break;}
case 's':
case 'S':
printf("请输入下一个字母\n");
scanf("%c",&j);
if (j=='a') {printf("Saturday\n");break;}
if (j=='u') {printf("Sunday\n"); break;}
default :
printf("error\n"); break;
}
return 0;
}
23.打印输出英文26个大小写字母
#include<stdio.h>
int main(){
int i;
for(i=0;i<26;i++)
putchar('A'+i);
putchar('\n');
int j;
j=0;
while(j<26){
putchar('a'+j);
j++;
}
return 0;
}
24.计算输入的5个数的平均值
#include<stdio.h>
int main(){
int i,n[5],sum;
i=0;
sum=0;
printf("please enter 5 integers:\n");
while(i<5){
scanf("%d",&n[i]);
sum+=n[i];
i++;
}
for(i=0;i<5;i++){
printf("%5d",n[i]);
}
putchar('\n');
printf("%d\n",sum/5);
return 0;
}
25.计算字符串中数字的个数
#include<stdio.h>
int main(){
int num;
char ch;
//int ch;
//这里也可以写成int类型,因为对应的是其ASCII码
do{
ch=getchar();
if(ch>='0'&&ch<='9')
num++;
}while(ch!='\n');
printf("%d",num);
return 0;
}
26.从键盘输入一行英文句子,将每个单词的首字符改成大写字母输出
#include<stdio.h>
int main()
{
int i = 0, flag = 1;
char a[100];
gets(a);
for(i = 0; a[i] != '\0'; i++)
{
if(a[i] == ' ')
{
flag = 1;
}
if((flag == 1)&&(a[i]>='a'&&a[i]<='z'))
//a的ASCII码是97,z的ASCII码是122,也可以写成a[i]>=97&&a[i]<=122
{
//大小写字母的ASCII相差32
a[i]=a[i]-32;
flag = 0;
}
}
puts(a);
return 0;
}
27.从键盘分别输入两个分数的分子分母及操作(+-*/),运算后输出运算结果的分子和分母
#include<stdio.h>
int m=0,n=0; //定义全局变量m,n分别存放分子分母
void cal(int a,int b,int c,int d,char ch){
if(b==0||d==0) printf("error!\n");
else{
switch(ch){
case '+':m=a*d+b*c;n=b*d;break;
case '-':m=a*d-b*c;n=b*d;break;
case '*':m=a*c;n=b*d;break;
case '/':m=a*d;n=b*c;break;
default:printf("error!\n");
}
}
}
void fun(){
int i;
for(i=2;i<=m&&i<=n;i++){
while(m%i==0&&n%i==0){
m=m/i;
n=n/i;
}
}
}
int main(){
int a,b,c,d;
char op;
printf("please enter 4 integer and an op:\n");
scanf("%d %d %c %d %d",&a,&b,&op,&c,&d);
cal(a,b,c,d,op);
fun();
printf("%d/%d+%d/%d=%d/%d\n",a,b,c,d,m,n);
return 0;
}
定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。
1) 在 main 函数中定义的变量也是局部变量,只能在 main 函数中使用;同时,main 函数中也不能使用其它函数中定义的变量。main 函数也是一个函数,与其它函数地位平等。
2) 形参变量、在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。
3) 可以在不同的函数中使用相同的变量名,它们表示不同的数据,分配不同的内存,互不干扰,也不会发生混淆。
4) 在语句块中也可定义变量,它的作用域只限于当前语句块。
在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .c 和 .h 文件。对于不同作用域的变量,可以使用相同的名称;对于相同作用域的变量,不可以使用相同的名称。如果全局变量和局部变量使用了相同名称,则全局变量在该局部变量的作用域中无效,也就是无法被访问。
#include <stdio.h>
int n1,n2;//定义全局变量n1、n2分别存放分子和分母
int main()
{
void cal(int a,int b,int c,int d,int ch);//cal函数计算出分数运算后的结果,未约分
void fun();//用来对n1和n2进行约分
int a,b,c,d;
char ch;
printf("请输入表达式:");
scanf("%ld/%ld%c%ld/%ld",&a,&b,&ch,&c,&d);
cal(a,b,c,d,ch);//计算出还未约分的分子分母
fun();// 计算出约分后的分子分母
printf("%ld/%ld%c%ld/%ld=%ld/%ld\n",a,b,ch,c,d,n1,n2);
return 0;
}
void cal(int a,int b,int c,int d,int ch)
{
switch(ch)
{
case'+':n1=a*d+b*c;n2=b*d;break;
case'-':n1=a*d-b*c;n2=b*d;break;
case'*':n1=a*c;n2=b*d;break;
case'/':n1=a*d;n2=b*c;break;
default:printf("Error!\n");
}
}
void fun()
{
for(int i=2;i<=n1 && i<=n2;i++)
while(n1%i==0 && n2%i==0)
{
n1=n1/i;
n2=n2/i;
}
}
28.去除输入行中多余的空格
//去掉输入行中多余的空格,并将结果打印输出
#include<stdio.h>
#include<string.h>
main(){
char str1[80],str2[80];
int i,j;
printf("\nEnter a text line:\n");
gets(str1);
str2[0]=str1[0];
for(i=1,j=1;str1[i]!='\0';i++){
if(str1[i]==' '&&str1[i-1]==' ')
continue;
str2[j++]=str1[i];
}
str2[j]='\0';
puts(str2);
return 0;
}
29.逆序打印输出
#include<stdio.h>
#define NUM 20
int main(){
int s[NUM];
int i,temp;
printf("\nEnter %d integers:\n",NUM);
for(i=0;i<NUM;i++){
scanf("%d",&s[i]);
}
for(i=0;i<NUM;i++){
printf("%4d",s[i]);
}
for(i=0;i<NUM/2;i++){
temp=s[i];
s[i]=s[NUM-i-1];
s[NUM-i-1]=temp;
}
printf("\n");
for(i=0;i<NUM;i++){
printf("%4d",s[i]);
}
return 0;
}