Jack's Blog

流淌的心,怎能阻拦,吹来的风,又怎能阻挡。

C语言学习六

Jacob posted @ Apr 13, 2017 08:01:02 PM in C语言 with tags C语言 小白进阶,sse , 2035 阅读

Before we go:

Hello大家好,好长时间没写程序了,不知道是不是手生了还是题目越来越难了,零分我真是越来越多了。

所以我将这些程序分享给大家

希望大家少走点弯路,也避免我以后忘记这些东西。


1.假设有40个学生被邀请来给餐厅的饮食和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),编程统计并按如下格式输出餐饮服务质量调查结果。
Grade       Count  Histogram
1      5  *****
2     10  **********
3      7  *******
...
**输入格式要求:"%d"  提示信息:"Input the feedbacks of 40 students:\n"  "input error!\n"
**输出格式要求:"Feedback\tCount\tHistogram\n"  "%8d\t%5d\t"
程序运行示例如下:
Input the feedbacks of 40 students:
10 9 10 8 7 6 5 10 9 8
8 9 7 6 10 9 8 8 7 7
6 6 8 8 9 9 10 8 7 7
9 8 7 9 7 6 5 9 8 7
Feedback Count Histogram
       1     0
       2     0
       3     0
       4     0
       5     2 **
       6     5 *****
       7     9 *********
       8    10 **********
       9     9 *********
      10     5 *****


#include<stdio.h>
main(){
    printf("Input the feedbacks of 40 students:\n");
    int i,s[40]={0};
    int ret;
    for(i=0;i<40;i++){
            ret =scanf("%d",&s[i]);
            if(ret!=1||s[i]<1||s[i]>10)
            {
                i--;
                printf("input error!\n");
            }
    }
    printf("Feedback\tCount\tHistogram\n");
    int a[10]={0},j;
    for(i=0;i<40;i++){
        for(j=0;j<10;j++)
        {
                if(s[i]==j+1)
                a[j]++;
        }
    }
    for(i=0;i<10;i++)
 {
    printf("%8d\t%5d\t",i+1,a[i]);
    for(j=0;j<a[i];j++)
    {
        printf("*");
    }
    printf("\n");
}
}

2.如果一个正整数等于其各个数字的立方和,则该数称为阿姆斯特朗数(亦称为自恋性数)。如407=4^3+0^3+7^3就是一个阿姆斯特朗数。试编程求1000内的所有3位数的阿姆斯特朗数。
**输出格式要求:"There are following Armstrong number smaller than 1000:\n" " %d "
程序运行示例如下:
There are following Armstrong number smaller than 1000:
153  370  371  407

\\这道题比较简单,但是要注意不要使用pow函数,否则会有精度误差!
#include<stdio.h>
#include<stdio.h>
main()
{
    printf("There are following Armstrong number smaller than 1000:\n");
    int i,j,k,f;
    int a[10]={0,1,2,3,4,5,6,7,8,9},b[10]={0,1,2,3,4,5,6,7,8,9},c[10]={0,1,2,3,4,5,6,7,8,9};
    for(i=0;i<10;i++)
    {
        for(j=0;j<10;j++)
        {
            for(k=0;k<10;k++)
            {
                if(a[i]*100+b[j]*10+c[k]==powl(i,3)+powl(j,3)+powl(k,3)&&a[i]*100+b[j]*10+c[k]>1)
                printf(" %d ",a[i]*100+b[j]*10+c[k]);
            }
        }
    }
}

3.输入一个以回车结束的字符串(少于10个字符),它由数字字符组成,将该字符串转换成整数后输出。
**输入提示信息:"Enter a string: "
**输出格式要求:"digit = %d\n"
程序运行示例如下:
Enter a string: 123
digit = 123

#include <stdio.h>

int main(void)
{
    int i, n;
    char s[10];

    /* 输入字符串 */
    printf("Enter a string: ");  /* 输入提示 */
    i = 0;
    while ((s[i] = getchar( )) != '\n')
        i++;
    s[i] = '\0';

    /* 将字符串转换为整数 */
    n = 0;
    for (i = 0; s[i] != '\0'; i++)
        if (s[i] <= '9' && s[i] >= '0')
            n = n * 10 + (s[i] - '0');
        else                /* 遇非数字字符结束转换 */
            break;
    printf("digit = %d\n", n);

    return 0;
}

4.走台阶

楼梯有10阶台阶,上楼可以一步上1阶,也可以1步上2阶,编程计算10阶台阶总共有多少走法.
提示:可以递推计算,如1阶台阶总共一种走法,2阶台阶总共2走法,3阶台阶总共3种走法,直到计算出10阶台阶走法.

输入格式:无
输出格式:"Result=%d"

这类题一看就知道是与递归有关的问题,因此我们很容易用递归解决这道题

#include<stdio.h>
int f( int n )
{
  if ( n == 1 )
  {
    return 1;
  }
  else if ( n == 2 )
  {
    return 2;
  }
  else
  {
    return f(n-1) + f(n-2);
  }
}
int main()
{
  int num = f( 10 );
    printf("Result=%d",num);
  return 0;
}

5.选择排序法。
用选择排序法将N(N为5)个数从小到大排序后输出。
**输入格式要求:"%d" 提示信息:"Enter No.%2d:"
**输出格式要求:"%d"
程序运行示例如下:
Enter No. 1:5
Enter No. 2:7
Enter No. 3:3
Enter No. 4:9
Enter No. 5:8
35789


解法1:冒泡排序法

main()
{
    int s[N]={0},i,j,a;
    for(i=0;i<N;i++)
    {
        printf("Enter No.%2d:",i+1);
        scanf("%d",&s[i]);
 
    }
    for(j=0;j<N;j++)
    {
        for(i=0;i<N;i++)
        {
            if(s[i]>s[i+1])
            {
                a=s[i];
                s[i]=s[i+1];
                s[i+1]=a;
            }
        }
 
    }
 
    for(i=0;i<N;i++)
    {
        printf("%d",s[i]);
    }
}

几何表示:

解法2:选择排序法

#include<stdio.h>
#define N 5
main()
{
    int a[N]= {0},i,j,min,k;
    for(i=0; i<N; i++)
    {
        printf("Enter No.%2d:",i+1);
        scanf("%d",&a[i]);

    }
    for ( i = 0; i <N; i ++ )
    {
        k = i;
        for ( j = i + 1; j < N; j ++)
        {
            if ( a[ k ] > a[ j ] )
            k = j;

        }
        if(k!=i)
        {
            min = a[ i ];
            a[ i ] = a[ k ];
            a[ k ] = min;
        }
    }
    for(i=0; i<N; i++)
    {
        printf("%d\n",a[i]);
    }
}

几何表示:

 

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter