1.个人所得税计算
应纳税款的计算公式如下:收入<=1000元部分税率为0%,2000元>=收入>1000元的部分税率为5%,3000元>=收入>2000元的部分税率为10%,6000元>=收入>3000元的部分税率为15%,收入>6000元的部分税率为20%。输入某人的收入,计算出应纳税额及实际得到的报酬。(如需连续计算多个人的纳税情况,直到输入负数为止,程序应如何改进?试写出程序)
#include<stdio.h>
int main()
{int grade;float income,tax,money;printf("please input your income:");scanf("%f",&income);if(income<0)printf("the input is error!");else {grade=(int)income/1000;switch(grade){case 0:tax=0;break;case 1:tax=(income-1000)*0.05;break;case 2:tax=50+(income-2000)*0.1;break;case 3:tax=150+(income-3000)*0.15;break;default:tax=600+(income-6000)*0.2;}money=income-tax;printf("tax=%0.2f,money=%0.2f",tax,money);} }
改进:
#include<stdio.h>void TaxC(int income) {
{if(income<0)printf("the input is error!");else {grade=(int)income/1000;switch(grade){case 0:tax=0;break;case 1:tax=(income-1000)*0.05;break;case 2:tax=50+(income-2000)*0.1;break;case 3:tax=150+(income-3000)*0.15;break;default:tax=600+(income-6000)*0.2;}money=income-tax;printf("tax=%0.2f,money=%0.2f",tax,money);}
}int main()
{int grade;float income,tax,money;printf("please input your income:");scanf("%f",&income);while (income>=0) {TaxC(income);scanf("%f",&income);}return 0;}
2. 从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。
#include<stdio.h>
int main()
{int data;char grade;printf("please enter the score:");scanf("%d",&data);switch(data/10){case 10:case 9:grade='A';break;case 8:grade='B';break;case 7:grade='C';break;case 6:grade='D';break;default:grade='E';}printf("the grade is %c",grade);
}
3. 编程设计一个简单的计算器程序。从键盘输入2个操作数,1个运算符,当运算符为加(+)、减(-)、乘(*)、除(/)时,输出计算结果。
#include<stdio.h>
int main()
{int data1,data2; //定义两个操作符 char op; //定义运算符printf("Please enter the expression:");scanf("%d%c%d",&data1,&op,&data2);switch(op){case '+':printf("%d+%d=%d\n",data1,data2,data1+data2);break;case '-':printf("%d-%d=%d\n",data1,data2,data1-data2);break;case '*':printf("%d*%d=%d\n",data1,data2,data1*data2);break;case '/':if(0==data2)printf("Division by zero!\n");elseprintf("%d/%d=%d\n",data1,data2,data1/data2);break;default:printf("Unknown operator!\n");}
}
4. 从键盘输入10个整数,统计其中正数、负数和零的个数,并在屏幕上输出。
#include<stdio.h>
int main()
{int a[10],i,iNum1=0,iNum2=0,iNum3=0;for(i=0;i<10;i++){printf("please input number:");scanf("%d",&a[i]);if(a[i]>0)iNum1++;else if(a[i]<0)iNum2++;else iNum3++;printf("正数:%d个,负数:%d个,零:%d\n个",iNum1,iNum2,iNum3);}
}
5. 从键盘上输入10个数,求其平均值。
#include <stdio.h>
int main()
{int a[10], sum = 0;float ave = 0;printf("please input number:\n");for (int i = 0; i < 10; i++){scanf("%d", &a[i]);sum += a[i];}ave = (float)sum / 10; // ave=sum/10.0;printf("ave=%f\n", ave);
}
6. 编程序实现求1-1000之间的所有奇数的和并输出。
#include<stdio.h>
int main()
{int i;long sum=0;for(i=1;i<=1000;i=i+2){sum=sum+i;}printf("the sum of odd is:%ld",sum);
}
7. 有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13……编程求这个序列的前20项之和。
#include<stdio.h>
int main()
{int i,t,n=20;float num1=2,num2=1,sum=0;for(i=1;i<=n;i++){sum=sum+num1/num2;t=num1;num1=num1+num2;num2=t;}printf("sum=%0.2f",sum);
}
8. 用循环的方法构造一个5行5列的二维数组,使主对角线上的变量为1,其它为0,并将数组中所有项按行按列显示出来。
#include<stdio.h>
int main()
{int a[5][5],i,j,s=0;for(i=0;i<5;i++){for(j=0;j<5;j++){if(i==j)a[i][j]=1;elsea[i][j]=0;}}for(i=0;i<5;i++){for(j=0;j<5;j++){if(j==0)printf("\n");printf("%d",a[i][j]);}}
}
9. 输入n的值,n代表行数,输出如图所示的图形。\
** * ** * * * ** * * * * * * (此图为n=4时的输出结果)
每行输出2*i+1个
#include<stdio.h>
int main()
{int i,j,k;for(i=1;i<=4;i++){ //控制行数 for(k=1;k<=(2*i-1);k++){ //控制每行输出的*号个数 printf("*");}printf("\n");//输出一行后换行 }
}
10. 从键盘输入30名学生的成绩数据,求其中的最高分、最低分和平均分。(提示:用数组存放成绩数据)
#include<stdio.h>
#define M 30
int main()
{float score[M],max,min,aver;int i;printf("please input score:\n");for(i=0;i<M;i++){scanf("%f",&score[i]);}aver=0.0;max=score[0];min=score[0];for(i=0;i<M;i++){if(max<score[i])max=score[i];if(min>score[i])min=score[i];aver+=score[i];}printf("max=%0.2f,min=%0.2f,aver=%0.2f",max,min,aver/M);
}
11. 从键盘输入某班学生某门课的成绩及其学号(班级人数最多40人,具体人数由键盘输入),输出该班最高分和最低分及其学生学号;并输出该班该课程的总分和平均分。请编写程序
#include<stdio.h>
#define ARR_SIZE 40
int main()
{float score[ARR_SIZE],maxScore,minScore,sum;int n,i;long maxNum,minNum,num[ARR_SIZE];printf("please enter total number:");scanf("%d",&n);printf("Please enter the number and score:\n");for(i=0;i<n;i++){scanf("%ld%f",&num[i],&score[i]);}maxScore=score[0];minScore=score[0];maxNum=num[0];minNum=num[0];sum=score[0];for(i=1;i<n;i++){if(score[i]>maxScore){maxScore=score[i];maxNum=num[i];}else if(score[i]<minScore){minScore=score[i];minNum=num[i];}sum=sum+score[i];}printf("maxScore=%0.2f,maxNum=%ld\n",maxScore,maxNum);printf("minScore=%0.2f,minNum=%ld\n",minScore,minNum);printf("sum=%0.2f,average=%0.2f\n",sum,sum/n);
}
12. 从键盘上输入一个23的矩阵,将其转置后形成32的矩阵输出。
#include<stdio.h>
int main()
{int a[2][3],b[3][2],i,j;printf("enter array a:\n");for(i=0;i<2;i++){for(j=0;j<3;j++){scanf("%d",&a[i][j]);}}for(i=0;i<3;i++){for(j=0;j<2;j++){b[i][j]=a[j][i];}}printf("Now,array a:\n");for(i=0;i<3;i++){for(j=0;j<2;j++){printf("%5d",b[i][j]);}printf("\n");}
}
13. 编写两个函数分别求两个整数的最小公倍数和最大公约数,用主函数调用这两个函数并输出结果。两个整数由键盘输入。
#include<stdio.h>
int main()
{
int mingy(int a,int b);
int maxgb(int a,int b);
int m,n,gys,gbs;
printf("please input two numbers:");
scanf("%d %d",&m,&n);
gys=mingy(m,n);
gbs=maxgb(m,n);
printf("the result is:%d %d",gys,gbs);
return 0;
}int mingy(int x, int y)
{
int z;for (z=x%y; z!=0; x=y,y=z,z=x%y);return y;
}int maxgb(int x, int y)
{
int t;
t=(x*y)/mingy(x,y);return t;
}
14. 从键盘上输入一个4*3的整型数组,找出数组中的最小值及其在数组中的下标。
#include<stdio.h>
int main()
{int a[4][3],i,j;printf("please enter data:\n");for(i=0;i<4;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);int min=a[0][0];int m=0,n=0;for(i=0;i<4;i++)for(j=0;j<3;j++)if(a[i][j]<min){min=a[i][j];m=i;n=j;}printf("最小的数是=%d\n 行=%d 列=%d",min,m,n);
}
15. 编程实现如下功能:从键盘输入一行字符,统计其中英文字符,数字字符和其他字符的个数。
#include<stdio.h>
#include<string.h>
#define ARR_SIZE 80
int main()
{char str[ARR_SIZE];int len,i,letter=0,digit=0,space=0,others=0;printf("please input a string:");gets(str);len=strlen(str);for(i=0;i<len;i++){if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z')letter++;else if (str[i]>='0'&&str[i]<='9')digit++;elseothers++;}printf("English character:%d\n",letter);printf("digit character:%d\n",digit);printf("other character:%d\n",others);
}
16. 编程实现如下功能:1)在主函数中,实现从键盘输入10名学生某门课的成绩,保存在一维数组中;调用排序函数;对排序后的数组中的元素按从高到低打印输出。2)编写排序函数,使用数组名做函数参数,实现对该成绩的排序。
#include<stdio.h>
#define ARR_SIZE 40
void Sort(float score[],long num[],int n);
int main()
{float score[ARR_SIZE];int n,i;long num[ARR_SIZE];printf("please enter total number:");scanf("%d",&n);printf("please enter the number and score:\n");for(i=0;i<n;i++){scanf("%ld%f",&num[i],&score[i]);}Sort(score,num,n);printf("Sorted results:\n");for(i=0;i<n;i++){printf("%ld\t%4.0f\n",num[i],score[i]);}
}
void Sort(float score[],long num[],int n)
{int i,j;float temp1;long temp2;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if(score[j]>score[i]){temp1=score[j];score[j]=score[i];score[i]=temp1;//交换学号temp2=num[j];num[j]=num[i];num[i]=temp2;}}}
}
17. 编程实现如下功能: 实现从键盘输入两个字符串,分别存入两个不同的字符数组中;将两个字符串连接为一个字符串,并打印输出连接后的整个字符。
#include <stdio.h>
#include <string.h>
#define ARR_SIZE 80void MyStrcat(char dstStr[], char srcStr[]);
int main()
{ char s[ARR_SIZE], t[ARR_SIZE];printf("Please enter source string: ");gets(s);printf("Please enter destination string: ");gets(t);MyStrcat(s,t);printf("The concatenate string is: ");puts(s);
}void MyStrcat(char dstStr[], char srcStr[])
{ int i = 0, j;while(dstStr[i] != '\0'){ i++;}for (j=0; srcStr[j]!='\0'; j++, i++){dstStr[i] = srcStr[j];}dstStr[i] = '\0';
}
18. 猜数游戏。系统随机产生一个整数,通过键盘输入数据猜数,猜对为止,并要求统计猜的次数。注:rand()函数可以产生0~32767间的正整数,程序中需包含stdlib.h。
#include <stdio.h>
#include <stdlib.h>
int main()
{int magic; int guess; int counter; magic = rand() % 100 + 1; counter = 0;
do{printf("Please guess a magic number:");scanf("%d", &guess); counter ++; if (guess > magic) printf("Wrong!Too high!\n");else if (guess < magic) printf("Wrong!Too low!\n");} while (guess != magic);printf("Right!\n"); printf("counter = %d\n", counter);
}
19. 输入两个整数,利用指针变量作为函数参数,编程实现两数互换功能,并将交换后的数据重新输出。
#include<stdio.h>
void Swap(int *x, int *y);
int main()
{ int a, b;printf("Please enter a,b:");scanf("%d,%d", &a, &b);printf("Before swap: a = %d,b = %d\n", a,b);Swap(&a, &b);printf("After swap: a = %d,b = %d\n", a, b);
}
void Swap(int *x, int *y)
{ int temp;temp = *x;*x = *y;*y = temp;
}
20. 随机输入若干个学生的体重,以输入负数或零结束,分别求最重和最轻的体重,并计算平均体重。
#include<stdio.h>
int main()
{ int n=0;float weight,max=0,min=100,sum=0,ave;printf("please input the weight:");scanf("%f",&weight);
while(weight>0){ sum=weight+sum;n++;if (weight<min)min=weight;else if(weight>max)max=weight;scanf("%f",& weight);}
if(n>0)
{ ave=sum/n;printf("maxweight = %f\n ",max); printf("minweight = %f\n",min);printf("ave = %f\n",ave);
}
else printf("NO VALID DATA");
}
21. 输入m,k的值,编程求下面表达式的值:(要求编写一个求阶乘的函数,调用函数实现本题)
#include <stdio.h>
unsigned long Factorial(unsigned int number);
int main()
{ unsigned int m, k;double p;printf("Please input m, k:");scanf("%u, %u", &m, &k);p = (double)Factorial(k) / Factorial (m-k);printf("p=%0.2f\n", p);
}
unsigned long Factorial(unsigned int number)
{ unsigned long i, result = 1;for (i=2; i<=number; i++)result *= i;return result;
}
22. 编写程序,其中自定义一函数,用来判断一个整数是否为素数,主函数输入一个数,输出是否为素数。
#include <stdio.h>
#include <math.h>
int IsPrimeNumber(int number)
{ int i;if(number <= 1)return 0;for(i=2; i<sqrt(number); i++) // 2 > sqrt(2){ if ((number % i) == 0)return 0; }return 1;
}
int main()
{ int n;printf("Please input n:");scanf("%d",&n);if(IsPrimeNumber(n))printf("\n%d is a Prime Number",n);else printf("\n%d is not a Prime Number",n);
}
23. 编写程序计算某年某月某日是该年中的第几天。
输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式:
在一行输出日期是该年中的第几天。
输入样例1:
2009/03/02
输出样例1:
61
输入样例2:
2000/03/02
输出样例2:
62
#include<iostream>
#include<array>
using namespace std;
int main()
{ int year=0,month=0,day=0,n=0;array<int,13>a={0,31,28,31,30,31,30,31,31,30,31,30,31};cin>>year;cin.get(); // 斜杠用cin.get()吃掉cin>>month;cin.get();cin>>day;cin.get();if((year%4==0&&year%100)||year%400==0)a[2]=29;for(int i=0;i<=month-1;i++)n+=a[i];int sum=n+day;
cout<<sum;return 0;
}
24. 编程输出所有水仙花数 “水仙花数”是指一个三位数,其每位数字的立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
#include<stdio.h>
#include<stdlib.h>
//主函数
int main(){int i,j,k,n,sumi,sumj,sumk;//定义7个整型数据printf("\n100-1000 包含的“水仙花”数分别有: \n\n"); for(n=100;n<1000;n++){ //循环求数字个位、十位、百位上的数字i=n/100;//求百位 j=n/10%10; //求十位 k=n%10; //求个位//求i、j、k的立方和sumi=i*i*i;//求个位立方和 sumj=j*j*j;//求十位立方和 sumk=k*k*k;//求百位立方和//判断是否为 水仙花数if(n==sumi+sumj+sumk){ printf("%-5d",n);//输出 水仙花数 } }printf("\n");//换行 return 0;
}
西交之软件专业编程题扩展(答案在网上找)
1、从尾到头打印链表
2、旋转数组的最小数字
3、一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
4西输区软个整数数咱团实规编个辆数来调器该数纸数字的颜序,停所有的奇数做于数组的前分了所
有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
5、数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组
{1,2,3,2,2,2,5,4,2},由于数字2在数组中出现了5次,超过数细长度的一半,因此输出2。如果不存在则输出0.
6、输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321823。
7、统计一个数字在排序数组中出现的次数。
8、一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
西交软件科创团队直播分享淘宝店铺;软件科创团队820
5.5西交之软件专业编程题扩展
9、输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是8,如果有多对数字的和等于S,输出两个数的乘积最小的。
10、在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数子是重复的,但不知道有几个数字是重复的件也木愈道每补数寄重复几整,瑞找出数组中任寓一方重过的数学用:例,体果输创长度为的数
组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2.
11、给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组
{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动输口,他们的最大值分别为{4,4,6,6,6,5):针对数
组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个:{12,3,4],2,6,2,5,1},{2,134,270,2,5,1},{2,3,[4,2,6],2,5,1},
{2,3,4,[2,6,2],5,1},{2,3,4,2,[6,2,5],1},{2,3,4,2,6,[2,5,1]}.
12、给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>每段绳了的长度记为k[0],k[1]…k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时。我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。