c语言基础题五

1.计算8!+9!+10!

#include<stdio.h>
#include<stdlib.h>
 
void main() {
    int sum = 1;
    int i,j,n = 1,m = 1;
    for (i = 8; i <= 10; i++) { // 遍历 8 9 10
        for (j = i; j > 0; j--) { // 分别计算阶乘
            n = m * j ;//
            m = n;
        }
        sum += n;
        n=1; m=1;//一个阶层运算完,重置 m 和 n 的值 
    }
    sum = sum-n;//多加了一个 n,也就是多加了一个1 
    printf("8!+9!+10!= %d \n", sum);
}

在这里插入图片描述

2. 给定一个整数n(1≤n≤100000000),要求从个位开始分离出它的每一位数字,从个位开始按照从低位到高位的顺序依次输出每一位数字。数字之间以一个空格分开。

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    while(n>0)
    {
        printf("%d ",n%10);
        n /= 10;
    }
}

在这里插入图片描述

3.从终端输入一串字符,统计字符串中每个字母出现的次数(用for循环写)。

区分大小写

#include <stdio.h>
#include <stdlib.h>

void main()
{
    //声明接收字符串的数组
    char str[26];
    //声明统计次数的数组
    int count[26] = {0};
    int count1[26] = {0};
    int i,j;
    for(i = 0;i < 26;i++)
    {
        scanf("%c",&str[i]);
    }
    //for循环统计次数
    for(i = 0;i < 26; i++)
    {
        int number = str[i] - 'a';
        //统计字符出现的次数
        count[number] += 1;
    }
    for(i = 0;i < 26;i++)
    {
        if (count[i] > 0)
        {
            printf("%c出现了%d次\n", 'a' + i, count[i]);
        }
    }
    
    for(j = 0;j < 26; j++)
    {
    	int number = 0;//前面用过,现在初始化为 0 
        number = str[j] - 'A';
        //统计字符出现的次数
        count1[number] += 1;
    }
    for(j = 0;j < 26;j++)
    {
        if (count1[j] > 0)
        {
            printf("%c出现了%d次\n", 'A' + j, count1[j]);
        }
    }
}

在这里插入图片描述
不区分大小写

#include <stdio.h>
#include <ctype.h>
int main()
{
    int num[26]={0};
    char ch='1';
    int i;
    while((ch=getwchar())!='\n'&&0>=(toupper(ch)-'A')<=26)//从键盘获取字符ch,判断字符 ch 是否字母 
        ++num[toupper(ch) - 'A'];//是字母的话,数组num对应的下标元素加一 
    for(i=0;i<26 ;i++ )//输出,数组num 下标加'A' 就是对应字母,数组下标对应元素num[i]就是字母个数 
        printf("%c  %d\n",i+'A',num[i]);
    return 0;
}

在这里插入图片描述

4.设 int x=3,y=4,z=5; 下列表达式中值为0的是()

A. !((x<y) && !z || 1)
B. x || y+z && y-z
C. ‘x’ && ‘y’
D. x <= y

分析:根据运算符的优先级和结合性来看
!((x<y)&&!z||1)
先算(x<y)为 true,!z 为 false,
然后(x<y)和 !z 相 &&,结果为 false,
然后刚才的 false 和1相 ||,结果是 true,
整体取反,最终结果是false。
其实不用算,|| 只要有应该条件正确那么就是正确的,显然有个1,必为true,然后取反,是false。

验算

#include<stdio.h>

void main(){
	int x=3,y=4,z=5;
	if(!((x<y)&&!z||1)) //如果成立就输出1 
	printf("1");
	else
	printf("0"); 
}

在这里插入图片描述

5.整蛊游戏:

Doyouloveme1、题目分析:
1)输出Doyouloveme?
2)定义并输入s的值
3)判断s是否不为Y或y
如果成立:
输出Doyouloveme
输入s的值
不成立退出循环
3)输出!loveyoutoo!

while
while(循环条件){ 循环体; 循环变量迭代; }

#include<stdio.h>
void main(){
	int i =1;
	int s;
	int max = 5;//最多5遍,不正确就退出 
	while(i<=max){
		printf("Do you love me?\n");
		scanf("%d",&s);
		if(s==89 || s==121){
			printf("I love you too!");
			break;
		}
		i++;
	}
}

在这里插入图片描述

do…while
循环变量初始化; do { 循环体; 循环变量迭代;} while( 循环条件);

#include<stdio.h>
void main(){
	int i =1;
	int s;
	int max = 5;//最多5遍,不正确就退出 
	do{
		printf("Do you love me?\n");
		scanf("%d",&s);
		if(s==89 || s==121){
			printf("I love you too!");
			break;
		}
		i++;
	}
	while(i<=max);
}

在这里插入图片描述
最后修改,完成只要条件不符合就无限循环

#include<stdio.h>
int main(){
    int i =1;
    int s;
    while(1){ //条件为真就循环
        printf("Do you love me?\n");
        scanf("%d",&s);
        if(s==89 || s==121){
            printf("I love you too!");
            break;
        }
        else{
        	printf("Do you love me?\n");
            scanf("%d",&s);
		}
    }
    return 0;
}
 
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值