C编程刷题学习记录一

        一个30岁的嵌入式软件开发工程师,做了多年项目,可谓经验丰富。一天无意看了篇文章,回首反思自我,发现基础技术渣渣,好多基本知识点都忘了。现在工作完全以解决问题为导向,却根本没有注意其中的原理和效率。不知道何时混成了油腻程序员,这太危险了。想从头再好好学习一把,从刷题开始,尤未晚矣?

1.计算输入字符串最后一个单词的长度,单词空格隔开。

#include <stdio.h>
#include <string.h>
int main(){
    char str[1000];
    int len;
    int i=0;
    gets(str);
    len = strlen(str);
    for(int j=0;j<len;j++){
    	if(str[j]==' '){
    	    i=-1;
	}
    	i++;
    }
    printf("%d\n", i);
    return 0;
}

2.输入一个字母和数字组成的字符串,在输入一个字符,输入字符串中含有该字符的个数。不区分大小写。

#include <stdio.h>
#include <string.h>
int main(){
    char str[10000];
    char a,b;
    gets(str);
    a=getchar();
    if(a<='Z' && a>='A')
	b=a+32;
    else if (a<='z' && a>='a')
	b=a-32;
    else
       b=a;
    int i=0;
    int k=0;
    int len = strlen(str);
    for(int i=0;i<len;i++){
    	if(str[i]==a || str[i]==b)
           k++;
    }
    printf("%d\n", k);    
    return 0;
}

3.连续输入字符串,按照8个来拆分,不足的补0.

#include <stdio.h>
#include <string.h>
#include <math.h>
#define N 100
int main(){
    char str1[N];
    char str2[N];
    gets(str1);
    gets(str2);
    int k,m;
//处理字符串1 
    k=strlen(str1);
    if(k%8==0)
    	m=k;
    else
    	m=(k/8+1)*8;

    for(int i=0;i<m;i++){
    	if(i%8==0 && i!=0)
            printf("\n");
    	if(i>=k)
    	    printf("0");
        else
	    printf("%c", str1[i]);
    }
    
    printf("\n");
    //处理字符串1 
    k=strlen(str2);
    if(k%8==0)
    	m=k;
    else
    	m=(k/8+1)*8;

    for(int i=0;i<m;i++){
    	if(i%8==0 && i!=0)
            printf("\n");
    	if(i>=k)
    	    printf("0");
        else
	    printf("%c", str2[i]);
    }
    return 0;
}

4.输入一个十六进制数,输出十进制表示

#include <stdio.h>
#include <string.h>
int main(){
    char str[100];
    while(gets(str)){
    	int len = strlen(str);
	int num=0;
	
	for(int i=0;i<len-2;i++){
	    if(str[i+2]>='0'&&str[i+2]<='9')
	    	num= num*16+(int)(str[i+2]-48); 
	    else if(str[i+2]>='a'&&str[i+2]<='z')
	    	num= num*16+(int)(str[i+2]-87); 
	    else if(str[i+2]>='A'&&str[i+2]<='Z')
	    	num= num*16+(int)(str[i+2]-55); 
	}
    	printf("%d\n", num); 
    }
    return 0;
}

5.输入一个正整数,从小到大输出它所有的因子。

#include<stdio.h>

int main(){
    int num;
    while(scanf("%d",&num)!=EOF){
       for(int i = 2; i <= num; i++){
           while((num%i)==0){
               printf("%d ",i);
               num/=i;
           }
       }
    }
    return 0;
}

6.接受一个正浮点数,输出该数值四舍五入的整数值。

#include <stdio.h>

int main(){
    float n;
    int tmp;
    while(scanf("%f", &n)!=EOF){
        tmp = ((int)(n*10))%10>=5?1:0;
        printf("%d\n", (int)n+tmp);        
    }
    return 0;
}

7,输入一个int整数,按照从右向左,返回一个不含重复数字的新整数。

#include <stdio.h>

int main(){
    int n,m=0;
    scanf("%d",&n);
    int a[10]={0};
    while(n){
        if(a[n%10] == 0){
            a[n%10]++;//更新重复的数
            m = m*10 + n%10;
        }
        n /= 10;
    }
    printf("%d\n",m);
}

8.输入N个ASCII字符,输出在0-127字符的个数。

#include <stdio.h>
#include <string.h>

int main(){
    char str[10000];
    char asc[128]={0};
    gets(str);
    int len=strlen(str);
    int num=0;
    for(int i=0;i<len;i++)
        asc[str[i]] = 1;

    for(int i=0;i<128;i++){
        if(asc[i]==1)
            num++;
    }
    printf("%d\n", num);
    return 0;
}

9.输入正小数m(0.00000009,1),整数n(0,10),输出n进制数。

#include <stdio.h>
#include <math.h>
int main() {
    float a;
    int b,k;
    int c=0; 
    int num[10]={0};
    while(scanf("%f %d", &a, &b) != EOF){
        if(a>0.00000009&&a<1&&b>1&&b<10){
            for(int i=0;i<10;i++){
                a *= b;
                num[i] = floor(a);
                a -= num[i];
            }
            printf("0.");
            for(int j=9;j>0;j--){
                if(num[j]==0)
                    c++; 
                else
                    j=0;
            }
            for(int k=0;k<10-c;k++)
                printf("%d", num[k]);
        }
    }
    return 0;
}

10.输入一个英文字符串,一单词为单位逆序输出。

#include <stdio.h>
#include <string.h>
int main(){
    char str[10000];
    gets(str);
    int len = strlen(str);
    int n=0;
    for(int i=len-1;i>=0;i--){
        if(str[i]==' '){
            for(int j=1;j<=n;j++)
            	printf("%C", str[i+j]);
	    printf("%C", str[i]);
	    n=0;
        }else{
            n++;
        }        
    }
    for(int i=0;i<len;i++){
    	if(str[i]==' ')
    	    break;
    	printf("%c", str[i]);
    }
    return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值