c语言 输入一个整数,求它的位数以及各位数字之和。例如,123的位数是3,各位数字之和是6。

供稿:hz-xin.com     日期:2024-05-07
学习C语言要很好的数学基础吗?

  C语言学习需要数学基础,但没有数学基础也可以学习,只是稍微有些难度。基础的C语言对数学要求不是很高,但是要想精通达到很高,数学底子就要好点。因为数学好了,算法就简单,程序也会简单高效很多。其实C语言也是编程语言的基础。总之一句话,数学底子越好,对编程也越好。


  具体情况分析如下:
  1、如果是纯粹的学习C,数学不是问题,入门的话,了解一些数学的基础运算就可以。
  2、计算机最早被研制出来的原因就是为了要解决数学运算等问题。所以说数学对计算机编程语言来说尤为重要。
  3、当代大学计算机系,基本都开了高等数学或者离散数学的课程。就是为了让这些计算机系的学生更好的了解数学。
  4、C语言是计算机编程语言的入门基础。所以说如果想学习的话用不到什么太深的数学理论和思想,简简单单的有个逻辑概括能力就好。C语言中的数学因素就是个“槛儿”,一个思维变通的“门槛”,当学不进去的时候,认为哪里都有自己的不足。当学进去以后,在学习更深的C++/C#或者JAVA,就要容易多了。
  5、总的来说,C语言仅仅是个基础,只要有毅力,相信两个月时间就玩转了它,不要被自己以前的基础差所吓倒。

这个问题的前提条件不明确,本人试着给出一种方法的描述,该回答基于下述假设:
1、n个工件是同时到达的;
2、任意工件可以任意机器上加工;
3、已知工件的加工时间;

基本思想:
采用短工作优先算法,从而使总加工时间最少。
该算法的详细说明可以参考任何一本《操作系统原理》

解法步骤:
1、将工件按加工时间排序,需要时间最少的排在最前;
2、设置一个M大小的数组U,表示各机器已用时间;
3、设置一个M大小的数组N,表示各机器加工当前工件还需要的时间;
4、设置一个M大小的数组R,表示各机器已运行的时间;
4、将数组U、R、N的各元素都置为0;
5、对工件数据中每个元素执行下述操作:
从数组N中找到值最小的元素x;
将数组N中每个元素的值减去元素x的值作为其新值;
将数组R中每个元素的值加上元素x的值为作其新值;
将元素x值设置为工件要求的加工时间;
修改数组U中的值:U[x]+=R[x]+N[x];
6、将数组U中各元素的值求和,得到的即为最短的总时间

祝你好运!

-------------------------------------------------------

程序用JAVA语言编写,并省略了排序操作,并假定机器数为3

public static void main(String[] arg)throws Exception
{
int[] W=new int[]{1,2,3,55,56,77,77,88,99,100};//工件需要的工作时间
int[] U=new int[]{0,0,0};//各机器加工的工件已用的总时间,含等待时间
int[] R=new int[]{0,0,0};//各机器已运行的时间
int[] N=new int[]{0,0,0};//各机器加工完当前工作需要的时间
for(int i=0;i<W.length;i++)
{
/**找到当前机器中最早可用的机器,用m表示机器的代号,x表示机器完成当前工作需要的时间*/
int m=0;
for(int j=1;j<N.length;j++)if(N[j]<N[m])m=j;
int x=N[m];

//将数组N中每个元素的值减去元素x的值作为其新值;
//将数组R中每个元素的值加上元素x的值为作其新值;
for(int j=0;j<N.length;j++)
{
N[j]-=x;
R[j]+=x;
}

//将元素x(即机器m)值设置为工件要求的加工时间;
N[m]=W[i];
U[m]+=(R[m]+N[m]);
}

int total=0;
for(int i=0;i<U.length;i++)total+=U[i];
System.out.println("总时间等于:"+total);
}

#include<stdio.h>
#define error -1
int atoi(char c)
void main()
{
char a[20];
printf("input number:");
scanf("%s",a);
int sum =0 ;
for(char *c=a; *c != '\0'; c++)
{
sum = atoi(*c) + sum;
}
printf("各个位之和为 %d",sum);
printf("一共有 %d位数子",c-a);
}

int atoi(char c)
{
if(c>=48 && c<= 58)
{
return (int)(c-48);
}
return error;
}

具体的你可以做做修改,我只是随便写了一个

这样
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int n,sum=0,count=0,s;
printf("输入一个整数:");
scanf("%d",&n);
while(n)
{
s=n%10;
n=n/10;
sum+=s;
count++;
}
printf("整数的个数为:%d\n个位数的和为:%d\n",count,sum);

system("pause");
return 0;
}
就可以了

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int n,sum=0,count=0,s;
printf("输入一个整数:");
scanf("%d",&n);
while(n)
{
s=n%10;
n=n/10;
sum+=s;
count++;
}
printf("整数的个数为:%d\n个位数的和为:%d\n",count,sum);

system("pause");
return 0;
}