c语言编程题

文章目录


前言

记录本周编程组作业的解题思路和题解,以及做题的总结。

题目

1.打印九九口诀表

1*1=1   
1*2=2   2*2=4   
1*3=3   2*3=6   3*3=9   
1*4=4   2*4=8   3*4=12  4*4=16  
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  
结果:用循环方式,格式如上
本题要求对任意给定的一位正整数N,输出从1*1到N*N的部分口诀表。

解题思路:先确定行数,再找每一行的式子与行数直接的关系。

代码实现:

#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		//确定有多少行
		for(int j=1;j<=i;j++){
			printf("%d*%d=%-4d",j,i,i*j);
			//保证左对齐占4个空格 
		} 
		printf("\n");//实现输出一行后换行输出 
	}
	return 0;
}

2.两个数的简单计算器

对2个整数进行加、减、乘、除或求余运算,要求:保证除法和求余的分母非零。

输入样例1:
-2 / 2
输出样例1:
-1
输入样例2:
3 …… 6
输出样例2:
ERROR

解题思路:考查分支,出现多路分支时,控制结构有两种选择。

方法一:级联if -  else if  - else语句

代码实现:

#include<stdio.h>
int main(){
    int a,b;
    char c;
    scanf("%d %c %d",&a,&c,&b);
    if(c=='+'){
	    printf("%d",a+b);
	}else if(c=='-'){
		printf("%d",a-b);
	}else if(c=='*'){
		printf("%d",a*b);
	}else if(c=='/'){
		if(b!=0){
    		printf("%d",a/b);
    		//避免出现除0错误 
	}
   		else{
         printf("ERROR");
    }
	}else if(c=='%'){
		if(b!=0){
    		printf("%d",a%b);
    		//避免出现除0错误 
	}
   		else{
         printf("ERROR");
    }
	}else{
		printf("ERROR");
	}//除五种运算符号之外的情况 
    return 0;
}

方法二:利用switch case语句

代码实现:

#include<stdio.h>
int  main()
{
	int a,b;
	char c;
	scanf("%d %c %d",&a,&c,&b);
	switch(c){
	case '+':printf("%d",a+b);break;
	case '-':printf("%d",a-b);break;
	case '*':printf("%d",a*b);break;
	case '/':printf("%d",a/b);break;
	case '%':printf("%d",a%b);break;
    default:printf("ERROR");
    //default的作用就是switch语句里所有的case都不成立时所要执行的语句 
		}
}

3.求整数段和

给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输出格式:首先顺序输出从A到B的所有整数,每5个数字占一行。
 最后在一行中按Sum = X的格式输出全部数字的和X。

解题思路:使用count来记录打印i的次数,从而实现一行5个数。

重点:当b为最后一行的最后一个数字时,如何控制不再换行。

代码实现:

#include<stdio.h>
int main(){
    int a,b,sum=0,count=0;
    scanf("%d %d",&a,&b);
   for(int i=a;i<=b;i++){
       printf("%5d",i);
       count+=1;
       sum+=i;
       //count用于实现五个数一行
       if(count%5==0&&i!=b){
           //&&i!b很重要保证保证最后一个数在一行的末尾时不会再进行换行
           printf("\n");
       }
   }
    printf("\n");
    printf("Sum = %d",sum);
    return 0;
   
}

4.个位数统计

输入一个N(100000>N>10000),统计每个数出现的次数,要求:用数组

输入样例:
100311
输出样例:
0:2
1:3
3:1
代表0的个数为2,1的个数为3,3的个数为1;

解题思路:遍历每一位上的数,分别记录每一个数字出现的次数。

代码实现:

#include<stdio.h>
int  main()
{
	int n;
	scanf("%d",&n);
	int a[10]={0};
	while(n>0){
		int x=n%10;
		a[x]+=1;//数组a用于记录每个数出现的次数 
		n=n/10;
	}//循环结束的条件设置为n>0,直到n的每一位数都被遍历 
	for(int i=0;i<10;i++){
		if(a[i]>0){
			printf("%d:%d\n",i,a[i]);
		} 
	}
	return 0;
}


总结

数组元素的值是随机分配的,当初始化参数时,推荐使用 int array[10] = {0};

只能在循环体内和switch语句体内使用break,当break出现在循环体中的switch语句体内时,起作用只是跳出该switch语句体,并不能终止循环体的执行。若想强行终止循环体的执行,可以在循环体中,但并不在switch语句中设置break语句,满足某种条件则跳出本层循环体。

Stkcd [股票代码] ShortName [股票简称] Accper [统计截止日期] Typrep [报表类型编码] Indcd [行业代码] Indnme [行业名称] Source [公告来源] F060101B [净利润现金净含量] F060101C [净利润现金净含量TTM] F060201B [营业收入现金含量] F060201C [营业收入现金含量TTM] F060301B [营业收入现金净含量] F060301C [营业收入现金净含量TTM] F060401B [营业利润现金净含量] F060401C [营业利润现金净含量TTM] F060901B [筹资活动债权人现金净流量] F060901C [筹资活动债权人现金净流量TTM] F061001B [筹资活动股东现金净流量] F061001C [筹资活动股东现金净流量TTM] F061201B [折旧摊销] F061201C [折旧摊销TTM] F061301B [公司现金流1] F061302B [公司现金流2] F061301C [公司现金流TTM1] F061302C [公司现金流TTM2] F061401B [股权现金流1] F061402B [股权现金流2] F061401C [股权现金流TTM1] F061402C [股权现金流TTM2] F061501B [公司自由现金流(原有)] F061601B [股权自由现金流(原有)] F061701B [全部现金回收率] F061801B [营运指数] F061901B [资本支出与折旧摊销比] F062001B [现金适合比率] F062101B [现金再投资比率] F062201B [现金满足投资比率] F062301B [股权自由现金流] F062401B [企业自由现金流] Indcd1 [行业代码1] Indnme1 [行业名称1] 季度数据,所有沪深北上市公司的 分别包含excel、dta数据文件格式及其说明,便于不同软件工具对数据的分析应用 数据来源:基于上市公司年报及公告数据整理,或相关证券交易所、各部委、省、市数据 数据范围:基于沪深北证上市公司 A股(主板、中小企业板、创业板、科创板等)数据整理计算
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值