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");
else
printf("%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;
else
a[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++;
else
others++;
}
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 80
void 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。