C语言程序设计

1 在屏幕上用“*”显示一个周期内的cos曲线 

#include<stdio.h>
#include<math.h>
main()
{
 double y;
 int x,m;
 for(y=1;y>=-1;y-=0.1) //y为列方向,从-1到1,步长为0.1
 {
  m=acos(y)*10;        //计算出y对应的弧度,并扩大10倍
  for(x=1;x<m;x++)
   printf(" ");
  printf("*");
  for(;x<62-m;x++)
   printf(" ");
  printf("*\n");
 }
}

结果如下:

2 设计一个简单函数

#include<stdio.h>
#include<math.h>
void main()
{
 float x;
 scanf("%f",&x);
 if(x<1.0)
  printf("y=%f\n",x);
 else if(x>=1.0 && x<10.0)
  printf("y=%f\n",2*x-1);
 else
  printf("y=%f\n",3*x-11);

}

 

3 枚举(Enum)变量

使用枚举变量可以提高程序的可读性,用有意义的名字来代替数字;限定了枚举变量的取值范围。

#include<iostream.h>
int main()
{
 enum day{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};
 day currentDay;
 currentDay=Tuesday;
 cout<<"Current day is"<<currentDay<<endl;
 return 0;
}

 

4 二维数组转置

#include<iostream.h>
#include<iomanip.h>
void main()
{
 int A[2][3]={1,2,3,4,5,6};
 int B[3][2];
 cout<<"原数组为:"<<endl;
 for(int m=0;m<2;m++)
 { for(int n=0;n<3;n++)
   cout<<A[m][n]<<setw(4);
     cout<<endl;
 } 
 cout<<"转置后数组为:"<<endl;
 for(int i=0;i<3;i++)
 {
  for(int j=0;j<2;j++)
  {
   B[i][j]=A[j][i];
   cout<<B[i][j]<<setw(4);
  }
  cout<<endl;
 }
}

 

5. 输入一个不超过5位的整数,判断它的位数并计算最高位的数值

#include<stdio.h>
void main()
{
 int n1,n2,n3,n4,input;
 scanf("%d",&input);
 n1=input/10000;
 n2=input/1000;
 n3=input/100;
 n4=input/10;
 if(input/10000!=0)
  printf("这是一个5位数,万位数为:%d\n",n1);
 else if(input/1000!=0)
  printf("这是一个4位数,千位数为:%d\n",n2);
 else if(input/100!=0)
  printf("这是一个3位数,百位数为:%d\n",n3);
 else if(input/10!=0)
  printf("这是一个2位数,十位数为:%d\n",n4);
 else
  printf("这是一个个位数: %d\n",input);
}

 

6. 在一定范围内输入若干实数,当所有实数之和超过最大值时,停止输入,并计算输入数据的平均值

#include<stdio.h>
#define SUM 10000
void main()
{
 float amount,aver,total=0;
 for(int i=1;i<=1000;i++)
 {
  printf("please enter amount:");
  scanf("%f",&amount);
  total+=amount;
  if(total>=SUM)
   break;
 }
 aver=total/i;
 printf("num=%d\naver=%.2f\n",i,aver);
}
 
 
7 从键盘输入一个小于1000的正整数,如果小于1000,则输出其平方根(整数值),否则继续输入合适的整数值。
#include<stdio.h>
#include<math.h>
int main()
{
 int i,k;
 scanf("%d",&i);
 while(i>=1000)
 {
  printf("请重新输入数字:");
  scanf("%d",&i);
  if(i<1000)
   break;
 }
 k=sqrt(i);
 printf("平方根为:%d\n",k);
 return 0;
}
程序运行结果:
 
8 输出一百分制成绩,按分数高低排等级
#include<stdio.h>
int main()
{
 float score;
 char grade;
 scanf("%f",&score);
 while(score>100 || score<0)
 {
  printf("分数输入错误,请重新输入:\n");
  scanf("%f",&score);
 }
 switch((int)(score/10))
 {
 case 10:
  grade='A';break;
 case 9:
  grade='A';break;
 case 8:
  grade='B';break;
 case 7:
  grade='C';break;
 case 6:
  grade='D';break;
 default:
  grade='E';
 }
 printf("学生的成绩为:%5.1f, 相应的等级为:%c\n",score,grade);
 return 0;
}
运行结果:
 
 
9  给一个不多于五位的正整数:
求出它是几位数,并输出每一位的数字,并按逆序输出各位数字
#include<stdio.h>
int main()
{
 int num,indiv,ten,hundred,thousand,ten_thousand,place;
 //分别代表输入的整数,其个位,十位,百位,千位,万位和位数
 printf("请输入一个整数(0-99999): ");
 scanf("%d",&num);
 while(num>99999 || num<0)
 {
  printf("请重新输入数字:");
  scanf("%d",&num);
 }
 if(num>9999)
  place=5;
 else if(num>999)
  place=4;
 else if(num>99)
  place=3;
 else if(num>9)
  place=2;
 else place=1;
 printf("位数:%d\n",place);
 printf("每位数字为:");
 ten_thousand=num/10000;
 thousand=(int)(num-ten_thousand*10000)/1000;
 hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;
 ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;
 indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);
 switch(place)
 {
  case 5:
   printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);
   printf("\n反序数字为:");
   printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_thousand);
   break;
  case 4:
   printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);
   printf("\n反序数字为:");
   printf("%d%d%d%d\n",indiv,ten,hundred,thousand);
   break;
  case 3:
   printf("%d,%d,%d",hundred,ten,indiv);
   printf("\n反序数字为:");
   printf("%d%d%d\n",indiv,ten,hundred);
   break;
  case 2:
   printf("%d,%d",ten,indiv);
   printf("\n反序数字为:");
   printf("%d%d\n",indiv,ten);
   break;
  case 1:
   printf("%d",indiv);
   printf("\n反序数字为:");
   printf("%d\n",indiv);
   break;
 }
  return 0;
}
运行结果:
 
10 用数组来求取Fibonacci数列的前二十项
#include<stdio.h>
int main()
{
 int f[20]={1,1};
 for(int i=2;i<20;i++)
  f[i]=f[i-1]+f[i-2];
 printf("前20个Fibonacci数为:\n");
 for(i=0;i<20;i++)
 {
  if(i%5==0)
   printf("\n");
  printf("%8d",f[i]);
 }
 printf("\n");
 return 0;
}
 
 
11 用冒泡法对10个数排序(由大到小)
#include<stdio.h>
int main()
{
 int t,a[10];
 printf("Please input 10 int_numbers:\n");
 for(int i=0;i<10;i++)
  scanf("%d",&a[i]);
 for(int j=0;j<9;j++)
  for(i=0;i<9-j;i++)
   if(a[i]<a[i+1])
   {
    t=a[i];
    a[i]=a[i+1];
    a[i+1]=t;
   }
 printf("the sorted numbers :\n");
 for(i=0;i<10;i++)
  printf("%d ",a[i]);
 printf("\n");
 return 0;
}
 
12 指针数组与数组指针

#include<stdio.h>
int main()
{
 char *p[3];//定义一个指针数组p,每个元素都是一个4字节的指针
 printf("指针数组:%d\n",sizeof(p));
 printf("指针数组中的元素:%d\n",sizeof(*p)); //*p为指针数组的第一个元素,指针型

 char (*q)[3];//定义一个数组指针q,指向char型数组的指针,数组中的每个元素都是一个char型数据
 printf("\n数组指针:%d\n",sizeof(q));//q本身为一个指针,而非数组
 printf("数组中的元素:%d\n",sizeof(*q));//(*q)代表一个数组,故输出数组的元素,char占一个字节

 int x[3];
 int *y=x;
 printf("\n指针y:%d\n",sizeof(y));
 printf("数组的第二个元素:%d\n",sizeof(*y+1)); //int型所占用字节数
 return 0;
}

 
 
13 求取一个3*4数组中的最大值及所在行号与列号
#include<stdio.h>
int main()
{
 int a[3][4]={{7,9,-2,3},{1,55,-8,16},{34,13,-1,22}};
 int row=0,colum=0,max;
 max=a[0][0];
 for(int i=0;i<3;i++)
  for(int j=0;j<4;j++)
   if(a[i][j]>max)
   {
    max=a[i][j];
    row=i;
    colum=j;
   }
   printf("数组中最大值:%d\n",max);
   printf("在第%d行,第%d列\n",row,colum);
 return 0;
}
 
14 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开来。
#include<stdio.h>
int main()
{
 char s[50];
 int i,num=0,w=0;
 char word;
 gets(s);
 for(i=0;(word=s[i])!='\0';i++)
  if(word==' ')
   w=0;
  else if(w==0)
  {
   num++;
   w=1;
  }
 printf("输入的字符串中有%d个单词\n",num);
 return 0;   
}
 
15 用弦截法求方程的根

#include<stdio.h>
#include<math.h>
float f(float x)  //定义f函数,以实现f(x)
{
 float y;
 y=((x-5.0)*x+16.0)*x-80.0;
 return y;
}
float xpoint(float x1,float x2)  //定义xpoint函数,求出弦与x轴交点
{
 float x;
 x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
 return x;
}

float root(float x1,float x2) //定义root函数,求取近似根,x1和x2为输入的两个横坐标
{
 float x,y,y1;
 y1=f(x1);
 do
 {
  x=xpoint(x1,x2);
  y=f(x);
  if(y*y1>0)    //同符号
  {
   y1=y;
   x1=x;
  }
  else
   x2=x;
 }
 while(fabs(y)>=0.0001);
 return x;
}

int main()
{
 float x1,x2,y1,y2,x;
 do
 {
  printf("input x1,x2:\n");
  scanf("%f,%f",&x1,&x2);
  y1=f(x1);
  y2=f(x2);
 }
 while(y1*y2>0);
 x=root(x1,x2);
 printf("A root of equation is %8.4f\n",x);
 return 0;
}

 
16 用递推方法求解正整数的阶乘。
#include<stdio.h>
long fun(int n)
{
 long c;
 if(n==0||n==1)
  c=1;
 else
  c=fun(n-1)*n;
 return c;
}
int main()
{
 int n;
 long r;
 printf("请输入一个自然数:");
 scanf("%d",&n);
 while(n<0)
 { 
  printf("请重新输入一个自然数:");
  scanf("%d",&n);
 }
 r=fun(n);
 printf("%d!=%ld\n",n,r);
 return 0;
}
 
17 有两个数组a和b,各有10个元素,将它们对应地逐过比较,如果a数组中的元素大于b数组中的相应元素的数目多于b数组中元素大于a数组中相应元素的
数目,则认为a数组大于b数组,并分别统计出两个数组相应元素大于,等于,小于的次数。

#include<stdio.h>
int main()
{
 int large(int ,int);
 int a[10],b[10],i,m=0,n=0,k=0;
 printf("Enter array a:\n");
 for(i=0;i<10;i++)
  scanf("%d",&a[i]);
 printf("\nEnter array b:\n");
 for(i=0;i<10;i++)
  scanf("%d",&b[i]);
 printf("\n");

 for(i=0;i<10;i++)
 {
  if(large(a[i],b[i])==1)
   m++;
  else if(large(a[i],b[i])==-1)
   n++;
  else
   k++;
 }
 printf("a[i]>b[i] %d times\n",m);
 printf("a[i]<b[i] %d times\n",n);
 printf("a[i]=b[i] %d times\n",k);
 return 0;
}

int large(int x,int y)
{
 int flag;
 if(x>y)
  flag=1;
 else if(x<y)
  flag=-1;
 else
  flag=0;
 return flag;
}

 
 
18  用选择法对数组中10个整数按从大到小排序,选择法是先将10个数中最大的数与a[0]交换,以此类推,每比较一轮,找出一个未经排序数中最大的一个,共比较9轮
#include<stdio.h>
int main()
{
 void sort(int array[],int n);
 int a[10],i;
 printf("enter the array\n");
 for(i=0;i<10;i++)
  scanf("%d",&a[i]);
 sort(a,10);
 printf("the sorted array:\n");
 for(i=0;i<10;i++)
  printf("%d ",a[i]);
 printf("\n");
 return 0;
}
void sort(int array[],int n)
{
 int i,j,k,t;
 for(i=0;i<n-1;i++)
 {
  k=i;
  for(j=i+1;j<n;j++)
  {
   if(array[j]>array[k])
    k=j;
   t=array[k];
   array[k]=array[i];
   array[i]=t;
  } 
 }
}
 
 
 
19  有一个字符串,内有若干个字符,今输入一个字符,要求程序将字符串中该字符删除,用外部函数实现。
//主文件file1.c

#include<stdio.h>
int main()
{
 extern void enter_string(char str[]);
 extern void delete_string(char str[],char ch);
 extern void print_string(char str[]);

 //声明将在其他文件中调用该函数

 char c;
 char str[80];
 enter_string(str);
 printf("在该字符串中,请输入需要删除的字符:");
 scanf("%c",&c);
 delete_string(str,c);
 print_string(str);
 return 0;
}

 //文件file2.c,函数定义文件
#include<stdio.h>
void enter_string(char str[80])
{
 printf("请输入字符串:\n");
 gets(str);
}
void delete_string(char str[],char ch)
{
 int i,j;
 for(i=j=0;str[i]!='\0';i++)
  if(str[i]!=ch)
   str[j++]=str[i];
  str[j]='\0';
}
void print_string(char str[])
{
 printf("新的字符串为:%s\n",str);
}
 
 
 
 
20  在数组中查找元素

#include<stdio.h>
#define WEI 8
int find(int a[],int n,int key)
{
 int i;
 for(i=0;i<n && a[i]!=key;i++);
 if(i<n)
  return i;
 else
  return -1;
}


void main()
{
 int b[8]={1,13,9,5,18,23,66,100};
 int i,d;
 int key;

 printf("原数组为:\n");
 for(i=0;i<WEI;i++)
  printf("%4d ",b[i]);
 printf("\n输入要查找的关键字为:");
  scanf("%d",&key);

 d=find(b,WEI,key);
 printf("%d在数组中的位置为:%d\n",key,d);

}

程序运行结果为:

 
21 输入a和b两个整数,交换指针
#include<stdio.h>
void main()
{
 int *p1,*p2,*p,a,b;
 scanf("%d%d",&a,&b);
 p1=&a;
 p2=&b;
 if(a<b)
 {
  p=p1;
  p1=p2;
  p2=p;
 }
 printf("a=%d,b=%d\n",a,b);
 printf("交换指针后:max=%d,min=%d\n",*p1,*p2);
}
 
改变指针变量所指向的变量
#include<stdio.h>
void swap(int *x1,int *x2)
{
 int temp;
 temp=*x1;
 *x1=*x2;
 *x2=temp;
}
void main()
{
 
 int *p1,*p2;
 int a,b;
 scanf("a=%d,b=%d",&a,&b);
 p1=&a;
 p2=&b;
 if(a<b)
  swap(p1,p2);
 printf("交换指针所指向变量后:a=%d,b=%d\n",a,b);
 printf("*p1=%d,*p2=%d\n",*p1,*p2);
}
 
22 将数组a[n]中n个整数按相反顺序存放

#include<stdio.h>
void inv(int x[],int n)
{
 int temp,i,j,m=(n-1)/2;
 for(i=0;i<=m;i++)
 {
  j=n-1-i;
  temp=x[i];
  x[i]=x[j];
  x[j]=temp;
 }
}

void main()
{
 int i,a[10];
 printf("请输入10个整数:");
 for(i=0;i<10;i++)
  scanf("%d",&a[i]);
 inv(a,10);
 printf("逆序后:");
 for(i=0;i<10;i++)
 printf("%d ",a[i]);
 printf("\n");
}

 
 
 
23 有一个班,3个学生,各学4门课程,计算总平均分数,以及第n个学生的成绩,在此基础上查找有一门以上课程不及格的学生,打印出他们的全部成绩。

#include<stdio.h>
void main()
{
 void average(float *p,int n);
 void search(float (*p)[4],int n);
 void find(float (*p)[4],int n);
 float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
 average(*score,12); //求十二个分数的平均值
 search(score,1);    //求序号为1的学生成绩
 find(score,3);      //查找不及格
}

void average(float *p,int n)
{
 float sum=0,*q;
 q=p+n;

 for(;p<q;p++)
  sum+=(*p);
 printf("所有学生的所有课程总平均成绩:%5.2f\n",sum/n);
}

void search(float (*p)[4],int n)
{
 int i;
 printf("\n序号为%d的学生成绩为:\n",n);
 for(i=0;i<4;i++)
  printf("%-8.2f",*(*(p+n)+i));
 printf("\n\n");
}
void find(float (*p)[4],int n)
{
 int i,j,k,flag;
 for(i=0;i<n;i++)
 {
  flag=0;
  for(j=0;j<4;j++)
   if(*(*(p+i)+j)<60)
    flag=1;
  if(flag==1)
  {
   printf("No.%d fails,his score are:\n",i+1);
   for(k=0;k<4;k++)
    printf("%-8.2f",*(*(p+i)+k));
   printf("\n");
  }
 }
}

 
24 对候选人得票的结果进行统计,设有3个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果
#include<stdio.h>
#include<string.h>
struct person
{
 char name[20];
 int count;
}
leader[3]={{"Li",0},{"Zhang",0},{"Wang",0}};
void main()
{
 int i,j;
 char n[20];
 printf("请输入有效候选人:\n");
 for(i=0;i<10;i++)
 {
  scanf("%s",n);
  for(j=0;j<3;j++)
  {
   if(strcmp(n,leader[j].name)==0)
    leader[j].count++;
  }
 }
 printf("\n得票统计结果如下:\n");
 for(i=0;i<3;i++)
  printf("%5s:%d\n",leader[i].name,leader[i].count);
 printf("\n");
}
 
 
25 建立一个简单的链表,它由3个学生数据的结点组成。输出各结点中的数据
#include<stdio.h>
struct student
{
 long num;
 float score;
 struct student *next;
};
void main()
{
 struct student a,b,c,*head,*p;
 a.num=20901;
 a.score=88.5;
 b.num=20902;
 b.score=90;
 c.num=20903;
 c.score=89;
 head=&a;
 a.next=&b;
 b.next=&c;
 c.next=NULL;
 p=head;
 do
 {
  printf("%ld %5.1f\n",p->num,p->score);
  p=p->next;
 }
 while(p!=NULL);
}
 
26 用选择法对10个整数按由大到小顺序排列
#include<stdio.h>
void sort(int a[],int n)
{
 int i,j,k,t;
 for(i=0;i<n-1;i++)
 {
  k=i;
  for(j=i+1;j<n;j++)
  {
   if(a[k]<a[j])
    k=j;
  }
  if(k!=i)
  {
   t=a[k];
   a[k]=a[i];
   a[i]=t;
  }
 }
}
void main()
{
 int *p,i,x[10];
 p=x;
 for(i=0;i<10;i++)
  scanf("%d",p++);
 p=x;
 sort(p,10);
 printf("重新排序后:\n");
 for(p=x,i=0;i<10;i++)
  printf("%4d",*p++);
 printf("\n");
}
 
27. 将字符串a复制为字符串b
#include<stdio.h>
void main()
{
 char a[]="I am a boy!";
 char b[20];
 for(int i=0;*(a+i)!='\0';i++)
  *(b+i)=*(a+i);
 *(b+i)='\0';
 printf("string a is: %s\n",a);
 printf("string b is: ");
 for(i=0;*(b+i)!='\0';i++)
  printf("%c",b[i]);
 printf("\n");
}
 
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值