C语言基础程序设计题

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。

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值