一个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;
}