C语言考试

(1)本题要求计算给定的一系列正整数中奇数的和。 输入格式 输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表 示输入结束,该数字不要处理。 
输入样例 8 7 4 3 70 5 6 101 -1

输出样例 116 

#include<stdio.h>
int main()
{
    int n,sum=0;
    scanf("%d ",&n);
    while(n>0)
    {
        if(n%2!=0)
        {
            sum=sum+n;
        }
        scanf("%d ",&n);
    }
    printf("%d",sum);
    return 0;
}

(2)本题要求两个给定正整数的最大公约数和最小公倍数。 输入格式 输入在一行中给出两个正整数 M 和 N(1000) 。 输出格式 在一行中顺序输出 M 和 N 的最大公约数和最小公倍数, 两数字间以空格分隔。

输入样例 511 292

输出样例 73 2044 

辗转相除法求最大公约数思想
有两整数m和n:
① 令 t=m%n
② 如果t=0,那么n为最大公约数
③ 若 t ≠ 0,则m=n,n=t,再回去执行①
最大最小公倍数求法
最小公倍数 = m*n / 最大公约数

#include<stdio.h>
int main(){
    int x,y,m,n,t;
    scanf("%d %d",&m,&n);
    x=m;
    y=n;
    while(y!=0){
        t=x%y;x=y;y=t;
    }
    printf("%d %d",x,m*n/x);
    return 0;
}
/*
题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数。
程序分析:
最大公约数:
    最大公约数的定义为:m和n都对x这个数取余得的结果为0
    两个数的最大公约数的取值范围为1到min(m,n)
    所以我采用for循环将1到min(m,n)的所有数都试了一遍,最后输出的x就是最大的公约数
最小公倍数:
    最小公倍数 = (m*n)/最大公约数
    
*/
 
#include<stdio.h>
int main()
{
    int m,n;
    int gongyue,gongbei;
    scanf("%d %d",&m,&n);
 
    //求最大公约数
    int flag;
    if(m>n){flag = n;}else flag = m;//找出m.n中小的那一个作为循环次数
    for(int x= 1;x<=flag;x++)
    {
        if(m%x==0 &&n%x==0)
        {
            gongyue = x;
        }
    }
   
    
    gongbei = m*n/gongyue;
    
    printf("%d %d",gongyue,gongbei);
    
    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;
	}
	printf("%d %d\n",k,sum);
	
	return 0;
}

 (4)从键盘输入一个任意正整数判断其是否为素数,若为素数则输出“YES“, 否则输出“ NO“。 输入格式 直接输入一个正整数,没有其它任何附加字符。 输出格式 若为素数则输出“YES“,否则输出“ NO“

输入样例 4 输出样例 NO 
输入样例 5 输出样例 YES 

#include<stdio.h>

int shushu(int x){
	
	for(int i=2;i<x/2;i++){
		
		if(x%i==0)
		return 0;
	}
	return 1;
	
}

 
int main() {
	
	int x=0;
	scanf("%d",&x);
	if(1==shushu(x)){
		printf("YES");
	}	
	else
	
	printf("NO");


	return 0;
}

 

#include<stdio.h>
int main()
{
    int m, n;
    printf("请输入一个正整数:\n");
    scanf_s("%d", &m);
    
    for (n=2; n < m - 1; n = n + 1)
    if (m % n == 0)
        break;
    if (n < m)
        printf("%d不是素数\n",m);
    else
        printf("%d是素数\n",m);
}
 代码2:

#include<stdio.h>
int main()
{
    int m, n;
    n=2;
    printf("请输入一个正整数:\n");
    scanf_s("%d", &m);
    while (n < m - 1)
    
    if (m % n == 0)
        break;
    else
    n = n + 1;
    if (n < m)
        
    printf("%d不是素数\n", m);
    else
        printf("%d是素数\n",m);
}
#include <stdio.h>
#include<math.h>
void prime(int x)
{
    int i,count;
    for(i=2;i<=sqrt(x);i++)
    {
        if(x%i == 0)
        {
            printf("NO\n");
            count++;
        }	
    }
    if(count==0)
    {
        printf("YES\n");
    }
}
int main(void)
{
    int n,m;
    printf("请输入一个正整数:\n");
    m=scanf("%d", &n);
    if(m!=0&&n>1)
    {
        prime(n);
    }
    else
    {
        printf("输入数据类型错误,请重新输入:\n");
    }
    return 0;
}


 
#include <stdio.h>
int main()
{
    int a;
    scanf("%d", &a);
    for(int i=2;i*i<=a;i++)
    {
        if(a%i==0)
        {
            printf("no");
            return 0;
        }
    }
    printf("yes");
    return 0;
}

编程判断输入的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串,如“XYZYX”。
请编写程序,从键盘上输入一字符串,并对其进行判断,如是回文则输出“YES”,否则输出“NO”。同时输出该输入的字符串

#include<stdio.h>

 
int main() {
	
	char str[50]={0x00};
	scanf("%s",str);
	int len=strlen(str);
	
	for(int i=0;i<len/2;i++){
		if(str[i]!=str[len-1-i])
		{
			printf("no");
			return 0;
		}
	}
	printf("yes");

	return 0;
}

 

#include <stdio.h>
#include <string.h>
#define N 100
int main()
{   char s[N];
    int i=0,j;
    printf("Input a String: \n");
    //输入一个字符串赋值给s
    gets(s);
    //j的初始值为s字符串最后一个位置
    j=strlen(s)-1;
    //进行while判断i、j的位置和i、j位置的值的关系
    while(i<=j&&s[i]==s[j]){
        //每比较一次就i右移、j左移一位
        i++;j--;
    }
    //判断最终i和j的的位置
    //根据i、j的位置最终是会互相超越的,所以如果i<=j说明存在对应位置不等的情况就是不是回文串
    if (i<=j)
    {printf("不是回文字符串\n");}
    else{ printf("是回文字符串\n");}
    return 0;
}
 

#include <stdio.h>
#include <string.h>
main()
{ char a[100];
int i,j;
gets(a);
i=0;
j=strlen(a)-1;
while(i<j){
if(a[i]==a[j]){
i++;j--;}
else
break;}
if(i>=j) printf("Yes");
else printf("No");
}

 输入10个学生的成绩(为整数),输出他们的平均成绩(浮点数),并统计有多少个同学的成绩低于平均分并输出这些低于平均成绩的成数。

#include<stdio.h>
main()
{
int i,j;
float s[10];
float sum=0,avg;
for(i=0;i<10;i++)
{
scanf("%f",&s[i]);
sum=sum+s[i];
avg=sum/10;
}
for(i=0;i<10;i++)
if(s[i]<avg)
printf("%f",s[i]);
}

输入一个以 '!'字符结束的字符串(少于6个字符),该字符串由数字(0---9)字符组成,将该字符串转换成整数后输出。

#include<stdio.h>
#include <math.h>
 
int main() {
	char str[50]={0x00};
	scanf("%s",str);
	int n=strlen(str);
	
	int sum=0;
	for(int i=0;i<n-1;i++){
		int x=str[i]-'0';
		sum=sum+x*pow(10,n-2-i);
	}
	printf("%d",sum);

	return 0;
}

(输入一个以回车结束的字符串(少于10个字符),它由数字字符组成,将该字符串转换成整数后输出。注意,不能直接调用库函数atoi完成。
**输入提示信息:"Enter a string: "
**输出格式要求:“digit = %d\n”
程序运行示例如下:
Enter a string: 123
digit = 123)

#include<stdio.h>
int main()
{
    int i, n;
    char a[10];
    printf("Enter a string: ");
    i = 0;
    while ((a[i] = getchar()) != '\n')
    {
        i++;
    }
    a[i] = '\0';

    n = 0;
    for (i = 0; a[i] != '\0'; i++)
    {
        if (a[i] <= '9' && a[i] >= '0')
        {
            n = n * 10 + (a[i] - '0');//“a[i]-'0'”将数字字符转为ASCII码运算,差值即为数字本身的大小
        }
        else //遇见非数字结束转换
            break;
    }
    printf("digit = %d\n", n);
}

从键盘上输入10个评委的分数(整数),去掉一个最高分,去掉一个最低分,求出其余8个人的平均分(浮点数)。要求输出平均分、最高分、最低分。

(这里答案只输出了平均分)

#include<stdio.h>
 main()
{
  int i, a[10],max,min,avg,s=0;
  
  for(i=0;i<10;i++)
   scanf("%d",&a[i]);
    max=min=a[0];
    for(i=0;i<10;i++)
     {
	 if(a[i]>max) max=a[i];
	 if(a[i]<min) min=a[i];
	 s+=a[i];
     }
 s=s+max-min;
  avg=s/8;
  printf("%d",avg);
  
  }

从键盘输入包括n个字符的字符串(n>=3)。将此字符串从第m(m>=1,要求从键盘输入)个字符开始的全部字符复制成另一个字符串,输出复制的结果字符串。
例如:

Input a string(length<80):
aabbbcc

Which character starting from?
5

Result is :
bcc

#include <stdio.h>
#include <string.h>
int main()
{
char str[1000];
char result[1000];
char* p;
int m,n;
scanf("%s", str);
scanf("%d %d", &m, &n);
p = str;
strcpy(result, p+m);
result[n] = '\0';
printf("%s\n", result);
return 0;
}

将一个数组中的值按逆序重新存放,并输出逆序前、后的值。

例如,原来顺序为8,6,4,3,2,0 。要求改为0,2,3,4,6,8 。
 

#include<stdio.h>
 
int main() {
	int t;
	int i;
	int n;
	scanf("%d",&n);
	int a[n];
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	for (i = 0; i < n/2; i++) {
		t = a[i];
		a[i] = a[n - i - 1];
		a[n - i - 1] = t;
	}
	for (i = 0; i < n; i++)
		printf("%5d", a[i]);
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值