帮我写俩C语言程序 题目1 把键盘输入的由数字字符组成的字符串转换为相应的数字。例如把"123"转换为整数12

题目1
把键盘输入的由数字字符组成的字符串转换为相应的数字。例如把"123"转换为整数123。
假设
1)字符串中只包括'0'~'9',无其他字符,而且能够确保转换得到的整数在区间[0, 9999]之内。
2)字符串由键盘随机输入

题目2
假如数组中存储有某班C语言期末成绩(百分制)。请编程输出
1)该班成绩的平均分(两位小数)
2)不及格的下标和成绩,不及格总人数
3)高于90分的下标和成绩,高于90分的总人数
提示:
1)班内有大约30人,具体人数自定
2)成绩以初始化方式输入到数组中 能少用函数吗? 我初学C语言 难了 看不懂 刚学完数组 其他的 没学

//第一题
#include <stdio.h>
#include <string.h>
#include<math.h>
int zhuanhuan(char s[]); //将字符串 转换成一个 整数

void main()
{
char s[5];
printf("请输入0-9999个数\n");
gets(s);

while(1) //判断是否输入正确
{
int p=0; //用作哨兵值
int i=0; //用做循环计数器
int si=strlen(s); // 字符串的长度
while(strlen(s)>=5) //判断 位数 是否输入正确 如果不正确 就从新输入 并且 哨兵值 ++
{
printf("输入错误请重新输入\n");
gets(s);
p++;
}

while(i<si) //判断字符串中是否都是数字 如果不是 就从新输入 并且哨兵值 ++
{
if(s[i]>=45&&s[i]<=57) //用ASCII码判断
{
i++;
}
else
{
printf("您输入的不是数字 请重新输入\n");
gets(s);
p++;
}
}
if(0==p) //如果 哨兵值为0 就表示 这个字符串 两个条件都满足 就可以 退出了 否则 一直 循环
{
break;
}
}

printf("转换后的数字为 %d\n",zhuanhuan(s));

}
int zhuanhuan(char s[])
{
int Slength=strlen(s); //确定 字符串的长度 为了if循环用
int SL=Slength-1; //表示 这个数值最大的一位 是哪一位
int i=0;
int sum=0; // 存储 转换后的数字
for(;i<Slength;i++)
{
sum=sum+(s[i]-48)*pow(10,SL);
SL--;
}
return sum; //返回 转换后的数字
}

//第二题
#include<stdio.h>
#include <stdlib.h>
#include<time.h>

void main()
{
srand(unsigned int(time(NULL))); //这个 你不用管 这是初始化 一个随机数
int fenshu[30]; //数组的大小
int i=0; //用做循环的计数器
double averages; //存储平均数
double sum=0; //存储分数总和
int FailNumber=0; //存储不及格的人数
int GoodNumber=0; //存储优秀的人数

for(i;i<30;i++)
{
fenshu[i]=rand()%100+1; //将0到100 分别随机的存储在数组中 PS: 打30个数 太累了 所以就随机出来一个 初学者 不用关心 如果 想知道 HI 我
}
i=0;
printf("数组中的数据为 \n"); //打印数组中的数据
for(i;i<30;i++)
{
printf("%d ",fenshu[i]);
}
printf("\n");

i=0;
for(i;i<30;i++) //循环数组 求出数组的总和
{
sum=sum+fenshu[i];
}
averages=sum/i;
printf("平均数为%.2f\n",averages); //输出平均数

i=0;
for (i;i<30;i++) //循环数组 判断 不及格 和 优秀
{
if(fenshu[i]<60)
{
printf("不及格的下标为: %d 分数为: %d \n",i,fenshu[i]);
FailNumber++; //不及格人数++
}
else if(fenshu[i]>=90)
{
printf("优秀的下标为: %d 分数为: %d \n",i,fenshu[i]);
GoodNumber++; //优秀人数++
}
}

printf("不及格的人数为: %d\n",FailNumber); //输出 不及格人数
printf("优秀的人数为: %d\n",GoodNumber); //输出 优秀人数
}

不懂的HI 我追问

恩恩 谢谢 懂得

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-06-30
题目1
#include<stdio.h>
#include <math.h>
#include <string.h>
int f(char s[])
{
int n=strlen(s);
long num=0;
for (int i=0;i<n;i++)
{
num+=(int(s[i])-48)*pow(10,n-i-1);
}
return num;
}
void main()
{
char s[4];
printf("输入数字字符串:");
gets(s);
printf("num=%d\n",f(s));
}追问

pow(10,n-i-1);
是什么意思啊 不懂 还有 如果输入034 怎么变为34呢

追答

pow(10,n-i-1);表示10的n-i-1次方
034只取34,前面的0舍掉了

追问

int f(char s[]) 不懂什么意思 还有pow(10,n-i-1);
能用其他的基础一点的替换掉吗

追答

#include
#include
void main()
{
int temp,i,j,n,num=0;
char s[4];
printf("输入数字字符串(长度不多于4位):");
gets(s);
n=strlen(s);
if(n>4)
{
printf("输入数字字符串太长\n");
return ;
}
for (i=0;i<n&&i<4;i++)
{
temp=1;
j=0;
while(j++<n-i-1)temp*=10;
num+=(int(s[i])-48)*temp;
}
printf("num=%d\n",num);
}

本回答被提问者采纳
相似回答