简单c语言练习

 

作业一 计算器程序,编写一个可以进行加减乘除运算的程序。

解法1.

#include <stdio.h>
void main()
{
float a,b,c;
char d1;
scanf("%f%c%f",&a,&d1,&b);
       if(d1=='/'&&b==0)
       printf("error\n");
       else 
       {    if(d1=='-')
            c=a-b;
        else if(d1=='+')
            c=a+b;
        else if(d1=='*')
            c=a*b;
        else if(d1=='/')
            c=a/b;
        printf("%g%c%g=%g\n",a,d1,b,c);
        }
}

解法2.

#include<stdio.h>
void main()
{
 float a,b,c;
 char ch;
 scanf("%f%c%f",&a,&ch,&b);
 switch(ch)
 {
  case'+':c=a+b;printf("%f+%f=%f\n",a,b,c);break;
  case'-':c=a-b;printf("%f-%f=%f\n",a,b,c);break;
  case'*':c=a*b;printf("%f*%f=%f\n",a,b,c);break;
  case'/':if (b!=0)
        c=a/b,printf("%f/%f=%f\n",a,b,c);
        else
        printf("error\n");break;
  default:printf("not included\n");
 }
}

 

作业二.编写一个程序,可以输出倒三角形,直角三角形,正三角形,菱形,反平行四边形,平行四边形六种图形。

解法:

 1 #include <stdio.h>
 2 void main()
 3 {int a,i,j,n,m;
 4   printf("please enter number 1-6\n1,倒三角形\n2,直角三角形\n3,正三角形\n4,菱形\n5,反平行四边形\n6,平行四边形\n");
 5  scanf("%c",&a);
 6  printf("please enter n,m\n");
 7  switch(a)
 8  {case'1':
 9       scanf("%d,%d",&n,&m);
10           for(i=0;i<n;i++)
11           {for(j=0;j<i;j++)
12           printf(" ");
13       for(j=0;j<2*n-1-2*i;j++)
14           printf("*");
15           printf("\n");
16           };break;
17   case'2':
18           scanf("%d,%d",&n,&m);
19           for(i=1;i<=n;i++)
20           {for(j=1;j<=i;j++)
21           printf("*");
22           printf("\n");
23       };break;
24   case'3':
25           scanf("%d,%d",&n,&m);
26       for(i=1;i<=n;i++)
27       {for(j=1;j<=n-i;j++)
28       printf(" ");
29       for(j=1;j<=2*i-1;j++)
30       printf("*");
31       printf("\n");};break;
32   case'4':
33           scanf("%d,%d",&n,&m);
34       if(n%2==0)
35       printf("error\n");
36       else
37       {for(i=1;i<=(n+1)/2;i++)
38       {for(j=1;j<=(n+1)/2-i;j++)
39       printf(" ");
40       for(j=1;j<=2*i-1;j++)
41       printf("*");
42           printf("\n");
43           };
44       for(i=0;i<=(n-1)/2;i++)
45       {for(j=0;j<=i;j++)
46           printf(" ");
47       for(j=0;j<n-2-2*i;j++)
48           printf("*");
49       printf("\n");}}break;
50   case'5':
51       scanf("%d,%d",&n,&m);
52       for(i=1;i<=n;i++)
53      {for(j=1;j<i;j++)
54       printf(" ");
55       for(j=1;j<=m;j++)
56           printf("*");
57           printf("\n");}break;
58   case'6':
59            scanf("%d,%d",&n,&m);
60        for(i=0;i<n;i++)
61        {for(j=1;j<n-i;j++)
62        printf(" ");
63        for(j=0;j<m;j++)
64        printf("*");
65            printf("\n");}break;
66   default:
67           printf("not include\n");break;
68 }
69 }

作业三.(1)编写一个程序,往一个从小到大排列的数组中插入任意的数字,要求插入数字后数组还是要从小到大排列。

解法:

#include <stdio.h>
void main()
{
    int i,t,h;
    int a[11];
    printf("输入10位从小到大排列的数组\n");
    for(i=0;i<10;i++)
    scanf("%d",&a[i]);
    printf("\n");
    printf("输入你想插入的数字\n");
    scanf("%d",&h);
    a[10]=h;
    for(i=0;i<10;i++)
        if(a[i]>a[10])
        {t=a[i];
         a[i]=a[10];
         a[10]=t;
        }
    printf("输出地结果是:\n");
    for(i=0;i<11;i++)
        printf("%d",a[i]);
    printf("\n");
}

作业三(2)编写一个程序,可以用来判断一个字符数组是否为回文结构(如“1234321“)。

解法:

#include <stdio.h>
#include <string.h>
void main()
{
int i,j,f,k;
    char string[100];
    printf("输入你想判断的字符数组\n");
    gets(string);
    k=strlen(string);
    for(i=0,j=k-1,f=0;i<j;i++,j--)
        if(string[i]!=string[j])
       { printf("这个字符数组不是回文结构\n");
    f=1;break;}
     if(f==0)
         printf("这个字符数组是回文结构\n");
    }

作业四 编写一个程序,用于判断一年中的某一天是这一年的第几天。

解法1.

#include <stdio.h>
int main()
{ 
    int number(int x,int y,int z);
    int a,b,c,d;
    printf("输入你要判断的日期,格式为年 月 日\n");
    scanf("%d%d%d",&a,&b,&c);
    d=number(a,b,c);
    printf("这一天是当年的第%d天\n",d);
}
int number(int x,int y,int z)
{
    int i,n;
    int a[12];
    int sum=0;
    if((x%4!=0)||(x%100==0&&x%400!=0))
        {int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
            for(i=0;i<y-1;i++)
                sum=sum+a[i];}         
    else 
        {int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};
                       for(i=0;i<y-1;i++)
                           sum=sum+a[i];}
    n=sum+z;
    return(n);
}

解法2.

#include <stdio.h>
int main()
{ 
    int number(int x,int y,int z);
    int a,b,c,d;
    printf("输入你要判断的日期,格式为年 月 日\n");
    scanf("%d%d%d",&a,&b,&c);
    d=number(a,b,c);
    printf("这一天是当年的第%d天\n",d);
}
int number(int x,int y,int z)
{
    int n;
    int m;
    {if((x%4!=0)||(x%100==0&&x%400!=0))
        m=28;
    else m=29;}
    if(y<=2)
        n=(y-1)*31+z;
    else if(y>=8)
        {if(y%2==0)
            n=m+z+184+(y-8)*30+(y-8)/2;
    else
        n=m+z+184+(y-8)*30+(y-7)/2;}
    else {if(y%2==0)
         n=m+z+31+(y-3)*30+(y-2)/2;
    else 
        n=m+z+31+(y-3)*30+(y-3)/2;
    }
    return(n);
}

作业五 编写一个程序,要求输入一个五位整数,输出倒序后的五位整数。

解法:

#include <stdio.h>
int main()
{
     int reorder( int array[5]);
     int s,t;
    printf("输入一个要倒序的五位整数:\n");
        scanf("%d",&t);
         int a[5]={t/10000%10,t/1000%10,t/100%10,t/10%10,t%10};
    s=reorder(a);
    printf("倒序后的整数是:\n");
    printf("%d",s);
}
 int reorder( int array[5])
{
     int m,t;
     int n;
    for(m=0;m<3;m++)
    {t=array[m];
    array[m]=array[4-m];
    array[4-m]=t;
    }
    n=array[0]*10000+array[1]*1000+array[2]*100+array[3]*10+array[4];
    return(n);
}

 

作业六 编写双链表的程序。

解法:

#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
    long num;
    float score;
    struct student * plot;
    struct student * next;
};
int n;
struct student*creat(void)
{
    struct student*head;
    struct student*p1,*p2;
    n=0;
    p1=p2=(struct student*)malloc(LEN);
    scanf("%1d,%f",&p1->num,&p1->score);
    head=NULL;
    while(p1->num!=0)
    {
        n=n+1;
        if(n==1){head=p1;p1->plot=head;}
        else {p2->next=p1;p1->plot=p2;}
        p2=p1;
        p1=(struct student*)malloc(LEN);
        scanf("%1d,%f",&p1->num,&p1->score);
    }
    p2->next=NULL;
    return(head);
}

 

作业七 编写一个程序,用来判断字符串中符号是否配对。

解法:

#include <stdio.h>
struct node
    {   char b[100];
        int top;
    }match;
int main()
{
    char a[100];
    int i;
    printf("请输入一个不长于100个字符的算式:\n");
    scanf("%s",a);
    match.top=-1;
    for(i=0;i<100;i++)
    {
        if(a[i]=='('||a[i]=='['||a[i]=='{')
        {
            match.top++;
            match.b[match.top]=a[i];
        }
        else if(a[i]==')')
        {
            if(match.b[match.top]=='(')
                match.top--;
            else
            {
                printf("符号不配对。");
                return (0);
            }
        }
        else if(a[i]==']'||a[i]=='}')
        {
            if(match.b[match.top]==a[i]-2)
               match.top--;
            else
            {
                printf("符号不配对。");
                return (0);
            }
        }
        else if(a[i]=='\0')
            break;
        else continue;
    }
    if(match.top==-1)
        printf("表达式中符号是配对的\n");
    else printf("表达式中符号是不配对的\n");
}

 

附:

1.选择排序程序(利用指针进行交换)

 1 #include <stdio.h>
 2 void main()
 3 {
 4     void sort(int array[],int n);
 5     int a[10],i;
 6     printf("输入你要排序的十个数,格式为a b c \n");
 7     for(i=0;i<10;i++)
 8         scanf("%d",&a[i]);
 9     sort(a,10);
10     printf("排序后的结果是:\n");
11     for(i=0;i<10;i++)
12         printf("%5d ",a[i]);
13     printf("\n");
14 }
15 void sort(int array[],int n)
16 {
17     int i,j,k;
18     void change(int *p1,int *p2);
19     int *point_1,*point_2;
20     for(i=0;i<n-1;i++)
21     {
22         k=i;
23         for(j=i+1;j<n;j++)
24             if(array[j]<array[k])
25                 k=j;
26         {point_1=& array[k];
27         point_2=& array[i];
28         change(point_1,point_2);}
29     }
30 }
31 void change(int *p1,int *p2)
32 {
33     int t;
34     t=*p1;
35     *p1=*p2;
36     *p2=t;
37 }

 

2.冒泡排序程序

 1 #include <stdio.h>
 2 void main()
 3 {
 4     int a[10];
 5     int i,j,t;
 6     printf("input 10 number:\n");
 7     for(i=0;i<10;i++)
 8         scanf("%d",&a[i]);
 9     printf("\n");
10     for(j=0;j<9;j++)
11         for(i=0;i<9-j;i++)
12             if(a[i]>a[i+1])
13             {
14                 t=a[i];
15                 a[i]=a[i+1];
16                 a[i+1]=t;
17             }
18             printf("the sorted number :\n");
19             for(i=0;i<10;i++)
20                 printf("%d ",a[i]);
21             printf("\n");
22 }

 

posted @ 2017-06-20 05:28  LeleLiu  阅读(439)  评论(0编辑  收藏  举报