C语言编程题

任务说明:
假设有40个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),试编程打印统计调查结果。其中Grade代表等级,Count代表人数,Histogram表示以图形方式显示该等级的人数。程序执行结果如下:
Grade Count Histogram
1 2 **
2 3 ***
3 1 *
4 4 ****
5 2 **
6 2 **
7 2 **
8 0
9 3 ***
10 1 *

[友情提示]:

定义一个含有40个元素的一维整型数组score,用来存放每个学生打的分数。再定义一个含有11个元素的一维整型数组count,该数组的每个元素作为计数器使用,如数组元素count[1]用来记录等级(分数)为1的人数,…,count[10]用来记录等级(分数)为10的人数。实际打分人数由键盘读入。
输入要求: "%d",详见输入样例
输出要求: "Grade\tCount\tHistogram\n",详见输出样例
输入输出样例:
Input sample1:
20
1 9 1 2 4 2 2 3 4 5 5 6 6 4 7 7 9 4 9 10
Output sample1:
Grade Count Histogram
1 2 **
2 3 ***
3 1 *
4 4 ****
5 2 **
6 2 **
7 2 **
8 0
9 3 ***
10 1 *

第1个回答  2010-10-01
#include <stdio.h>
#include <math.h>
void main()
{
float rate, deposit;
int n, capital;
printf("请输入定期存款的年利率:");
scanf("%f",&rate);
printf("请输入存款年限:");
scanf("%d",&n);
printf("请输入存款本金:");
scanf("%d",&capital);
deposit = rate * capital * n + capital;
printf("若为单利计算本息总和为%f元\n",deposit);
deposit = pow(rate + 1, n) * capital;
printf("若为复利计算本息总和为%f元\n",deposit);
getchar();
}
不知道是单利还是复利计算,都写上了

需要说明一下的是,利率的输入需要直接使用小数,而不能用百分数,你可以看看题目要求,如果一定需要用百分数的我给你改,但是比较麻烦,因为%在C里有自己的含义,需要特别处理

#include <stdio.h>
#include <math.h>
void main()
{
float rate, deposit;
int n, capital;
char ratea[10];
bool flag = false;
printf("请输入定期存款的年利率:");
scanf("%s",&ratea);
for(int i = 0; ratea[i] != '\0'; i++)
if(ratea[i] == '\%') flag = true;
rate = flag ? atof(ratea) / 100 : atof(ratea);
printf("请输入存款年限:");
scanf("%d",&n);
printf("请输入存款本金:");
scanf("%d",&capital);
deposit = rate * capital * n + capital;
printf("若为单利计算本息总和为%f元\n",deposit);
deposit = pow(rate + 1, n) * capital;
printf("若为复利计算本息总和为%f元\n",deposit);
getchar();
}
这样就可以使用百分数输入了,2.25%或者0.0225的输入方式都是可以被接受和正确运算的,经过测试没有问题
编译环境:Windows 7 Ultimate + VS 2008
第2个回答  2016-06-06
单片机的外部结构:DIP40双列直插;P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)电源VCC(PIN40)和地线GND(PIN20);高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位)内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍)程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序)P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务)四个8位通用I/O端口,对应引脚P0、P1、P2和P3;两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1)一个串行通信接口;(SCON,SBUF)一个中断控制器;(IE,IP)针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。C语言编程基础:十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。++var表示对变量var先增一;var—表示对变量后减一。x|=0x0f;表示为x=x|0x0f;TMOD=(TMOD&0xf0)|0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。While(1);表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;}在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)#include//该头文档中有单片机内部资源的符号化定义,其中包含P1.3voidmain(void)//void表示没有输入参数,也没有函数返值,这入单片机运行的复位入口{P1_3=1;//给P1_3赋值1,引脚P1.3就能输出高电平VCCWhile(1);//死循环,相当LOOP:gotoLOOP;}注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。在某引脚输出低电平的编程方法:(比如P2.7引脚)#include//该头文档中有单片机内部资源的符号化定义,其中包含P2.7voidmain(void)//void表示没有输入参数,也没有函数返值,这入单片机运行的复位入口。{P2_7=0;//给P2_7赋值0,引脚P2.7就能输出低电平GNDWhile(1);//死循环,相当LOOP:gotoLOOP;}在某引脚输出方波编程方法:(比如P3.1引脚)#include//该头文档中有单片机内部资源的符号化定义,其中包含P3.1voidmain(void)//void表示没有输入参数,也没有函数返值,这入单片机运行的复位入口{While(1)//非零表示真,如果为真则执行下面循环体的语句{P3_1=1;//给P3_1赋值1,引脚P3.1就能输出高电平VCCP3_1=0;//给P3_1赋值0,引脚P3.1就能输出低电平GND}//由于一直为真,所以不断输出高、低、高、低……,从而形成方波}将某引脚的输入电平取反后,从另一个引脚输出:(比如P0.4=NOT(P1.1))#include//该头文档中有单片机内部资源的符号化定义,其中包含P0.4和P1.1voidmain(void)//void表示没有输入参数,也没有函数返值,这入单片机运行的复位入口{P1_1=1;//初始化。P1.1作为输入,必须输出高电平While(1)//非零表示真,如果为真则执行下面循环体的语句{if(P1_1==1)//读取P1.1,就是认为P1.1为输入,如果P1.1输入高电平VCC{P0_4=0;}//给P0_4赋值0,引脚P0.4就能输出低电平GNDelse//否则P1.1输入为低电平GND//{P0_4=0;}//给P0_4赋值0,引脚P0.4就能输出低电平GND{P0_4=1;}//给P0_4赋值1,引脚P0.4就能输出高电平VCC}//由于一直为真,所以不断根据P1.1的输入情况,改变P0.4的输出电平}将某端口8个引脚输入电平,低四位取反后,从另一个端口8个引脚输出:(比如P2=NOT(P3))#include//该头文档中有单片机内部资源的符号化定义,其中包含P2和P3voidmain(void)//void表示没有输入参数,也没有函数返值,这入单片机运行的复位入口{P3=0xff;//初始化。P3作为输入,必须输出高电平,同时给P3口的8个引脚输出高电平While(1)//非零表示真,如果为真则执行下面循环体的语句{//取反的方法是异或1,而不取反的方法则是异或0P2=P3^0x0f//读取P3,就是认为P3为输入,低四位异或者1,即取反,然后输出}//由于一直为真,所以不断将P3取反输出到P2}注意:一个字节的8位D7、D6至D0,分别输出到P3.7、P3.6至P3.0,比如P3=0x0f,则P3.7、P3.6、P3.5、P3.4四个引脚都输出低电平,而P3.3、P3.2、P3.1、P3.0四个引脚都输出高电平。同样,输入一个端口P2,即是将P2.7、P2.6至P2.0,读入到一个字节的8位D7、D6至D0。
第3个回答  2015-04-18
/*假设有40个学生被邀请来给自助餐厅的食品和服务质量打分
**分数划分为1~10这10个等级(1表示最低分,10表示最高分)
**试编程打印统计调查结果
**其中Grade代表等级,Count代表人数
**Histogram表示以图形方式显示该等级的人数
**Grade  Count   Histogram
**1        2         **
**2        3         ***
**3        1         *
**4        4         ****
**5        2         **
**6        2         **
**7        2         **
**8        0 
**9        3         ***
**10       1         *
*/ 
#include<stdio.h>
int main(){
int a[10][2]={0},//a[i][0]存Grade, a[i][1]存Count
n,//存评分Grade
i,//用于控制循环 
MAX;//存储评分人数 
for(i=0;i<10;i++)a[i][0]=i+1;//循环初始化等级(Grade),从1~10 
i=0;
scanf("%d",&MAX);//输入评分人数 
while(i++<MAX){
scanf("%d",&n);// 输入评分Grade
switch(n){
case 1 :a[0][1]++;break;
case 2 :a[1][1]++;break;
case 3 :a[2][1]++;break;
case 4 :a[3][1]++;break;
case 5 :a[4][1]++;break;
case 6 :a[5][1]++;break;
case 7 :a[6][1]++;break;
case 8 :a[7][1]++;break;
case 9 :a[8][1]++;break;
case 10:a[9][1]++;break;
}
}
printf("Grade  Count   Histogram\n");
for(i=0;i<10;i++){
printf("%2d%8d%5c",a[i][0],a[i][1],' ');
for(int k=0;k<a[i][1];k++)printf("*");
printf("\n");
}
return 0;
}

第4个回答  2012-05-02
发两个我之前编过的例子哈(例子看起来可能有点点长但不难,相信楼主只有稍微耐心点看肯定很容易理解的)
题目一、数学黑洞6174(这题目挺有意思哦~)
/*
数学黑洞6174。
已知:一个任意的四位正整数(全相同的除外,如1111)。将数字重新组合成一个最大的数
和最小的数相减,重复这个过程,最多七步,必得6174。即:7641-1467=6174。将永远出不来。
编程:输入任一四位数(全相同的除外),展示其操作过程并统计步骤。
*/
#include<stdio.h>

//插入排序
void insertSort(int r[],int len){
int i,k,tmp;

for(i=1;i<len;i++){
k=i-1;
tmp=r[i];
while(k>=0&&r[k]>tmp){
r[k+1]=r[k];
k--;
}
r[k+1]=tmp;
}
}

void main(){
int N,count,end,s;
int r[4];
int max,min;

printf("请输入一个任意的四位正整数(全相同的除外,如1111):");
scanf("%d",&N);

count=0;
end=0;
s=N;
while(end!=6174){
r[0]=s%10;
r[1]=s/10%10;
r[2]=s/100%10;
r[3]=s/1000;
insertSort(r,4);
max=1000*r[3]+100*r[2]+10*r[1]+r[0];
min=1000*r[0]+100*r[1]+10*r[2]+r[3];
end=max-min;
count++;
printf("第%d步:%d%d%d%d-%d%d%d%d=%d%d%d%d\n",count,r[3],r[2],r[1],r[0],r[0],r[1],r[2],r[3],end/1000,end/100%10,end/10%10,end%10);
s=end;
}
printf("%d一共经过了%d步得到了6174\n",N,count);

}

题目二、验证哥德巴赫猜想(也挺有意思滴吧~)
/*
验证歌德巴赫猜想:任何一个充分大的偶数N(N≥4,都可以用两个素数之和表示。
例如:4=2+2,6=3+3,8=3+5,98=17+79
"a+b":任一充分大的偶数都可以表示成为一个素因子个数不超过a个的数与另一个素因子不超过b个的数之和
陈景润证明了"1+2"
*/
#include<stdio.h>

//判断一个数是否为素数
int isPrime(int n){
int i;

for(i=2;i*i<=n;i++){
if(n%i==0)
return 0;
}
return 1;
}

void main(){
int N;
int i,j;
int r;

printf("请输入一个偶数:");
scanf("%d",&N);
j=0;
for(i=2;i<N;i++){
if(isPrime(i)&&isPrime(N-i)){
r=i;
break;
}
}
printf("%d=%d+%d\n",N,r,N-r);
}
第5个回答  2012-11-08
if(x%(i*i)==0)c++不对,需要每个x%(i*i)都等于0,才能将c加1。所以可以改成
if(x%(i*i)==0)break;
然后在该循环外加上c += (j==(n-i+1));
另外分离每个数的方法不好,每次求出d = 10^k,然后用b/d来分离,不如直接用除10的方法分离b,存入数组供以后使用。
int main()
{
int n, max, i, j, k, A[16];

scanf("%d", &n); //输入位数n
for(i=max=1; i<=n; i++) //10^n
max *= 10;

for(i=max/10,n=0; i<max; i++) //遍历每个数
{
for(k=0,j=i; j; j/=10) //分离到数组A中
A[k++] = j;
for(j=0; j<k; j++) //进行判断
if(A[j]%((k-j)*(k-j)))break;
n += (j==k); //累加
}
printf("%d", n);
return 0;
}

C语言程序题目:由键盘输入三个数a,b,c,按从小到大的顺序输出这三个数...
printf(从小到大的顺序是:%d%d%d\\n,a,b,c);return0;} \/iknow-pic.cdn.bcebos.com\/3c6d55fbb2fb4316d355249d2ea4462308f7d38b"target="_blank"title="点击查看大图"class="ikqb_img_alink">\/iknow-pic.cdn.bcebos.com\/3c6d55fbb2fb4316d355249d2ea4462308f7d38b?x-bce-process=image%2...

大学福音经典编程题适用于专升本
24.给数组删除重复的元素 25.C语言编程题求1! + 2! + 3! + 4!...+N 26.C语言编程题求斐波那契数(循环法与递归法 27.C语言编程输入n,k求n的k次幂(递归与非递归) 28.(递归)输入一个数,把他的每一位相加在输出出来; 29,实现函数把字符数组的元素逆序 如“abc“,逆序成“cba“ 30.递归拆分整数 ...

请编程c语言:求出555555的约数中最大的三位数是多少?
通过C语言编程解决求解555555的约数中最大的三位数问题,我们首先需要理解题目的实质。题目要求我们找出555555这个数的所有约数中,最大的三位数。为了实现这个目标,我们可以编写一个程序,从1000开始循环减小,直到100为止,逐个检查当前的循环变量i是否能整除555555。如果能整除,则输出该数并结束循环。下...

C语言编程题目
下面是一些C编程题目:1. 编写程序,从键盘输入两个整数,输出它们的和、差、积、商、余数。2. 编写程序,从键盘输入三角形的三条边长,判断它们是否可以构成三角形,并输出三角形的类型(等边、等腰、一般)。3. 编写程序,从键盘输入字符串,统计其中的大写字母、小写字母、数字和其他字符的个数,并...

c语言小题目。急急急
五、编程题 1. 编程实现:从键盘上接收10个整数,并对其进行排序(要求排成升序)main(){int a[10],i,j,k,t;for(i=0;i<10;i++) scanf("%d",&a[i]);for(i=0;i<9;i++){k=i;for(j=i+1;j<10;j++)if(a[j]<a[k]) k=j;if(k!=i){t=a[k];a[k]=a[i]; a...

急!急!简单c语言编程题,求编写代码
\/\/第一题#include<stdio.h>void fun(int n){ int i,j,k,t;for(k=0;k<n;k++)\/\/控制总行数{ for(i=0;i<n-k-1;i++)\/\/控制输出空格,因为空格不好看见,就用*代替 printf("%c",'*'); for(j=0;j<2*k+1;j++)\/\/控制输出字母 { printf("%c",65+j)...

请大家看看这道题用c语言怎么做?
因此,可以将这些规则用代码实现。以下是C语言的实现代码:include <stdio.h> int calculate_gold(int days) { int total_gold = 0; \/\/ 总金币数 int current_day = 1; \/\/ 当前天数 int reward = 1; \/\/ 当前奖励数额 while (current_day <= days) { \/\/ 计算当前阶段的天数 for (int ...

C语言编程问题求解答
9题:include <stdio.h>int main(){int N=1;scanf("%d",&N);if(N<=0){N=1;}int numSpaceFirst=N-1;for(int row=0; row<N; row++,numSpaceFirst--){for(int i=0; i<numSpaceFirst; i++){printf(" ");}for(int i=0; i<2*row-1; i++){printf("*");}printf("\\n...

急 两道基本C语言编程题
在C语言编程中,你可能会遇到两种基本问题:一个涉及数组排序,另一个涉及数组转置。首先,我们来看一下排序问题。这里的伪代码要求确保数组`a`中第一个元素大于第二个元素。如果`a[0]`小于`a[1]`,程序将交换它们的位置。如果`a[0]`大于`a[1]`,但`a[0]`小于`a[i]`,并且`a[i]`大于...

C语言问题编程问题?
int main(){ int i,j,n=-1;float scores[30],sum=0,temp;printf("请输入n的值(0~30):");while(n<0 || n>30) scanf("%d",&n);if(!n) return 0;for(i=0;i<n;scanf("%f",&scores[i]),sum+=scores[i],i++)printf("请输入学生%d分数:",i+1);printf("%d名学生的...

相似回答