(1)本题要求计算给定的一系列正整数中奇数的和。 输入格式 输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表 示输入结束,该数字不要处理。
输入样例 8 7 4 3 70 5 6 101 -1 输出样例 116
#include<stdio.h>
int main()
{
int n,sum=0;
for(int i=0;i<10000;i++)
{
scanf("%d", &n);
if(n<=0)//遇见0 或 复数,结束,跳出
{
break;
}
else if(n%2!=0)
{
sum+=n;
}
}
printf("%d",sum);
return 0;
}
(2)本题要求两个给定正整数的最大公约数和最小公倍数。 输入格式 输入在一行中给出两个正整数 M 和 N(1000) 。 输出格式 在一行中顺序输出 M 和 N 的最大公约数和最小公倍数, 两数字间以空格分隔。 输入样例 511 292 输出样例 73 2044
辗转相除
最大公约数=m%n
如果 余数等于零 那么最大公约数就是n(最小的那个整数)
如果余数不等于零 那么上一轮的余数作为除数,上一轮的除数作为被除数 两个继续相除,直到余数为零,此时的最大公约数就是除数
最小公倍数=m*n/最大公约数
#include<stdio.h>
int main()
{
int m,n;
scanf("%d %d", &m,&n);
int yueshu,x;
yueshu=m%n;
x=m*n;//一定不能省略,因为到最后余数不为零时,m,n的值会变 这里的x=m*n还是原来的m,n的值
if(yueshu==0)
{
printf("%d %d", n,x/n);
}
else
{
while(yueshu!=0)
{
m=n;
n=yueshu;
yueshu=m%n;
}
printf("%d %d", n,x/n);
}
return 0;
}
(3)对于给定的正整数 N,求它的位数及其各位数字之和。 输入格式 输入在一行中给出一个不超过 109 的正整数 N。 输出格式 在一行中输出 N 的位数及其各位数字之和,中间用一个空格隔开。
321 输出样例 3 6
#include<stdio.h>
int main(){
int n,k=0,sum=0;
scanf("%d",&n);
while(n>0){
sum+=n%10;//数字的和
k++;//位数循环一次加一次
n/=10;//n会循环计算下去 如 555变成55变成5 循环3次
}
printf("%d %d\n",k,sum);
return 0;
}
(4)从键盘输入一个任意正整数判断其是否为素数,若为素数则输出“YES“, 否则输出“ NO“。 输入格式 直接输入一个正整数,没有其它任何附加字符。
输出格式 若为素数则输出“YES“,否则输出“ NO“ 输入样例 4 输出样例 NO
输入样例 5 输出样例 YES
#include<stdio.h>
int main()
{
int shushu(int x)
{
for(int i=2;i<x/2;i++)
{
if(x%i==0)
return 0;
}
return 1;
}
int x=0;
scanf("%d", &x);
if(1==shushu(x))
printf("YES");
else
printf("NO");
return 0;
}
方法二:
#include<stdio.h>
int main()
{
int n;//输入的整数
int a;//能整除n的数的个数
scanf("%d", &n);
for(int i=2;i<n;i++)//除了被 1和本身n整数的 被2到n-1之间整除的就不是素数
{
if(n%i==0)
{
a++;//在2到n-1这个范围内,有a++个数能整除n
}
}
if(a!=0)//有a++个数能整除n证明n不是素数
printf("NO");
else
printf("YES");//没有数能整除n,是素数
return 0;
}
5)编程判断输入的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串,如“XYZYX”。
请编写程序,从键盘上输入一字符串,并对其进行判断,如是回文则输出“YES”,否则输出“NO”。同时输出该输入的字符串
#include<stdio.h>
#include<string.h>
int main()
{
char s[255]={0};//字符串数组初始化
int i=0,j;//i字符串从头开始的位置,j字符串从尾开始的位置
gets(s);//输入一个字符串
j=strlen(s)-1;//j的位置从最后开始
while(i<=j&&s[i]==s[j])//判断位置关系
{
i++;
j--;
}
if(i<=j)//i和j的位置最后会相互超越,如果存在i<=j的情况,说明位置不等
printf("NO %s",s);
else
printf("YES");
return 0;
}
6)输入10个学生的成绩(为整数),输出他们的平均成绩(浮点数),并统计有多少个同学的成绩低于平均分并输出这些低于平均成绩的成数。
#include<stdio.h>
int main()
{
int s[10];
double avg=0;
int sum=0;
int count=0;
for(int i=0;i<10;i++)
{
scanf("%d", &s[i]);
sum+=s[i];
avg=sum/10.0;
}
printf("%lf\n", avg);
for(int i=0;i<10;i++)
{
if(s[i]<avg)
{
count++;
printf("%d\n", s[i]);
}
}
printf("%d\n", count);
return 0;
}
7)从键盘上输入10个评委的分数(整数),去掉一个最高分,去掉一个最低分,求出其余8个人的平均分(浮点数)。要求输出平均分、最高分、最低分。
#include<stdio.h>
int main()
{
int s[10];
double avg=0;
int max,min,sum=0;
for(int i=0;i<10;i++)
{
scanf("%d",&s[i]);
max=min=s[0];
}
for(int i=0;i<10;i++)
{
if(s[i]>s[i-1])
max=s[i];
if(s[i]<s[i-1])
min=s[i];
sum+=s[i];
}
sum=sum-max-min;
avg=sum/8.0;
printf("%lf", avg);
return 0;
}
8)从键盘输入包括n个字符的字符串(n>=3)。将此字符串从第m(m>=1,要求从键盘输入)个字符开始的全部字符复制成另一个字符串,输出复制的结果字符串。
例如:
Input a string(length<80):
aabbbcc
Which character starting from?
5
Result is :
bcc
#include<stdio.h>
int main()
{
char s1[80]={0};
char s2[80]={0};
scanf("%s", s1);
int m=0;
scanf("%d", &m);
for(int i=m-1;i<strlen(s1);i++)
s2[i-m+1]=s1[i];//如果把s1中第m-1个字符 复制到s2中 那么s2中从第0开始,所以就是i-m+1=m--m+1
printf("%s", s2);
return 0;
}
9)将一个数组中的值按逆序重新存放,并输出逆序前、后的值。
例如:
原来顺序为8,6,4,3,2,0 。要求改为0,2,3,4,6,8 。
#include"stdio.h"
int main() {
int n; //n为数组元素个数
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++) {
scanf("%d",&a[i]);
printf("%d ", a[i]);
}
for(int j=n-1;j>=0;j--) {
printf("%d ",a[j]);
}
return 0;
}